mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
add oc compat for fluid pump
This commit is contained in:
parent
cc9d04d063
commit
5fb88801ec
@ -3,6 +3,12 @@ package com.hbm.blocks.network;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.hbm.handler.CompatHandler;
|
||||||
|
import cpw.mods.fml.common.Optional;
|
||||||
|
import li.cil.oc.api.machine.Arguments;
|
||||||
|
import li.cil.oc.api.machine.Callback;
|
||||||
|
import li.cil.oc.api.machine.Context;
|
||||||
|
import li.cil.oc.api.network.SimpleComponent;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
import com.hbm.blocks.ILookOverlay;
|
import com.hbm.blocks.ILookOverlay;
|
||||||
@ -93,7 +99,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
|
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -123,40 +129,41 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo
|
|||||||
public int transformMeta(int meta, int coordBaseMode) {
|
public int transformMeta(int meta, int coordBaseMode) {
|
||||||
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
|
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TileEntityFluidPump extends TileEntityLoadedBase implements IFluidStandardTransceiverMK2, IControlReceiver {
|
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
|
||||||
|
public static class TileEntityFluidPump extends TileEntityLoadedBase implements IFluidStandardTransceiverMK2, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
|
||||||
|
|
||||||
public int bufferSize = 100;
|
public int bufferSize = 100;
|
||||||
public FluidTank[] tank;
|
public FluidTank[] tank;
|
||||||
public ConnectionPriority priority = ConnectionPriority.NORMAL;
|
public ConnectionPriority priority = ConnectionPriority.NORMAL;
|
||||||
public boolean redstone = false;
|
public boolean redstone = false;
|
||||||
|
|
||||||
public TileEntityFluidPump() {
|
public TileEntityFluidPump() {
|
||||||
this.tank = new FluidTank[1];
|
this.tank = new FluidTank[1];
|
||||||
this.tank[0] = new FluidTank(Fluids.NONE, bufferSize);
|
this.tank[0] = new FluidTank(Fluids.NONE, bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity() {
|
public void updateEntity() {
|
||||||
|
|
||||||
if(!worldObj.isRemote) {
|
if(!worldObj.isRemote) {
|
||||||
|
|
||||||
// if the capacity were changed directly, any excess buffered fluid would be destroyed
|
// if the capacity were changed directly, any excess buffered fluid would be destroyed
|
||||||
// when running a closed loop or handling hard to get fluids, that's quite bad
|
// when running a closed loop or handling hard to get fluids, that's quite bad
|
||||||
if(this.bufferSize != this.tank[0].getMaxFill()) {
|
if(this.bufferSize != this.tank[0].getMaxFill()) {
|
||||||
int nextBuffer = Math.max(this.tank[0].getFill(), this.bufferSize);
|
int nextBuffer = Math.max(this.tank[0].getFill(), this.bufferSize);
|
||||||
this.tank[0].changeTankSize(nextBuffer);
|
this.tank[0].changeTankSize(nextBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
|
this.redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
|
||||||
|
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata());
|
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata());
|
||||||
ForgeDirection in = dir.getRotation(ForgeDirection.UP);
|
ForgeDirection in = dir.getRotation(ForgeDirection.UP);
|
||||||
ForgeDirection out = in.getOpposite();
|
ForgeDirection out = in.getOpposite();
|
||||||
|
|
||||||
this.trySubscribe(tank[0].getTankType(), worldObj, xCoord + in.offsetX, yCoord, zCoord + in.offsetZ, in);
|
this.trySubscribe(tank[0].getTankType(), worldObj, xCoord + in.offsetX, yCoord, zCoord + in.offsetZ, in);
|
||||||
if(!redstone) this.tryProvide(tank[0], worldObj, xCoord + out.offsetX, yCoord, zCoord + out.offsetZ, out);
|
if(!redstone) this.tryProvide(tank[0], worldObj, xCoord + out.offsetX, yCoord, zCoord + out.offsetZ, out);
|
||||||
|
|
||||||
this.networkPackNT(15);
|
this.networkPackNT(15);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -192,7 +199,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo
|
|||||||
priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte());
|
priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte());
|
||||||
bufferSize = buf.readInt();
|
bufferSize = buf.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public ConnectionPriority getFluidPriority() { return priority; }
|
@Override public ConnectionPriority getFluidPriority() { return priority; }
|
||||||
@Override public FluidTank[] getSendingTanks() { return redstone ? new FluidTank[0] : tank; }
|
@Override public FluidTank[] getSendingTanks() { return redstone ? new FluidTank[0] : tank; }
|
||||||
@Override public FluidTank[] getReceivingTanks() { return this.bufferSize < this.tank[0].getFill() ? new FluidTank[0] : tank; }
|
@Override public FluidTank[] getReceivingTanks() { return this.bufferSize < this.tank[0].getFill() ? new FluidTank[0] : tank; }
|
||||||
@ -214,9 +221,129 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo
|
|||||||
if(data.hasKey("priority")) {
|
if(data.hasKey("priority")) {
|
||||||
priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, data.getByte("priority"));
|
priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, data.getByte("priority"));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.markDirty();
|
this.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public String getComponentName() {
|
||||||
|
return "ntm_fluid_pump";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] getFluid(Context context, Arguments args) {
|
||||||
|
return new Object[] {
|
||||||
|
tank[0].getTankType().getUnlocalizedName()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] getPressure(Context context, Arguments args) {
|
||||||
|
return new Object[] {
|
||||||
|
tank[0].getPressure()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] getFlow(Context context, Arguments args) {
|
||||||
|
return new Object[] {
|
||||||
|
bufferSize
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] getPriority(Context context, Arguments args) {
|
||||||
|
return new Object[] {
|
||||||
|
getFluidPriority()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] getInfo(Context context, Arguments args) {
|
||||||
|
return new Object[] {
|
||||||
|
tank[0].getTankType().getUnlocalizedName(),
|
||||||
|
tank[0].getPressure(),
|
||||||
|
bufferSize,
|
||||||
|
getFluidPriority()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] setPriority(Context context, Arguments args) {
|
||||||
|
int num = args.checkInteger(0);
|
||||||
|
switch (num) {
|
||||||
|
case 0:
|
||||||
|
priority = ConnectionPriority.LOWEST;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
priority = ConnectionPriority.LOW;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
priority = ConnectionPriority.NORMAL;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
priority = ConnectionPriority.HIGH;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
priority = ConnectionPriority.HIGHEST;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return new Object[] {null, "Not a valid Priority."};
|
||||||
|
}
|
||||||
|
return new Object[] {true};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(direct = true, limit = 4)
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] setFlow(Context context, Arguments args) {
|
||||||
|
int input = args.checkInteger(0);
|
||||||
|
if (input > 10000 || input < 0)
|
||||||
|
return new Object[] {null, "Number outside of bounds."};
|
||||||
|
return new Object[] {true};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public String[] methods() {
|
||||||
|
return new String[] {
|
||||||
|
"getPriority",
|
||||||
|
"getPressure",
|
||||||
|
"getFluid",
|
||||||
|
"getFlow",
|
||||||
|
"getInfo",
|
||||||
|
"setPriority",
|
||||||
|
"setFlow"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public Object[] invoke(String method, Context context, Arguments args) throws Exception {
|
||||||
|
switch (method) {
|
||||||
|
case ("getPriority"):
|
||||||
|
return getPriority(context, args);
|
||||||
|
case ("getPressure"):
|
||||||
|
return getPressure(context, args);
|
||||||
|
case ("getFluid"):
|
||||||
|
return getFluid(context, args);
|
||||||
|
case ("getFlow"):
|
||||||
|
return getFlow(context, args);
|
||||||
|
case ("getInfo"):
|
||||||
|
return getInfo(context, args);
|
||||||
|
case ("setPriority"):
|
||||||
|
return setPriority(context, args);
|
||||||
|
case ("setFlow"):
|
||||||
|
return setFlow(context, args);
|
||||||
|
}
|
||||||
|
throw new NoSuchMethodException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class GUIPump extends GuiScreen {
|
public static class GUIPump extends GuiScreen {
|
||||||
@ -261,7 +388,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo
|
|||||||
|
|
||||||
drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0);
|
drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0);
|
||||||
buttonPriority.drawButton(mc, mouseX, mouseY);
|
buttonPriority.drawButton(mc, mouseX, mouseY);
|
||||||
|
|
||||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user