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

Помогите Как внести NBT тег в Entity? (ItemEntity)

Тема в разделе "Разработка плагинов для новичков", создана пользователем XjCyan1de, 6 фев 2017.

Статус темы:
Закрыта.
  1. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Собсна нужно сделать чтобы определённый предмет лежал на земле вечно и чтобы сервак не удалял его через N-е количество времени, знаю что нужно этому энтити поставить тег Age:-32768 но я долго мучился с NBTTagCompound и так и не понял как записать его в энтити. Помогите пожалуйста, перелазил все форумы но либо методы устаревшие, либо я дибил не понимаю

    код:
    Код:
    Item item = block.getWorld().dropItem(location, itemstack);
    
    /*
    Тута код который мне нужен чтобы получить энтити для того чтобы записать тег
    */
    
    NBTTagCompound tag = new NBTTagCompound();
    tag.setInt("Age", -32768);
    
    /*
    А тут мне нужно этот тег сохранить
    */
    
     
  2. Хостинг MineCraft
    <
  3. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Пиши их в конфиг и все. Если предмет пропал на загруженном чанке, спавни опять.
     
  4. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Мне не нужны такие костыли, я спросил как мне занести в энтити nbt тег
     
  5. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
  6. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Оу... всё так просто? Пойду попробую...[DOUBLEPOST=1486386352,1486373721][/DOUBLEPOST]
    Нет не работает.
    Во первых: нельзя поставить отрицательное число
    Во вторых: изменяется не Age, а Spigot.ticksLived

    Повторяюсь, мне нужно узнать как записать в энтити NBT тег через NBTTagCompound. Доков я нигде не нашёл
     
  7. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
  8. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Вообще нету разницы как бэ... 1.11.2[DOUBLEPOST=1486388208,1486388173][/DOUBLEPOST]
    NBT Теги записываются в TileEntity, Item и в Entity здрасте
     
  9. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    тег age записывается в item, в разделе Entity его нет.

    досвиданья
     
  10. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Извините, я тупой. Щас попробую
     
  11. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Мне кажется, что если бы разницы не было, то тех скобочек тоже не было бы. скобки наверное не спроста.
    upload_2017-2-6_18-42-55.png

    Хотя о чем это я, бред это все, без разницы все
     
  12. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Я не мазохист чтобы сидеть на старых версиях
     
  13. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
  14. Автор темы
    XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Вот я даунич. Просто я привык к командным блокам и постоянно пытаюсь ванильными способами решать. Совсем забыл что есть такие простые методы. Тема закрыта[DOUBLEPOST=1486405080,1486389837][/DOUBLEPOST]Ах да, нашёл всё таки как заносить NBT теги, малоли кому пригодится:
    Код:
            //Работает на 1.11, если хотите то можно и 1.10 и 1.9 сделать
            //@param entity Сам энтити к которому мы будем добавлять NBT теги
            Item entity = l.getWorld().dropItem(l, itemStack);
            try {
                Object nmsEntity = entity.getClass().getMethod("getHandle").invoke(entity);
                if (ReflectionUtils.getVersion().startsWith("v1_11_")) {
                    try {
                        ReflectionUtils.setFieldValue(nmsEntity, "bA", 2039583);
                    } catch (IllegalArgumentException x) {
                        ReflectionUtils.setFieldValue(nmsEntity, "bB", true);
                    }
                }
                else {
                    Method method = nmsEntity.getClass().getMethod("getNBTTag");
                    Object tag = method.invoke(nmsEntity);
                    if(tag == null) {
                        tag = ReflectionUtils.getClass("NBTTagCompound").newInstance();
                    }
                    method = nmsEntity.getClass().getMethod("c", ReflectionUtils.getClass("NBTTagCompound"));
                    method.invoke(nmsEntity, tag);
    
                    //Вот тут прописываем NBT Теги:
                    //Допустим ставим Age:-32768
                    tag.getClass().getMethod("setInt", String.class, int.class).invoke(tag, "Age", -32768);
                    nmsEntity.getClass().getMethod("a", ReflectionUtils.getClass("NBTTagCompound")).invoke(nmsEntity, tag);
                    //А тут например PickupDelay:32767
                    tag.getClass().getMethod("setInt", String.class, int.class).invoke(tag, "PickupDelay", 32767);
                    nmsEntity.getClass().getMethod("a", ReflectionUtils.getClass("NBTTagCompound")).invoke(nmsEntity, tag);
                }
            } catch (Exception x) {
                x.printStackTrace();
            }
    
     
Статус темы:
Закрыта.

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