diff --git a/src/main/java/mekanism/common/multipart/PartSidedPipe.java b/src/main/java/mekanism/common/multipart/PartSidedPipe.java index c91868546..483acced5 100644 --- a/src/main/java/mekanism/common/multipart/PartSidedPipe.java +++ b/src/main/java/mekanism/common/multipart/PartSidedPipe.java @@ -207,7 +207,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, { byte connections = 0x00; - if(handlesRedstone() && redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z())) + if(handlesRedstone() && redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile()))) { return connections; } @@ -232,7 +232,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, { byte connections = 0x00; - if(handlesRedstone() && redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z())) + if(handlesRedstone() && redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile()))) { return connections; } @@ -386,7 +386,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, @Override public boolean canConnect(ForgeDirection side) { - boolean powered = world().isBlockIndirectlyGettingPowered(x(), y(), z()); + boolean powered = MekanismUtils.isGettingPowered(world(), Coord4D.get(tile())); if(handlesRedstone() && redstoneReactive && powered) { @@ -504,7 +504,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, public void redstoneRefresh() { - boolean nowPowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); + boolean nowPowered = redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile())); if(nowPowered != redstonePowered) { @@ -522,7 +522,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, { if(handlesRedstone()) { - boolean nowPowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); + boolean nowPowered = redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile())); if(nowPowered != redstonePowered) { @@ -563,7 +563,8 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, public void onAdded() { super.onAdded(); - redstonePowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); + + redstonePowered = redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile())); refreshConnections(); } @@ -571,7 +572,8 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, public void onChunkLoad() { super.onChunkLoad(); - redstonePowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); + + redstonePowered = redstoneReactive && MekanismUtils.isGettingPowered(world(), Coord4D.get(tile())); refreshConnections(); } diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index 630430e2f..d3b23acdc 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -672,6 +672,30 @@ public final class MekanismUtils float numUpgrades = upgrades.get(Upgrade.ENERGY) == null ? 0 : (float)upgrades.get(Upgrade.ENERGY); return def * Math.pow(general.maxUpgradeMultiplier, numUpgrades/(float)Upgrade.ENERGY.getMax()); } + + /** + * A better "isBlockIndirectlyGettingPowered()" that doesn't load chunks + * @param world - the world to perform the check in + * @param coord - the coordinate of the block performing the check + * @return if the block is indirectly getting powered by LOADED chunks + */ + public static boolean isGettingPowered(World world, Coord4D coord) + { + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + Coord4D sideCoord = coord.getFromSide(side); + + if(sideCoord.exists(world)) + { + if(world.getIndirectPowerLevelTo(sideCoord.xCoord, sideCoord.yCoord, sideCoord.zCoord, side.ordinal()) > 0) + { + return true; + } + } + } + + return false; + } /** * Places a fake bounding block at the defined location.