package kpc.common.computer; import kawa.standard.Scheme; import kpc.api.State; import kpc.api.computer.OperatingSystem; import kpc.api.fs.FileSystem; import kpc.common.KPComputers; import kpc.common.net.KPCPacket; import kpc.api.ComputerPosition; import kpc.common.utils.NBTUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; public final class ClientComputer implements kpc.api.computer.Computer { private final int id; private final ComputerPosition pos; private Terminal terminal = new Terminal(); public ClientComputer(ComputerPosition pos, int id){ this.pos = pos; this.id = id; } public void requestState(){ KPCPacket packet = new KPCPacket(); packet.id = KPCPacket.PACKET_REQUESTUPDATE; packet.dataInt = new int[]{this.id}; KPComputers.channel.sendToServer(KPComputers.encode(packet)); } @Override public State state() { throw new UnsupportedOperationException("Client state not retrievable"); } @Override public int id() { return this.id; } @Override public void turnOn() { KPCPacket packet = new KPCPacket(); packet.id = KPCPacket.PACKET_TURNON; packet.dataInt = new int[]{this.id}; KPComputers.channel.sendToServer(KPComputers.encode(packet)); } @Override public void shutdown() { KPCPacket packet = new KPCPacket(); packet.id = KPCPacket.PACKET_SHUTDOWN; KPComputers.channel.sendToServer(KPComputers.encode(packet)); } @Override public void reboot() { KPCPacket packet = new KPCPacket(); packet.id = KPCPacket.PACKET_REBOOT; packet.dataInt = new int[]{this.id}; KPComputers.channel.sendToServer(KPComputers.encode(packet)); } @Override public void queueEvent(String event, Object... params) { KPCPacket packet = new KPCPacket(); packet.id = KPCPacket.PACKET_QUEUEEVENT; packet.dataInt = new int[]{this.id}; packet.dataString = new String[]{event}; if(params != null && params.length > 0){ packet.dataNBT = NBTUtils.encode(params); } KPComputers.channel.sendToServer(KPComputers.encode(packet)); } public void readDescription(NBTTagCompound comp){ try{ if(comp != null && comp.hasKey("terminal")){ NBTTagCompound termComp = comp.getCompoundTag("terminal"); this.terminal = new Terminal(termComp.getInteger("width"), termComp.getInteger("height")); this.terminal.readFromNBT(termComp); } else{ this.terminal = new Terminal(); } } catch(Exception e){ e.printStackTrace(System.err); } } public void handlePacket(KPCPacket packet, EntityPlayer player){ switch(packet.id){ case KPCPacket.PACKET_COMPUPDATE:{ this.readDescription(packet.dataNBT); } } } @Override public Terminal terminal() { return this.terminal; } @Override public OperatingSystem os() { throw new UnsupportedOperationException("Client OS not retrievable"); } @Override public Scheme scheme() { throw new UnsupportedOperationException("Client Scheme not retrievable"); } @Override public FileSystem fs() { throw new UnsupportedOperationException("Client FileSystem not retrievable"); } @Override public ComputerPosition pos() { return this.pos; } }