Дополнительные слоты для инвентаря

svk

1,185
3
Добрый день.

1 - Хочу сделать новые слоты типа брони (Надеть амулет, скажем так). Хотелось бы узнать, как добавить слоты поверх инвентаря игрока или заменить его на свой.
 
Код:
Интересный вопрос, но никогда не делал
Попробуй открыть class файлы в Eclipse или в idia из мода Wildicraft помоему там че то такое было...
Как нибудь постараюсь сделать, а так извини не могу, может другие пользователи знают, пока что то никто помогать не хочет☺
 
1. Ловишь событие открытия GUI (GuiOpenEvent), подменяешь на свой, рисуешь новый бэкграунд со своими слотами.
[1.6.4] Пример:

Код:
@ForgeSubscribe
    public void guiOpened(GuiOpenEvent event) {
        if (event.gui instanceof GuiInventory) {
            event.gui = new GuiInventoryBackpack(mc.thePlayer);
        }
    }

Чтобы добавить слот, придётся исхитриться. Нужно ловить событие entityJoinWorld, к примеру, проверять, игрок ли это, и если да - добавлять ему новые слоты костылём. Пример:
Код:
Slot slot = new SlotBackpackMain(properties.inventory, 0, 186, 13);
slot.slotNumber = player.inventoryContainer.inventorySlots.size();
player.inventoryContainer.inventorySlots.add(slot);
Таким образом добавили слот (нового элемента брони, к примеру). Нужно подгрузить сохранённый предмет из НБТ?

Код:
player.inventoryContainer.inventoryItemStacks.add(myItemStack);
Где myItemStack подгружается из NBT. Такое действие лучше всего выполнять либо в том же месте, где и добавление слота, обращаясь к IExtendedEntityProperties (где мы храним все предметы в IInventory), либо при подгрузке NBT в IExtendedEntityProperties. 

2. Нарушаешь правила. Нафига я настрочил огромную простыню из правил? Одна тема - один вопрос. Сказано же.
 
Heitem написал(а):
Код:
Интересный вопрос, но никогда не делал
Попробуй открыть class файлы в Eclipse или в idia из мода Wildicraft помоему там че то такое было...
Как нибудь постараюсь сделать, а так извини не могу, может другие пользователи знают, пока что то никто помогать не хочет☺
Ещё раз напишешь абсолютно бесполезный совет, да ещё в теге Code - полетишь в бан на день. Тег Code предназначен для кода, а не для обычного сообщения.
 
Нет. А с чего бы ему? Откуда он знает, сохраться ли ему или нет? 
В IExtendedEntityProperties имеем, к примеру:
Код:
public IInventory inventory;

Инициализируется так:
Код:
inventory = new InventoryBasic("backpack_inv", false, 19);
В saveNBTData перебираешь все предметы из этого инвентаря и сохраняешь их.
В loadNBTData создаешь инвентарь заново и закидываешь туда все предметы из NBT. Потом, при перехвате события entityJoinWorld вытаскиваешь нужный предмет напрямую из инвентаря, когда он уже будет подгружен, и кидаешь в слот игроку.
 
Oldeskon, ☺☺
 
Назад
Сверху