package com.thebrokenrail.twine.util.boat; import com.google.common.collect.Lists; import com.thebrokenrail.twine.util.boat.gui.BoatCraftingScreenHandler; import net.minecraft.block.Blocks; import net.minecraft.block.EnderChestBlock; import net.minecraft.block.ShulkerBoxBlock; import net.minecraft.block.entity.BarrelBlockEntity; import net.minecraft.block.entity.ChestBlockEntity; import net.minecraft.block.entity.ShulkerBoxBlockEntity; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.ShulkerBoxScreenHandler; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.DyeColor; import java.util.List; import java.util.function.Function; public class BoatChestModes { public static final BoatChestMode NONE = new BoatChestMode(Blocks.AIR, null, null, null, null); static void register() { new BoatChestMode(Blocks.ENDER_CHEST, (i, playerInventory, playerEntity, boat, inventoryWrapper) -> GenericContainerScreenHandler.createGeneric9x3(i, playerInventory, inventoryWrapper.apply(playerEntity.getEnderChestInventory())), stack -> EnderChestBlock.CONTAINER_NAME, SoundEvents.BLOCK_ENDER_CHEST_OPEN, SoundEvents.BLOCK_ENDER_CHEST_CLOSE); BoatChestMode.BoatScreenHandlerFactory chestScreenHandler = (i, playerInventory, playerEntity, boat, inventoryWrapper) -> GenericContainerScreenHandler.createGeneric9x3(i, playerInventory, boat.getChestInventory()); ChestBlockEntity chest = new ChestBlockEntity(); Function chestScreenHandlerName = stack -> stack.hasCustomName() ? stack.getName() : chest.getName(); new BoatChestMode(Blocks.CHEST, true, false, 27, chestScreenHandler, chestScreenHandlerName, SoundEvents.BLOCK_CHEST_OPEN, SoundEvents.BLOCK_CHEST_CLOSE); new BoatChestMode(Blocks.TRAPPED_CHEST, true, false, 27, chestScreenHandler, chestScreenHandlerName, SoundEvents.BLOCK_CHEST_OPEN, SoundEvents.BLOCK_CHEST_CLOSE); BarrelBlockEntity barrel = new BarrelBlockEntity(); Function barrelScreenHandlerName = stack -> stack.hasCustomName() ? stack.getName() : barrel.getName(); new BoatChestMode(Blocks.BARREL, true, false, 27, chestScreenHandler, barrelScreenHandlerName, SoundEvents.BLOCK_BARREL_OPEN, SoundEvents.BLOCK_BARREL_CLOSE); ShulkerBoxBlockEntity shulker = new ShulkerBoxBlockEntity(); List colors = Lists.asList(null, DyeColor.values()); for (DyeColor value : colors) { new BoatChestMode(ShulkerBoxBlock.get(value), true, true, 27, (i, playerInventory, playerEntity, boat, inventoryWrapper) -> new ShulkerBoxScreenHandler(i, playerInventory, boat.getChestInventory()), stack -> stack.hasCustomName() ? stack.getName() : shulker.getName(), SoundEvents.BLOCK_SHULKER_BOX_OPEN, SoundEvents.BLOCK_SHULKER_BOX_CLOSE); } new BoatChestMode(Blocks.CRAFTING_TABLE, (i, playerInventory, playerEntity, boat, inventoryWrapper) -> { BoatChestMode mode = boat.getChestMode(); return new BoatCraftingScreenHandler(i, playerInventory, player -> BoatUtil.canPlayerUse(player, (Entity) boat, mode)); }, stack -> new TranslatableText("container.crafting"), null, null); } }