This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Twine/src/main/java/com/thebrokenrail/twine/util/boat/BoatChestMode.java

118 lines
3.6 KiB
Java

package com.thebrokenrail.twine.util.boat;
import net.minecraft.block.Block;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvent;
import net.minecraft.text.Text;
import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Function;
public class BoatChestMode {
public interface BoatScreenHandlerFactory {
ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player, BoatUtil boat, Function<Inventory, Inventory> inventoryWrapper);
}
private static final ArrayList<BoatChestMode> values = new ArrayList<>();
private final Block block;
private final boolean hasItems;
private final boolean containsItems;
private final int size;
private final BoatScreenHandlerFactory screenHandlerFactory;
private final Function<ItemStack, Text> screenHandlerNameFactory;
private final Consumer<ServerPlayerEntity> advancementTrigger;
private final int id;
private final SoundEvent openSound;
private final SoundEvent closeSound;
BoatChestMode(Block block, boolean hasItems, boolean containsItems, int size, BoatScreenHandlerFactory screenHandlerFactory, Function<ItemStack, Text> screenHandlerNameFactory, Consumer<ServerPlayerEntity> advancementTrigger, SoundEvent openSound, SoundEvent closeSound) {
this.screenHandlerFactory = screenHandlerFactory;
this.size = size;
this.screenHandlerNameFactory = screenHandlerNameFactory;
this.advancementTrigger = advancementTrigger;
this.openSound = openSound;
this.closeSound = closeSound;
this.id = values.size();
this.block = block;
this.hasItems = hasItems;
this.containsItems = containsItems;
values.add(this);
}
public BoatChestMode(Block block, BoatScreenHandlerFactory screenHandlerFactory, Function<ItemStack, Text> screenHandlerNameFactory, Consumer<ServerPlayerEntity> advancementTrigger, SoundEvent openSound, SoundEvent closeSound) {
this(block, false, false, 0, screenHandlerFactory, screenHandlerNameFactory, advancementTrigger, openSound, closeSound);
}
public int getSize() {
return size;
}
public BoatScreenHandlerFactory getScreenHandlerFactory() {
return screenHandlerFactory;
}
public Text getScreenHandlerName(ItemStack stack) {
return screenHandlerNameFactory.apply(stack);
}
public void triggerAdvancement(ServerPlayerEntity player) {
if (advancementTrigger != null) {
advancementTrigger.accept(player);
}
}
public SoundEvent getOpenSound() {
return openSound;
}
public SoundEvent getCloseSound() {
return closeSound;
}
public Block getBlock() {
return block;
}
public boolean hasItems() {
return hasItems;
}
public boolean containsItems() {
return containsItems;
}
public int getID() {
return id;
}
public static BoatChestMode valueOf(Block block) {
for (BoatChestMode mode : values) {
if (mode.getBlock() == block) {
return mode;
}
}
return BoatChestModes.NONE;
}
public static BoatChestMode valueOf(int index) {
BoatChestMode mode = values.get(index);
return mode != null ? mode : BoatChestModes.NONE;
}
static {
BoatChestModes.register();
}
}