From 7dd939999c35bbf95a6c6d4d1665e691a72923e6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 24 Dec 2015 00:34:47 +0100 Subject: [PATCH] Fixed blocks activating too often in redstone pulse mode --- .../blocks/base/BlockContainerBase.java | 28 ++++++++++++++----- .../tile/TileEntityDirectionalBreaker.java | 1 + 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/base/BlockContainerBase.java b/src/main/java/ellpeck/actuallyadditions/blocks/base/BlockContainerBase.java index 6b88eba0e..c4f2acaa6 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/base/BlockContainerBase.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/base/BlockContainerBase.java @@ -32,6 +32,7 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; +import java.util.Random; public abstract class BlockContainerBase extends BlockContainer{ @@ -110,14 +111,26 @@ public abstract class BlockContainerBase extends BlockContainer{ } public void updateRedstoneState(World world, int x, int y, int z){ - TileEntity tile = world.getTileEntity(x, y, z); - boolean powered = world.isBlockIndirectlyGettingPowered(x, y, z); - if(tile instanceof TileEntityBase){ - ((TileEntityBase)tile).setRedstonePowered(powered); - tile.markDirty(); + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(x, y, z); + boolean powered = world.isBlockIndirectlyGettingPowered(x, y, z); + if(tile instanceof TileEntityBase){ + ((TileEntityBase)tile).setRedstonePowered(powered); + tile.markDirty(); + } + if(tile instanceof IRedstoneToggle){ + if(((IRedstoneToggle)tile).isPulseMode() && powered){ + world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); + } + } } - if(tile instanceof IRedstoneToggle){ - if(((IRedstoneToggle)tile).isPulseMode() && powered){ + } + + @Override + public void updateTick(World world, int x, int y, int z, Random random){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof IRedstoneToggle && ((IRedstoneToggle)tile).isPulseMode()){ ((IRedstoneToggle)tile).activateOnPulse(); } } @@ -227,6 +240,7 @@ public abstract class BlockContainerBase extends BlockContainer{ if(tile instanceof IRedstoneToggle){ if(!world.isRemote){ ((IRedstoneToggle)tile).toggle(!((IRedstoneToggle)tile).isPulseMode()); + tile.markDirty(); if(tile instanceof TileEntityBase){ ((TileEntityBase)tile).sendUpdate(); diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java index ccfd08c9a..7276d37ea 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDirectionalBreaker.java @@ -162,6 +162,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem @Override public void activateOnPulse(){ + System.out.println("ACT"); this.doWork(); } }