diff --git a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java index 433452f..693582d 100644 --- a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java +++ b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java @@ -19,6 +19,7 @@ import robaertschi.environmenttech.data.attachments.ETAttachments; import robaertschi.environmenttech.data.capabilities.ETCapabilities; import robaertschi.environmenttech.data.recipes.ETRecipes; import robaertschi.environmenttech.level.block.ETBlocks; +import robaertschi.environmenttech.level.block.entity.ETBlockEntities; import robaertschi.environmenttech.level.item.ETItems; @Mod(EnvironmentTech.MODID) @@ -39,11 +40,12 @@ public class EnvironmentTech modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); - ETAttachments.init(modEventBus); - ETCapabilities.init(modEventBus); ETBlocks.init(modEventBus); + ETBlockEntities.init(modEventBus); ETItems.init(modEventBus); ETRecipes.init(modEventBus); + ETAttachments.init(modEventBus); + ETCapabilities.init(modEventBus); NeoForge.EVENT_BUS.register(this); diff --git a/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java b/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java index 93c0e33..1f2ff40 100644 --- a/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java +++ b/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java @@ -2,8 +2,10 @@ package robaertschi.environmenttech.data.capabilities; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.capabilities.BlockCapability; +import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import robaertschi.environmenttech.EnvironmentTech; +import robaertschi.environmenttech.level.block.entity.ETBlockEntities; public class ETCapabilities { public static final BlockCapability ENV_STORAGE_BLOCK = @@ -17,6 +19,17 @@ public class ETCapabilities { } private static void registerCapabilities(RegisterCapabilitiesEvent event) { + event.registerBlockEntity( + Capabilities.ItemHandler.BLOCK, + ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(), + (object, context) -> object.getInventory() + ); + event.registerBlockEntity( + ENV_STORAGE_BLOCK, + ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(), + (object, context) -> object.getEnvStorage() + ); } + } diff --git a/src/main/java/robaertschi/environmenttech/data/capabilities/EnvStorage.java b/src/main/java/robaertschi/environmenttech/data/capabilities/EnvStorage.java index 89c68b6..dab5588 100644 --- a/src/main/java/robaertschi/environmenttech/data/capabilities/EnvStorage.java +++ b/src/main/java/robaertschi/environmenttech/data/capabilities/EnvStorage.java @@ -34,8 +34,10 @@ public class EnvStorage implements IEnvStorage { @Override public long receiveEnv(long amount, boolean simulate) { long received = Mth.clamp(this.maxEnv - this.env, 0, Math.min(amount, maxTransfer)); - if (!simulate) + if (!simulate) { + onContentsChanged(); env += received; + } return received; } @@ -45,6 +47,10 @@ public class EnvStorage implements IEnvStorage { return env; } + public void setEnvStored(long env) { + this.env = env; + } + @Override public long getMaxEnv() { return maxEnv; @@ -54,4 +60,6 @@ public class EnvStorage implements IEnvStorage { public EnvType[] canAcceptEnvType() { return acceptedEnvTypes; } + + public void onContentsChanged() {} } diff --git a/src/main/java/robaertschi/environmenttech/data/capabilities/IEnvStorage.java b/src/main/java/robaertschi/environmenttech/data/capabilities/IEnvStorage.java index 2d36860..967041b 100644 --- a/src/main/java/robaertschi/environmenttech/data/capabilities/IEnvStorage.java +++ b/src/main/java/robaertschi/environmenttech/data/capabilities/IEnvStorage.java @@ -17,6 +17,7 @@ public interface IEnvStorage { long getEnvStored(); long getMaxEnv(); + /** * @return Which ENVType's that are supported. */ diff --git a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java index e1c4e4d..92c8769 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java +++ b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java @@ -1,11 +1,40 @@ package robaertschi.environmenttech.level.block.entity; +import lombok.Getter; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.items.ItemStackHandler; +import org.jetbrains.annotations.NotNull; +import robaertschi.environmenttech.data.capabilities.EnvStorage; +import robaertschi.environmenttech.data.capabilities.EnvType; + +import static robaertschi.environmenttech.EnvironmentTech.MODID; public class EnvCollectorBlockEntity extends BlockEntity { + + @Getter + private final ItemStackHandler inventory = new ItemStackHandler(2) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + EnvCollectorBlockEntity.this.setChanged(); + } + }; + + @Getter + private final EnvStorage envStorage = new EnvStorage(EnvType.Chunk, 64, 0, 1) { + @Override + public void onContentsChanged() { + super.onContentsChanged(); + EnvCollectorBlockEntity.this.setChanged(); + } + }; + private int progress = 0; @@ -13,6 +42,40 @@ public class EnvCollectorBlockEntity extends BlockEntity { super(ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(), pos, state); } + @Override + protected void loadAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider provider) { + super.loadAdditional(pTag, provider); + CompoundTag modData = pTag.getCompound(MODID); + this.inventory.deserializeNBT(provider, modData.getCompound("Inventory")); + this.envStorage.setEnvStored(modData.getLong("ENV")); + } + + @Override + protected void saveAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider provider) { + super.saveAdditional(pTag, provider); + CompoundTag modData = new CompoundTag(); + modData.put("Inventory", inventory.serializeNBT(provider)); + modData.putLong("ENV", envStorage.getEnvStored()); + pTag.put(MODID, modData); + } + + public ItemStack getInputItem() { + return this.inventory.getStackInSlot(0); + } + + public ItemStack getOutputItem() { + return this.inventory.getStackInSlot(1); + } + + public void setInputItem(ItemStack itemStack) { + this.inventory.setStackInSlot(0, itemStack); + } + + + public void setOutputItem(ItemStack itemStack) { + this.inventory.setStackInSlot(1, itemStack); + } + public static void tick(Level level, BlockPos blockPos, BlockState blockState, EnvCollectorBlockEntity envCollectorBlockEntity) { }