From bc45b66052ad39420d2548ed4d7b72b94333e401 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Tue, 11 Jun 2024 16:28:59 -0500 Subject: [PATCH] Force PWR to use doubles as control rod values, round to 100s place when displaying to prevent floating-point errors looking terrible. also add cable gauge and radar compat telex is next --- .../hbm/blocks/network/BlockCableGauge.java | 25 ++++++- .../java/com/hbm/inventory/gui/GUIPWR.java | 2 +- .../machine/TileEntityMachineRadarNT.java | 72 ++++++++++++++++++- .../machine/TileEntityPWRController.java | 23 +++--- 4 files changed, 108 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java index 980bdfb32..0983c9be6 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java +++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java @@ -14,8 +14,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 +103,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 { private long deltaTick = 0; private long deltaSecond = 0; @@ -134,5 +140,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/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/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 5fa8497be..630628f4b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -43,6 +43,9 @@ 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; @@ -603,5 +606,72 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I return "ntm_radar"; } - //soon :tm: + @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); + RadarEntry e = entries.get(0); + 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); + RadarEntry e = entries.get(0); + return new Object[] {e.blipLevel}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEntityAtIndex(Context context, Arguments args) { + int index = args.checkInteger(0); + RadarEntry e = entries.get(0); + boolean isPlayer = (boolean)this.isIndexPlayer(context, args)[0]; + int type = (int)this.getIndexType(context, args)[0]; + if(isPlayer) { + return new Object[]{true, e.posX, e.posY, e.posZ, type, e.unlocalizedName}; + } + return new Object[]{false, e.posX, e.posY, e.posZ, type}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index ffebeb03c..d89808249 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -53,8 +53,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 +202,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 +281,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 +396,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 +455,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 +500,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 +589,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}; }