Войти или зарегистрироваться

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

  • Автор темы Автор темы MWaso
  • Дата начала Дата начала

MWaso

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

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

Разрабатываю плагин защиты от гриферства для серверов с модами. Вернее, допиливаю BedCraftGP. Этот плагин проверяет 9 блоков вокруг игрока с радиусом 16 блоков на принадлежность к чужому привату (совместим с Towny и GriefPrevention). Но некоторые моды позволяют стрелять и на бОльшие расстояния. Это например магические палки-копалки из Таумкрафта и Арс-Магики, а также всякие гранаты, кидательные динамиты, взывающиеся стрелы из других модов (IndustrialCraft, BalkonWeapon, Zelda). Я добавил проверку блока, на который смотрит игрок при наступлении события. Но все эти стрелялки выстреливают в момент отпускания кнопки, поэтому грифер может нажать на кнопку мыши, глядя, например, на небо, и затем уже перевести взгляд на приваченый блок и отпустить кнопку. Тогда плагин не узнает что происходит гриф. Если проверять блок на который смотрит игрок при отпускании кнопки, то такой уязвимости небыло бы.
Это проблема сугубо мода, в плагинах такого события нет.
 
Окей. Как вариант - по событию нажатия заводить таймер и пару-тройку раз в секунду проверять, куда смотрит игрок. И если его взгляд попадает на чужую территорию - отменять событие. Но опять-же, надо как-то понять до какого времени гонять этот таймер, да и лагов такая реализация сильно добавит скорее всего..... Похоже, тут надо мод лепить, а не плагин...
 
Т.е. я правильно понимаю, что задача сотворить совместимость мода с плагинами привата?
События, у модов, есть какие-то (Я не в курсе)? Модами никогда не интересовался. Если события есть, то собственно нужно работать с ними. Если событий нет, то... не нужно пользоваться такими модами. Ну или копать моды на предмет прикручивания к ним событий (теоретически это возможно, но как уже говорил, практического опыта у меня в модах нет), но лучше если бы об этом позаботились авторы - заодно начинайте троллить их :)
 
Окей. Как вариант - по событию нажатия заводить таймер и пару-тройку раз в секунду проверять, куда смотрит игрок. И если его взгляд попадает на чужую территорию - отменять событие. Но опять-же, надо как-то понять до какого времени гонять этот таймер, да и лагов такая реализация сильно добавит скорее всего..... Похоже, тут надо мод лепить, а не плагин...
Достаточно просто добавить эвент в мод.
 
Т.е. я правильно понимаю, что задача сотворить совместимость мода с плагинами привата?
Не так. Скорее, сотворить совместимость плагина с любыми возможными модами, многие из которых не вызывают стандартные события BlockBreakEvent. Да вобщем-то брейк-эвент тут не причем. Мне понравилась философия GriefPrevention о том что надо предотвратить саму возможность грифа, а не выискивать по логам кто где нагадил. Так что теоретически достаточно перехватить момент отпускания кнопки.

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