- 5
- 0
был значит такой код
все работало как следует на версии до 1.20.4. Решил собрать мод под версию 1.20.6 и случилась беда, собственно теперь itemStack не содержит nbt и как теперь оттуда братьсписок item-ов
Java:
public record ShulkerInfo(String name, Type type, int color, int slot, List<ItemStack> stacks) {
public static ShulkerInfo create(ItemStack stack, int slot) {
if (!(stack.getItem() instanceof BlockItem) || !(((BlockItem) stack.getItem()).getBlock() instanceof ShulkerBoxBlock)) return null;
ShulkerBoxBlock block = (ShulkerBoxBlock) ((BlockItem) stack.getItem()).getBlock();
List<ItemStack> items = DefaultedList.ofSize(27, ItemStack.EMPTY);
NbtCompound nbt = stack.getOrCreateNbt().contains("BlockEntityTag", 10)
? stack.getNbt().getCompound("BlockEntityTag") : stack.getNbt();
Type type = Type.COMPACT;
if (!Modules.get().get(InventoryInfoModule.class).compact.get()) type = Type.FULL;
if (nbt.contains("Items", 9)) {
Item unstackable = null;
NbtList nbt2 = nbt.getList("Items", 10);
for (int i = 0; i < nbt2.size(); i++) {
int slot2 = nbt2.getCompound(i).contains("Slot", 99) ? nbt2.getCompound(i).getByte("Slot") : i;
ItemStack item = ItemStack.fromNbt(nbt2.getCompound(i));
items.set(slot2, item);
if (item.getMaxCount() == 1) {
if (unstackable != null && !item.getItem().equals(unstackable)) type = Type.FULL;
unstackable = item.getItem();
}
}
}
if (type == Type.COMPACT) {
Map<Item, Integer> map = new HashMap<>();
for (ItemStack item : items) {
if (item.isEmpty()) continue;
map.compute(item.getItem(), (k, v) -> {
if (v == null) return item.getCount();
return v + item.getCount();
});
}
items.clear();
int k = 0;
for (Map.Entry<Item, Integer> entry : map.entrySet()) {
items.set(k, new ItemStack(entry.getKey(), entry.getValue()));
k++;
}
}
int color = -1;
if (block.getColor() != null) {
float[] components = block.getColor().getColorComponents();
color = new Color(components[0], components[1], components[2]).hashCode();
}
return new ShulkerInfo(stack.getName().getString(), type, color, slot, items);
}
}
все работало как следует на версии до 1.20.4. Решил собрать мод под версию 1.20.6 и случилась беда, собственно теперь itemStack не содержит nbt и как теперь оттуда братьсписок item-ов