Add another helper method for redstone

This commit is contained in:
zontreck 2024-04-30 03:13:19 -07:00
parent 29245e45cf
commit 65a21bcefc
2 changed files with 27 additions and 3 deletions

View file

@ -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. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=GPLv3 mod_license=GPLv3
# The mod version. See https://semver.org/ # 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. # 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. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html

View file

@ -9,6 +9,7 @@ import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; 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 net.minecraft.world.level.block.state.properties.BooleanProperty;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -17,6 +18,7 @@ import java.util.List;
public abstract class RedstoneBlock extends RotatableBlock public abstract class RedstoneBlock extends RotatableBlock
{ {
public static final BooleanProperty INPUT_POWER = BooleanProperty.create("inputpower"); public static final BooleanProperty INPUT_POWER = BooleanProperty.create("inputpower");
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
private List<Direction> sides; private List<Direction> sides;
protected RedstoneBlock(Properties pProperties, Direction... validSides) { protected RedstoneBlock(Properties pProperties, Direction... validSides) {
@ -26,13 +28,13 @@ public abstract class RedstoneBlock extends RotatableBlock
@Override @Override
public BlockState getStateForPlacement(BlockPlaceContext pContext) { 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 @Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) { protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
super.createBlockStateDefinition(pBuilder); super.createBlockStateDefinition(pBuilder);
pBuilder.add(INPUT_POWER); pBuilder.add(INPUT_POWER, POWERED);
} }
@Override @Override
@ -48,24 +50,46 @@ public abstract class RedstoneBlock extends RotatableBlock
else return false; 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 onRedstone(LevelReader level, BlockPos pos, boolean on);
protected abstract void onRedstoneInputChanged(LevelReader level, BlockPos pos, boolean on);
@Override @Override
public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, BlockPos neighbor) { public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, BlockPos neighbor) {
onRedstone(level, pos, redstoneIsActivated(level, pos)); onRedstone(level, pos, redstoneIsActivated(level, pos));
boolean inp = state.getValue(INPUT_POWER);
state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos));
if(inp != redstoneIsActivated(level,pos))
onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER));
} }
@Override @Override
public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos other, boolean unknown) { public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos other, boolean unknown) {
onRedstone(level, pos, redstoneIsActivated(level, pos)); onRedstone(level, pos, redstoneIsActivated(level, pos));
boolean inp = state.getValue(INPUT_POWER);
state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos));
if(inp != redstoneIsActivated(level,pos))
onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER));
} }
@Override @Override
public void onPlace(BlockState state, Level level, BlockPos pos, BlockState p_60569_, boolean p_60570_) { public void onPlace(BlockState state, Level level, BlockPos pos, BlockState p_60569_, boolean p_60570_) {
onRedstone(level, pos, redstoneIsActivated(level, pos)); onRedstone(level, pos, redstoneIsActivated(level, pos));
boolean inp = state.getValue(INPUT_POWER);
state.setValue(INPUT_POWER, redstoneIsActivated(level, pos)); state.setValue(INPUT_POWER, redstoneIsActivated(level, pos));
if(inp != redstoneIsActivated(level,pos))
onRedstoneInputChanged(level, pos, state.getValue(INPUT_POWER));
} }
} }