From 26202745ad502bb69e4ef9ca3110cc8eda8e4ad5 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Sun, 2 Feb 2014 20:30:52 -0600 Subject: [PATCH] Fix all Channel Behavior and its mis-behaving. --- core/localization/PlayerMessages.java | 2 +- me/helpers/AENetworkProxy.java | 12 +++++++ parts/automation/PartExportBus.java | 3 ++ parts/automation/PartImportBus.java | 3 ++ parts/misc/PartStorageBus.java | 26 +++++++++++++-- parts/reporting/PartConversionMonitor.java | 3 ++ parts/reporting/PartStorageMonitor.java | 3 ++ parts/reporting/PartTerminal.java | 12 ++++++- tile/storage/TileChest.java | 38 +++++++++++++++++----- tile/storage/TileDrive.java | 26 +++++++++++++-- 10 files changed, 112 insertions(+), 16 deletions(-) diff --git a/core/localization/PlayerMessages.java b/core/localization/PlayerMessages.java index ed054d184..1a4e2cb89 100644 --- a/core/localization/PlayerMessages.java +++ b/core/localization/PlayerMessages.java @@ -5,7 +5,7 @@ import appeng.core.AELog; public enum PlayerMessages { - ChestCannotReadStorageCell, InvalidMachine, LoadedSettings, SavedSettings, MachineNotPowered, isNowLocked, isNowUnlocked, AmmoDepleted; + ChestCannotReadStorageCell, InvalidMachine, LoadedSettings, SavedSettings, MachineNotPowered, isNowLocked, isNowUnlocked, AmmoDepleted, CommunicationError; private PlayerMessages() { AELog.localization( "chat", getName() ); diff --git a/me/helpers/AENetworkProxy.java b/me/helpers/AENetworkProxy.java index 87a047283..b150aca13 100644 --- a/me/helpers/AENetworkProxy.java +++ b/me/helpers/AENetworkProxy.java @@ -330,6 +330,18 @@ public class AENetworkProxy implements IGridBlock return node.isActive(); } + public boolean isPowered() + { + try + { + return getEnergy().isNetworkPowered(); + } + catch (GridAccessException e) + { + return false; + } + } + @Override public void gridChanged() { diff --git a/parts/automation/PartExportBus.java b/parts/automation/PartExportBus.java index e224fa0a7..19cd28d26 100644 --- a/parts/automation/PartExportBus.java +++ b/parts/automation/PartExportBus.java @@ -117,6 +117,9 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable @Override TickRateModulation doBusWork() { + if ( !proxy.isActive() ) + return TickRateModulation.IDLE; + itemToSend = 1; didSomething = false; diff --git a/parts/automation/PartImportBus.java b/parts/automation/PartImportBus.java index c1c639579..3f574da81 100644 --- a/parts/automation/PartImportBus.java +++ b/parts/automation/PartImportBus.java @@ -142,6 +142,9 @@ public class PartImportBus extends PartSharedItemBus implements IGridTickable, I TickRateModulation doBusWork() { + if ( !proxy.isActive() ) + return TickRateModulation.IDLE; + worked = false; InventoryAdaptor myAdaptor = getHandler(); diff --git a/parts/misc/PartStorageBus.java b/parts/misc/PartStorageBus.java index 6387cb396..a5ac7f893 100644 --- a/parts/misc/PartStorageBus.java +++ b/parts/misc/PartStorageBus.java @@ -19,6 +19,8 @@ import appeng.api.config.Settings; import appeng.api.config.Upgrades; import appeng.api.networking.IGridNode; import appeng.api.networking.events.MENetworkCellArrayUpdate; +import appeng.api.networking.events.MENetworkChannelsChanged; +import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.security.MachineSource; import appeng.api.networking.ticking.IGridTickable; @@ -76,6 +78,25 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC MEInventoryHandler handler = null; int handlerHash = 0; + boolean wasActive = false; + + @MENetworkEventSubscribe + public void updateChannels(MENetworkChannelsChanged chann) + { + boolean currentActive = proxy.isActive(); + if ( wasActive != currentActive ) + { + wasActive = currentActive; + try + { + proxy.getGrid().postEvent( new MENetworkCellArrayUpdate() ); + } + catch (GridAccessException e) + { + // :P + } + } + } @Override public boolean onActivate(EntityPlayer player, Vec3 pos) @@ -332,7 +353,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC @Override public List getCellArray(StorageChannel channel) { - IMEInventoryHandler out = getHandler(); + IMEInventoryHandler out = proxy.isActive() ? getHandler() : null; if ( out == null ) return Arrays.asList( new IMEInventoryHandler[] {} ); return Arrays.asList( new IMEInventoryHandler[] { out } ); @@ -354,7 +375,8 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC { try { - proxy.getStorage().postAlterationOfStoredItems( StorageChannel.ITEMS, change, mySrc ); + if ( proxy.isActive() ) + proxy.getStorage().postAlterationOfStoredItems( StorageChannel.ITEMS, change, mySrc ); } catch (GridAccessException e) { diff --git a/parts/reporting/PartConversionMonitor.java b/parts/reporting/PartConversionMonitor.java index 27cfee404..499cc11c0 100644 --- a/parts/reporting/PartConversionMonitor.java +++ b/parts/reporting/PartConversionMonitor.java @@ -35,6 +35,9 @@ public class PartConversionMonitor extends PartStorageMonitor if ( Platform.isClient() ) return true; + if ( !proxy.isActive() ) + return false; + boolean ModeB = false; ItemStack item = player.getCurrentEquippedItem(); diff --git a/parts/reporting/PartStorageMonitor.java b/parts/reporting/PartStorageMonitor.java index bd9ea65d2..2cb0fdc0a 100644 --- a/parts/reporting/PartStorageMonitor.java +++ b/parts/reporting/PartStorageMonitor.java @@ -123,6 +123,9 @@ public class PartStorageMonitor extends PartMonitor implements IPartStorageMonit if ( Platform.isClient() ) return true; + if ( !proxy.isActive() ) + return false; + TileEntity te = this.tile; ItemStack eq = player.getCurrentEquippedItem(); if ( Platform.isWrench( player, eq, te.xCoord, te.yCoord, te.zCoord ) ) diff --git a/parts/reporting/PartTerminal.java b/parts/reporting/PartTerminal.java index 6b610a637..8ffadb50d 100644 --- a/parts/reporting/PartTerminal.java +++ b/parts/reporting/PartTerminal.java @@ -6,6 +6,7 @@ import net.minecraft.util.Vec3; import appeng.api.storage.IMEMonitor; import appeng.api.storage.IStorageMonitorable; import appeng.client.texture.CableBusTextures; +import appeng.core.localization.PlayerMessages; import appeng.core.sync.GuiBridge; import appeng.me.GridAccessException; import appeng.util.Platform; @@ -29,7 +30,16 @@ public class PartTerminal extends PartMonitor implements IStorageMonitorable if ( Platform.isClient() ) return true; - Platform.openGUI( player, getHost().getTile(), side, GuiBridge.GUI_ME ); + if ( proxy.isActive() ) + Platform.openGUI( player, getHost().getTile(), side, GuiBridge.GUI_ME ); + else + { + if ( proxy.isPowered() ) + player.sendChatToPlayer( PlayerMessages.CommunicationError.get() ); + else + player.sendChatToPlayer( PlayerMessages.MachineNotPowered.get() ); + } + return true; } diff --git a/tile/storage/TileChest.java b/tile/storage/TileChest.java index 75657ea93..c59789988 100644 --- a/tile/storage/TileChest.java +++ b/tile/storage/TileChest.java @@ -70,6 +70,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan long lastStateChange = 0; int priority = 0; int state = 0; + boolean wasActive = false; private void recalculateDisplay() { @@ -78,11 +79,25 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan for (int x = 0; x < getCellCount(); x++) state |= (getCellStatus( x ) << (3 * x)); - if ( getAECurrentPower() > 64 || gridProxy.isActive() ) + if ( isPowered() ) state |= 0x40; else state &= ~0x40; + boolean currentActive = gridProxy.isActive(); + if ( wasActive != currentActive ) + { + wasActive = currentActive; + try + { + gridProxy.getGrid().postEvent( new MENetworkCellArrayUpdate() ); + } + catch (GridAccessException e) + { + // :P + } + } + if ( oldState != state ) markForUpdate(); } @@ -153,7 +168,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan for (int x = 0; x < getCellCount(); x++) state |= (getCellStatus( x ) << (3 * x)); - if ( getAECurrentPower() > 64 || gridProxy.isActive() ) + if ( isPowered() ) state |= 0x40; else state &= ~0x40; @@ -259,7 +274,8 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan { try { - gridProxy.getStorage().postAlterationOfStoredItems( chan, change, mySrc ); + if ( gridProxy.isActive() ) + gridProxy.getStorage().postAlterationOfStoredItems( chan, change, mySrc ); } catch (GridAccessException e) { @@ -453,14 +469,18 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan @Override public List getCellArray(StorageChannel channel) { - try + if ( gridProxy.isActive() ) { - return Arrays.asList( new IMEInventoryHandler[] { getHandler( channel ) } ); - } - catch (AENoHandler e) - { - return new ArrayList(); + try + { + return Arrays.asList( new IMEInventoryHandler[] { getHandler( channel ) } ); + } + catch (AENoHandler e) + { + // :P + } } + return new ArrayList(); } @Override diff --git a/tile/storage/TileDrive.java b/tile/storage/TileDrive.java index 6060aba1e..17bfb0284 100644 --- a/tile/storage/TileDrive.java +++ b/tile/storage/TileDrive.java @@ -3,6 +3,7 @@ package appeng.tile.storage; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -53,16 +54,31 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior long lastStateChange = 0; int state = 0; int priority = 0; + boolean wasActive = false; private void recalculateDisplay() { int oldState = 0; - if ( gridProxy.isActive() ) + boolean currentActive; + if ( currentActive = gridProxy.isActive() ) state |= 0x80000000; else state &= ~0x80000000; + if ( wasActive != currentActive ) + { + wasActive = currentActive; + try + { + gridProxy.getGrid().postEvent( new MENetworkCellArrayUpdate() ); + } + catch (GridAccessException e) + { + // :P + } + } + for (int x = 0; x < getCellCount(); x++) state |= (getCellStatus( x ) << (3 * x)); @@ -240,8 +256,12 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior @Override public List getCellArray(StorageChannel channel) { - updateState(); - return (List) (channel == StorageChannel.ITEMS ? items : fluids); + if ( gridProxy.isActive() ) + { + updateState(); + return (List) (channel == StorageChannel.ITEMS ? items : fluids); + } + return new ArrayList(); } @Override