package kpc.common.tile;
import kpc.api.computer.Computer;
import kpc.api.driver.Driver;
import kpc.stdlib.Colors;
import mrtjp.projectred.api.IBundledTile;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
public final class TileEntityIOExpander
extends TileEntity
implements Driver,
IBundledTile{
private final byte[] signals = new byte[Colors.MAX];
@Override
public void readFromNBT(NBTTagCompound comp){
super.readFromNBT(comp);
for(int i = 0; i < Colors.MAX; i++){
this.signals[i] = comp.getByte("signal_" + i);
}
}
@Override
public void writeToNBT(NBTTagCompound comp){
super.writeToNBT(comp);
for(int i = 0; i < Colors.MAX; i++){
comp.setByte("signal_" + i, this.signals[i]);
}
}
@Override
public String getType() {
return "ioExpander";
}
@Override
public String[] getMethods() {
return new String[]{
"set", "get"
};
}
@Override
public Object invoke(String name, Object... args) {
switch(name){
case "set":{
int slot = Integer.valueOf(args[0].toString());
this.signals[slot] = (this.signals[slot] == 255 ? 0 : (byte) 255);
this.worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, worldObj.getBlock(this.xCoord, this.yCoord, this.zCoord));
return slot;
}
case "get":{
int slot = Integer.valueOf(args[0].toString());
return this.signals[slot];
}
}
return null;
}
@Override
public Packet getDescriptionPacket() {
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, tag);
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
this.readFromNBT(pkt.func_148857_g());
}
@Override
public void onConnect(Computer computer) {
}
@Override
public void onDisconnect(Computer computer) {
}
@Override
public byte[] getBundledSignal(int dir) {
return this.signals;
}
@Override
public boolean canConnectBundled(int side) {
return true;
}
}