1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин [ADMIN/DEV] NBTReflectionAPI 1.1.0 - Работа с NBT на разных версиях [1.8+]

Тема в разделе "Неподтвержденные плагины", создана пользователем _TheZit445_, 24 янв 2020.

Метки:
  1. Автор темы
    _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    NBTReflectionAPI
    version 1.1.0 | Minecraft 1.8+
    Данный плагин является очень простой библиотекой для удобной работы с NBT классами без зависимости от версии. API маленькое, но его хватает на реализацию большинства задач, для более гибкой работы используйте другие библиотеки. API работает с рефлексией, а она существенно увеличивает время выполнения вызовов. При работе с малым объёмом кода проблем нет, но при работе с большими кусками используйте NBT классы напрямую или пускайте обработку асинхронно.

    Реализация простая - исходный код. Если есть идеи для оптимизации или заметили баг, пожалуйста сообщите.


    Плагины, требующие библиотеку - CraftingAPI, ExploreMapCreator

    Лог изменений:
    version 1.1.0
    1. Переписан код.
      • В некоторых местах код разбит на логические части.
      • NBTManager удалён, его функционал перешёл в другие классы.
      • Отдельные классы для объектов для более удобной разработки.
    2. Добавлена возможность получать NBT тэги сущностей и блок-сущностей.
    3. Добавлена возможность устанавливать сущностям и блок-сущностям NBT тэг.

    version 1.0.0
    1. Релиз плагина
    2. Вырезан из CraftingAPI
      • Добавлены новые методы
      • Переписаны некоторые методы
      • Добавлены новые NMS классы
      • Добавлены исключения

    Скачать плагин:
    [Скачать] | author: thezit445 (Кирилл)
    Если есть возможность помочь деньгами:
    Яндекс.Деньги | Сбербанк - 5469380077044815 | WMP - P179891510270
     
    Последнее редактирование: 13 апр 2020
  2. Автор темы
    _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Работа с библиотекой.
    Существует несколько классов, с которыми можно работать:
    • NMSItem - представление ItemStack из NMS пакетов.
    • NMSEntity - представление Entity из NMS пакетов.
    • NMSTileEntity - представление TileEntity из NMS пакетов (BlockState).
    • NBTTagCompound - непосредственно NBT тэг.
    • NBTTagList - NBT тэг, хранящий динамический массив NBT тэгов.
    NMSItem
    Создание объекта:
    По экземпляру bukkit ItemStack:
    Код:
    ItemStack itemStack = new ItemStack(Material.DIAMOND);
    NMSItem nmsItem = new NMSItem(itemStack);
    По экземпляру nms ItemStack:
    Код:
    Object nms = Some.thing.getNetMinecraftServerItem();
    NMSItem nmsItem = new NMSItem(nms);
    По тэгу NBT:
    Код:
    NBTTagCompound tag = new NBTTagCompound();
    NMSItem nmsItem = new NMSItem(tag);
    Методы:
    Получение тэга:
    Код:
    NBTTagCompound tag = nmsItem.getNBT();
    Установка тэга:
    Код:
    nmsItem.setNBT(tag);
    Получение bukkit версии:
    Код:
    ItemStack item = nmsItem.asBukkit();
    NMSEntity
    Создание объекта:
    По экземпляру bukkit Entity:
    Код:
    Entity entity = world.spawnEntity(location, EntityType.CREEPER);
    NMSEntity nmsEntity = new NMSEntity(entity);
    Методы:
    Получение тэга:
    Код:
    NBTTagCompound tag = nmsEntity.getNBT();
    Установка тэга:
    Код:
    nmsEntity.setNBT(tag);
    Получение bukkit версии:
    Код:
    Entity entity = nmsEntity.asBukkit();
    NMSTileEntity
    Создание объекта:
    По локации:
    Код:
    Location location = block.getLocation();
    NMSTileEntity tile = new NMSTileEntity(location);
    Примечание. Если на локации не находится блок-сущность, то все результаты методов будут выдавать null, а NMSTileEntity#getNBT() выдаст пустой тэг.​
    Методы:
    Получение тэга:
    Код:
    NBTTagCompound tag = tile.getNBT();
    Установка тэга:
    Код:
    tile.setNBT(tag);
    Обновить данные блока:
    Код:
    tile.update();
    Получение bukkit версии:
    Код:
    BlockState state =tile.asBukkit();
    NBTTagCompound:
    Создание объекта:
    Пустой тэг:
    Код:
    NBTTagCompound tag = new NBTTagCompound();
    По экземпляру nms NBTTagCompound:
    Код:
    Object nmsNbtTagCompound = Some.thing.getNetMinecraftServerNbtTagCompound();
    NBTTagCompound tag = new NBTTagCompound(nmsNbtTagCompound);
    Методы:
    Установка значений:
    section - клюк для установки
    value, array, nbt - значения для ключа
    Пример: {CustomName:"John"} - CustomName - ключ, John - значение.
    Код:
    tag.setInt("Health", 20);
    tag.setIntArray("Colors", new int[] {443, 3453, 234, -34});
    tag.setByte("Count", (byte) 5);
    tag.setByteArray("Colors", new byte[] {1,2,3,4,5});
    tag.setLong("Variable", 122435346L);
    tag.setShort("Power", (short) 24);
    tag.setDouble("x", 234.45);
    tag.setFloat("y", 1245.4F);
    tag.setBoolean("NoAI", false);
    tag.setString("Uuid","4sd5-df5wsed4-4345");
    tag.set("passengers", new NBTTagCompound());
    Получение тэга из ключа:
    Код:
    NBTTagCompound subTag = tag.get("passengers");
    Получение nms копии:
    Код:
    Object nmsTag = tag.asNMS();  
    NBTTagList
    Создание списка:
    Пустой список:
    Код:
    NBTTagList nbtList = new NBTTagList();
    По экземпляру nms NBTTagList:
    Код:
    Object nmsNbtList = Some.thing.getNetMinecraftServerNbtTagList();
    NBTTagList nbtList = new NBTTagList(nmsNbtList);
    Методы:
    Добавить элемент в список:
    Код:
    nbtList.add(new NBTTagCompound());
    nbtList.add(new NBTTagCompound(), 2);
    Получения размера списка:
    Код:
    int size = nbtList.getSize();
    Получение nms копии:
    Код:
    Object nmsNbtList = nbtList.asNMS();
     
    Последнее редактирование: 6 апр 2020
  3. alexandrage

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

    Баллы:
    173
    Уж чего, но такого шлака на рефлексии и так полно.
     
  4. Автор темы
    _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Предложи как сделать лучше или дай хорошую альтернативу.
     
  5. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    Дабы использовать по минимуму рефлексию, можно написать свою реализацию формата НБТ и передавать ее напрямую в пакеты со стороны сервера. Код я не смотрел, предупрежу сразу.
     
  6. Автор темы
    _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Звучит интересно. Посмотрим что можно сделать.
     
  7. Автор темы
    _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    version 1.1.0
    1. Переписан код.
      • В некоторых местах код разбит на логические части.
      • NBTManager удалён, его функционал перешёл в другие классы.
      • Отдельные классы для объектов для более удобной разработки.
    2. Добавлена возможность получать NBT тэги сущностей и блок-сущностей.
    3. Добавлена возможность устанавливать сущностям и блок-сущностям NBT тэг.
     

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