Помогите Не обновляет атрибуты

  • Автор темы Автор темы jusik
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

jusik

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Jusik
JavaScript:
@EventHandler
    public void SETLEVEL(PlayerInteractEvent e){
        if(e.getAction()==Action.PHYSICAL)return;
            if(e.getItem()!=null)
            if(e.getItem().getType()==Material.WOOD_SWORD){
                 ItemStack stack = e.getItem();
                 net.minecraft.server.v1_11_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
                 NBTTagCompound compound = nmsStack.getTag();
                 if (compound == null) {
                    compound = new NBTTagCompound();
                     ((net.minecraft.server.v1_11_R1.ItemStack) nmsStack).setTag(compound);
                     compound = nmsStack.getTag();
                 }
                 NBTTagList modifiers = new NBTTagList();
                 NBTTagCompound healthboost = new NBTTagCompound();
                 healthboost.set("AttributeName", new NBTTagString("generic.attackDamage"));
                 healthboost.set("Name", new NBTTagString("generic.attackDamage"));
                 healthboost.set("Amount", new NBTTagInt(1));
                 healthboost.set("Operation", new NBTTagInt(0));
                 healthboost.set("UUIDLeast", new NBTTagInt(894654));
                 healthboost.set("UUIDMost", new NBTTagInt(2872));
                 modifiers.add(healthboost);
                 compound.set("AttributeModifiers", modifiers);
                 nmsStack.setTag(compound);
                 stack = CraftItemStack.asBukkitCopy(nmsStack);
            }
    }
В тайтле всё изложено
 
Ты все атрибуты добавил, в переменную внёс, но дальше дело не пошло.Ты всё это сделал на копии, теперь тебе нужно эту копию выдать.Например так:
Java:
e.getPlayer().setItemInHand(stack);

И это:
Java:
NBTTagCompound compound = nmsStack.getTag();
if (compound == null) {
    compound = new NBTTagCompound();
    ((net.minecraft.server.v1_11_R1.ItemStack) nmsStack).setTag(compound);
    compound = nmsStack.getTag();
}
Замени на это:
Java:
NBTTagCompound compound = (nmsStack.hasTag() ? nmsStack.getTag() : new NBTTagCompound());
 
я мог бы написать тебе работу с тагами так чтто бы они были независимы от версии, но т.к. это долго, то я пока что не буду. елси тебе это будет надо, тогда напиши - сделаю
 
я мог бы написать тебе работу с тагами так чтто бы они были независимы от версии, но т.к. это долго, то я пока что не буду. елси тебе это будет надо, тогда напиши - сделаю
Не нужно спасибо.
Ты все атрибуты добавил, в переменную внёс, но дальше дело не пошло.Ты всё это сделал на копии, теперь тебе нужно эту копию выдать.Например так:
Java:
e.getPlayer().setItemInHand(stack);

И это:
Java:
NBTTagCompound compound = nmsStack.getTag();
if (compound == null) {
    compound = new NBTTagCompound();
    ((net.minecraft.server.v1_11_R1.ItemStack) nmsStack).setTag(compound);
    compound = nmsStack.getTag();
}
Замени на это:
Java:
NBTTagCompound compound = (nmsStack.hasTag() ? nmsStack.getTag() : new NBTTagCompound());
Всё работает спасибо большое
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх