Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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:

Spoiler

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:

Spoiler

@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:

Spoiler

	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 by Meldexun

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.

  • Author
23 minutes ago, 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".

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?

 

27 minutes ago, 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. 

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.

6 minutes ago, 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.

This happens because this

On 4/5/2019 at 9:21 PM, Meldexun said:

IItemHandler inventory = playerInv.player.getCapability(ExtraSlotProvider.EXTRA_SLOT, null);

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.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.