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

Нашел Баг:
Гейты не правильно налаживаются на трубы, проверил на обе версий 7.0.25 и 7.1.8.
С оригинальном модом мне нормально, проблема тока с ивентами.
@gamerforEA, это будет исправлено? С этим багом ни фасадов не видно, ни гейтов, ни заглушек, ни док-станций (у гейтов вообще интерфейса нет, просто пустота).
 
@gamerforEA GraviSuite с последним IC2 как и ASP (Advanced Solar Panel - от того же автора) потерял многие крафты, они попросту не работают, возможно поправить?
 
@gamerforEA GraviSuite с последним IC2 как и ASP (Advanced Solar Panel - от того же автора) потерял многие крафты, они попросту не работают, возможно поправить?
написать скрипты через 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:*>]]);
 
написать скрипты через 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:*>]]);
Спасибо, раньше использовал ZZZZ Custom Config для рецептов, но проблемы с wildcard в рецептах IC2 надоели, в minetweak такого нет, спасибо
 
Собсна сама починка для крафтов(Нужен MineTweaker)
Скрипт кидать в папку scripts в корне сервера
https://yadi.sk/d/F8SHrYKqjjiuH
Перезалил, забыл шлема добавить.
 
@gamerforEA А ты знаешь толк в извращениях, мутить какие-то инжекты в ворлдгуард не пойми зачем, не удивительно что TPS при хайлоаде долго от такого не живёт.
 
@gamerforEA А ты знаешь толк в извращениях, мутить какие-то инжекты в ворлдгуард не пойми зачем, не удивительно что TPS при хайлоаде долго от такого не живёт.
Это всё не просто так. Если делать примитивную проверку на наличие привата, то не будет поддержки флагов, других плагинов и пр. Если кидать обычные Bukkit ивенты всем подряд, то будут баги, так как некоторые плагины несовместими с FakePlayer'ами. Кстати, инжекторы не производительность не влияют, так как вызываются только один раз и только заливают класс в ClassLoader WG.
И да, в случае ивентов узкое горлышко - WorldGuard. Тут нужно или его оптимизировать, или искать более производительный плагин для работы с приватами.
 
Это всё не просто так. Если делать примитивную проверку на наличие привата, то не будет поддержки флагов, других плагинов и пр. Если кидать обычные Bukkit ивенты всем подряд, то будут баги, так как некоторые плагины несовместими с FakePlayer'ами. Кстати, инжекторы не производительность не влияют, так как вызываются только один раз и только заливают класс в ClassLoader WG.
И да, в случае ивентов узкое горлышко - WorldGuard. Тут нужно или его оптимизировать, или искать более производительный плагин для работы с приватами.
Так вот для поддержки плагинов и нужно пускать напрямую баккит эвенты, а не всякое порно в виде эвенте в эвенте (форг/твои кастомные эвенты) что просаживает сильно TPS при хайлоаде. В случае, если брейкблокэвент там используется не по назначению (с блоком в принципе ничего не происходит после эвента), то в таких случаях можно повесить один кастомный эвент, в котором будут нужные проверки типа приватов, флагов и тд. С фейкплеерами всё работает отлично, тот же WorldGuard проверяет фейкплеер это или нет.
 
Так вот для поддержки плагинов и нужно пускать напрямую баккит эвенты, а не всякое порно в виде эвенте в эвенте (форг/твои кастомные эвенты) что просаживает сильно TPS при хайлоаде. В случае, если брейкблокэвент там используется не по назначению (с блоком в принципе ничего не происходит после эвента), то в таких случаях можно повесить один кастомный эвент, в котором будут нужные проверки типа приватов, флагов и тд. С фейкплеерами всё работает отлично, тот же WorldGuard проверяет фейкплеер это или нет.
  1. В EventHelper всё происходит точно так же, как и в обычном Bukkit - ивенты кидается во все зарегистрированные слушатели, вот только у меня слушатели берутся только для определённых плагинов, что несколько повышает производительность.
  2. Нет, не все плагины отлично работают с ивентами. Насколько, я помню, люди жаловались на EssentialsProtect.
  3. Если вас что-то не устраивает, то никто мешает вам модифицировать методы в классе EventUtils так, чтобы кидались обычные ивенты всем подряд.
  4. Если бы вы смотрели тайминги, то заметили бы, что вся нагрузка от моих ивентов была в WorldGuard, а не прослойках, вроде плагина-моста и EventHelper'а.
  5. Если критикуете, то предлагайте более оптимальное решение, которое будет таким же удобным (не для пользователя, а для разработчика), как моё. И про бенчмарки не забывайте.
 
  1. В EventHelper всё происходит точно так же, как и в обычном Bukkit - ивенты кидается во все зарегистрированные слушатели, вот только у меня слушатели берутся только для определённых плагинов, что несколько повышает производительность.
  2. Нет, не все плагины отлично работают с ивентами. Насколько, я помню, люди жаловались на EssentialsProtect.
  3. Если вас что-то не устраивает, то никто мешает вам модифицировать методы в классе EventUtils так, чтобы кидались обычные ивенты всем подряд.
  4. Если бы вы смотрели тайминги, то заметили бы, что вся нагрузка от моих ивентов была в WorldGuard, а не прослойках, вроде плагина-моста и EventHelper'а.
  5. Если критикуете, то предлагайте более оптимальное решение, которое будет таким же удобным (не для пользователя, а для разработчика), как моё. И про бенчмарки не забывайте.
