diff --git a/gradle.properties b/gradle.properties index d2b9f4d..4bea59f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ minecraftVersion=1.20.6 # as they do not follow standard versioning conventions. minecraftVersionRange=[1.20.6,1.21) # The Neo version must agree with the Minecraft version to get a valid artifact -neoVersion=20.6.113-beta +neoVersion=20.6.115 # The Neo version range can use any version of Neo as bounds neoVersionRange=[20,) # The loader version range can only use the major version of FML as bounds diff --git a/src/main/java/robaertschi/environmenttech/level/block/ETBlocks.java b/src/main/java/robaertschi/environmenttech/level/block/ETBlocks.java index 93acf1c..0244414 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/ETBlocks.java +++ b/src/main/java/robaertschi/environmenttech/level/block/ETBlocks.java @@ -13,6 +13,7 @@ public class ETBlocks { // Creates a new Block with the id "environmenttech:example_block", combining the namespace and path // public static final DeferredBlock EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE)); public static final DeferredBlock ENV_COLLECTOR_BLOCK = BLOCKS.registerBlock("env_collector", EnvCollectorBlock::new, BlockBehaviour.Properties.of()); + public static final DeferredBlock ENV_DISTRIBUTOR_BLOCK =BLOCKS.registerBlock("env_distributor", EnvDistributorBlock::new, BlockBehaviour.Properties.of()); public static void init(IEventBus iEventBus) { diff --git a/src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java b/src/main/java/robaertschi/environmenttech/level/block/EnvDistributorBlock.java similarity index 86% rename from src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java rename to src/main/java/robaertschi/environmenttech/level/block/EnvDistributorBlock.java index c483e68..70326ce 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java +++ b/src/main/java/robaertschi/environmenttech/level/block/EnvDistributorBlock.java @@ -7,19 +7,21 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; import org.jetbrains.annotations.Nullable; -public class EnvDistributor extends BaseEntityBlock { +public class EnvDistributorBlock extends BaseEntityBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; - public static final MapCodec CODEC = simpleCodec(EnvDistributor::new); + public static final MapCodec CODEC = simpleCodec(EnvDistributorBlock::new); - public EnvDistributor(Properties pProperties) { + public EnvDistributorBlock(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/robaertschi/environmenttech/level/block/entity/ETBlockEntities.java b/src/main/java/robaertschi/environmenttech/level/block/entity/ETBlockEntities.java index 983ad78..35cd784 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/entity/ETBlockEntities.java +++ b/src/main/java/robaertschi/environmenttech/level/block/entity/ETBlockEntities.java @@ -6,6 +6,7 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import robaertschi.environmenttech.level.block.ETBlocks; +import robaertschi.environmenttech.level.block.EnvDistributorBlock; import static robaertschi.environmenttech.EnvironmentTech.MODID; @@ -18,6 +19,10 @@ public class ETBlockEntities { () -> BlockEntityType.Builder.of(EnvCollectorBlockEntity::new, ETBlocks.ENV_COLLECTOR_BLOCK.get()).build(null)); + public static final DeferredHolder, BlockEntityType> ENV_DISTRIBUTOR_BLOCK_ENTITY = + BLOCK_ENTITIES.register("env_distributor", + () -> BlockEntityType.Builder.of(EnvDistributorBlockEntity::new, ETBlocks.ENV_DISTRIBUTOR_BLOCK.get()).build(null)); + public static void init(IEventBus iEventBus) { BLOCK_ENTITIES.register(iEventBus); } 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 d9da3b3..960693f 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java +++ b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java @@ -223,8 +223,6 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider } } - - } private void produce(ServerLevel level) { diff --git a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvDistributorBlockEntity.java b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvDistributorBlockEntity.java new file mode 100644 index 0000000..124fdae --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvDistributorBlockEntity.java @@ -0,0 +1,66 @@ +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.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; +import org.jetbrains.annotations.NotNull; +import robaertschi.environmenttech.data.attachments.ETAttachments; +import robaertschi.environmenttech.data.capabilities.EnvStorage; +import robaertschi.environmenttech.data.capabilities.EnvType; +import robaertschi.environmenttech.data.components.ETComponents; + +import javax.annotation.ParametersAreNonnullByDefault; + +import static robaertschi.environmenttech.EnvironmentTech.MODID; + +@Getter +@ParametersAreNonnullByDefault +public class EnvDistributorBlockEntity extends BlockEntity { + + public static final String ENV_TAG = "Env"; + private final EnvStorage envStorage = new EnvStorage(EnvType.Chunk, 64) { + @Override + public void onContentsChanged() { + EnvDistributorBlockEntity.this.setChanged(); + assert level != null; + if (!level.isClientSide()) { + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); + } + } + }; + + public EnvDistributorBlockEntity(BlockPos pPos, BlockState pBlockState) { + super(ETBlockEntities.ENV_DISTRIBUTOR_BLOCK_ENTITY.get(), pPos, pBlockState); + } + + @Override + protected void loadAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider pRegistries) { + super.loadAdditional(pTag, pRegistries); + CompoundTag modData = pTag.getCompound(MODID); + this.envStorage.setEnvStored(modData.getLong(ENV_TAG)); + } + + @Override + protected void saveAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider pRegistries) { + super.saveAdditional(pTag, pRegistries); + CompoundTag modData = new CompoundTag(); + modData.putLong(ENV_TAG, envStorage.getEnvStored()); + pTag.put(MODID, modData); + } + + public void serverTick(ServerLevel level, BlockPos blockPos, BlockState blockState) { + if (envStorage.getEnvStored() > 0) { + ChunkAccess chunk = level.getChunk(blockPos); + long value = Math.min(20, envStorage.getEnvStored()); + chunk.setData(ETAttachments.ENV, chunk.getData(ETAttachments.ENV) + value); + envStorage.setEnvStored(envStorage.getEnvStored() - value); + } + } +}