diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java
index 980bdfb32..67da0e324 100644
--- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java
+++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java
@@ -6,6 +6,7 @@ import java.util.List;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
+import com.hbm.handler.CompatHandler;
import com.hbm.lib.RefStrings;
import com.hbm.render.block.RenderBlockMultipass;
import com.hbm.tileentity.INBTPacketReceiver;
@@ -14,8 +15,13 @@ import com.hbm.util.BobMathUtil;
import com.hbm.util.I18nUtil;
import api.hbm.energymk2.PowerNetMK2;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+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 net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
@@ -98,7 +104,8 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
return IBlockMultiPass.getRenderType();
}
- public static class TileEntityCableGauge extends TileEntityCableBaseNT implements INBTPacketReceiver {
+ @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+ public static class TileEntityCableGauge extends TileEntityCableBaseNT implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent {
private long deltaTick = 0;
private long deltaSecond = 0;
@@ -134,5 +141,22 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
this.deltaTick = Math.max(nbt.getLong("deltaT"), 0);
this.deltaLastSecond = Math.max(nbt.getLong("deltaS"), 0);
}
+
+ @Override
+ public String getComponentName() {
+ return "ntm_power_gauge";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getTransfer(Context context, Arguments args) {
+ return new Object[] {deltaTick, deltaSecond};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getInfo(Context context, Arguments args) {
+ return new Object[] {deltaTick, deltaSecond, xCoord, yCoord, zCoord};
+ }
}
}
diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java
index 9c17a38c0..613337412 100644
--- a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java
+++ b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java
@@ -8,6 +8,7 @@ import java.util.Locale;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.lib.RefStrings;
import com.hbm.render.block.RenderBlockMultipass;
@@ -108,7 +109,7 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL
}
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
- public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements INBTPacketReceiver, SimpleComponent {
+ public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent {
private BigInteger lastMeasurement = BigInteger.valueOf(10);
private long deltaTick = 0;
diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java
index 07d7fd20a..ca314d371 100644
--- a/src/main/java/com/hbm/handler/CompatHandler.java
+++ b/src/main/java/com/hbm/handler/CompatHandler.java
@@ -2,20 +2,32 @@ package com.hbm.handler;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
+import com.hbm.tileentity.TileEntityProxyCombo;
+import cpw.mods.fml.common.Optional;
+import li.cil.oc.api.machine.Arguments;
+import li.cil.oc.api.machine.Context;
+import li.cil.oc.api.network.*;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChatComponentTranslation;
+import net.minecraft.util.ChatStyle;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.common.util.ForgeDirection;
/**
* General handler for OpenComputers compatibility.
- *
- * Mostly just functions used across many TEs.
+ * @author BallOfEnergy (Microwave)
*/
public class CompatHandler {
+
public static Object[] steamTypeToInt(FluidType type) {
if(type == Fluids.STEAM) {return new Object[] {0};}
else if(type == Fluids.HOTSTEAM) {return new Object[] {1};}
else if(type == Fluids.SUPERHOTSTEAM) {return new Object[] {2};}
return new Object[] {3};
}
+
public static FluidType intToSteamType(int arg) {
switch(arg) {
default:
@@ -28,4 +40,82 @@ public class CompatHandler {
return Fluids.ULTRAHOTSTEAM;
}
}
+
+ /**
+ * This is an interface made specifically for adding OC compatibility to NTM machines. The {@link li.cil.oc.api.network.SimpleComponent} interface must also be implemented in the TE.
+ *
+ * This interface is not required to be defined as an optional interface, though the {@link li.cil.oc.api.network.SimpleComponent} interface must be declared as an optional interface.
+ *
+ * Pseudo multiblocks will automatically receive compatibility with their ports by proxying their `methods()` and `invoke()` functions. This is the only time they need to be defined.
+ *
+ **/
+ @Optional.InterfaceList({
+ @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers"),
+ @Optional.Interface(iface = "li.cil.oc.api.network.SidedComponent", modid = "OpenComputers"),
+ @Optional.Interface(iface = "li.cil.oc.api.network.Analyzable", modid = "OpenComputers"),
+ @Optional.Interface(iface = "li.cil.oc.api.network.ManagedPeripheral", modid = "OpenComputers"),
+ })
+ @SimpleComponent.SkipInjection // make sure OC doesn't inject this shit into the interface and crash
+ public interface OCComponent extends SimpleComponent, SidedComponent, Analyzable, ManagedPeripheral {
+
+ /**
+ * Must be overridden in the implemented TE, or it will default to "ntm_null".
+ *
+ * Dictates the component name exposed to the computer.
+ * @return String
+ */
+ @Override
+ default String getComponentName() {
+ return "ntm_null";
+ }
+
+ /**
+ * Tells OC which sides of the block cables should connect to.
+ * @param side Side to check
+ * @return If the side should be able to connect.
+ */
+ @Override
+ default boolean canConnectNode(ForgeDirection side) {
+ return true;
+ }
+
+ /**
+ * Function to give more information when analyzing the block. Multiple entries in the array will be sent to the user in the order of the array.
+ * @return Additional text to add in the form of lang entries (ex: "analyze.basic2").
+ */
+ default String[] getExtraInfo() {return new String[] {"analyze.noInfo"};}
+
+ @Override
+ default Node[] onAnalyze(EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
+ player.addChatComponentMessage(new ChatComponentTranslation("analyze.basic1").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD)));
+ player.addChatComponentMessage(new ChatComponentTranslation("analyze.basic2").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)));
+ player.addChatComponentMessage(new ChatComponentTranslation("analyze.basic3").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD)));
+ player.addChatComponentMessage(new ChatComponentTranslation("analyze.name", this.getComponentName()).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD)));
+ String[] extraInfo = getExtraInfo();
+ for (String info : extraInfo) {
+ if(!info.equals(""))
+ player.addChatComponentMessage(new ChatComponentTranslation(info).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)));
+ }
+ TileEntity te = player.worldObj.getTileEntity((int) hitX, (int) hitY, (int) hitZ);
+ OCComponent component = (OCComponent) te;
+ if((component.methods() == null && te instanceof TileEntityProxyCombo) || component.getComponentName().equals("ntm_null")) {
+ player.addChatComponentMessage(new ChatComponentTranslation("analyze.error").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
+ }
+ return null;
+ }
+
+ /**
+ * Standard methods array from {@link li.cil.oc.api.network.ManagedPeripheral} extending {@link li.cil.oc.api.network.SimpleComponent}.
+ * @return Array of methods to expose to the computer.
+ */
+ @Override
+ default String[] methods() {return null;}
+
+ /**
+ * Standard invoke function from {@link li.cil.oc.api.network.ManagedPeripheral} extending {@link li.cil.oc.api.network.SimpleComponent}.
+ * @return Data to the computer as a return from the function.
+ */
+ @Override
+ default Object[] invoke(String method, Context context, Arguments args) throws Exception {return null;}
+ }
}
diff --git a/src/main/java/com/hbm/inventory/gui/GUIPWR.java b/src/main/java/com/hbm/inventory/gui/GUIPWR.java
index d60c3bece..db21f4194 100644
--- a/src/main/java/com/hbm/inventory/gui/GUIPWR.java
+++ b/src/main/java/com/hbm/inventory/gui/GUIPWR.java
@@ -65,7 +65,7 @@ public class GUIPWR extends GuiInfoContainer {
this.drawCustomInfoStat(x, y, guiLeft + 151, guiTop + 31, 18, 18, x, y, new String[] { "Hull: " + String.format(Locale.US, "%,d", controller.hullHeat) + " / " + String.format(Locale.US, "%,d", controller.hullHeatCapacityBase) + " TU" });
this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 31, 36, 18, x, y, new String[] { ((int) (controller.progress * 100 / controller.processTime)) + "%" });
- this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 53, 54, 4, x, y, "Control rod level: " + (100 - controller.rodLevel) + "%");
+ this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 53, 54, 4, x, y, "Control rod level: " + (100 - (Math.round(controller.rodLevel * 100)/100)) + "%");
if(controller.typeLoaded != -1 && controller.amountLoaded > 0) {
ItemStack display = new ItemStack(ModItems.pwr_fuel, 1, controller.typeLoaded);
diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java
index 7fe9db0f3..f550af4b8 100644
--- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java
+++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java
@@ -2,6 +2,7 @@ package com.hbm.tileentity;
import api.hbm.block.ICrucibleAcceptor;
+import com.hbm.handler.CompatHandler.OCComponent;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
import com.hbm.inventory.fluid.FluidType;
@@ -10,6 +11,10 @@ import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluid.IFluidConnector;
import api.hbm.tile.IHeatSource;
import com.hbm.inventory.material.Mats;
+import cpw.mods.fml.common.Optional;
+import li.cil.oc.api.machine.Arguments;
+import li.cil.oc.api.machine.Context;
+import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
@@ -18,7 +23,11 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource, ICrucibleAcceptor {
+@Optional.InterfaceList({
+ @Optional.Interface(iface = "com.hbm.handler.CompatHandler.OCComponent", modid = "opencomputers"),
+ @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")
+})
+public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent {
TileEntity tile;
boolean inventory;
@@ -537,4 +546,39 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
}
return null;
}
+
+ @Override // please work
+ public String getComponentName() {
+ if(this.getTile() instanceof OCComponent)
+ return ((OCComponent) this.getTile()).getComponentName();
+ return OCComponent.super.getComponentName();
+ }
+
+ @Override
+ public boolean canConnectNode(ForgeDirection side) { //thank you vaer
+ if(this.getTile() instanceof OCComponent)
+ return (this.getTile().getBlockMetadata() & 6) == 6 && ((OCComponent) this.getTile()).canConnectNode(side);
+ return OCComponent.super.canConnectNode(null);
+ }
+
+ @Override
+ public String[] getExtraInfo() {
+ if(this.getTile() instanceof OCComponent)
+ return new String[] {"analyze.dummy"};
+ return OCComponent.super.getExtraInfo();
+ }
+
+ @Override
+ public String[] methods() {
+ if(this.getTile() instanceof OCComponent)
+ return ((OCComponent) this.getTile()).methods();
+ return OCComponent.super.methods();
+ }
+
+ @Override
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ if(this.getTile() instanceof OCComponent)
+ return ((OCComponent) this.getTile()).invoke(method, context, args);
+ return OCComponent.super.invoke(null, null, null);
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java
index 3d36b7ff1..7624b53d5 100644
--- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java
+++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java
@@ -4,6 +4,12 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
+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.apache.logging.log4j.Level;
import com.hbm.config.GeneralConfig;
@@ -49,7 +55,8 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent {
/** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */
public static final HashMap> missiles = new HashMap();
@@ -462,4 +469,87 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
/** Any extra conditions for launching in addition to the missile being valid and fueled */
public abstract boolean isReadyForLaunch();
public abstract double getLaunchOffset();
+
+ // do some opencomputer stuff
+ @Override
+ public String getComponentName() {
+ return "ntm_launch_pad";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getEnergyInfo(Context context, Arguments args) {
+ return new Object[] {getPower(), getMaxPower()};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getFluid(Context context, Arguments args) {
+ return new Object[] {
+ this.tanks[0].getFill(), this.tanks[0].getMaxFill(), this.tanks[0].getTankType().getUnlocalizedName(),
+ this.tanks[1].getFill(), this.tanks[1].getMaxFill(), this.tanks[1].getTankType().getUnlocalizedName()
+ };
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] canLaunch(Context context, Arguments args) {
+ return new Object[] {canLaunch()};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getTier(Context context, Arguments args) {
+ if(!isMissileValid())
+ return new Object[] {};
+ ItemMissile missile = (ItemMissile) slots[0].getItem();
+ if(missile.tier == ItemMissile.MissileTier.TIER0)
+ return new Object[] {0};
+ if(missile.tier == ItemMissile.MissileTier.TIER1)
+ return new Object[] {1};
+ if(missile.tier == ItemMissile.MissileTier.TIER2)
+ return new Object[] {2};
+ if(missile.tier == ItemMissile.MissileTier.TIER3)
+ return new Object[] {3};
+ if(missile.tier == ItemMissile.MissileTier.TIER4)
+ return new Object[] {4};
+ return new Object[] {5}; // unknown tier
+ }
+
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] launch(Context context, Arguments args) {
+ if(canLaunch()) {
+ return new Object[] {sendCommandPosition(args.checkInteger(0), -1 /*unused anyway*/, args.checkInteger(1))};
+ }
+ return new Object[] {false};
+ }
+
+ @Override
+ public String[] methods() {
+ return new String[] {
+ "getEnergyInfo",
+ "getFluid",
+ "canLaunch",
+ "getTier",
+ "launch"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getEnergyInfo"):
+ return getEnergyInfo(context, args);
+ case ("getFluid"):
+ return getFluid(context, args);
+ case ("canLaunch"):
+ return canLaunch(context, args);
+ case ("getTier"):
+ return getTier(context, args);
+ case ("launch"):
+ return launch(context, args);
+ }
+ throw new NoSuchMethodException();
+}
+
}
diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java
index 9123d3aa0..b193f0cb1 100644
--- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java
+++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.bomb;
import java.util.List;
import com.hbm.entity.missile.EntityMissileCustom;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.MissileStruct;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
@@ -53,7 +54,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider, SimpleComponent, IRadarCommandReceiver {
+public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider, SimpleComponent, IRadarCommandReceiver, CompatHandler.OCComponent {
private ItemStack slots[];
@@ -649,7 +650,7 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
// do some opencomputer stuff
@Override
public String getComponentName() {
- return "large_launch_pad";
+ return "ntm_custom_launch_pad";
}
@Callback
@@ -661,7 +662,11 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getContents(Context context, Arguments args) {
- return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[0].getTankType().getName(), tanks[1].getFill(), tanks[1].getMaxFill(), tanks[1].getTankType().getName(), solid, maxSolid};
+ return new Object[] {
+ tanks[0].getFill(), tanks[0].getMaxFill(), tanks[0].getTankType().getUnlocalizedName(),
+ tanks[1].getFill(), tanks[1].getMaxFill(), tanks[1].getTankType().getUnlocalizedName(),
+ solid, maxSolid
+ };
}
@Callback
@@ -682,13 +687,6 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
} else
return new Object[] {false};
- // Not sure if i should have this
- /*
- if(xCoord2 == xCoord && zCoord2 == zCoord) {
- xCoord2 += 1;
- }
- */
-
return new Object[] {xCoord2, zCoord2};
}
return new Object[] {false, "Designator not found"};
@@ -716,6 +714,35 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
return new Object[] {false};
}
+ public String[] methods() {
+ return new String[] {
+ "getEnergyInfo",
+ "getContents",
+ "getLaunchInfo",
+ "getCoords",
+ "setCoords",
+ "launch"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getEnergyInfo"):
+ return getEnergyInfo(context, args);
+ case ("getContents"):
+ return getContents(context, args);
+ case ("getLaunchInfo"):
+ return getLaunchInfo(context, args);
+ case ("getCoords"):
+ return getCoords(context, args);
+ case ("setCoords"):
+ return setCoords(context, args);
+ case ("launch"):
+ return launch(context, args);
+ }
+ throw new NoSuchMethodException();
+}
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerLaunchTable(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java
index 5ae5bc423..874064a5c 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java
@@ -41,7 +41,7 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC {
+public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 100000000000L;
@@ -345,7 +345,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getFluid(Context context, Arguments args) {
- return new Object[] {tanks[0].getFill(), tanks[1].getFill(), tanks[1].getFill(), tanks[1].getMaxFill()};
+ return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()};
}
@Callback(direct = true)
@@ -358,7 +358,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
@Optional.Method(modid = "OpenComputers")
public Object[] setType(Context context, Arguments args) {
tanks[0].setTankType(CompatHandler.intToSteamType(args.checkInteger(0)));
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true)
@@ -367,6 +367,29 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())};
}
+ public String[] methods() {
+ return new String[] {
+ "getFluid",
+ "getType",
+ "setType",
+ "getInfo"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getFluid"):
+ return getFluid(context, args);
+ case ("getType"):
+ return getType(context, args);
+ case ("setType"):
+ return setType(context, args);
+ case ("getInfo"):
+ return getInfo(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
+
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] {tanks[1]};
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java
index ff1278e52..1bab38cd8 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java
@@ -5,6 +5,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluid.IFluidStandardReceiver;
import api.hbm.tile.IInfoProviderEC;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerCoreEmitter;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
@@ -37,7 +38,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.List;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEnergyReceiverMK2, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEnergyReceiverMK2, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 1000000000L;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java
index e5862e2ab..20891cbe3 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java
@@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.inventory.container.ContainerCoreInjector;
import com.hbm.inventory.fluid.FluidType;
@@ -27,7 +28,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityCoreInjector extends TileEntityMachineBase implements IFluidAcceptor, IFluidStandardReceiver, SimpleComponent, IGUIProvider {
+public class TileEntityCoreInjector extends TileEntityMachineBase implements IFluidAcceptor, IFluidStandardReceiver, SimpleComponent, IGUIProvider, CompatHandler.OCComponent {
public FluidTank[] tanks;
public static final int range = 15;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java
index 54ca9de4c..b2fe65851 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java
@@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.inventory.container.ContainerCoreReceiver;
import com.hbm.inventory.fluid.FluidType;
@@ -32,7 +33,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidAcceptor, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidAcceptor, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public long joules;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java
index 50564fb48..a21677995 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java
@@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerCoreStabilizer;
import com.hbm.inventory.gui.GUICoreStabilizer;
import com.hbm.items.ModItems;
@@ -28,7 +29,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityCoreStabilizer extends TileEntityMachineBase implements IEnergyReceiverMK2, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityCoreStabilizer extends TileEntityMachineBase implements IEnergyReceiverMK2, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 2500000000L;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java
index a53e7614d..314e91614 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.machine;
import java.util.ArrayList;
import java.util.List;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.util.CompatEnergyControl;
import com.hbm.util.ContaminationUtil;
@@ -17,7 +18,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityGeiger extends TileEntity implements SimpleComponent, IInfoProviderEC {
+public class TileEntityGeiger extends TileEntity implements SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
int timer = 0;
int ticker = 0;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java
index c4e930c6d..524671911 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java
@@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerICF;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
@@ -19,10 +20,15 @@ import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.fluid.IFluidStandardTransceiver;
import api.hbm.tile.IInfoProviderEC;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
+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 net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@@ -32,7 +38,8 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent {
public long laser;
public long maxLaser;
@@ -284,4 +291,86 @@ public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider
data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, this.consumption);
data.setDouble(CompatEnergyControl.D_OUTPUT_MB, this.output);
}
+
+ //OC stuff
+
+ @Override
+ public String getComponentName() {
+ return "ntm_icf_reactor";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getHeat(Context context, Arguments args) {
+ return new Object[] {this.heat};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getHeatingRate(Context context, Arguments args) {
+ return new Object[] {this.heatup};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getMaxHeat(Context context, Arguments args) {
+ return new Object[] {maxHeat};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getPower(Context context, Arguments args) {
+ return new Object[] {this.laser};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getFluid(Context context, Arguments args) {
+ return new Object[] {
+ tanks[0].getFill(), tanks[0].getMaxFill(), tanks[0].getTankType().getUnlocalizedName(),
+ tanks[1].getFill(), tanks[1].getMaxFill(), tanks[1].getTankType().getUnlocalizedName(),
+ tanks[2].getFill(), tanks[2].getMaxFill()
+ };
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getPelletStats(Context context, Arguments args) {
+ return new Object[] {
+ ItemICFPellet.getDepletion(slots[5]),
+ ItemICFPellet.getMaxDepletion(slots[5]),
+ ItemICFPellet.getFusingDifficulty(slots[5]),
+ ItemICFPellet.getType(slots[5], true).name(),
+ ItemICFPellet.getType(slots[5], false).name()
+ };
+ }
+
+ public String[] methods() {
+ return new String[] {
+ "getHeat",
+ "getHeatingRate",
+ "getMaxHeat",
+ "getPower",
+ "getFluid",
+ "getPelletStats"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch (method) {
+ case ("getHeat"):
+ return getHeat(context, args);
+ case ("getHeatingRate"):
+ return getHeatingRate(context, args);
+ case ("getMaxHeat"):
+ return getMaxHeat(context, args);
+ case ("getPower"):
+ return getPower(context, args);
+ case ("getFluid"):
+ return getFluid(context, args);
+ case ("getPelletStats"):
+ return getPelletStats(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java
index 22fb2665d..90ac75709 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java
@@ -8,6 +8,7 @@ import com.hbm.blocks.machine.MachineITER;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionNT;
import com.hbm.explosion.ExplosionNT.ExAttrib;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.container.ContainerITER;
@@ -33,9 +34,14 @@ import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluid.IFluidStandardTransceiver;
import api.hbm.tile.IInfoProviderEC;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+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 net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@@ -46,7 +52,8 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 10000000;
@@ -659,4 +666,93 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
data.setDouble("consumption", output * 10);
data.setDouble("outputmb", output);
}
+
+
+ @Override
+ public String getComponentName() {
+ return "ntm_fusion";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getEnergyInfo(Context context, Arguments args) {
+ return new Object[] {getPower(), getMaxPower()};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] isActive(Context context, Arguments args) {
+ return new Object[] {isOn};
+ }
+
+ @Callback(direct = true, limit = 4)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setActive(Context context, Arguments args) {
+ isOn = args.checkBoolean(0);
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getFluid(Context context, Arguments args) {
+ return new Object[] {
+ tanks[0].getFill(), tanks[0].getMaxFill(),
+ tanks[1].getFill(), tanks[1].getMaxFill(),
+ plasma.getFill(), plasma.getMaxFill(), plasma.getTankType().getUnlocalizedName()
+ };
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getPlasmaTemp(Context context, Arguments args) {
+ return new Object[] {plasma.getTankType().temperature};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getMaxTemp(Context context, Arguments args) {
+ if (slots[3] != null && (slots[3].getItem() instanceof ItemFusionShield))
+ return new Object[] {((ItemFusionShield) slots[3].getItem()).maxTemp};
+ return new Object[] {"N/A"};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getBlanketDamage(Context context, Arguments args) {
+ if (slots[3] != null && (slots[3].getItem() instanceof ItemFusionShield))
+ return new Object[]{ItemFusionShield.getShieldDamage(slots[3]), ((ItemFusionShield)slots[3].getItem()).maxDamage};
+ return new Object[] {"N/A", "N/A"};
+ }
+
+ public String[] methods() {
+ return new String[] {
+ "getEnergyInfo",
+ "isActive",
+ "setActive",
+ "getFluid",
+ "getPlasmaTemp",
+ "getMaxTemp",
+ "getBlanketDamage"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch (method) {
+ case ("getEnergyInfo"):
+ return getEnergyInfo(context, args);
+ case ("isActive"):
+ return isActive(context, args);
+ case ("setActive"):
+ return setActive(context, args);
+ case ("getFluid"):
+ return getFluid(context, args);
+ case ("getPlasmaTemp"):
+ return getPlasmaTemp(context, args);
+ case ("getMaxTemp"):
+ return getMaxTemp(context, args);
+ case ("getBlanketDamage"):
+ return getBlanketDamage(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java
index 508e4d3a0..81c97679d 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java
@@ -44,7 +44,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC {
+public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 100000000;
@@ -365,7 +365,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme
@Optional.Method(modid = "OpenComputers")
public Object[] setType(Context context, Arguments args) {
tanks[0].setTankType(CompatHandler.intToSteamType(args.checkInteger(0)));
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true)
@@ -374,6 +374,29 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme
return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())};
}
+ public String[] methods() {
+ return new String[] {
+ "getFluid",
+ "getType",
+ "setType",
+ "getInfo"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getFluid"):
+ return getFluid(context, args);
+ case ("getType"):
+ return getType(context, args);
+ case ("setType"):
+ return setType(context, args);
+ case ("getInfo"):
+ return getInfo(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMachineLargeTurbine(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java
index e4f255b8a..99e87371a 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java
@@ -8,6 +8,7 @@ import java.util.function.Function;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.extprop.HbmLivingProps;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerMachineRadarNT;
import com.hbm.inventory.gui.GUIMachineRadarNT;
@@ -37,11 +38,16 @@ import api.hbm.entity.IRadarDetectable;
import api.hbm.entity.IRadarDetectableNT;
import api.hbm.entity.IRadarDetectableNT.RadarScanParams;
import api.hbm.entity.RadarEntry;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
+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 net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@@ -60,7 +66,8 @@ import net.minecraft.world.WorldServer;
* Now with SmЯt™ lag-free entity detection! (patent pending)
* @author hbm
*/
-public class TileEntityMachineRadarNT extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, IConfigurableMachine, IControlReceiver {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public class TileEntityMachineRadarNT extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, IConfigurableMachine, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
public boolean scanMissiles = true;
public boolean scanShells = true;
@@ -592,4 +599,127 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
return null;
});
}
+
+ //OC compat!
+
+ @Override
+ public String getComponentName() {
+ return "ntm_radar";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getSettings(Context context, Arguments args) {
+ return new Object[] {scanMissiles, scanShells, scanPlayers, smartMode};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getRange(Context context, Arguments args) {
+ return new Object[] {this.getRange()};
+ }
+
+ @Callback(direct = true, limit = 4)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setSettings(Context context, Arguments args) {
+ this.scanMissiles = args.checkBoolean(0);
+ this.scanShells = args.checkBoolean(1);
+ this.scanPlayers = args.checkBoolean(2);
+ this.smartMode = args.checkBoolean(3);
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getEnergyInfo(Context context, Arguments args) {
+ return new Object[] {getPower(), getMaxPower()};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] isJammed(Context context, Arguments args) {
+ return new Object[] {this.jammed};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getAmount(Context context, Arguments args) {
+ return new Object[] {entries.size()};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] isIndexPlayer(Context context, Arguments args) {
+ int index = args.checkInteger(0) - 1;
+ if(index > entries.size() || index < 0) {
+ return new Object[] {null, "No entity exists at that index."};
+ }
+ RadarEntry e = entries.get(index);
+ return new Object[] {e.blipLevel == IRadarDetectableNT.PLAYER};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getIndexType(Context context, Arguments args) {
+ int index = args.checkInteger(0) - 1;
+ if(index > entries.size() || index < 0) {
+ return new Object[] {null, "No entity exists at that index."};
+ }
+ RadarEntry e = entries.get(index);
+ return new Object[] {e.blipLevel};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getEntityAtIndex(Context context, Arguments args) {
+ int index = args.checkInteger(0) - 1;
+ if(index > entries.size() || index < 0) {
+ return new Object[] {null, "No entity exists at that index."};
+ }
+ RadarEntry e = entries.get(index);
+ int type = e.blipLevel;
+ if(e.blipLevel == IRadarDetectableNT.PLAYER) {
+ return new Object[]{true, e.posX, e.posY, e.posZ, type, e.unlocalizedName};
+ }
+ return new Object[]{false, e.posX, e.posY, e.posZ, type};
+ }
+
+ public String[] methods() {
+ return new String[] {
+ "getSettings",
+ "getRange",
+ "setSettings",
+ "getEnergyInfo",
+ "isJammed",
+ "getAmount",
+ "isIndexPlayer",
+ "getIndexType",
+ "getEntityAtIndex"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getSettings"):
+ return getSettings(context, args);
+ case ("getRange"):
+ return getRange(context, args);
+ case ("setSettings"):
+ return setSettings(context, args);
+ case ("getEnergyInfo"):
+ return getEnergyInfo(context, args);
+ case ("isJammed"):
+ return isJammed(context, args);
+ case ("getAmount"):
+ return getAmount(context, args);
+ case ("isIndexPlayer"):
+ return isIndexPlayer(context, args);
+ case ("getIndexType"):
+ return getIndexType(context, args);
+ case ("getEntityAtIndex"):
+ return getEntityAtIndex(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
+
}
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java
index 4c42a1ce5..c216f9da9 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java
@@ -2,6 +2,7 @@ package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.ReactorResearch;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerMachineReactorBreeding;
import com.hbm.inventory.gui.GUIMachineReactorBreeding;
import com.hbm.inventory.recipes.BreederRecipes;
@@ -30,7 +31,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityMachineReactorBreeding extends TileEntityMachineBase implements SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityMachineReactorBreeding extends TileEntityMachineBase implements SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public int flux;
public float progress;
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java
index 9221bcb5d..a5e337448 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java
@@ -39,7 +39,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC {
+public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
private ItemStack slots[];
@@ -347,7 +347,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getFluid(Context context, Arguments args) {
- return new Object[] {tanks[0].getFill(), tanks[1].getFill(), tanks[1].getFill(), tanks[1].getMaxFill()};
+ return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()};
}
@Callback(direct = true)
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java
index 66d850a4c..71c7266ae 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.machine;
import java.util.HashMap;
import com.hbm.blocks.BlockDummyable;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IControlReceiver;
@@ -41,7 +42,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC {
+public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 1000000L;
@@ -605,14 +606,14 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement
@Optional.Method(modid = "OpenComputers")
public Object[] setThrottle(Context context, Arguments args) {
throttle = args.checkInteger(0);
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] setAuto(Context context, Arguments args) {
autoMode = args.checkBoolean(0);
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true, limit = 4)
@@ -620,20 +621,19 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement
public Object[] start(Context context, Arguments args) {
stopIfNotReady();
startup();
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] stop(Context context, Arguments args) {
shutdown();
- return new Object[] {true};
+ return new Object[] {};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
-
return new Object[] {throttle, state,
tanks[0].getFill(), tanks[0].getMaxFill(),
tanks[1].getFill(), tanks[1].getMaxFill(),
@@ -641,6 +641,64 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement
tanks[3].getFill(), tanks[3].getMaxFill()};
}
+ public String[] methods() {
+ return new String[] {
+ "getFluid",
+ "getType",
+ "getPower",
+ "getThrottle",
+ "getState",
+ "getAuto",
+ "setThrottle",
+ "setAuto",
+ "start",
+ "stop",
+ "getInfo"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getFluid"):
+ return new Object[] {
+ tanks[0].getFill(), tanks[0].getMaxFill(),
+ tanks[1].getFill(), tanks[1].getMaxFill(),
+ tanks[2].getFill(), tanks[2].getMaxFill(),
+ tanks[3].getFill(), tanks[3].getMaxFill()
+ };
+ case ("getType"):
+ return new Object[] {tanks[0].getTankType().getName()};
+ case ("getPower"):
+ return new Object[] {power};
+ case ("getThrottle"):
+ return new Object[] {throttle};
+ case ("getState"):
+ return new Object[] {state};
+ case ("getAuto"):
+ return new Object[] {autoMode};
+ case ("setThrottle"):
+ throttle = args.checkInteger(0);
+ return new Object[] {};
+ case ("setAuto"):
+ autoMode = args.checkBoolean(0);
+ return new Object[] {};
+ case ("start"):
+ stopIfNotReady();
+ startup();
+ return new Object[] {};
+ case ("stop"):
+ shutdown();
+ return new Object[] {};
+ case ("getInfo"):
+ return new Object[] {throttle, state,
+ tanks[0].getFill(), tanks[0].getMaxFill(),
+ tanks[1].getFill(), tanks[1].getMaxFill(),
+ tanks[2].getFill(), tanks[2].getMaxFill(),
+ tanks[3].getFill(), tanks[3].getMaxFill()};
+ }
+ throw new NoSuchMethodException();
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMachineTurbineGas(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java
index d6bf0e065..b00c2e1d8 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java
@@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerMicrowave;
import com.hbm.inventory.gui.GUIMicrowave;
import com.hbm.lib.Library;
@@ -23,11 +24,12 @@ import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent {
+public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
public long power;
public static final long maxPower = 50000;
@@ -228,6 +230,19 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg
return new Object[] {"This is a testing device for everything OC."};
}
+ @Callback(direct = true, getter = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] variableget(Context context, Arguments args) {
+ return new Object[] {speed, "test of the `getter` callback function"};
+ }
+
+ @Callback(direct = true, setter = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] variableset(Context context, Arguments args) {
+ speed = MathHelper.clamp_int(args.checkInteger(0), 0, 5);
+ return new Object[] {"test of the `setter` callback function"};
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMicrowave(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java
index ffebeb03c..ac2e162c3 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.Map.Entry;
import com.hbm.blocks.ModBlocks;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerPWR;
import com.hbm.inventory.fluid.Fluids;
@@ -43,7 +44,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityPWRController extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, SimpleComponent, IFluidStandardTransceiver {
+public class TileEntityPWRController extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, SimpleComponent, IFluidStandardTransceiver, CompatHandler.OCComponent {
public FluidTank[] tanks;
public int coreHeat;
@@ -53,8 +54,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
public static final int hullHeatCapacityBase = 10_000_000;
public double flux;
- public int rodLevel = 100;
- public int rodTarget = 100;
+ public double rodLevel = 100;
+ public double rodTarget = 100;
public int typeLoaded;
public int amountLoaded;
@@ -202,7 +203,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
this.decrStackSize(0, 1);
this.markChanged();
}
-
+ double diff = this.rodLevel - this.rodTarget;
+ if(diff < 1 && diff > -1) this.rodLevel = this.rodTarget;
if(this.rodTarget > this.rodLevel) this.rodLevel++;
if(this.rodTarget < this.rodLevel) this.rodLevel--;
@@ -280,8 +282,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
data.setDouble("progress", progress);
data.setInteger("typeLoaded", typeLoaded);
data.setInteger("amountLoaded", amountLoaded);
- data.setInteger("rodLevel", rodLevel);
- data.setInteger("rodTarget", rodTarget);
+ data.setDouble("rodLevel", rodLevel);
+ data.setDouble("rodTarget", rodTarget);
data.setInteger("coreHeatCapacity", coreHeatCapacity);
this.networkPack(data, 150);
} else {
@@ -395,7 +397,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
progress = nbt.getDouble("progress");
typeLoaded = nbt.getInteger("typeLoaded");
amountLoaded = nbt.getInteger("amountLoaded");
- rodLevel = nbt.getInteger("rodLevel");
+ rodLevel = nbt.getDouble("rodLevel");
rodTarget = nbt.getInteger("rodTarget");
coreHeatCapacity = nbt.getInteger("coreHeatCapacity");
}
@@ -454,8 +456,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
this.coreHeat = nbt.getInteger("coreHeat");
this.hullHeat = nbt.getInteger("hullHeat");
this.flux = nbt.getDouble("flux");
- this.rodLevel = nbt.getInteger("rodLevel");
- this.rodTarget = nbt.getInteger("rodTarget");
+ this.rodLevel = nbt.getDouble("rodLevel");
+ this.rodTarget = nbt.getDouble("rodTarget");
this.typeLoaded = nbt.getInteger("typeLoaded");
this.amountLoaded = nbt.getInteger("amountLoaded");
this.progress = nbt.getDouble("progress");
@@ -499,8 +501,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
nbt.setInteger("coreHeat", coreHeat);
nbt.setInteger("hullHeat", hullHeat);
nbt.setDouble("flux", flux);
- nbt.setInteger("rodLevel", rodLevel);
- nbt.setInteger("rodTarget", rodTarget);
+ nbt.setDouble("rodLevel", rodLevel);
+ nbt.setDouble("rodTarget", rodTarget);
nbt.setInteger("typeLoaded", typeLoaded);
nbt.setInteger("amountLoaded", amountLoaded);
nbt.setDouble("progress", progress);
@@ -588,7 +590,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] setLevel(Context context, Arguments args) {
- rodTarget = MathHelper.clamp_int(args.checkInteger(0), 0, 100);
+ rodTarget = MathHelper.clamp_double(args.checkDouble(0), 0, 100);
this.markChanged();
return new Object[] {true};
}
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java
index 7169ce7f4..51b1229fb 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java
@@ -2,6 +2,7 @@ package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.ReactorResearch;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerReactorControl;
import com.hbm.inventory.gui.GUIReactorControl;
@@ -29,7 +30,7 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityReactorControl extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, SimpleComponent {
+public class TileEntityReactorControl extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
public TileEntityReactorControl() {
super(1);
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java
index fb5b31782..6eb557ec7 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java
@@ -5,6 +5,7 @@ import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.MobConfig;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.RecipesCommon.ComparableStack;
@@ -41,7 +42,7 @@ import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
//TODO: fix reactor control;
-public class TileEntityReactorResearch extends TileEntityMachineBase implements IControlReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityReactorResearch extends TileEntityMachineBase implements IControlReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
@SideOnly(Side.CLIENT)
public double lastLevel;
@@ -430,6 +431,32 @@ public class TileEntityReactorResearch extends TileEntityMachineBase implements
return new Object[] {heat, level, targetLevel, totalFlux};
}
+ public String[] methods() {
+ return new String[] {
+ "getTemp",
+ "getLevel",
+ "getTargetLevel",
+ "getFlux",
+ "getInfo"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getTemp"):
+ return getTemp(context, args);
+ case ("getLevel"):
+ return getLevel(context, args);
+ case ("getTargetLevel"):
+ return getTargetLevel(context, args);
+ case ("getFlux"):
+ return getFlux(context, args);
+ case ("getInfo"):
+ return getInfo(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
+
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] setLevel(Context context, Arguments args) {
diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java
index 91286049a..f753be765 100644
--- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java
+++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java
@@ -10,6 +10,7 @@ import com.hbm.config.MobConfig;
import com.hbm.entity.projectile.EntityZirnoxDebris;
import com.hbm.entity.projectile.EntityZirnoxDebris.DebrisType;
import com.hbm.explosion.ExplosionNukeGeneric;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.IFluidAcceptor;
@@ -52,7 +53,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityReactorZirnox extends TileEntityMachineBase implements IFluidContainer, IFluidAcceptor, IFluidSource, IControlReceiver, IFluidStandardTransceiver, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityReactorZirnox extends TileEntityMachineBase implements IFluidContainer, IFluidAcceptor, IFluidSource, IControlReceiver, IFluidStandardTransceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public int heat;
public static final int maxHeat = 100000;
@@ -600,6 +601,41 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IF
return new Object[] {};
}
+ public String[] methods() {
+ return new String[] {
+ "getTemp",
+ "getPressure",
+ "getWater",
+ "getSteam",
+ "getCarbonDioxide",
+ "isActive",
+ "getInfo",
+ "setActive"
+ };
+ }
+
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch(method) {
+ case ("getTemp"):
+ return getTemp(context, args);
+ case ("getPressure"):
+ return getPressure(context, args);
+ case ("getWater"):
+ return getWater(context, args);
+ case ("getSteam"):
+ return getSteam(context, args);
+ case ("getCarbonDioxide"):
+ return getCarbonDioxide(context, args);
+ case ("isActive"):
+ return isActive(context, args);
+ case ("getInfo"):
+ return getInfo(context, args);
+ case ("setActive"):
+ return setActive(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerReactorZirnox(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java
index 37e97639f..3f0beb44b 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.machine.rbmk;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.machine.rbmk.RBMKBase;
import com.hbm.extprop.HbmPlayerProps;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.items.machine.ItemRBMKRod;
import com.hbm.packet.NBTPacket;
@@ -28,7 +29,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.List;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityCraneConsole extends TileEntity implements INBTPacketReceiver, SimpleComponent {
+public class TileEntityCraneConsole extends TileEntity implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent {
public int centerX;
public int centerY;
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java
index 164ce4192..87a195ef4 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java
@@ -33,12 +33,13 @@ import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource, IControlReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC {
+public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource, IControlReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
public FluidTank feed;
public FluidTank steam;
@@ -403,6 +404,11 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I
return new Object[] {true};
}
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerRBMKGeneric(player.inventory);
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java
index 158f30152..b83799464 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java
@@ -7,6 +7,7 @@ import java.util.Locale;
import java.util.Set;
import java.util.LinkedHashMap;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.gui.GUIRBMKConsole;
@@ -36,7 +37,7 @@ import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityRBMKConsole extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, SimpleComponent {
+public class TileEntityRBMKConsole extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
private int targetX;
private int targetY;
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java
index e06d7ff1a..2b4bd386a 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java
@@ -1,6 +1,7 @@
package com.hbm.tileentity.machine.rbmk;
import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType;
+import com.hbm.handler.CompatHandler;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -10,9 +11,10 @@ import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
+import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase implements SimpleComponent {
+public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase implements SimpleComponent, CompatHandler.OCComponent {
@SideOnly(Side.CLIENT)
public double lastLevel;
@@ -164,4 +166,9 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im
targetLevel = MathHelper.clamp_double(newLevel, 0, 1);
return new Object[] {};
}
+
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java
index 715eba42f..7dd7de507 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java
@@ -1,6 +1,7 @@
package com.hbm.tileentity.machine.rbmk;
import api.hbm.fluid.IFluidStandardReceiver;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
@@ -16,11 +17,12 @@ import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
+import net.minecraftforge.common.util.ForgeDirection;
import java.util.List;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidAcceptor, IFluidStandardReceiver, SimpleComponent {
+public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidAcceptor, IFluidStandardReceiver, SimpleComponent, CompatHandler.OCComponent {
private FluidTank tank;
private int lastCooled;
@@ -178,4 +180,9 @@ public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidAc
public Object[] getInfo(Context context, Arguments args) {
return new Object[]{heat, tank.getFill(), tank.getMaxFill(), xCoord, yCoord, zCoord};
}
+
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java
index f74401c8c..f9428bec4 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.machine.rbmk;
import api.hbm.fluid.IFluidStandardTransceiver;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.container.ContainerRBMKHeater;
@@ -28,12 +29,13 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
-public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver, SimpleComponent {
+public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver, SimpleComponent, CompatHandler.OCComponent {
public FluidTank feed;
public FluidTank steam;
@@ -334,6 +336,11 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I
return new Object[] {xCoord, yCoord, zCoord};
}
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerRBMKHeater(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java
index 9d08657b7..bf63d5935 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.machine.rbmk;
import api.hbm.fluid.IFluidStandardSender;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.container.ContainerRBMKOutgasser;
import com.hbm.inventory.fluid.Fluids;
@@ -26,9 +27,10 @@ import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IFluidStandardSender, SimpleComponent {
+public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IFluidStandardSender, SimpleComponent, CompatHandler.OCComponent {
public FluidTank gas;
public double progress;
@@ -262,6 +264,11 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement
return new Object[] {gas.getFill(), gas.getMaxFill(), progress, gas.getTankType().getID(), xCoord, yCoord, zCoord};
}
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerRBMKOutgasser(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java
index 2b6d0c9b5..d8166871c 100644
--- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java
+++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java
@@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.rbmk.RBMKBase;
import com.hbm.blocks.machine.rbmk.RBMKRod;
import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType;
+import com.hbm.handler.CompatHandler;
import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.inventory.container.ContainerRBMKRod;
import com.hbm.inventory.gui.GUIRBMKRod;
@@ -33,7 +34,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
-public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC {
+public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
//amount of "neutron energy" buffered for the next tick to use for the reaction
public double fluxFast;
@@ -495,6 +496,11 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
return new Object[] {xCoord, yCoord, zCoord};
}
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
+
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerRBMKRod(player.inventory, this);
diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java
index c82acdf0f..dc7e5ec20 100644
--- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java
+++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java
@@ -2,6 +2,7 @@ package com.hbm.tileentity.machine.storage;
import api.hbm.fluid.*;
import com.hbm.blocks.ModBlocks;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.FluidContainerRegistry;
@@ -44,7 +45,7 @@ import java.util.List;
import java.util.Set;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
-public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider {
+public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent {
public FluidTank tank;
public short mode = 0;
@@ -427,4 +428,24 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
public Object[] getInfo(Context context, Arguments args) {
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getName()};
}
+
+ @Override
+ public String[] methods() {
+ return new String[] {"getFluidStored", "getMaxStored", "getTypeStored", "getInfo"};
+ }
+
+ @Override
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch (method) {
+ case "getFluidStored":
+ return getFluidStored(context, args);
+ case "getMaxStored":
+ return getMaxStored(context, args);
+ case "getTypeStored":
+ return getTypeStored(context, args);
+ case "getInfo":
+ return getInfo(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java
index 95c4c7191..64ea7037d 100644
--- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java
+++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java
@@ -9,6 +9,7 @@ import api.hbm.energymk2.Nodespace.PowerNode;
import api.hbm.tile.IInfoProviderEC;
import com.hbm.blocks.machine.MachineBattery;
+import com.hbm.handler.CompatHandler;
import com.hbm.inventory.container.ContainerMachineBattery;
import com.hbm.inventory.gui.GUIMachineBattery;
import com.hbm.lib.Library;
@@ -34,7 +35,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
-public class TileEntityMachineBattery extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, SimpleComponent, IGUIProvider, IInfoProviderEC {
+public class TileEntityMachineBattery extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public long[] log = new long[20];
public long delta = 0;
diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java
index c71ba716c..f963cb359 100644
--- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java
+++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java
@@ -5,6 +5,7 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.extprop.HbmPlayerProps;
+import com.hbm.handler.CompatHandler.OCComponent;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
@@ -55,7 +56,7 @@ import java.util.List;
import java.util.Random;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
-public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable {
+public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, OCComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable {
public FluidTank tank;
public short mode = 0;
@@ -514,4 +515,24 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements
public Object[] getInfo(Context context, Arguments args) {
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getName()};
}
+
+ @Override
+ public String[] methods() {
+ return new String[] {"getFluidStored", "getMaxStored", "getTypeStored", "getInfo"};
+ }
+
+ @Override
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch (method) {
+ case "getFluidStored":
+ return getFluidStored(context, args);
+ case "getMaxStored":
+ return getMaxStored(context, args);
+ case "getTypeStored":
+ return getTypeStored(context, args);
+ case "getInfo":
+ return getInfo(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java
index 5f2e68975..20d7fe6f6 100644
--- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java
+++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java
@@ -3,6 +3,7 @@ package com.hbm.tileentity.network;
import java.util.ArrayList;
import java.util.List;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GuiScreenRadioTelex;
import com.hbm.tileentity.IGUIProvider;
@@ -10,8 +11,13 @@ import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
import com.hbm.util.ItemStackUtil;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+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 net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -23,7 +29,8 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
-public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiver, IControlReceiver, IGUIProvider {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiver, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
public static final int lineWidth = 33;
public String txChannel = "";
@@ -250,4 +257,82 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
+
+ @Override
+ public String getComponentName() {
+ return "ntm_telex";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getChannels(Context context, Arguments args) {
+ return new Object[] {this.txChannel, this.rxChannel};
+ }
+
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setChannels(Context context, Arguments args) {
+ String[] old = {this.txChannel, this.rxChannel};
+ this.rxChannel = args.checkString(0);
+ this.txChannel = args.checkString(1);
+ return new Object[] {old[0], old[1]};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getSendingTexts(Context context, Arguments args) {
+ return new Object[] {this.txBuffer[0], this.txBuffer[1], this.txBuffer[2], this.txBuffer[3], this.txBuffer[4]};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getReceivingText(Context context, Arguments args) {
+ return new Object[] {this.rxBuffer[0], this.rxBuffer[1], this.rxBuffer[2], this.rxBuffer[3], this.rxBuffer[4]};
+ }
+
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setSendingText(Context context, Arguments args) { // this function nearly killed me
+ for(int i = 0; i < 5; i++) {
+ // check if it was never given or if it's an empty string
+ // if it was never given then just assign it as an empty string
+ // this also checks if it's even a string at all
+ if(args.checkAny(i) == null || args.checkString(i).equals(""))
+ this.txBuffer[i] = "";
+ if(args.checkString(i).equals("")) { // if it isn't an empty string
+ if(args.checkString(i).length() > TileEntityRadioTelex.lineWidth) { // line longer than allowed
+ this.txBuffer[i] = args.checkString(i).substring(0, TileEntityRadioTelex.lineWidth); // truncate it
+ } else
+ this.txBuffer[i] = args.checkString(i); // else just set it directly
+ }
+ }
+ return new Object[] {true};
+ }
+
+ @Callback //you don't get to run this more than once per tick, that would be very very bad
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] printMessage(Context context, Arguments args) {
+ this.print();
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] clearAll(Context context, Arguments args) {
+ for(int i = 0; i < 5; i++) this.rxBuffer[i] = "";
+ this.writingLine = 0;
+ return new Object[] {};
+ }
+
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] sendMessage(Context context, Arguments args) {
+ if(!this.isSending) {
+ this.isSending = true;
+ this.sendingLine = 0;
+ this.sendingIndex = 0;
+ return new Object[] {true};
+ }
+ return new Object[] {false};
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java
index 2e0775a00..fcea913b7 100644
--- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java
+++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java
@@ -15,9 +15,13 @@ import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IGUIProvider;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+import li.cil.oc.api.machine.Arguments;
+import li.cil.oc.api.machine.Callback;
+import li.cil.oc.api.machine.Context;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@@ -464,4 +468,13 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUITurretArty(player.inventory, this);
}
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] addCoords(Context context, Arguments args) {
+ this.mode = MODE_MANUAL;
+ if(Math.sqrt(Math.pow(xCoord - args.checkDouble(0), 2)+Math.pow(yCoord - args.checkDouble(1), 2)+Math.pow(zCoord - args.checkDouble(2), 2)) >= this.getDecetorRange()) // check distance against range
+ return new Object[] {false};
+ targetQueue.add(Vec3.createVectorHelper(args.checkDouble(0), args.checkDouble(1), args.checkDouble(2)));
+ return new Object[] {true};
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java
index f4866fe7a..b4e4f1155 100644
--- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java
+++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java
@@ -6,7 +6,12 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.IRadarCommandReceiver;
+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 net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
@@ -69,4 +74,21 @@ public abstract class TileEntityTurretBaseArtillery extends TileEntityTurretBase
}
}
}
+
+ @Override
+ public String getComponentName() {
+ return "ntm_artillery";
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getCurrentTarget(Context context, Arguments args) {
+ return new Object[] {targetQueue.get(0).xCoord, targetQueue.get(0).yCoord, targetQueue.get(0).zCoord};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getTargetDistance(Context context, Arguments args) {
+ return new Object[] {Math.sqrt(Math.pow(xCoord - args.checkDouble(0), 2)+Math.pow(yCoord - args.checkDouble(1), 2)+Math.pow(zCoord - args.checkDouble(2), 2))};
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java
index 6006a5767..419bb807e 100644
--- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java
+++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java
@@ -14,6 +14,7 @@ import com.hbm.entity.train.EntityRailCarBase;
import com.hbm.handler.BulletConfigSyncingUtil;
import com.hbm.handler.BulletConfiguration;
import com.hbm.handler.CasingEjector;
+import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.container.ContainerTurretBase;
@@ -29,9 +30,14 @@ import com.hbm.util.CompatExternal;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.entity.IRadarDetectableNT;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+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 net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
@@ -48,6 +54,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
@@ -58,7 +65,8 @@ import net.minecraftforge.common.util.ForgeDirection;
* @author hbm
*
*/
-public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase implements IEnergyReceiverMK2, IControlReceiver, IGUIProvider {
+@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
+public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase implements IEnergyReceiverMK2, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
@Override
public boolean hasPermission(EntityPlayer player) {
@@ -899,4 +907,160 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerTurretBase(player.inventory, this);
}
+
+ // OC stuff
+ // This is a large compat, so I have to leave comments to know what I'm doing
+
+ @Override
+ public String getComponentName() {
+ return "ntm_turret";
+ }
+
+ // On/Off
+ @Callback(direct = true, limit = 4)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setActive(Context context, Arguments args) {
+ this.isOn = args.checkBoolean(0);
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] isActive(Context context, Arguments args) {
+ return new Object[] {this.isOn};
+ }
+
+ // Energy information
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getEnergyInfo(Context context, Arguments args) {
+ return new Object[] {this.getPower(), this.getMaxPower()};
+ }
+
+ ///////////////////////
+ // Whitelist Control //
+ ///////////////////////
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getWhitelisted(Context context, Arguments args) {
+ if(slots[0] != null && slots[0].getItem() == ModItems.turret_chip) {
+ String[] array = ItemTurretBiometry.getNames(slots[0]);
+ return new Object[] {array};
+ }
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] addWhitelist(Context context, Arguments args) {
+ if(this.getWhitelist() != null) {
+ List names = this.getWhitelist();
+ if (names.contains(args.checkString(0)))
+ return new Object[]{false};
+ }
+ this.addName(args.checkString(0));
+ return new Object[]{true};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] removeWhitelist(Context context, Arguments args) {
+ List names = this.getWhitelist();
+ if(!names.contains(args.checkString(0)))
+ return new Object[] {false};
+ this.removeName(names.indexOf(args.checkString(0)));
+ return new Object[] {true};
+ }
+
+ ///////////////////////
+ // Targeting Control //
+ ///////////////////////
+ @Callback(direct = true, limit = 4)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] setTargeting(Context context, Arguments args) {
+ this.targetPlayers = args.checkBoolean(0);
+ this.targetAnimals = args.checkBoolean(1);
+ this.targetMobs = args.checkBoolean(2);
+ this.targetMachines = args.checkBoolean(3);
+ return new Object[] {};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getTargeting(Context context, Arguments args) {
+ return new Object[] {this.targetPlayers, this.targetAnimals, this.targetMobs, this.targetMachines};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] hasTarget(Context context, Arguments args) {
+ return new Object[] {this.target != null};
+ }
+
+ ///////////////////
+ // Angle Control //
+ ///////////////////
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] getAngle(Context context, Arguments args) {
+ return new Object[] {Math.toDegrees(this.rotationPitch), Math.toDegrees(this.rotationYaw)};
+ }
+
+ @Callback(direct = true)
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] isAligned(Context context, Arguments args) {
+ return new Object[] {this.aligned};
+ }
+
+ @Override
+ public boolean canConnectNode(ForgeDirection side) {
+ return side == ForgeDirection.DOWN;
+ }
+
+ @Override
+ public String[] methods() { // :vomit:
+ return new String[] {
+ "setActive",
+ "isActive",
+ "getEnergyInfo",
+ "getWhitelisted",
+ "addWhitelist",
+ "removeWhitelist",
+ "setTargeting",
+ "getTargeting",
+ "hasTarget",
+ "getAngle",
+ "isAligned"
+ };
+ }
+
+ @Override
+ public Object[] invoke(String method, Context context, Arguments args) throws Exception {
+ switch (method) {
+ case "setActive":
+ return setActive(context, args);
+ case "isActive":
+ return isActive(context, args);
+ case "getEnergyInfo":
+ return getEnergyInfo(context, args);
+ case "getWhitelisted":
+ return getWhitelisted(context, args);
+ case "addWhitelist":
+ return addWhitelist(context, args);
+ case "removeWhitelist":
+ return removeWhitelist(context, args);
+ case "setTargeting":
+ return setTargeting(context, args);
+ case "getTargeting":
+ return getTargeting(context, args);
+ case "hasTarget":
+ return hasTarget(context, args);
+ case "getAngle":
+ return getAngle(context, args);
+ case "isAligned":
+ return isAligned(context, args);
+ }
+ throw new NoSuchMethodException();
+ }
}
diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java
index 4cd07246e..149dc136c 100644
--- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java
+++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java
@@ -14,8 +14,12 @@ import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
+import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+import li.cil.oc.api.machine.Arguments;
+import li.cil.oc.api.machine.Callback;
+import li.cil.oc.api.machine.Context;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@@ -373,4 +377,11 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUITurretHIMARS(player.inventory, this);
}
+ @Callback
+ @Optional.Method(modid = "OpenComputers")
+ public Object[] addCoords(Context context, Arguments args) {
+ this.mode = MODE_MANUAL;
+ targetQueue.add(Vec3.createVectorHelper(args.checkDouble(0), args.checkDouble(1), args.checkDouble(2)));
+ return new Object[] {};
+ }
}
diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang
index 26cdf1b9b..7c6fd6b3a 100644
--- a/src/main/resources/assets/hbm/lang/en_US.lang
+++ b/src/main/resources/assets/hbm/lang/en_US.lang
@@ -131,6 +131,14 @@ achievement.witchtaunter=Witch Taunter
achievement.ZIRNOXBoom.desc=cope, seethe, mald
achievement.ZIRNOXBoom=CIRNOX
+analyze.basic1======NTM Component=====
+analyze.basic2=More documentation can be found on the wiki.
+analyze.basic3====Extra Information===
+analyze.dummy=Type: Dummy Block
+analyze.error=This block's compatibility has not been set properly, this should be reported as a bug!
+analyze.name=Name: %s
+analyze.noInfo=No additional information.
+
armor.blastProtection=Damage modifier of %s against explosions
armor.cap=Hard damage cap of %s
armor.damageModifier=Damage modifier of %s against %s