Стартап Работа с API 1.13

Cool_boy

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
prettydude
Создал тему чтобы люди, которые имеют вопросы по поводу обновления плагинов под 1.13, могли задавать их здесь. Думаю, через некоторое время, вынесу самые важные изменения с примерами в шапку.

Как скомпилировать плагин под 1.13?
Чтобы Bukkit/Spigot увидел ваш плагин как уже обновлённый под 1.13, в файле plugin.yml надо дописать
Код:
api-version: 1.13

Почему нужно указывать версию API, раньше же и без этого работало?
В 1.13 изменилось большое количество материалов (они теперь называются так же, как и в игре), и чтобы плагины со старых версий хотя бы имели шанс запуститься на новой версии, Bukkit/Spigot при загрузке попытается обновить их в нужный формат.

Что такое Tag?
В 1.13 вместе с наборами данных появились тэги (метки). С их помощью можно группировать предметы или блоки вместе. В Bukkit добавили только ванильные тэги, которые представляют из себя простой список материалов.
Чтобы проверить входит ли материал в список, есть метод isTagged(). Не ясно, добавят ли возможность добавлять или изменять их, но уже лучше чем проверять цветную шерсть через .contains("WOOL").

Что такое BlockData?
BlockData - замена для MaterialData. На все существующие классы MaterialData есть аналогичный вариант BlockData (поэтому следите, что вы импортируете). MaterialData нормально могут использовать только плагины которые не написаны под 1.12 и ниже, поэтому она была помечена устаревшей.
Работа с BlockData идентична работе с MaterialData.
PHP:
if (Tag.STAIRS.isTagged(block.getType())) { //проверяем ступени ли это
    Stairs stairs = (Stairs) block.getBlockData(); //получаем BlockData
    stairs.setWaterlogged(true); //"затопливаем" ступеньки
    stairs.setShape(Stairs.Shape.OUTER_LEFT); //устанавливаем форму
    stairs.setHalf(Bisected.Half.TOP); //меняем половину
    stairs.setFacing(BlockFace.EAST); //меняем направление
    block.setBlockData(stairs); //задаём BlockData
}

Можно ли сериализовать её?
Да, и даже удобнее чем это было раньше. Теперь можно использовать строки как в самой игре. Например, немного съеденный торт можно записать как minecraft:cake[bites=3], и получить его BlockData можно через Server.createBlockData(String). Чтобы конвертировать BlockData в строку добавлен метод getAsString().

Как теперь получить цветной блок?
Так как каждый цвет теперь отдельный материал, то достаточно прописать нужный. Если вам нужно получить материал нужного цвета, можно использовать этот метод.
(md_5 переименовал DyeColor.SILVER, теперь всё ок)
PHP:
public static Material getMaterialByColor(DyeColor color, String suffix) {
    return Material.getMaterial(color + "_" + suffix);
}

Небольшие изменения
  • Переименовали картины BURNING_SKULL и DONKEY_KONG, но это и так никого не волнует.
  • Опять удалили/добавили целую кучу звуков в классе Sounds, впрочем, как всегда.
  • Статистика PLAY_ONE_TICK теперь PLAY_ONE_MINUTE, небольшая потеря точности.
  • Переименованы биомы в классе Biome, теперь всё как и в игре.
  • Много BlockState теперь deprecated, так как всё теперь хранится в материале.
  • Ранее deprecated класс Fish (ранее отвечавший за поплавок) теперь отвечает за новых мобов.
  • NotePlayEvent теперь не реагирует на setInstrument / setNote, редактируйте блок в мире чтобы изменить звук.
  • Удалили метод BukkitScheduler.cancelAllTasks().
  • Material.isTransparent() теперь deprecated, потому что никто точно не знает, что считать прозрачным блоком.
  • Для стрел добавили метод getAttachedBlock().
  • Увеличили лимиты для префикса/суффикса. Не перестарайтесь.
    8ad9ceb981690acea3a58975c10357a4ffd74734
 
Последнее редактирование:
Приветствую всех. Хотел перевести сервер на 1.13, в итоге столкнулся с миллионом проблем, но главный раздражающий фактор для меня полный коллапс со всеми плагинами. Как думаете, стоит дальше сидеть на 1.12 или в ближайшее время все-таки выкатят адаптированные версии плагинов? Плясать с бубном вокруг каждого плагина времени нет.
Спасибо за ответ.
Я самолично написал всем разработчикам плагинов, которые не работают на 1.13. И через неделю обновил 90% сервера...
 
Я самолично написал всем разработчикам плагинов, которые не работают на 1.13. И через неделю обновил 90% сервера...
Интересно... Т.е. тебе разработчики скинули работающие на 1.13 плагины? Не очень понимаю их логику, почему, например, не выкатить их сразу для всех, как это всегда было
 
Интересно... Т.е. тебе разработчики скинули работающие на 1.13 плагины? Не очень понимаю их логику, почему, например, не выкатить их сразу для всех, как это всегда было
В смысле, ты чё? Он оповестил разрабов, что вышло обновление 1.13 и попросил их обновить их плагины. Они обновили и выложили в паблик.
 
Там начали что-то с рецептами делать. В рецептах заменили ингредиенты с Material на RecipeChoice, который представляет из себя Predicate<ItemStack> (интересно, что будет если использовать этот метод), но вместо него желательно использовать MaterialChoice. Кажется, это связано с тем что сама по себе игра в датапаках принимает только значения материала и прочности.

Из интересного:
  • Добавили API для LootTable'ов, интересно будет увидеть его использование.
  • Разрешили перезаписывать метод getLogger() Слава яйцам!
  • getDurability() отмечен Deprecated, теперь надо кастить ItemMeta к Damageable.
  • Допилили GameRule API.
  • Team.getSuffix() возвращал префикс
 
Кажись Спиготу надоело что Mojang не фиксит баг с сундуками, и они его сами пофиксили. Юзать можно.
Небольшой пост о состоянии разработки
API для разработки уже готово? Ну хотя бы в плане возможностей (понятно, что баги могут где-то быть)?
И да, как я понял, md_5 настоятельно советует перейти на 1.13.1 после успешных тестов. Тесты прошли?
 
API для разработки уже готово? Ну хотя бы в плане возможностей (понятно, что баги могут где-то быть)?
И да, как я понял, md_5 настоятельно советует перейти на 1.13.1 после успешных тестов. Тесты прошли?
Там ещё месяц назад можно было плагины писать, API сильно менять не будут на этой версии. Багов поубавилось, судя по тому что коммитов стало меньше, и они уже больше на небольшие баги нацелены.
Единственное на что следует обратить внимание: NMS для 1.13 не подходит для 1.13.1, поэтому впервые с 1.9 выпустили R2
 
Там ещё месяц назад можно было плагины писать, API сильно менять не будут на этой версии. Багов поубавилось, судя по тому что коммитов стало меньше, и они уже больше на небольшие баги нацелены.
Единственное на что следует обратить внимание: NMS для 1.13 не подходит для 1.13.1, поэтому впервые с 1.9 выпустили R2
Спасибо за информацию
 
Назад
Верх Низ