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

Версия Minecraft
1.12.2

will0376

Токсичная личность
2,174
56
651
Здрасть. Мне необходимо написать гуишку, которая бы записывала НБТ в предмет при перемещении в слот, вроде всё реализовал, но остаётся вопрос: как впервые положить предмет правильно? Как его забрать правильно?(чуть более правильный вопрос: как записать НБТ предмета во второй, без сохранения его в контейнере?)
Мб есть другой способ записи нужного предмета в динамический список предметов(ванила/моды/етк)?
Слот:
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;
    }
Я знаю, что можно просто удалять предмет в момент трансфера... Но это не мой путь(во всяком случае, сделаю так если ничего другого не придумаю)
 
Ты хочешь записывать nbt в стак, если он (стак) был перемещён из одного слота инвентаря в другой, при этом, если стак впервые попал в инвентарь - то ничего не записывать?
А когда забираешь стак, удалять из него nbt?
 
Я хочу записывать нбт в стак исходного предмета, гуи которого открыто в данный момент у меня через бинд кнопки + player.opengui. Т.е. сейчас есть контейнер, но на все динамические предметы - он один... что недопустимо.
Хотелось бы записывать нбт в стак в момент трансфера другого айтемстака в слот. + читать его оттуда, показывая при открытии... Т.е. сделать кастомный контейнер на основе НБТ и единичного контейнера.
Знаю, что звучит дерьмово... Как альтернативу можно 2 кнопки сделать "записать стак", "достать стак" но такое...
 
стак исходного предмета, гуи которого открыто в данный момент у меня через бинд кнопки
Вот этого я не понимаю. Хз, мож я тупенький)
Типа у тебя есть предмет, который открывает gui, и это же gui можно открывать без предмета через какую-то кнопку на клавиатуре?
 
Типа у тебя есть предмет, который открывает gui, и это же gui можно открывать без предмета через какую-то кнопку на клавиатуре?
У меня есть список предметов, на которые МОЖНО открыть gui по бинду на клаве.
Говоря языком нубов: Мне надо повесить псевдо-контейнер на разные айтемы, не приспособленные под контейнер заранее.
 
Короче, ты пытаешься сделать сумку для предметов?
 
Используй капабилити ItemStackHandler
Вот в этом и беда, потому-что у меня: а) Предметы динамические(т.е. список ИДов, на которые я могу открыть ГУЙ);
б)доступа к этим предметам(для перезагрузки лоадинга/сейва НБТ) у меня нет.
Честно говоря, я уже по-другому реализовал поэтому пофиг.
 
ItemStackHandler все равно подходит для любых кейсов хранения предметов внутри других предметов. Сохранение капы в нбт происходит автоматически
 
Назад
Сверху