42 lines
1.4 KiB
Java
42 lines
1.4 KiB
Java
package net.minecraft.world.level.redstone;
|
|
|
|
import com.google.common.collect.Sets;
|
|
import java.util.Set;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.RedStoneWireBlock;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class DefaultRedstoneWireEvaluator extends RedstoneWireEvaluator {
|
|
public DefaultRedstoneWireEvaluator(RedStoneWireBlock redStoneWireBlock) {
|
|
super(redStoneWireBlock);
|
|
}
|
|
|
|
@Override
|
|
public void updatePowerStrength(Level level, BlockPos pos, BlockState state, @Nullable Orientation orientation, boolean updateShape) {
|
|
int i = this.calculateTargetStrength(level, pos);
|
|
if ((Integer)state.getValue(RedStoneWireBlock.POWER) != i) {
|
|
if (level.getBlockState(pos) == state) {
|
|
level.setBlock(pos, state.setValue(RedStoneWireBlock.POWER, i), 2);
|
|
}
|
|
|
|
Set<BlockPos> set = Sets.<BlockPos>newHashSet();
|
|
set.add(pos);
|
|
|
|
for (Direction direction : Direction.values()) {
|
|
set.add(pos.relative(direction));
|
|
}
|
|
|
|
for (BlockPos blockPos : set) {
|
|
level.updateNeighborsAt(blockPos, this.wireBlock);
|
|
}
|
|
}
|
|
}
|
|
|
|
private int calculateTargetStrength(Level level, BlockPos pos) {
|
|
int i = this.getBlockSignal(level, pos);
|
|
return i == 15 ? i : Math.max(i, this.getIncomingWireSignal(level, pos));
|
|
}
|
|
}
|