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

Фикс Ивенты для модов [Механизмы работают от имени владельца]

Тема в разделе "Управление сервером Bukkit", создана пользователем gamerforEA, 30 дек 2014.

  1. ipv2007

    ipv2007 Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    ipv2007
    Интересно, тогда какое ядро использовать для 1.7.10? KCauldron?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Автор мода всё тестирует на обычном ванильном ядре с Forge. Так делают почти все мододелы.
     
  4. Miha2031

    Miha2031 Активный участник Пользователь

    Баллы:
    66
    @gamerforEA, это будет исправлено? С этим багом ни фасадов не видно, ни гейтов, ни заглушек, ни док-станций (у гейтов вообще интерфейса нет, просто пустота).
     
  5. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    @gamerforEA GraviSuite с последним IC2 как и ASP (Advanced Solar Panel - от того же автора) потерял многие крафты, они попросту не работают, возможно поправить?
     
  6. Juice987

    Juice987 Активный участник Пользователь

    Баллы:
    76
    написать скрипты через minetweaker
    Вот так реализован у меня крафт квантового гибридного шлема
    Код:
    //hybrid Solar Helm
    recipes.remove(<AdvancedSolarPanel:hybrid_solar_helmet>);
    recipes.addShaped(<AdvancedSolarPanel:hybrid_solar_helmet>, [
      [null, <AdvancedSolarPanel:BlockAdvSolarPanel:1>, null],
      [<IC2:itemPartCircuitAdv>, <IC2:itemArmorQuantumHelmet:*>, <IC2:itemPartCircuitAdv>],
      [<IC2:itemCable:9>, <IC2:blockElectric:5>, <IC2:itemCable:9>]]);
    recipes.addShaped(<AdvancedSolarPanel:hybrid_solar_helmet>, [
      [<AdvancedSolarPanel:BlockAdvSolarPanel:1>],
      [<IC2:itemArmorQuantumHelmet:*>]]);
     
  7. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    Спасибо, раньше использовал ZZZZ Custom Config для рецептов, но проблемы с wildcard в рецептах IC2 надоели, в minetweak такого нет, спасибо
     
  8. Stepan1404

    Stepan1404 Активный участник Пользователь

    Баллы:
    68
    Собсна сама починка для крафтов(Нужен MineTweaker)
    Скрипт кидать в папку scripts в корне сервера
    https://yadi.sk/d/F8SHrYKqjjiuH[DOUBLEPOST=1444847086,1444846491][/DOUBLEPOST]Перезалил, забыл шлема добавить.
     
  9. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    @gamerforEA А ты знаешь толк в извращениях, мутить какие-то инжекты в ворлдгуард не пойми зачем, не удивительно что TPS при хайлоаде долго от такого не живёт.
     
  10. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Это всё не просто так. Если делать примитивную проверку на наличие привата, то не будет поддержки флагов, других плагинов и пр. Если кидать обычные Bukkit ивенты всем подряд, то будут баги, так как некоторые плагины несовместими с FakePlayer'ами. Кстати, инжекторы не производительность не влияют, так как вызываются только один раз и только заливают класс в ClassLoader WG.
    И да, в случае ивентов узкое горлышко - WorldGuard. Тут нужно или его оптимизировать, или искать более производительный плагин для работы с приватами.
     
  11. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Так вот для поддержки плагинов и нужно пускать напрямую баккит эвенты, а не всякое порно в виде эвенте в эвенте (форг/твои кастомные эвенты) что просаживает сильно TPS при хайлоаде. В случае, если брейкблокэвент там используется не по назначению (с блоком в принципе ничего не происходит после эвента), то в таких случаях можно повесить один кастомный эвент, в котором будут нужные проверки типа приватов, флагов и тд. С фейкплеерами всё работает отлично, тот же WorldGuard проверяет фейкплеер это или нет.
     
  12. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. В EventHelper всё происходит точно так же, как и в обычном Bukkit - ивенты кидается во все зарегистрированные слушатели, вот только у меня слушатели берутся только для определённых плагинов, что несколько повышает производительность.
    2. Нет, не все плагины отлично работают с ивентами. Насколько, я помню, люди жаловались на EssentialsProtect.
    3. Если вас что-то не устраивает, то никто мешает вам модифицировать методы в классе EventUtils так, чтобы кидались обычные ивенты всем подряд.
    4. Если бы вы смотрели тайминги, то заметили бы, что вся нагрузка от моих ивентов была в WorldGuard, а не прослойках, вроде плагина-моста и EventHelper'а.
    5. Если критикуете, то предлагайте более оптимальное решение, которое будет таким же удобным (не для пользователя, а для разработчика), как моё. И про бенчмарки не забывайте.
     
  13. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Я предложил самый оптимальный вариант, который проверен на хайлоаде (150+ игроков на одном сервере с особо прожорливыми модами аля AE2, TE). Все нужные основные плагины работают нормально, если уже кому-то нужны свои извраты - пусть допиливают под себя, это их проблемы, в первую очередь должен быть упор на производительность. Я видел тайминги с твоим мостом, так вся львиная доля была именно в этих эвентах, которые порождают собой ещё один (!) эвент, но уже баккитовский, что мешает его кинуть сразу? А онлайн кстати был не такой крупный, в районе 50-60, но TPS уже забился в угол и тихонько плакал.
     
  14. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. Ещё один ивент создаётся только в плагине-мосте, а в EventHelper я от этого смог избавиться.
    2. Как вы посчитали, что ваш вариант - самый оптимальный? Какие тесты производительности были?
    3. У вас должен быть упор на производительность, а у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.
    4. Если львиная доля времени выполнения была в методе моего плагина, это не означает, что проблема была именно в нём. Я смотрел, где была просадка производительности, и как выяснилось, все тормоза были из-за WorldGuard.
    5. Все решения, которые я принимал при продумывании общего плана работы с ивентами, были приняты не "потому что могу", а потому что более оптимального варианта, который подошёл бы для большинства клиентов, а не отдельных личностей с высокой нагрузкой, я не видел.
     
  15. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Простейший тест - протестировать под сильной нагрузкой, что и было сделано. Если проблема в WorldGuard, то почему у меня никаких просадок не возникает, эвенты брошены напрямую?) Там обновлять то и нечего, создать и вызвать эвент задача ну ох какая недостижимая.
     
  16. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. Это не тест, а "А вот у меня это работает". Вы не учитываете, что бывают совершенно разные условия работы сервера. У кого-то просто слабая VDS'ка, у кого-то 10000 приватов, у кого-то стоит "тяжёлый" мод, который всё вешает и т.д. Для нормального тестирования нужно проверять разные алгоритмы в идентичных условиях и судить не по принципу "лагает/не лагает", а проверять нагрузку на CPU, сборщик мусора, потребление ОЗУ и пр.
    2. Даже когда я бросал обычные Bukkit ивенты, производительность почему-то (угадайте причину) проседала.
    3. О каких обновлениях идёт речь?
      Я и так создаю и кидаю ивенты.
      Не понимаю, зачем была ваша последняя фраза.
    4. Наш спор ни к чему не приведёт, и каждый останется при своём мнении. Предлагаю его прекратить или перенести в ЛС.
     
  17. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Для тебя слово хайлоад ничего не значит?) Хайлоад уже подразумевает собой тяжелые моды, большое количество игроков, а соответственно приватов и прочих вещей, я не с потолка написал же) Да и 95% арендуют дедики в одних и тех же местах, железо у многих идентично, и сами моды прожорливы, никто не будет запускать на 4 пентиуме с 512 МБ памяти. Ну вот, а теперь представь что делают уже два таких же эвента подряд, да и бросаешь видимо в горячих местах, где достаточно бросить 1 кастомный эвент. Последняя фраза на это: "А у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.". Если ты хоть раз работал хотя бы с небольшой аудиторией (1 сервер с типичными модами для всех, 100 онлайна), то уже должен понимать для чего нужно делать упор на производительность. А это так, баловство для школьничков.
     
  18. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. У меня есть эта "небольшая аудитория", и для неё важно быстро получать ивенты и иметь возможность в случае чего так же быстро что-то переделать, обновить и пр.
    2. Не нравится - не пользуйтесь моими ивентами.
    3. Хорошо, это баловство для школьников, если вас это успокоит. :)
     
  19. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Я и не пользуюсь твоими эвентами, а наставляю тебя на верный путь. Впрочем, в чем-то ты прав, для аудитории рубаккита даже это уже зашквар.
     
  20. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Бросание одного эвента занимает примерно 100мс. Всегда. Так что никакой разницы что один, что два бросить. И бросить эвент в конкретный плагин кстати будет быстрее чем всем.
    Единственное где может быть проблема - в getBukkitEntity, рефлексия штука достаточно медленная.
     
    Последнее редактирование: 15 окт 2015
  21. oleg599

    oleg599 Активный участник Пользователь

    Баллы:
    88
    Смотря где, в некоторых местах, где с блоком ничего не происходит блокбрейк бросать вообще не резонно, могут быть проблемы, вспоминаем дюпы с джобсом и ключами из ик2.[DOUBLEPOST=1444917401,1444915738][/DOUBLEPOST]
    Рефлексию можно и не использовать, достаточно вместе с котлом собрать класс-мост, который будет напрямую обращаться к getBukkitEntity() или вообще к CraftEventFactory для нужного эвента.
     

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