Вопрос по контейнеру

Версия Minecraft
1.12.2

will0376

Токсичная личность
2,075
55
584
Здрасть. Мне необходимо написать гуишку, которая бы записывала НБТ в предмет при перемещении в слот, вроде всё реализовал, но остаётся вопрос: как впервые положить предмет правильно? Как его забрать правильно?(чуть более правильный вопрос: как записать НБТ предмета во второй, без сохранения его в контейнере?)
Мб есть другой способ записи нужного предмета в динамический список предметов(ванила/моды/етк)?
Слот:
Java:
@Override
    public void putStack(ItemStack stack) {
        /[I]System.out.println(FMLCommonHandler.instance().getSide());[/I]/
        System.out.println("--===---New Put---===--");
        System.out.println("put1: " + stack);
        System.out.println(Arrays.toString(inventory.getStacks().toArray()));
        ItemStack handStack = player.getHeldItemMainhand();
        if (handStack.hasTagCompound() && handStack.getTagCompound().hasKey(nbtInventoryInItemStack)) {
            NBTTagCompound nbt = handStack.getTagCompound().getCompoundTag(nbtInventoryInItemStack);
            stack = new ItemStack(nbt);
            System.out.println("set by NBT: "+ stack);

        } else if (!stack.isEmpty()){
            NBTTagCompound nbt = new NBTTagCompound();
            nbt.setTag(nbtInventoryInItemStack, stack.writeToNBT(new NBTTagCompound()));
            handStack.setTagCompound(nbt);
            System.out.println("set by put: "+ stack);
        } /*else {
                if (!stack.isEmpty()) {
                    NBTTagCompound nbt = new NBTTagCompound();
                    nbt.setTag(nbtInventoryInItemStack, stack.writeToNBT(new NBTTagCompound()));
                    handStack.setTagCompound(nbt);
                    //super.putStack(ItemStack.EMPTY);
                    super.putStack(stack);
                }
        }*/
        super.putStack(stack);
        System.out.println("put2: " + stack + ", init: " + inited + ", counter: " + putCounter);
    }

    @Override
    public ItemStack onTake(EntityPlayer player, ItemStack stack) {
        //this.onCrafting(stack);
        super.onTake(player, stack);
        System.out.println("take: " + stack);
        ItemStack handStack = player.getHeldItemMainhand();
        handStack.removeSubCompound(nbtInventoryInItemStack);
        return stack;
    }
Я знаю, что можно просто удалять предмет в момент трансфера... Но это не мой путь(во всяком случае, сделаю так если ничего другого не придумаю)
 
917
22
332
Ты хочешь записывать nbt в стак, если он (стак) был перемещён из одного слота инвентаря в другой, при этом, если стак впервые попал в инвентарь - то ничего не записывать?
А когда забираешь стак, удалять из него nbt?
 

will0376

Токсичная личность
2,075
55
584
Я хочу записывать нбт в стак исходного предмета, гуи которого открыто в данный момент у меня через бинд кнопки + player.opengui. Т.е. сейчас есть контейнер, но на все динамические предметы - он один... что недопустимо.
Хотелось бы записывать нбт в стак в момент трансфера другого айтемстака в слот. + читать его оттуда, показывая при открытии... Т.е. сделать кастомный контейнер на основе НБТ и единичного контейнера.
Знаю, что звучит дерьмово... Как альтернативу можно 2 кнопки сделать "записать стак", "достать стак" но такое...
 
917
22
332
стак исходного предмета, гуи которого открыто в данный момент у меня через бинд кнопки
Вот этого я не понимаю. Хз, мож я тупенький)
Типа у тебя есть предмет, который открывает gui, и это же gui можно открывать без предмета через какую-то кнопку на клавиатуре?
 

will0376

Токсичная личность
2,075
55
584
Типа у тебя есть предмет, который открывает gui, и это же gui можно открывать без предмета через какую-то кнопку на клавиатуре?
У меня есть список предметов, на которые МОЖНО открыть gui по бинду на клаве.
Говоря языком нубов: Мне надо повесить псевдо-контейнер на разные айтемы, не приспособленные под контейнер заранее.
 
7,099
324
1,510
Короче, ты пытаешься сделать сумку для предметов?
 
7,099
324
1,510

will0376

Токсичная личность
2,075
55
584
Используй капабилити ItemStackHandler
Вот в этом и беда, потому-что у меня: а) Предметы динамические(т.е. список ИДов, на которые я могу открыть ГУЙ);
б)доступа к этим предметам(для перезагрузки лоадинга/сейва НБТ) у меня нет.
Честно говоря, я уже по-другому реализовал поэтому пофиг.
 
7,099
324
1,510
ItemStackHandler все равно подходит для любых кейсов хранения предметов внутри других предметов. Сохранение капы в нбт происходит автоматически
 
Сверху