- Баллы
- 76
Только сейчас заметил один интересный трабл.
При спавне предмета в сундуке, вешаю на него 7 тегов. Когда беру предмет в руку, на нем действительно написано
Но когда мне требуется в коде проверять, есть ли на нем один из этих тегов, метод всегда возвращает мне false, хотя по сути, этот тег у предмета есть
Я так подозреваю, что при каждом вызове hasKey почему-то создается новый NBTTagCompound, то есть, старого на нем как бы нет, но он должен быть. Что за дела?
При спавне предмета в сундуке, вешаю на него 7 тегов. Когда беру предмет в руку, на нем действительно написано

Но когда мне требуется в коде проверять, есть ли на нем один из этих тегов, метод всегда возвращает мне false, хотя по сути, этот тег у предмета есть
PHP:
public static boolean hasKey(ItemStack itemStack, String key) {
net.minecraft.server.v1_12_R1.ItemStack nbtStack = CraftItemStack.asNMSCopy(itemStack);
NBTTagCompound nbtTag = nbtStack.hasTag() ? nbtStack.getTag() : new NBTTagCompound();
return nbtTag.hasKey(key);
}
public static void addNBTValue(ItemStack itemStack, String key, String value) {
net.minecraft.server.v1_12_R1.ItemStack nbtStack = CraftItemStack.asNMSCopy(itemStack);
NBTTagCompound nbtTag = nbtStack.hasTag() ? nbtStack.getTag() : new NBTTagCompound();
nbtTag.setString(key, value);
nbtStack.setTag(nbtTag);
itemStack.setItemMeta(CraftItemStack.asBukkitCopy(nbtStack).getItemMeta());
}
public static String getValue(ItemStack itemStack, String key) {
if(hasKey(itemStack, key)) {
net.minecraft.server.v1_12_R1.ItemStack nbtStack = CraftItemStack.asNMSCopy(itemStack);
NBTTagCompound nbtTag = nbtStack.hasTag() ? nbtStack.getTag() : new NBTTagCompound();
return nbtTag.getString(key);
}
return null;
}
Я так подозреваю, что при каждом вызове hasKey почему-то создается новый NBTTagCompound, то есть, старого на нем как бы нет, но он должен быть. Что за дела?