diff --git a/src/main/java/storagecraft/SC.java b/src/main/java/storagecraft/SC.java index dcc0d57dc..8f2d2cf84 100644 --- a/src/main/java/storagecraft/SC.java +++ b/src/main/java/storagecraft/SC.java @@ -10,7 +10,6 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Items; import net.minecraft.item.Item; import storagecraft.proxy.CommonProxy; @@ -19,31 +18,31 @@ public class SC { public static class GUI { public static final int CONTROLLER = 0; } - + public static final String ID = "storagecraft"; public static final String VERSION = "1.0"; public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(ID); public static final CreativeTabs TAB = new CreativeTabs(ID) { @Override public Item getTabIconItem() { - return Items.emerald; + return Item.getItemFromBlock(SCBlocks.CONTROLLER); } }; @SidedProxy(clientSide = "storagecraft.proxy.ClientProxy", serverSide = "storagecraft.proxy.ServerProxy") public static CommonProxy PROXY; @Instance public static SC INSTANCE; - + @EventHandler public void preInit(FMLPreInitializationEvent e) { PROXY.preInit(e); } - + @EventHandler public void init(FMLInitializationEvent e) { PROXY.init(e); } - + @EventHandler public void postInit(FMLPostInitializationEvent e) { PROXY.postInit(e); diff --git a/src/main/java/storagecraft/block/BlockGrid.java b/src/main/java/storagecraft/block/BlockGrid.java index ba482f378..9cc3005ca 100644 --- a/src/main/java/storagecraft/block/BlockGrid.java +++ b/src/main/java/storagecraft/block/BlockGrid.java @@ -7,11 +7,11 @@ import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import storagecraft.tile.TileGrid; -import storagecraft.tile.TileSC; public class BlockGrid extends BlockSC implements ITileEntityProvider { private IIcon sideIcon; - private IIcon icon; + private IIcon iconConnected; + private IIcon iconDisconnected; public BlockGrid() { super("grid"); @@ -24,16 +24,17 @@ public class BlockGrid extends BlockSC implements ITileEntityProvider { @Override public void registerBlockIcons(IIconRegister register) { - icon = register.registerIcon("storagecraft:grid"); + iconConnected = register.registerIcon("storagecraft:gridConnected"); + iconDisconnected = register.registerIcon("storagecraft:gridDisconnected"); sideIcon = register.registerIcon("storagecraft:generic"); } @Override public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - TileSC tile = (TileSC) world.getTileEntity(x, y, z); + TileGrid tile = (TileGrid) world.getTileEntity(x, y, z); if (side == tile.getDirection().getOpposite().ordinal()) { - return icon; + return tile.isConnected() ? iconConnected : iconDisconnected; } return sideIcon; @@ -42,7 +43,7 @@ public class BlockGrid extends BlockSC implements ITileEntityProvider { @Override public IIcon getIcon(int side, int meta) { if (side == 3) { - return icon; + return iconDisconnected; } return sideIcon; diff --git a/src/main/java/storagecraft/tile/IMachine.java b/src/main/java/storagecraft/tile/IMachine.java deleted file mode 100644 index cf187cff0..000000000 --- a/src/main/java/storagecraft/tile/IMachine.java +++ /dev/null @@ -1,9 +0,0 @@ -package storagecraft.tile; - -public interface IMachine { - public int getEnergyUsage(); - - public void onConnected(TileController controller); - - public void onDisconnected(); -} diff --git a/src/main/java/storagecraft/tile/TileCable.java b/src/main/java/storagecraft/tile/TileCable.java index cd9c3a039..c1c522d30 100644 --- a/src/main/java/storagecraft/tile/TileCable.java +++ b/src/main/java/storagecraft/tile/TileCable.java @@ -20,21 +20,21 @@ public class TileCable extends TileSC { if (!isCable(worldObj, xCoord, yCoord, zCoord, dir)) { TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); - return tile instanceof IMachine || tile instanceof TileController; + return tile instanceof TileMachine || tile instanceof TileController; } return true; } - public List findMachines(TileController controller) { - List machines = new ArrayList(); + public List findMachines(TileController controller) { + List machines = new ArrayList(); findMachinesInternal(new ArrayList(), machines, controller); return machines; } - private void findMachinesInternal(List visited, List machines, TileController controller) { + private void findMachinesInternal(List visited, List machines, TileController controller) { for (Vec3 visitedBlock : visited) { if (visitedBlock.xCoord == xCoord && visitedBlock.yCoord == yCoord && visitedBlock.zCoord == zCoord) { return; @@ -62,8 +62,8 @@ public class TileCable extends TileSC { TileEntity tile = worldObj.getTileEntity(x, y, z); - if (tile instanceof IMachine) { - machines.add((IMachine) tile); + if (tile instanceof TileMachine) { + machines.add((TileMachine) tile); visited.add(Vec3.createVectorHelper(x, y, z)); } else if (tile instanceof TileCable) { diff --git a/src/main/java/storagecraft/tile/TileController.java b/src/main/java/storagecraft/tile/TileController.java index b03890b9e..08cd66e39 100644 --- a/src/main/java/storagecraft/tile/TileController.java +++ b/src/main/java/storagecraft/tile/TileController.java @@ -12,73 +12,81 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileController extends TileSC implements IEnergyHandler, INetworkTile { public static final int BASE_ENERGY_USAGE = 100; - private int energyUsage; + private boolean destroyed = false; + private EnergyStorage storage = new EnergyStorage(32000); - private List connectedMachines = new ArrayList(); + private int energyUsage; + + private List connectedMachines = new ArrayList(); + private int ticks = 0; @Override public void updateEntity() { super.updateEntity(); - if (!worldObj.isRemote) { - ticks++; + if (!destroyed) { + if (!worldObj.isRemote) { + ticks++; - if (ticks % 40 == 0) { - if (!isActive()) { - disconnectAll(); - } else { - List machines = new ArrayList(); + if (ticks % 40 == 0) { + if (!isActive()) { + disconnectAll(); + } else { + List machines = new ArrayList(); - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); - if (tile instanceof TileCable) { - machines.addAll(((TileCable) tile).findMachines(this)); + if (tile instanceof TileCable) { + machines.addAll(((TileCable) tile).findMachines(this)); + } } - } - for (IMachine machine : connectedMachines) { - if (!machines.contains(machine)) { - machine.onDisconnected(); + for (TileMachine machine : connectedMachines) { + if (!machines.contains(machine)) { + machine.onDisconnected(); + } } - } - for (IMachine machine : machines) { - if (!connectedMachines.contains(machine)) { - machine.onConnected(this); + for (TileMachine machine : machines) { + if (!connectedMachines.contains(machine)) { + machine.onConnected(this); + } } - } - connectedMachines = machines; + connectedMachines = machines; + } } + + energyUsage = BASE_ENERGY_USAGE; + + for (TileMachine machine : connectedMachines) { + energyUsage += machine.getEnergyUsage(); + } + + storage.extractEnergy(energyUsage, false); + } else { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } - - energyUsage = BASE_ENERGY_USAGE; - - for (IMachine machine : connectedMachines) { - energyUsage += machine.getEnergyUsage(); - } - - storage.extractEnergy(energyUsage, false); - } else { - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } } public void onDestroyed() { disconnectAll(); + + destroyed = true; } private void disconnectAll() { - for (IMachine machine : connectedMachines) { + for (TileMachine machine : connectedMachines) { machine.onDisconnected(); } connectedMachines.clear(); } - public List getMachines() { + public List getMachines() { return connectedMachines; } diff --git a/src/main/java/storagecraft/tile/TileGrid.java b/src/main/java/storagecraft/tile/TileGrid.java index 08b3559a9..3fededdd0 100644 --- a/src/main/java/storagecraft/tile/TileGrid.java +++ b/src/main/java/storagecraft/tile/TileGrid.java @@ -1,14 +1,6 @@ package storagecraft.tile; -public class TileGrid extends TileSC implements IMachine { - @Override - public void onConnected(TileController controller) { - } - - @Override - public void onDisconnected() { - } - +public class TileGrid extends TileMachine { @Override public int getEnergyUsage() { return 10; diff --git a/src/main/java/storagecraft/tile/TileMachine.java b/src/main/java/storagecraft/tile/TileMachine.java new file mode 100644 index 000000000..e4ec6a9da --- /dev/null +++ b/src/main/java/storagecraft/tile/TileMachine.java @@ -0,0 +1,35 @@ +package storagecraft.tile; + +import io.netty.buffer.ByteBuf; + +public abstract class TileMachine extends TileSC implements INetworkTile { + protected boolean connected = false; + + public void onConnected(TileController controller) { + connected = true; + + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void onDisconnected() { + connected = false; + + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public boolean isConnected() { + return connected; + } + + public abstract int getEnergyUsage(); + + @Override + public void fromBytes(ByteBuf buf) { + connected = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeBoolean(connected); + } +} diff --git a/src/main/resources/assets/storagecraft/textures/blocks/grid.png b/src/main/resources/assets/storagecraft/textures/blocks/grid.png deleted file mode 100644 index 12a2b38d1..000000000 Binary files a/src/main/resources/assets/storagecraft/textures/blocks/grid.png and /dev/null differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/gridConnected.png b/src/main/resources/assets/storagecraft/textures/blocks/gridConnected.png new file mode 100644 index 000000000..b33779790 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/gridConnected.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/gridDisconnected.png b/src/main/resources/assets/storagecraft/textures/blocks/gridDisconnected.png new file mode 100644 index 000000000..1aafc81b5 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/gridDisconnected.png differ