Ошибки начинающих разработчиков майнкрафт плагинов и как их не допускать

Ошибки начинающих разработчиков майнкрафт плагинов и как их не допускать

Overwrite

Разработчик
Инструктор
Пользователь
Сообщения
2 637
Решения
115
Overwrite добавил(а) новый ресурс:

Ошибки начинающих разработчиков майнкрафт плагинов и как их не допускать - Описание стандартных недочётов, которые можно увидеть в практически каждом плагине от новичка

Рад вновь сесть за микрофон.

Я считаю начать стоит как обычно с того, что меня побудило к написанию данной статьи.
На данный момент я вижу просто небывалый наплыв разработчиков, которые выкладывают десятки своих новых плагинов сюда, на спиготмс.ру, будь то за тем, чтобы предложить свой лучший аналог уже имеющимся, но не достаточно хорошим по их мнению плагинам, либо же, чтобы просто выложить достаточно ресурсов, дабы затем опубликовать что-то более...

Узнать больше об этом ресурсе…
 
Ещё очень хотелось бы добавить про захардкоженные сообщения от плагинов, огромный код в одном классе и банальное неумение пользоваться гитом ("я не хочу публиковать исходники")
 
Ещё очень хотелось бы добавить про захардкоженные сообщения от плагинов, огромный код в одном классе и банальное неумение пользоваться гитом ("я не хочу публиковать исходники")
Мне кажется, такое уже не лечится.
 
Overwrite обновил(а) ресурс Ошибки начинающих разработчиков майнкрафт плагинов и как их не допускать новой записью:

Дополнения

  • Пункт Е в разделе придирок - а гитхаб вы дома не забыли?
  • Добавлена небольшая ремарка по вопросу исплользования Player в коллекциях.

Узнать больше об этом обновлении…
 
Очевидно самый лучший красильщик это
Java:
public Component colorize(String message) {
    if (message == null) return Component.empty();
    return MiniMessage.miniMessage().deserialize(message);
}

В целом статья крутая, хоть и знал всё. Советую добавить простенькое объяснение что такое асинхрон, а то многие не знают. То что это не волшебный буст +400% к производительности, а просто отсутствие требования ожидать завершение выполнения определенного кода перед тем как выполнить следующий

Есть ещё ошибка которую часто делают: сравнивают предметы и инвентари по названию. Так например любит делать разработчик известного античита vulcan, что привело к взлому многих серверов
 
Было бы круто, если бы перевёл статью на английский и где-нибудь опубликовал её ещё, чтобы эта статья получила ещё больше огласки:)
 
Overwrite обновил(а) ресурс Ошибки начинающих разработчиков майнкрафт плагинов и как их не допускать новой записью:

Дополнения

  • Пункт Ж в придирках - про подсказки от idea
  • Небольшие исправления ошибок в форматировании кода, а также небольшое изменения стилистики.

Узнать больше об этом обновлении…
 
Раз уж зашло про Objects.requireNonNull при получении значений из конфига, то думаю что тогда стоит дополнить что для геттеров (getString, getInt, getBoolean и тд) можно указать дефолтное значение если параметра в конфиге нет, и тогда он НУ ВОТ УЖЕ ТОЧНО не выдаст null. А вообще ещё очень хочется добавить про наименование классов, пакетов, методов и тд
 
Про то, что нельзя хранить игрока в коллекции:

Слева - 1.21.4 версия ядра, справа - 1.19.4 В какой-то из моментов вырезали проверку на айдишник сущности, так что теперь нет разницы храните ли вы UUID или самого игрока.
Заметил я это ещё на версии 1.12.3, когда у меня на сервере запоминался игрок и ему шли пакеты, но он не очищался в процессе работы сервера даже при перезаходе. Так вот, перезашёл я на сервер, а пакеты до сих пор шли))
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Про то, что нельзя хранить игрока в коллекции:

Слева - 1.21.4 версия ядра, справа - 1.19.4 В какой-то из моментов вырезали проверку на айдишник сущности, так что теперь нет разницы храните ли вы UUID или самого игрока.
Заметил я это ещё на версии 1.12.3, когда у меня на сервере запоминался игрок и ему шли пакеты, но он не очищался в процессе работы сервера даже при перезаходе. Так вот, перезашёл я на сервер, а пакеты до сих пор шли))
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Какие уязвимости это образует?
 
Про то, что нельзя хранить игрока в коллекции:

Слева - 1.21.4 версия ядра, справа - 1.19.4 В какой-то из моментов вырезали проверку на айдишник сущности, так что теперь нет разницы храните ли вы UUID или самого игрока.
Заметил я это ещё на версии 1.12.3, когда у меня на сервере запоминался игрок и ему шли пакеты, но он не очищался в процессе работы сервера даже при перезаходе. Так вот, перезашёл я на сервер, а пакеты до сих пор шли))
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Дело не только в equals/hashCode, но и в том, какие поля хранятся в этом объекте. Если плагин хранит объект игрока и после его выхода, может остаться то, что должен был унести с собой сборщик мусора. Поэтому, хоть хранить их и можно, лучше использовать weak reference (для этого есть, в том числе и специализированные коллекции)
 
Возможно, стоило бы рассказать также и про свойства @EventHandler – про то, как на самом деле работают приоритеты, почему изменение состояния ивента с использованием EventPriority.MONITOR является дурным тоном и, конечно же, про легкую возможность задать игнорирование отмененных событий без лишних блоков внутри. Это не фатально, но, думаю, наряду с остальными вещами в статье этому нашлось бы место.
 
Назад
Сверху Снизу