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

Помогите [Решено] Как использовать NBT 1.12.2 (NMS)

Тема в разделе "Разработка плагинов для новичков", создана пользователем therimuru_, 4 окт 2022.

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

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Привет, недавно я задал вопрос как подключить NMS, у меня это получилось, теперь вопрос как это юзать. Мне нужно выдать предмету тег, чтобы отличать его от других, и при ивенте проверять его на наличие этого самого тега. Как это сделать?
     
  2. alexandrage

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

    Баллы:
    173
    Ну у тебя есть CustomModelData и PersistentDataContainer, выбирай что требуется и в nms лезть не придется.
    CustomModelData придаст уникальный ключ еще и определит текстуру предмета через ресурспак, в PersistentDataContainer можно заносить кастомные значения для обработки плагином.
     
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Если хочешь через NMS, то смотри пример: https://github.com/tr7zw/Item-NBT-API/issues/7#issue-239460859

    Если без NMS, то смотри сам плагин (репозиторий выше как раз его)

    На 1.12.2 этого нет
     
  4. Автор темы
    therimuru_

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Такое есть на 1.16.5? Я бы ещё анархию сделал.
     
  5. Автор темы
    therimuru_

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Кстати говоря на гитхабе ничего не понял((
     
  6. alexandrage

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

    Баллы:
    173
    Там есть да.
     
  7. Автор темы
    therimuru_

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Будет место ресурспаку :>

    Кстати ты не в курсе как с помощью NBT повесить тег на ItemStack (bukkit)?
     
  8. alexandrage

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

    Баллы:
    173
    Не лезу в nbt без надобности, уже давно все можно делать через spigot-paper api.
     
  9. Автор темы
    therimuru_

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Решено.


    Utils,java:

    PHP:
    package org.therimuru.donateundyingshield;

    import net.minecraft.server.v1_12_R1.NBTTagCompound;
    import net.minecraft.server.v1_12_R1.NBTTagString;
    import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
    import org.*********ventory.ItemStack;

    public class 
    Utils {

        public static 
    ItemStack setNBTTag(ItemStack itemStackString keyString value) {
            
    ItemStack bukkitItemStack;
            
    net.minecraft.server.v1_12_R1.ItemStack nmsItem CraftItemStack.asNMSCopy(itemStack);
            
    NBTTagCompound nmsItemCompound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
            
    nmsItemCompound.set(key, new NBTTagString(value));
            
    nmsItem.setTag(nmsItemCompound);
            
    bukkitItemStack CraftItemStack.asBukkitCopy(nmsItem);
            return 
    bukkitItemStack;
        }
    }
    USTestCommand.java:
    PHP:
    package org.therimuru.donateundyingshield;

    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.*********ventory.ItemStack;

    public class 
    USTestCommand implements CommandExecutor {

        private 
    DonateUndyingShield plugin;

        public 
    USTestCommand(DonateUndyingShield donateUndyingShield) {
            
    plugin donateUndyingShield;
        }

        @
    Override
        
    public boolean onCommand(CommandSender senderCommand commandString labelString[] args) {
            
    ItemStack itemStack Utils.setNBTTag(new ItemStack(Material.SHIELD), "DonateItem""SHIELD_OF_UNDYING");
            ((
    Playersender).getInventory().addItem(itemStack);
            return 
    true;
        }
    }

    Спасибо alexandrage и Deymeth!
     
Статус темы:
Закрыта.

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