Posted November 15, 20213 yr I need help with using a capability to save/load slots in my custom inventory. I know that I would need to Use SlotItemHandler for the slots and the ItemHandler would be the capability: Player player = playerInventory.player; IItemHandler itemHandlerModifiable = player.getCapability(/*Capabiltiy here*/, null).orElseThrow(() -> new NullPointerException("Capability<InvCapability> is null")); How would I make a capability for this or does forge have one that I can use.
November 15, 20213 yr you don't need a custom Capability, you could use Forge's ItemHandlerCapability
November 15, 20213 yr Author Just as I thought... How would I use ItemHandlerCapability for the container? Edit: I cant find ItemHandlerCapability class. Edited November 15, 20213 yr by UserMC123
November 15, 20213 yr Author Edit Again I got it working with public static Capability<IItemHandler> ITEM_HANDLER_CAPABILITY = CapabilityManager.get(new CapabilityToken<>(){}); but now the slots are filled with items in the hotbar slots.
November 15, 20213 yr ups, haven't seen that your create a Backpack, means you can't use the ItemHandlerCapability since the Capability is already attached to the Player but you could create a Capability which is similar to the ItemHandlerCapability
November 15, 20213 yr Author Ok here is my capability classes My Capability: Spoiler @Mod.EventBusSubscriber(modid = TestMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class AstroInvCapability extends ItemStackHandler implements IAstroInv { public AstroInvCapability(int size) { super(size); } @CapabilityInject(IAstroInv.class) public static Capability<IAstroInv> SPELL = null; public static void register() { CapabilityManager.INSTANCE.register(IAstroInv.class); } @Override public CompoundTag serializeNBT() { CompoundTag nbt = new CompoundTag(); return nbt; } @Override public void deserializeNBT(CompoundTag nbt) { } } My Provider: Spoiler public class AstroInvProvider implements ICapabilitySerializable<CompoundTag> { private final AstroInvCapability instance = new AstroInvCapability(8); private final LazyOptional<IAstroInv> invLazyOptional = LazyOptional.of(() -> instance); @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return invLazyOptional.cast(); } public void invalidate() { invLazyOptional.invalidate(); } @Override public CompoundTag serializeNBT() { return instance.serializeNBT(); } @Override public void deserializeNBT(CompoundTag nbt) { instance.deserializeNBT(nbt); } } And my IAstroInv just extends IItemHandlerModifiable And it works... Until I quit the game and the items are no longer in the slots. How do I fix the items disappearing after I quit the game? Edit: I'm an idiot and I forgot to add super.serializeNBT(); and super.deserializeNBT(nbt); . And last question how do I have the player drop all the items on death? Edited November 15, 20213 yr by UserMC123
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.