From 9081089c2e47a20e4108ee322204e8c8dbde4169 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 27 Jan 2024 04:57:45 +0200 Subject: Add support for WAILA (specifically with WTHIT). --- src/main/java/lv/enes/mc/eris_alchemy/Emc.java | 14 +++++--------- .../java/lv/enes/mc/eris_alchemy/EmcStorage.java | 17 ----------------- .../mc/eris_alchemy/block/EmcStorageBlock.java | 18 ++++++++++++++++++ .../eris_alchemy/block/EnergyCondenserBlock.java | 5 ++--- .../block/entity/EmcStorageEntity.java | 6 ++++++ .../block/entity/EnergyCondenserEntity.java | 16 ++++++++++------ .../lv/enes/mc/eris_alchemy/waila/EmcProvider.java | 22 ++++++++++++++++++++++ .../lv/enes/mc/eris_alchemy/waila/WailaPlugin.java | 20 ++++++++++++++++++++ 8 files changed, 83 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/EmcStorage.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/block/EmcStorageBlock.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/block/entity/EmcStorageEntity.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/waila/EmcProvider.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/waila/WailaPlugin.java (limited to 'src/main/java/lv') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/Emc.java b/src/main/java/lv/enes/mc/eris_alchemy/Emc.java index 576fdc2..d278bcc 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/Emc.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/Emc.java @@ -2,6 +2,7 @@ package lv.enes.mc.eris_alchemy; import jakarta.annotation.Nullable; import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry.NetworkingConstants; +import lv.enes.mc.eris_alchemy.block.EmcStorageBlock; import lv.enes.mc.eris_alchemy.recipe.BannedRecipe; import lv.enes.mc.eris_alchemy.recipe.SimplifiedRecipe; import lv.enes.mc.eris_alchemy.utils.*; @@ -63,17 +64,12 @@ public final class Emc { return get(itemId) .stream() .map(value -> { - EmcStorage storage = null; - if (item instanceof EmcStorage emcStorage) { - storage = emcStorage; - } else if (item instanceof BlockItem blockItem) { - if (blockItem.getBlock() instanceof EmcStorage emcStorage) { - storage = emcStorage; + if (item instanceof BlockItem blockItem) { + if (blockItem.getBlock() instanceof EmcStorageBlock block) { + return value + block.getStoredEmc(stack); } } - if (storage != null) { - return value + storage.getStoredEmc(stack); - } + return value; }) .findFirst(); diff --git a/src/main/java/lv/enes/mc/eris_alchemy/EmcStorage.java b/src/main/java/lv/enes/mc/eris_alchemy/EmcStorage.java deleted file mode 100644 index 427a887..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/EmcStorage.java +++ /dev/null @@ -1,17 +0,0 @@ -package lv.enes.mc.eris_alchemy; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; - -public interface EmcStorage { - double getStoredEmc(ItemStack stack, CompoundTag blockEntityData); - - default double getStoredEmc(ItemStack stack) { - var blockEntityData = BlockItem.getBlockEntityData(stack); - if (blockEntityData == null) { - return 0; - } - return getStoredEmc(stack, blockEntityData); - } -} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/EmcStorageBlock.java b/src/main/java/lv/enes/mc/eris_alchemy/block/EmcStorageBlock.java new file mode 100644 index 0000000..8c0b93e --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/EmcStorageBlock.java @@ -0,0 +1,18 @@ +package lv.enes.mc.eris_alchemy.block; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; + +// TODO: Somehow make this be an automatic thing depending on the EmcStorageEntity or something +public interface EmcStorageBlock { + double getStoredEmc(CompoundTag blockEntityData); + + default double getStoredEmc(ItemStack stack) { + var bed = BlockItem.getBlockEntityData(stack); + if (bed == null) { + return 0; + } + return getStoredEmc(bed); + } +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/EnergyCondenserBlock.java b/src/main/java/lv/enes/mc/eris_alchemy/block/EnergyCondenserBlock.java index af58fc6..19eb681 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/block/EnergyCondenserBlock.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/EnergyCondenserBlock.java @@ -3,7 +3,6 @@ package lv.enes.mc.eris_alchemy.block; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import lv.enes.mc.eris_alchemy.Emc; -import lv.enes.mc.eris_alchemy.EmcStorage; import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; import lv.enes.mc.eris_alchemy.block.entity.EnergyCondenserEntity; import net.minecraft.core.BlockPos; @@ -17,7 +16,7 @@ import net.minecraft.world.level.block.state.BlockState; import java.util.List; -public class EnergyCondenserBlock extends ChestLikeBlock implements EmcStorage { +public class EnergyCondenserBlock extends ChestLikeBlock implements EmcStorageBlock { public static final Component CONTAINER_TITLE = Component.translatable("container.eris_alchemy.energy_condenser"); @@ -44,7 +43,7 @@ public class EnergyCondenserBlock extends ChestLikeBlock } @Override - public double getStoredEmc(ItemStack stack, CompoundTag blockEntityData) { + public double getStoredEmc(CompoundTag blockEntityData) { return blockEntityData.getDouble("stored_emc"); } diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EmcStorageEntity.java b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EmcStorageEntity.java new file mode 100644 index 0000000..465e743 --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EmcStorageEntity.java @@ -0,0 +1,6 @@ +package lv.enes.mc.eris_alchemy.block.entity; + +public interface EmcStorageEntity { + double getMaxEmc(); + double getStoredEmc(); +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EnergyCondenserEntity.java b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EnergyCondenserEntity.java index 33a6250..105e9e3 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EnergyCondenserEntity.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/EnergyCondenserEntity.java @@ -25,7 +25,7 @@ import org.quiltmc.loader.api.minecraft.ClientOnly; import java.util.stream.IntStream; -public class EnergyCondenserEntity extends ChestLikeEntity implements ExtendedScreenHandlerFactory { +public class EnergyCondenserEntity extends ChestLikeEntity implements EmcStorageEntity, ExtendedScreenHandlerFactory { private final static int WIDTH = 13; private final static int HEIGHT = 7; @@ -49,6 +49,11 @@ public class EnergyCondenserEntity extends ChestLikeEntity implements ExtendedSc return items; } + @Override + public double getMaxEmc() { + return Emc.get(items.get(0)).orElse(Double.POSITIVE_INFINITY); + } + @ClientOnly @Nonnull public Material getMaterial() { @@ -61,6 +66,7 @@ public class EnergyCondenserEntity extends ChestLikeEntity implements ExtendedSc return Blocks.ENERGY_CONDENSER; } + @Override public double getStoredEmc() { return storedEmc.getValue(); } @@ -89,11 +95,9 @@ public class EnergyCondenserEntity extends ChestLikeEntity implements ExtendedSc @Override public void tick(Level world, BlockPos pos, BlockState state) { super.tick(world, pos, state); - Emc.get(items.get(0)).ifPresent(cost -> { - tryConsumeEmc(cost); - tryCloneTemplate(cost); - }); - + var cost = getMaxEmc(); + tryConsumeEmc(cost); + tryCloneTemplate(cost); this.storedEmc.syncIfChanged(ContainerOpenersCounterUtil.getOpeners(openersCounter)); } diff --git a/src/main/java/lv/enes/mc/eris_alchemy/waila/EmcProvider.java b/src/main/java/lv/enes/mc/eris_alchemy/waila/EmcProvider.java new file mode 100644 index 0000000..190ebbe --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/waila/EmcProvider.java @@ -0,0 +1,22 @@ +package lv.enes.mc.eris_alchemy.waila; + +import lv.enes.mc.eris_alchemy.block.entity.EmcStorageEntity; +import mcp.mobius.waila.api.IDataProvider; +import mcp.mobius.waila.api.IDataWriter; +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.IServerAccessor; +import mcp.mobius.waila.api.data.EnergyData; +import net.minecraft.world.level.block.entity.BlockEntity; + +public enum EmcProvider implements IDataProvider { + INSTANCE; + + @Override + public void appendData(IDataWriter data, IServerAccessor accessor, IPluginConfig config) { + data.add(EnergyData.class, res -> { + if (accessor.getTarget() instanceof EmcStorageEntity storage) { + res.add(EnergyData.of(storage.getStoredEmc(), storage.getMaxEmc())); + } + }); + } +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/waila/WailaPlugin.java b/src/main/java/lv/enes/mc/eris_alchemy/waila/WailaPlugin.java new file mode 100644 index 0000000..db797bf --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/waila/WailaPlugin.java @@ -0,0 +1,20 @@ +package lv.enes.mc.eris_alchemy.waila; + +import lv.enes.mc.eris_alchemy.ErisAlchemy; +import mcp.mobius.waila.api.IRegistrar; +import mcp.mobius.waila.api.IWailaPlugin; +import mcp.mobius.waila.api.data.EnergyData; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.entity.BlockEntity; + +@SuppressWarnings("unused") +public class WailaPlugin implements IWailaPlugin { + @Override + public void register(IRegistrar registrar) { + registrar.addBlockData(EmcProvider.INSTANCE, BlockEntity.class); + + EnergyData.describe(ErisAlchemy.ID) + .name(Component.translatable("gui.eris_alchemy.stored_emc")) + .unit(""); + } +} -- cgit v1.2.3