From c57cb36bd84bd9c80911f68d278d298473a1ea63 Mon Sep 17 00:00:00 2001 From: RoBaertschi Date: Wed, 12 Jun 2024 19:19:10 +0200 Subject: [PATCH] begin env distributor --- .../environmenttech/EnvironmentTech.java | 2 +- .../data/components/ETComponents.java | 5 ++ .../level/block/EnvDistributor.java | 68 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java diff --git a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java index a645ec8..0c6d7e1 100644 --- a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java +++ b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java @@ -48,7 +48,7 @@ public class EnvironmentTech ETCapabilities.init(modEventBus); ETMenus.init(modEventBus); ETParticles.init(modEventBus); - ETComponents.DATA_COMPONENTS.register(modEventBus); + ETComponents.init(modEventBus); NeoForge.EVENT_BUS.register(this); diff --git a/src/main/java/robaertschi/environmenttech/data/components/ETComponents.java b/src/main/java/robaertschi/environmenttech/data/components/ETComponents.java index d6eb171..2780ac3 100644 --- a/src/main/java/robaertschi/environmenttech/data/components/ETComponents.java +++ b/src/main/java/robaertschi/environmenttech/data/components/ETComponents.java @@ -1,6 +1,7 @@ package robaertschi.environmenttech.data.components; import net.minecraft.core.component.DataComponentType; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import robaertschi.environmenttech.EnvironmentTech; @@ -11,4 +12,8 @@ public class ETComponents { public static final DeferredHolder, DataComponentType> FILLED_COMPONENT = DATA_COMPONENTS.registerComponentType("filled_component", filledComponentBuilder -> filledComponentBuilder.persistent(FilledComponent.CODEC).networkSynchronized(FilledComponent.STREAM_CODEC) ); + + public static void init(IEventBus modEventBus) { + DATA_COMPONENTS.register(modEventBus); + } } diff --git a/src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java b/src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java new file mode 100644 index 0000000..c483e68 --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/level/block/EnvDistributor.java @@ -0,0 +1,68 @@ +package robaertschi.environmenttech.level.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +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.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 static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final MapCodec CODEC = simpleCodec(EnvDistributor::new); + + + + public EnvDistributor(Properties pProperties) { + super(pProperties); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + protected RenderShape getRenderShape(BlockState pState) { + return RenderShape.MODEL; + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation direction) { + return state.setValue(FACING, direction.rotate(state.getValue(FACING))); + } + + @Override + protected BlockState mirror(BlockState pState, Mirror pMirror) { + return pState.rotate(pMirror.getRotation(pState.getValue(FACING))); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext) { + return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { + pBuilder.add(FACING); + } + + @Override + protected void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) { + pLevel.updateNeighborsAt(pPos, this); + super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { + return null; + } +}