Jump to content

{SOLVED} [1.17.1] - Capability In a back pack inventory.


Recommended Posts

Posted

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.

Posted (edited)

Just as I thought...

How would I use ItemHandlerCapability for the container?

 

Edit: I cant find ItemHandlerCapability class.

Edited by UserMC123
Posted

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.

Posted

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

Posted (edited)

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 by UserMC123
  • UserMC123 changed the title to {SOLVED} [1.17.1] - Capability In a back pack inventory.

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...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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