53 lines
1.9 KiB
Java
53 lines
1.9 KiB
Java
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<ItemStack> 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);
|
|
}
|
|
}
|