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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем MWaso, 8 июн 2014.

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

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

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

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

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Отпускание нет, а нажатие сам знаешь)
     
    MaxBukkit, Penek28123123, Лайка3 и 7 другим нравится это.
  4. Den_Abr

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

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

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

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

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

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

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

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

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

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

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

Поделиться этой страницей