Я предложил самый оптимальный вариант, который проверен на хайлоаде (150+ игроков на одном сервере с особо прожорливыми модами аля AE2, TE). Все нужные основные плагины работают нормально, если уже кому-то нужны свои извраты - пусть допиливают под себя, это их проблемы, в первую очередь должен быть упор на производительность. Я видел тайминги с твоим мостом, так вся львиная доля была именно в этих эвентах, которые порождают собой ещё один (!) эвент, но уже баккитовский, что мешает его кинуть сразу? А онлайн кстати был не такой крупный, в районе 50-60, но TPS уже забился в угол и тихонько плакал.
 
Я предложил самый оптимальный вариант, который проверен на хайлоаде (150+ игроков на одном сервере с особо прожорливыми модами аля AE2, TE). Все нужные основные плагины работают нормально, если уже кому-то нужны свои извраты - пусть допиливают под себя, это их проблемы, в первую очередь должен быть упор на производительность. Я видел тайминги с твоим мостом, так вся львиная доля была именно в этих эвентах, которые порождают собой ещё один (!) эвент, но уже баккитовский, что мешает его кинуть сразу? А онлайн кстати был не такой крупный, в районе 50-60, но TPS уже забился в угол и тихонько плакал.
  1. Ещё один ивент создаётся только в плагине-мосте, а в EventHelper я от этого смог избавиться.
  2. Как вы посчитали, что ваш вариант - самый оптимальный? Какие тесты производительности были?
  3. У вас должен быть упор на производительность, а у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.
  4. Если львиная доля времени выполнения была в методе моего плагина, это не означает, что проблема была именно в нём. Я смотрел, где была просадка производительности, и как выяснилось, все тормоза были из-за WorldGuard.
  5. Все решения, которые я принимал при продумывании общего плана работы с ивентами, были приняты не "потому что могу", а потому что более оптимального варианта, который подошёл бы для большинства клиентов, а не отдельных личностей с высокой нагрузкой, я не видел.
 
  1. Ещё один ивент создаётся только в плагине-мосте, а в EventHelper я от этого смог избавиться.
  2. Как вы посчитали, что ваш вариант - самый оптимальный? Какие тесты производительности были?
  3. У вас должен быть упор на производительность, а у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.
  4. Если львиная доля времени выполнения была в методе моего плагина, это не означает, что проблема была именно в нём. Я смотрел, где была просадка производительности, и как выяснилось, все тормоза были из-за WorldGuard.
  5. Все решения, которые я принимал при продумывании общего плана работы с ивентами, были приняты не "потому что могу", а потому что более оптимального варианта, который подошёл бы для большинства клиентов, а не отдельных личностей с высокой нагрузкой, я не видел.
Простейший тест - протестировать под сильной нагрузкой, что и было сделано. Если проблема в WorldGuard, то почему у меня никаких просадок не возникает, эвенты брошены напрямую?) Там обновлять то и нечего, создать и вызвать эвент задача ну ох какая недостижимая.
 
