Инвентарь

1,202
31
185
Кто нибудь делал на 1.7.10 инвентарь по туториалу coolAlias?
Можете сделать слив кода? Дальше я его доработаю)
Просто не понятны некоторые моменты там, и не могу делать дальше.
 
929
30
66
В Weis mod есть инвентарь, по ищи его и возьми от туда.
 

timaxa007

Модератор
5,831
409
672
Кто нибудь делал на 1.7.10 инвентарь по туториалу coolAlias?
Если я правильно помню его код с сайта (а это было больше два или три, а может и четыре года назад), то у меня не удавалось правильно использовать его код. Т.е. не рабочий вариант у меня получился. Тогда знаний не было для этого.
А сейчас я сам могу написать. add_player_inventory.zip
Только этот пример открывает дополнительный инвентарь как сундук. Нету слотов брони крафта.
Я свой код слегка модифицировал, чтобы когда был сунут определённый предмет, давался эффект ночного зрения и рендерился определённый предмет (но в данном лучаи типа ПНВ должен был, но модели не было его, использовал модель шлема). Но вроде этого нету в том коде.
 

timaxa007

Модератор
5,831
409
672
Пожалуйста. У меня этот код давно валялся. Как нибудь постараюсь его сделать его получше, а вот "когда" я не знаю.
 

timaxa007

Модератор
5,831
409
672
Просто указываешь другое количества: с
Java:
public final InventoryBasic inventory = new InventoryBasic("inventory_add_player", false, 9 * 3);
на
Java:
public final InventoryBasic inventory = new InventoryBasic("inventory_add_player", false, 9 * 2);
--
Java:
        for (j = 0; j < 3; ++j) {
            for (k = 0; k < 9; ++k) {
на
Java:
        for (j = 0; j < 2; ++j) {
            for (k = 0; k < 9; ++k) {
и ещё с
Java:
            if (slotID < 3 * 9) {
                if (!this.mergeItemStack(itemstack1, 2 * 9, this.inventorySlots.size(), true)) {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, 2 * 9, false)) {
                return null;
            }
на
Java:
            if (slotID < 3 * 9) {
                if (!this.mergeItemStack(itemstack1, 2 * 9, this.inventorySlots.size(), true)) {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, 2 * 9, false)) {
                return null;
            }
---------
Я не создавал код для того, чтобы он был универсальным. Так как я ещё не достаточно знаю для создания своих Container'ов, особенно метод transferStackInSlot. Но думаю со временем всё-же пойму.
 
1,202
31
185
Прости забыл уточнить, убрать слоты в ванильном инвентаре. Или надо полностью свой инвентарь создавать?
И да, какой класс отвечает за слоты для брони? Или в классе Слот есть
 

timaxa007

Модератор
5,831
409
672
Прости забыл уточнить, убрать слоты в ванильном инвентаре.
Правильно удаление ванильного инвентаря, я не знаю. Но типа нужно использовать hook'и... Наверное, точно не знаю. Так как многое что может использовать ванильный инвентарь.
И да, какой класс отвечает за слоты для брони?
Отдельного класса не используется для этого, они находиться в контейнере net.minecraft.inventory.ContainerPlayer:
Java:
        for (i = 0; i < 4; ++i)
        {
            final int k = i;
            this.addSlotToContainer(new Slot(p_i1819_1_, p_i1819_1_.getSizeInventory() - 1 - i, 8, 8 + i * 18)
            {
                private static final String __OBFID = "CL_00001755";
                /**
                 * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1
                 * in the case of armor slots)
                 */
                public int getSlotStackLimit()
                {
                    return 1;
                }
                /**
                 * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
                 */
                public boolean isItemValid(ItemStack p_75214_1_)
                {
                    if (p_75214_1_ == null) return false;
                    return p_75214_1_.getItem().isValidArmor(p_75214_1_, k, thePlayer);
                }
                /**
                 * Returns the icon index on items.png that is used as background image of the slot.
                 */
                @SideOnly(Side.CLIENT)
                public IIcon getBackgroundIconIndex()
                {
                    return ItemArmor.func_94602_b(k);
                }
            });
        }
 
1,202
31
185
ааааа. Разве нельзя эвентом отменять ванильный инв и рендерить свой?
 

timaxa007

Модератор
5,831
409
672
Ну, типа у меня так и делается.
Java:
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onGuiOpenEvent(GuiOpenEvent event) {
        if (event.gui instanceof GuiInventory) {
            if (Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return;
            AddPlayerInventory.network.sendToServer(new MessageOpenInv());
            event.setCanceled(true);
        }
    }
И я подтверждаю слова @Thunder.
 

timaxa007

Модератор
5,831
409
672
Если для своего проекта, почему нет?
EntityItem ещё придётся переделать, чтобы они попадали не в ванильный инвентарь.
Так-же и другие условия, которые заставляют в ванильный инвентарь класться
player.inventory.addItemStackToInventory(itemstack)
То что у тебя будет открываться другой инвентарь, это не значит, что и ванильный не будет работать.
 
Сверху