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

  • Author

Just as I thought...

How would I use ItemHandlerCapability for the container?

 

Edit: I cant find ItemHandlerCapability class.

Edited by UserMC123

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

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

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

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.