Merge pull request #1540 from BallOfEnergy1/OC_bugfix

OC Compatibility part 2: the return of the `@Callback`
This commit is contained in:
HbmMods 2024-06-28 08:19:07 +02:00 committed by GitHub
commit c866e9c541
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 1238 additions and 68 deletions

View File

@ -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};
}
}
}

View File

@ -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;

View File

@ -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.
* <p/>
* 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.
* <br>
* 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.
* <br>
* 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".
* <br>
* 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;}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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<ComparableStack, Class<? extends EntityMissileBaseNT>> 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();
}
}

View File

@ -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);

View File

@ -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]};

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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};
}

View File

@ -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);

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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};
}
}

View File

@ -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};
}
}

View File

@ -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))};
}
}

View File

@ -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<String> 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<String> 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();
}
}

View File

@ -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[] {};
}
}

View File

@ -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