grid block connected / disconnected texture
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
package storagecraft.tile;
|
||||
|
||||
public interface IMachine {
|
||||
public int getEnergyUsage();
|
||||
|
||||
public void onConnected(TileController controller);
|
||||
|
||||
public void onDisconnected();
|
||||
}
|
||||
@@ -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<IMachine> findMachines(TileController controller) {
|
||||
List<IMachine> machines = new ArrayList<IMachine>();
|
||||
public List<TileMachine> findMachines(TileController controller) {
|
||||
List<TileMachine> machines = new ArrayList<TileMachine>();
|
||||
|
||||
findMachinesInternal(new ArrayList<Vec3>(), machines, controller);
|
||||
|
||||
return machines;
|
||||
}
|
||||
|
||||
private void findMachinesInternal(List<Vec3> visited, List<IMachine> machines, TileController controller) {
|
||||
private void findMachinesInternal(List<Vec3> visited, List<TileMachine> 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) {
|
||||
|
||||
@@ -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<IMachine> connectedMachines = new ArrayList<IMachine>();
|
||||
private int energyUsage;
|
||||
|
||||
private List<TileMachine> connectedMachines = new ArrayList<TileMachine>();
|
||||
|
||||
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<IMachine> machines = new ArrayList<IMachine>();
|
||||
if (ticks % 40 == 0) {
|
||||
if (!isActive()) {
|
||||
disconnectAll();
|
||||
} else {
|
||||
List<TileMachine> machines = new ArrayList<TileMachine>();
|
||||
|
||||
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<IMachine> getMachines() {
|
||||
public List<TileMachine> getMachines() {
|
||||
return connectedMachines;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
35
src/main/java/storagecraft/tile/TileMachine.java
Normal file
35
src/main/java/storagecraft/tile/TileMachine.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user