Meldexun Posted April 5, 2019 Posted April 5, 2019 (edited) I want to create an extra inventory slot for the player. But i can't use the slot when the GUI is opened. I think it has to do with how i use the capability. Also I'm not that much familiar with capabilities . Provider: Reveal hidden contents public class ExtraSlotProvider implements ICapabilitySerializable<NBTBase> { @CapabilityInject(IItemHandler.class) public static final Capability<IItemHandler> EXTRA_SLOT = null; private IItemHandler instance = new ItemStackHandler(1); @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { return capability == EXTRA_SLOT; } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { return capability == EXTRA_SLOT ? EXTRA_SLOT.<T> cast(this.instance) : null; } @Override public NBTBase serializeNBT() { return EXTRA_SLOT.getStorage().writeNBT(EXTRA_SLOT, this.instance, null); } @Override public void deserializeNBT(NBTBase nbt) { EXTRA_SLOT.getStorage().readNBT(EXTRA_SLOT, this.instance, null, nbt); } } Attach Capabilies: Reveal hidden contents @EventBusSubscriber public class SQUATEventHandler { public static final ResourceLocation EXTRA_SLOT = new ResourceLocation(TEST_MOD.MOD_ID, "extra_slot"); @SubscribeEvent public static void attachCapability(AttachCapabilitiesEvent<Entity> event) { if (event.getObject() instanceof EntityPlayer) { event.addCapability(EXTRA_SLOT, new ExtraSlotProvider()); } } } Container: Reveal hidden contents public ContainerFlightInventory(InventoryPlayer playerInv) { IItemHandler inventory = playerInv.player.getCapability(ExtraSlotProvider.EXTRA_SLOT, null); int slot = 0; for (int k = 0; k < 9; k++) { addSlotToContainer(new Slot(playerInv, slot++, 8 + k * 18, 142)); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { addSlotToContainer(new Slot(playerInv, slot++, 8 + j * 18, 84 + i * 18)); } } for (int l = 0; l < 4; l++) { addSlotToContainer(new Slot(playerInv, slot++, 8, 62 - l * 18)); } addSlotToContainer(new Slot(playerInv, slot++, 77, 62)); //extra slot addSlotToContainer(new SlotItemHandler(inventory, slot++, 152, 8)); } Any help is appreciated. Edited April 11, 2019 by Meldexun Quote
V0idWa1k3r Posted April 11, 2019 Posted April 11, 2019 You haven't provided neither enough of your code nor a better description of your issue. What does "can't use the slot" mean? Is it not physically there? Can you not put anything in it? Is it not saved? We need more details than a simple "doesn't work". As for your capability code it's fine. You don't need a field for the capability though, forge already provides one. Your container slot ID is wrong. Since this is slot 0 in your inventory it's ID should also be 0. IDs are relative to the inventory, not the slot's index. See any vanilla's container for an example. Quote
Meldexun Posted April 11, 2019 Author Posted April 11, 2019 On 4/11/2019 at 8:52 PM, V0idWa1k3r said: You haven't provided neither enough of your code nor a better description of your issue. What does "can't use the slot" mean? Is it not physically there? Can you not put anything in it? Is it not saved? We need more details than a simple "doesn't work". Expand Ok, i'm sorry that really is a bad description... So the GUI shows up with all the normal inventory slots of the player and i can use them normally. But when i hover over my extra slot it makes that white overlay. So the slot is there but i can't put any item in it. What other code do you want to see? On 4/11/2019 at 8:52 PM, V0idWa1k3r said: Your container slot ID is wrong. Since this is slot 0 in your inventory it's ID should also be 0. IDs are relative to the inventory, not the slot's index. See any vanilla's container for an example. Expand I have also thought that but when i change the ID to 0 my extra slot is just a copy of the vanilla inventory slot with the ID 0. Quote
V0idWa1k3r Posted April 11, 2019 Posted April 11, 2019 On 4/11/2019 at 9:22 PM, Meldexun said: I have also thought that but when i change the ID to 0 my extra slot is just a copy of the vanilla inventory slot with the ID 0. Expand This happens because this On 4/5/2019 at 6:21 PM, Meldexun said: IItemHandler inventory = playerInv.player.getCapability(ExtraSlotProvider.EXTRA_SLOT, null); Expand returns the player's base inventory. In this case you need a custom capability class and you can't use the default IItemHandler(or rather you can't use the capability instance injected into the field that expects a IItemHalder capability). I think you can just make an extension of ItemStackHandler and register it separately and use it as your capability. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.