Простейший тест - протестировать под сильной нагрузкой, что и было сделано. Если проблема в WorldGuard, то почему у меня никаких просадок не возникает, эвенты брошены напрямую?) Там обновлять то и нечего, создать и вызвать эвент задача ну ох какая недостижимая.
  1. Это не тест, а "А вот у меня это работает". Вы не учитываете, что бывают совершенно разные условия работы сервера. У кого-то просто слабая VDS'ка, у кого-то 10000 приватов, у кого-то стоит "тяжёлый" мод, который всё вешает и т.д. Для нормального тестирования нужно проверять разные алгоритмы в идентичных условиях и судить не по принципу "лагает/не лагает", а проверять нагрузку на CPU, сборщик мусора, потребление ОЗУ и пр.
  2. Даже когда я бросал обычные Bukkit ивенты, производительность почему-то (угадайте причину) проседала.
  3. О каких обновлениях идёт речь?
    Я и так создаю и кидаю ивенты.
    Не понимаю, зачем была ваша последняя фраза.
  4. Наш спор ни к чему не приведёт, и каждый останется при своём мнении. Предлагаю его прекратить или перенести в ЛС.
 
  1. Это не тест, а "А вот у меня это работает". Вы не учитываете, что бывают совершенно разные условия работы сервера. У кого-то просто слабая VDS'ка, у кого-то 10000 приватов, у кого-то стоит "тяжёлый" мод, который всё вешает и т.д. Для нормального тестирования нужно проверять разные алгоритмы в идентичных условиях и судить не по принципу "лагает/не лагает", а проверять нагрузку на CPU, сборщик мусора, потребление ОЗУ и пр.
  2. Даже когда я бросал обычные Bukkit ивенты, производительность почему-то (угадайте причину) проседала.
  3. О каких обновлениях идёт речь?
    Я и так создаю и кидаю ивенты.
    Не понимаю, зачем была ваша последняя фраза.
  4. Наш спор ни к чему не приведёт, и каждый останется при своём мнении. Предлагаю его прекратить или перенести в ЛС.
Для тебя слово хайлоад ничего не значит?) Хайлоад уже подразумевает собой тяжелые моды, большое количество игроков, а соответственно приватов и прочих вещей, я не с потолка написал же) Да и 95% арендуют дедики в одних и тех же местах, железо у многих идентично, и сами моды прожорливы, никто не будет запускать на 4 пентиуме с 512 МБ памяти. Ну вот, а теперь представь что делают уже два таких же эвента подряд, да и бросаешь видимо в горячих местах, где достаточно бросить 1 кастомный эвент. Последняя фраза на это: "А у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.". Если ты хоть раз работал хотя бы с небольшой аудиторией (1 сервер с типичными модами для всех, 100 онлайна), то уже должен понимать для чего нужно делать упор на производительность. А это так, баловство для школьничков.
 
Для тебя слово хайлоад ничего не значит?) Хайлоад уже подразумевает собой тяжелые моды, большое количество игроков, а соответственно приватов и прочих вещей, я не с потолка написал же) Да и 95% арендуют дедики в одних и тех же местах, железо у многих идентично, и сами моды прожорливы, никто не будет запускать на 4 пентиуме с 512 МБ памяти. Ну вот, а теперь представь что делают уже два таких же эвента подряд, да и бросаешь видимо в горячих местах, где достаточно бросить 1 кастомный эвент. Последняя фраза на это: "А у меня упор на скорость разработки и поддержки, когда изменения в коде нужно перебрасывать между разными версиями модов.". Если ты хоть раз работал хотя бы с небольшой аудиторией (1 сервер с типичными модами для всех, 100 онлайна), то уже должен понимать для чего нужно делать упор на производительность. А это так, баловство для школьничков.
  1. У меня есть эта "небольшая аудитория", и для неё важно быстро получать ивенты и иметь возможность в случае чего так же быстро что-то переделать, обновить и пр.
  2. Не нравится - не пользуйтесь моими ивентами.
  3. Хорошо, это баловство для школьников, если вас это успокоит. 🙂
 
  1. У меня есть эта "небольшая аудитория", и для неё важно быстро получать ивенты и иметь возможность в случае чего так же быстро что-то переделать, обновить и пр.
  2. Не нравится - не пользуйтесь моими ивентами.
  3. Хорошо, это баловство для школьников, если вас это успокоит. 🙂
Я и не пользуюсь твоими эвентами, а наставляю тебя на верный путь. Впрочем, в чем-то ты прав, для аудитории рубаккита даже это уже зашквар.
 
Бросание одного эвента занимает примерно 100мс. Всегда. Так что никакой разницы что один, что два бросить. И бросить эвент в конкретный плагин кстати будет быстрее чем всем.
Единственное где может быть проблема - в getBukkitEntity, рефлексия штука достаточно медленная.
 
Последнее редактирование:
Назад
Верх Низ