abstracted out side buttons (thanks to this they also work on ctrls now)

This commit is contained in:
Raoul Van den Berge
2015-12-20 16:43:56 +01:00
parent d57618f990
commit 23a9b358bf
18 changed files with 322 additions and 158 deletions

View File

@@ -6,4 +6,10 @@ public interface INetworkTile {
public void fromBytes(ByteBuf buf);
public void toBytes(ByteBuf buf);
public int getX();
public int getY();
public int getZ();
}

View File

@@ -0,0 +1,13 @@
package storagecraft.tile;
public interface IRedstoneControllable {
public RedstoneMode getRedstoneMode();
public void setRedstoneMode(RedstoneMode mode);
public int getX();
public int getY();
public int getZ();
}

View File

@@ -1,10 +1,14 @@
package storagecraft.tile;
import net.minecraft.world.World;
public enum RedstoneMode {
IGNORE(0),
HIGH(1),
LOW(2);
public static final String NBT = "RedstoneMode";
public final int id;
RedstoneMode(int id) {
@@ -21,6 +25,19 @@ public enum RedstoneMode {
return next;
}
public boolean isEnabled(World world, int x, int y, int z) {
switch (this) {
case IGNORE:
return true;
case HIGH:
return world.isBlockIndirectlyGettingPowered(x, y, z);
case LOW:
return !world.isBlockIndirectlyGettingPowered(x, y, z);
}
return false;
}
public static RedstoneMode getById(int id) {
for (RedstoneMode control : values()) {
if (control.id == id) {

View File

@@ -69,7 +69,7 @@ public class TileCable extends TileBase {
TileEntity tile = worldObj.getTileEntity(x, y, z);
if (tile instanceof TileMachine && ((TileMachine) tile).isEnabled()) {
if (tile instanceof TileMachine && ((TileMachine) tile).getRedstoneMode().isEnabled(worldObj, x, y, z)) {
machines.add((TileMachine) tile);
visited.add(Vec3.createVectorHelper(x, y, z));

View File

@@ -17,10 +17,12 @@ import storagecraft.storage.IStorageProvider;
import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils;
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile {
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneControllable {
private List<StorageItem> items = new ArrayList<StorageItem>();
private List<IStorage> storages = new ArrayList<IStorage>();
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private List<TileMachine> machines = new ArrayList<TileMachine>();
private List<Vec3> visitedCables = new ArrayList<Vec3>();
@@ -223,6 +225,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
super.readFromNBT(nbt);
energy.readFromNBT(nbt);
if (nbt.hasKey(RedstoneMode.NBT)) {
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
}
}
@Override
@@ -230,6 +236,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
super.writeToNBT(nbt);
energy.writeToNBT(nbt);
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
}
@Override
@@ -257,14 +265,42 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
}
public boolean isActive() {
return energy.getEnergyStored() >= getEnergyUsage();
return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(worldObj, xCoord, yCoord, zCoord);
}
@Override
public RedstoneMode getRedstoneMode() {
return redstoneMode;
}
@Override
public void setRedstoneMode(RedstoneMode mode) {
this.redstoneMode = mode;
}
@Override
public int getX() {
return xCoord;
}
@Override
public int getY() {
return yCoord;
}
@Override
public int getZ() {
return zCoord;
}
// @TODO: add helpers for sending redstone control + item storages over net
@Override
public void fromBytes(ByteBuf buf) {
energy.setEnergyStored(buf.readInt());
energyUsage = buf.readInt();
redstoneMode = RedstoneMode.getById(buf.readInt());
items.clear();
int size = buf.readInt();
@@ -285,6 +321,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
buf.writeInt(energy.getEnergyStored());
buf.writeInt(energyUsage);
buf.writeInt(redstoneMode.id);
buf.writeInt(items.size());
for (StorageItem item : items) {

View File

@@ -3,9 +3,7 @@ package storagecraft.tile;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
public abstract class TileMachine extends TileBase implements INetworkTile {
public static final String NBT_REDSTONE_MODE = "RedstoneMode";
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneControllable {
protected boolean connected = false;
private RedstoneMode redstoneMode = RedstoneMode.LOW;
@@ -43,27 +41,31 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
return connected;
}
public boolean isEnabled() {
switch (redstoneMode) {
case IGNORE:
return true;
case HIGH:
return worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
case LOW:
return !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
}
return false;
}
@Override
public RedstoneMode getRedstoneMode() {
return redstoneMode;
}
@Override
public void setRedstoneMode(RedstoneMode mode) {
this.redstoneMode = mode;
}
@Override
public int getX() {
return xCoord;
}
@Override
public int getY() {
return yCoord;
}
@Override
public int getZ() {
return zCoord;
}
public TileController getController() {
return (TileController) worldObj.getTileEntity(xController, yController, zController);
}
@@ -98,8 +100,8 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if (nbt.hasKey(NBT_REDSTONE_MODE)) {
redstoneMode = RedstoneMode.getById(nbt.getInteger(NBT_REDSTONE_MODE));
if (nbt.hasKey(RedstoneMode.NBT)) {
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
}
}
@@ -107,7 +109,7 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger(NBT_REDSTONE_MODE, redstoneMode.id);
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
}
public abstract int getEnergyUsage();