diff --git a/gradle.properties b/gradle.properties index b2b5c09..543c180 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.043024.0247 +mod_version=1201.13.043024.0307 # 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 index bde4725..04d2ae9 100644 --- a/src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java +++ b/src/main/java/dev/zontreck/libzontreck/blocks/RedstoneBlock.java @@ -9,6 +9,7 @@ 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.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import org.jetbrains.annotations.Nullable; @@ -17,6 +18,7 @@ import java.util.List; public abstract class RedstoneBlock extends RotatableBlock { public static final BooleanProperty INPUT_POWER = BooleanProperty.create("inputpower"); + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; private List sides; protected RedstoneBlock(Properties pProperties, Direction... validSides) { @@ -26,13 +28,13 @@ public abstract class RedstoneBlock extends RotatableBlock @Override public BlockState getStateForPlacement(BlockPlaceContext pContext) { - return super.getStateForPlacement(pContext).setValue(INPUT_POWER, false); + return super.getStateForPlacement(pContext).setValue(INPUT_POWER, false).setValue(POWERED, false); } @Override protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { super.createBlockStateDefinition(pBuilder); - pBuilder.add(INPUT_POWER); + pBuilder.add(INPUT_POWER, POWERED); } @Override @@ -48,24 +50,46 @@ public abstract class RedstoneBlock extends RotatableBlock else return false; } + @Override + public int getSignal(BlockState p_60483_, BlockGetter p_60484_, BlockPos p_60485_, Direction p_60486_) { + if(!sides.contains(p_60486_)) return 0; + + if(p_60483_.getValue(POWERED)) + return 15; + else return 0; + } + protected abstract void onRedstone(LevelReader level, BlockPos pos, boolean on); + protected abstract void onRedstoneInputChanged(LevelReader level, BlockPos pos, boolean on); @Override public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, BlockPos neighbor) { onRedstone(level, pos, redstoneIsActivated(level, pos)); + boolean inp = state.getValue(INPUT_POWER); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); + + if(inp != redstoneIsActivated(level,pos)) + onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER)); } @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos other, boolean unknown) { onRedstone(level, pos, redstoneIsActivated(level, pos)); + boolean inp = state.getValue(INPUT_POWER); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); + + if(inp != redstoneIsActivated(level,pos)) + onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER)); } @Override public void onPlace(BlockState state, Level level, BlockPos pos, BlockState p_60569_, boolean p_60570_) { onRedstone(level, pos, redstoneIsActivated(level, pos)); + boolean inp = state.getValue(INPUT_POWER); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); + + if(inp != redstoneIsActivated(level,pos)) + onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER)); } }