package com.thebrokenrail.twine.item; import com.thebrokenrail.twine.Twine; import com.thebrokenrail.twine.util.BackpackScreenHandler; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.DyeableItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; public class BackpackItem extends Item implements DyeableItem { private final boolean large; public BackpackItem(boolean large) { super(new Settings().maxCount(1).group(Twine.ITEM_GROUP)); this.large = large; } @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack stack = user.getStackInHand(hand); if (!world.isClient()) { user.openHandledScreen(new ExtendedScreenHandlerFactory() { @Override public void writeScreenOpeningData(ServerPlayerEntity serverPlayerEntity, PacketByteBuf buf) { buf.writeBoolean(large); buf.writeEnumConstant(hand); } @Override public Text getDisplayName() { return stack.getName(); } @Override public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) { return new BackpackScreenHandler(syncId, inv, large, hand); } }); } return new TypedActionResult<>(ActionResult.CONSUME, stack); } }