package mods.ocminecart.common.entityextend;
import mods.railcraft.common.carts.EntityLocomotive.LocoMode;
import mods.railcraft.common.carts.EntityLocomotive.LocoSpeed;
import mods.railcraft.common.carts.EntityLocomotiveSteamSolid;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import java.util.List;
public class RemoteSteamLocomotive extends RemoteCartExtender {
@Override
protected void processCommand(String cmd, Object[] args){
super.processCommand(cmd, args);
if(cmd==null) return;
EntityLocomotiveSteamSolid loco = (EntityLocomotiveSteamSolid) this.entity;
if(cmd.equals("speed")){
if(args.length>0 && args[0] instanceof Double){
int speed = (int)(double)(Double)args[0];
speed = -speed+3;
speed = Math.max(0, Math.min(4, speed));
loco.setSpeed(LocoSpeed.VALUES[speed]);
}
this.sendPacket(new Object[]{3-loco.getSpeed().ordinal()}, this.getRespPort(), this.getRespAddress());
}
else if(cmd.equals("mode")){
if(args.length>0 && args[0] instanceof Double){
int mode = (int)(double)(Double)args[0];
mode = -mode+2;
mode = Math.max(0, Math.min(2, mode));
loco.setMode(LocoMode.VALUES[mode]);
}
this.sendPacket(new Object[]{2-loco.getMode().ordinal()}, this.getRespPort(), this.getRespAddress());
}
else if(cmd.equals("whistle")){
loco.whistle();
}
else if(cmd.equals("heat")){
this.sendPacket(new Object[]{loco.boiler.getHeat()}, this.getRespPort(), this.getRespAddress());
}
else if(cmd.equals("steam")){
FluidTankInfo[] info = loco.getTankInfo(ForgeDirection.UNKNOWN);
for(int i=0;i<info.length;i+=1)
{
if(info[i].fluid != null && info[i].fluid.isFluidEqual(FluidRegistry.getFluidStack("steam", 1)))
{
this.sendPacket(new Object[]{info[i].fluid.amount,"steam"}, this.getRespPort(), this.getRespAddress());
return;
}
}
this.sendPacket(new Object[]{0,"steam"}, this.getRespPort(), this.getRespAddress());
}
else if(cmd.equals("water")){
FluidTankInfo[] info = loco.getTankInfo(ForgeDirection.UNKNOWN);
for(int i=0;i<info.length;i+=1)
{
if(info[i].fluid != null && info[i].fluid.isFluidEqual(new FluidStack(FluidRegistry.WATER,1)))
{
this.sendPacket(new Object[]{info[i].fluid.amount,"water"}, this.getRespPort(), this.getRespAddress());
return;
}
}
this.sendPacket(new Object[]{0 ,"water"}, this.getRespPort(), this.getRespAddress());
}
}
@Override
protected List<String> getCommands() {
List<String> cmds = super.getCommands();
cmds.add("speed");
cmds.add("mode");
cmds.add("steam");
cmds.add("heat");
cmds.add("water");
cmds.add("whistle");
return cmds;
}
@Override
protected String getDoc(String cmd) {
String su = super.getDoc(cmd);
if(su!=null) return su;
if(cmd.equals("speed"))
return "speed([value:number]):number -- set/get the speed. -1 reverse; 0 slowest; 3 max. speed";
else if(cmd.equals("mode"))
return "mode([value:number]):number -- set/get the mode. 0 shutdown; 1 idle; 2 running";
else if(cmd.equals("whistle"))
return "whistle() -- make the whistle sound";
else if(cmd.equals("steam"))
return "steam():number -- get Steam amount in mB.";
else if(cmd.equals("water"))
return "water():number -- get Water amount in mB.";
else if(cmd.equals("heat"))
return "heat():number -- get boiler heat";
return null;
}
}