53 lines
3.3 KiB
Java
53 lines
3.3 KiB
Java
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<ItemStack, Text> 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<ItemStack, Text> 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<DyeColor> 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);
|
|
}
|
|
}
|