diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java index 60691a51e..23679f883 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java @@ -10,8 +10,10 @@ package ellpeck.actuallyadditions.blocks; +import ellpeck.actuallyadditions.tile.TileEntityBase; import ellpeck.actuallyadditions.tile.TileEntityInventoryBase; import ellpeck.actuallyadditions.util.Util; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; @@ -74,4 +76,21 @@ public abstract class BlockContainerBase extends BlockContainer{ } return 0; } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block){ + this.updateRedstoneState(world, x, y, z); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z){ + this.updateRedstoneState(world, x, y, z); + } + + private void updateRedstoneState(World world, int x, int y, int z){ + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBase){ + ((TileEntityBase)tile).setRedstonePowered(world.isBlockIndirectlyGettingPowered(x, y, z)); + } + } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java index c00d4a0c6..714a0fed6 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java @@ -47,7 +47,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) && this.storage.getEnergyStored() >= ENERGY_USE){ + if(!this.isRedstonePowered && this.storage.getEnergyStored() >= ENERGY_USE){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java index d741149bb..6822c76e8 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java @@ -24,7 +24,8 @@ import net.minecraft.world.World; public abstract class TileEntityBase extends TileEntity{ - private int ticksElapsed; + protected int ticksElapsed; + protected boolean isRedstonePowered; public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); @@ -88,6 +89,10 @@ public abstract class TileEntityBase extends TileEntity{ this.ticksElapsed++; } + public void setRedstonePowered(boolean powered){ + this.isRedstonePowered = powered; + } + @Override public Packet getDescriptionPacket(){ NBTTagCompound tag = new NBTTagCompound(); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java index a71f65952..d25d8d122 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java @@ -51,7 +51,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java index ddcfd5532..a74eedb1e 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java @@ -101,7 +101,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE if(this.tank.getFluidAmount() > 0){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, this.tank); - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, this.tank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, this.tank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, this.tank); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoffeeMachine.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoffeeMachine.java index 9b5bb8514..e5f21ac17 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoffeeMachine.java @@ -94,7 +94,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(!worldObj.isRemote){ this.storeCoffee(); - if(this.brewTime > 0 || this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(this.brewTime > 0 || this.isRedstonePowered){ this.brew(); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java index 359b5cedb..609f02a99 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java @@ -41,7 +41,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ if(this.currentTime > 0){ this.currentTime--; diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java index 71fcc0e20..2296397d6 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java @@ -40,7 +40,7 @@ public class TileEntityDropper extends TileEntityInventoryBase{ public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java index 87b7ba6ca..97713d79e 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java @@ -59,7 +59,7 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen if(this.oilTank.getFluidAmount() > 0){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, this.oilTank); - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, this.oilTank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, this.oilTank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, this.oilTank); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java index 6e64c741b..7d2991394 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java @@ -29,7 +29,7 @@ public class TileEntityFishingNet extends TileEntityBase{ public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(worldObj.getBlock(xCoord, yCoord-1, zCoord).getMaterial() == Material.water){ if(this.timeUntilNextDrop > 0){ this.timeUntilNextDrop--; diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFluidCollector.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFluidCollector.java index 77e9a8a91..c231bd368 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFluidCollector.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFluidCollector.java @@ -81,7 +81,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -138,7 +138,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements if(!this.isPlacer && this.tank.getFluidAmount() > 0){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, this.tank); - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, this.tank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, this.tank); WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, this.tank); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java index 870b2ff3d..fce527326 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java @@ -401,7 +401,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt this.initVars(); //Is Block not powered by Redstone? - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(!(this.sideToPull == this.sideToPut && this.slotToPullStart == this.slotToPutStart && this.slotToPullEnd == this.slotToPutEnd)){ if(sideToPull != -1 && this.placeToPull instanceof IInventory){ this.pull(); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLeafGenerator.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLeafGenerator.java index ea88d0641..37b0f3fd1 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLeafGenerator.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLeafGenerator.java @@ -33,7 +33,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord)){ + if(!this.isRedstonePowered){ if(this.nextUseCounter >= 5){ this.nextUseCounter = 0; diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomLiquiface.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomLiquiface.java index bb417bdda..a72fb4055 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomLiquiface.java @@ -31,7 +31,7 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements super.updateEntity(); if(!worldObj.isRemote){ - if(worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) && this.isBoundThingInRange() && this.getHandler() != null){ + if(this.isRedstonePowered && this.isBoundThingInRange() && this.getHandler() != null){ this.pushFluid(ForgeDirection.UP); this.pushFluid(ForgeDirection.DOWN); this.pushFluid(ForgeDirection.NORTH); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java index c0bda3d70..1674ee130 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java @@ -51,7 +51,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } if(this.isBoundThingInRange()){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityRangedCollector.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityRangedCollector.java index f026d76dc..16e6487bd 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityRangedCollector.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityRangedCollector.java @@ -36,7 +36,7 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement public void updateEntity(){ super.updateEntity(); if(!worldObj.isRemote){ - if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(!this.isRedstonePowered){ ArrayList items = (ArrayList)this.worldObj.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(this.xCoord-RANGE, this.yCoord-RANGE, this.zCoord-RANGE, this.xCoord+RANGE, this.yCoord+RANGE, this.zCoord+RANGE)); if(!items.isEmpty()){ for(EntityItem item : items){