Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Event отпускания кнопки

Discussion in 'Разработка плагинов для новичков' started by MWaso, Jun 8, 2014.

  1. Автор темы
    MWaso

    MWaso Активный участник

    Trophy Points:
    73
    Имя в Minecraft:
    MWaso
    Всем привет! Коротко - как в плагине отследить момент отпускания кнопки мыши игроком?

    Разрабатываю плагин защиты от гриферства для серверов с модами. Вернее, допиливаю BedCraftGP. Этот плагин проверяет 9 блоков вокруг игрока с радиусом 16 блоков на принадлежность к чужому привату (совместим с Towny и GriefPrevention). Но некоторые моды позволяют стрелять и на бОльшие расстояния. Это например магические палки-копалки из Таумкрафта и Арс-Магики, а также всякие гранаты, кидательные динамиты, взывающиеся стрелы из других модов (IndustrialCraft, BalkonWeapon, Zelda). Я добавил проверку блока, на который смотрит игрок при наступлении события. Но все эти стрелялки выстреливают в момент отпускания кнопки, поэтому грифер может нажать на кнопку мыши, глядя, например, на небо, и затем уже перевести взгляд на приваченый блок и отпустить кнопку. Тогда плагин не узнает что происходит гриф. Если проверять блок на который смотрит игрок при отпускании кнопки, то такой уязвимости небыло бы.
     
  2. Хостинг MineCraft
    <
  3. konfyciu98

    konfyciu98 Старожил Пользователь

    Trophy Points:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Отпускание нет, а нажатие сам знаешь)
     
  4. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Это проблема сугубо мода, в плагинах такого события нет.
     
  5. Автор темы
    MWaso

    MWaso Активный участник

    Trophy Points:
    73
    Имя в Minecraft:
    MWaso
    Окей. Как вариант - по событию нажатия заводить таймер и пару-тройку раз в секунду проверять, куда смотрит игрок. И если его взгляд попадает на чужую территорию - отменять событие. Но опять-же, надо как-то понять до какого времени гонять этот таймер, да и лагов такая реализация сильно добавит скорее всего..... Похоже, тут надо мод лепить, а не плагин...
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Достаточно просто добавить эвент в мод.
     
  7. Автор темы
    MWaso

    MWaso Активный участник

    Trophy Points:
    73
    Имя в Minecraft:
    MWaso
    Не так. Скорее, сотворить совместимость плагина с любыми возможными модами, многие из которых не вызывают стандартные события BlockBreakEvent. Да вобщем-то брейк-эвент тут не причем. Мне понравилась философия GriefPrevention о том что надо предотвратить саму возможность грифа, а не выискивать по логам кто где нагадил. Так что теоретически достаточно перехватить момент отпускания кнопки.

    Речь идет о любом возможном моде других авторов. Править все моды нет никакой возможности да и желания. И я пока даже не представляю как я в плагине перехвачу эвент от постороннего мода. Со сторонними плагинами понятно - добавил его в проект и компилятор проверяет что там есть все что ты указал. А моды.. Теоретически тоже самое, просто еще не пробовал.... А в модах часто (если не всегда) еще и обфускация используется. О ужас.
     
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вам не удастся сделать универсальный плагин под все моды, так как каждый мододел делает всё по своему(а почему они так делают, философский вопрос), и тогда к каждому придётся приспосабливаться по отдельности. Об эвентах. Речь я вёл не о создании кастомного эвента, а кидании дефолтного баккитовского, связанного с выполняемым действием(BlockBreakEvent например). С обфускацией модов можно бороться с помощью этой статьи
     

Share This Page