if(!this.isConnected()) {
throw new Exception("Unable to access turbine - port is not connected");
}
ComputerMethod computerMethod = ComputerMethod.values()[method];
MultiblockTurbine turbine = getTurbine();
FluidTankInfo ti;
switch(computerMethod) {
case getConnected:
return new Object[] { isConnected() };
case getActive:
return new Object[] { turbine.getActive() };
case getEnergyProducedLastTick:
return new Object[] { turbine.getEnergyGeneratedLastTick() };
case getEnergyStored:
return new Object[] { turbine.getEnergyStored() };
case getFluidAmountMax:
return new Object[] { MultiblockTurbine.TANK_SIZE };
case getFluidFlowRate:
return new Object[] { turbine.getFluidConsumedLastTick() };
case getFluidFlowRateMax:
return new Object[] { turbine.getMaxIntakeRate() };
case getFluidFlowRateMaxMax:
return new Object[] { turbine.getMaxIntakeRateMax() };
case getInputAmount:
ti = turbine.getTankInfo(MultiblockTurbine.TANK_INPUT);
if(ti != null && ti.fluid != null) {
return new Object[] { ti.fluid.amount };
}
else {
return new Object[] { 0f };
}
case getInputType:
ti = turbine.getTankInfo(MultiblockTurbine.TANK_INPUT);
if(ti != null && ti.fluid != null) {
return new Object[] { ti.fluid.getFluid().getName() };
}
else {
return null;
}
case getOutputAmount:
ti = turbine.getTankInfo(MultiblockTurbine.TANK_OUTPUT);
if(ti != null && ti.fluid != null) {
return new Object[] { ti.fluid.amount };
}
else {
return new Object[] { 0f };
}
case getOutputType:
ti = turbine.getTankInfo(MultiblockTurbine.TANK_OUTPUT);
if(ti != null && ti.fluid != null) {
return new Object[] { ti.fluid.getFluid().getName() };
}
else {
return null;
}
case getRotorSpeed:
return new Object[] { turbine.getRotorSpeed() };
case getNumberOfBlades:
return new Object[] { turbine.getNumRotorBlades() };
case getBladeEfficiency:
return new Object[] { turbine.getRotorEfficiencyLastTick() * 100f };
case getRotorMass:
return new Object[] { turbine.getRotorMass() };
case getInductorEngaged:
return new Object[] { turbine.getInductorEngaged() };
case getMinimumCoordinate:
{
CoordTriplet coord = turbine.getMinimumCoord();
return new Object[] { coord.x, coord.y, coord.z };
}
case getMaximumCoordinate:
{
CoordTriplet coord = turbine.getMaximumCoord();
return new Object[] { coord.x, coord.y, coord.z };
}
case setActive:
if(arguments.length < 1) {
throw new IllegalArgumentException("Insufficient number of arguments, expected 1");
}
if(!(arguments[0] instanceof Boolean)) {
throw new IllegalArgumentException("Invalid argument 0, expected Boolean");
}
turbine.setActive((Boolean)arguments[0]);
break;
case setFluidFlowRateMax:
if(arguments.length < 1) {
throw new IllegalArgumentException("Insufficient number of arguments, expected 1");
}
if(!(arguments[0] instanceof Double)) {
throw new IllegalArgumentException("Invalid argument 0, expected Number");
}
int newRate = (int)Math.round((Double)arguments[0]);
turbine.setMaxIntakeRate(newRate);
break;
case setVentNone:
turbine.setVentStatus(VentStatus.DoNotVent, true);
break;
case setVentOverflow:
turbine.setVentStatus(VentStatus.VentOverflow, true);
break;
case setVentAll:
turbine.setVentStatus(VentStatus.VentAll, true);
break;
case setInductorEngaged:
if(arguments.length < 1) {
throw new IllegalArgumentException("Insufficient number of arguments, expected 1");
}
if(!(arguments[0] instanceof Boolean)) {
throw new IllegalArgumentException("Invalid argument 0, expected Boolean");
}
turbine.setInductorEngaged((Boolean)arguments[0], true);
break;
default:
throw new Exception("Method unimplemented - yell at Beef");
}