From a747846585893eab4f7c707bff855ee719cc884c Mon Sep 17 00:00:00 2001 From: zontreck Date: Fri, 26 Apr 2024 06:34:38 -0700 Subject: [PATCH] Add a redstone prototype for making blocks that use redstone --- gradle.properties | 2 +- .../libzontreck/blocks/RedstoneBlock.java | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java diff --git a/gradle.properties b/gradle.properties index 6abd168..83a3a22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,7 +53,7 @@ mod_name=Zontreck's Library Mod # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=GPLv3 # The mod version. See https://semver.org/ -mod_version=1201.13.042524.0527 +mod_version=1201.13.042624.0634 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java b/src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java new file mode 100644 index 0000000..2fea128 --- /dev/null +++ b/src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java @@ -0,0 +1,60 @@ +package dev.zontreck.libzontreck.blocks; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public abstract class RedstoneBlock extends RotatableBlock +{ + public static final BooleanProperty INPUT_POWER = BooleanProperty.create("inputpower"); + private List sides; + + protected RedstoneBlock(Properties pProperties, Direction... validSides) { + super(pProperties); + sides=List.of(validSides); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext) { + return super.getStateForPlacement(pContext).setValue(INPUT_POWER, false); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { + super.createBlockStateDefinition(pBuilder); + pBuilder.add(INPUT_POWER); + } + + @Override + public boolean canConnectRedstone(BlockState state, BlockGetter level, BlockPos pos, @Nullable Direction direction) { + if(sides.contains(direction)) return true; + else return false; + } + + private boolean redstoneIsActivated(LevelReader level, BlockPos pos) + { + if(level.hasNeighborSignal(pos)) + return true; + else return false; + } + + protected abstract void onRedstone(LevelReader level, BlockPos pos, boolean on); + + @Override + public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, BlockPos neighbor) { + + onRedstone(level, pos, redstoneIsActivated(level, pos)); + } + + +}