Merge pull request #2630 from Voxelstice/oc-bat-rework

OC compat for new batteries
This commit is contained in:
HbmMods 2026-01-11 19:20:28 +01:00 committed by GitHub
commit 8aa9ff2895
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 222 additions and 56 deletions

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine.storage; package com.hbm.tileentity.machine.storage;
import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityMachineBase;
@ -15,16 +16,22 @@ import api.hbm.energymk2.IEnergyProviderMK2;
import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.energymk2.Nodespace; import api.hbm.energymk2.Nodespace;
import api.hbm.energymk2.Nodespace.PowerNode; import api.hbm.energymk2.Nodespace.PowerNode;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf; 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.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent {
public byte lastRedstone = 0; public byte lastRedstone = 0;
public long prevPowerState = 0; public long prevPowerState = 0;
@ -189,4 +196,62 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem
public double getMaxRenderDistanceSquared() { public double getMaxRenderDistanceSquared() {
return 65536.0D; return 65536.0D;
} }
// do some opencomputer stuff
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "ntm_energy_storage";
}
@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[] getModeInfo(Context context, Arguments args) {
return new Object[] {redLow, redHigh, getPriority().ordinal()-1};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] setModeLow(Context context, Arguments args) {
short newMode = (short) args.checkInteger(0);
if (newMode >= mode_input && newMode <= mode_none) {
redLow = newMode;
return new Object[] {};
} else {
return new Object[] {"Invalid mode"};
}
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] setModeHigh(Context context, Arguments args) {
short newMode = (short) args.checkInteger(0);
if (newMode >= mode_input && newMode <= mode_none) {
redHigh = newMode;
return new Object[] {};
} else {
return new Object[] {"Invalid mode"};
}
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] setPriority(Context context, Arguments args) {
int newPriority = args.checkInteger(0);
if (newPriority >= 0 && newPriority <= 2) {
priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, newPriority+1);
return new Object[] {};
} else {
return new Object[] {"Invalid mode"};
}
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower(), redLow, redHigh, getPriority().ordinal()-1};
}
} }

View File

@ -11,7 +11,11 @@ import com.hbm.tileentity.IPersistentNBT;
import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.fauxpointtwelve.DirPos;
import cpw.mods.fml.common.Optional;
import io.netty.buffer.ByteBuf; 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 net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@ -219,6 +223,46 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase implements IPer
return bb; return bb;
} }
// do some opencomputer stuff
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {this.power.doubleValue(), this.delta.longValue()};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {this.power.doubleValue(), this.delta.longValue(), redLow, redHigh, getPriority().ordinal()-1};
}
@Override
@Optional.Method(modid = "OpenComputers")
public String[] methods() {
return new String[] {
"getEnergyInfo",
"getModeInfo",
"setModeLow",
"setModeHigh",
"setPriority",
"getInfo"
};
}
@Override
@Optional.Method(modid = "OpenComputers")
public Object[] invoke(String method, Context context, Arguments args) throws Exception {
switch (method) {
case "getEnergyInfo": return getEnergyInfo(context, args);
case "getModeInfo": return getModeInfo(context, args);
case "setModeLow": return setModeLow(context, args);
case "setModeHigh": return setModeHigh(context, args);
case "setPriority": return setPriority(context, args);
case "getInfo": return getInfo(context, args);
}
throw new NoSuchMethodException();
}
@Override @Override
public void writeNBT(NBTTagCompound nbt) { public void writeNBT(NBTTagCompound nbt) {
NBTTagCompound data = new NBTTagCompound(); NBTTagCompound data = new NBTTagCompound();

View File

@ -12,7 +12,11 @@ import api.hbm.energymk2.IBatteryItem;
import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORInteractive;
import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.redstoneoverradio.IRORValueProvider;
import api.hbm.tile.IInfoProviderEC; import api.hbm.tile.IInfoProviderEC;
import cpw.mods.fml.common.Optional;
import io.netty.buffer.ByteBuf; 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 net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -233,4 +237,57 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR
public void provideExtraInfo(NBTTagCompound data) { public void provideExtraInfo(NBTTagCompound data) {
data.setLong(CompatEnergyControl.L_DIFF_HE, (log[0] - log[19]) / 20L); data.setLong(CompatEnergyControl.L_DIFF_HE, (log[0] - log[19]) / 20L);
} }
// do some opencomputer stuff
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower(), this.delta};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getPackInfo(Context context, Arguments args) {
if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return new Object[] {"", 0, 0};
IBatteryItem bat = ((IBatteryItem) slots[0].getItem());
return new Object[] {slots[0].getUnlocalizedName(), bat.getChargeRate(slots[0]), bat.getDischargeRate(slots[0])};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
Object[] energyInfo = getEnergyInfo(context, args);
Object[] packInfo = getPackInfo(context, args);
Object[] modeInfo = getModeInfo(context, args);
return new Object[] {energyInfo[0], energyInfo[1], energyInfo[2], modeInfo[0], modeInfo[1], modeInfo[2], packInfo[0], packInfo[1], packInfo[2]};
}
@Override
@Optional.Method(modid = "OpenComputers")
public String[] methods() {
return new String[] {
"getEnergyInfo",
"getPackInfo",
"getModeInfo",
"setModeLow",
"setModeHigh",
"setPriority",
"getInfo"
};
}
@Override
@Optional.Method(modid = "OpenComputers")
public Object[] invoke(String method, Context context, Arguments args) throws Exception {
switch (method) {
case "getEnergyInfo": return getEnergyInfo(context, args);
case "getPackInfo": return getPackInfo(context, args);
case "getModeInfo": return getModeInfo(context, args);
case "setModeLow": return setModeLow(context, args);
case "setModeHigh": return setModeHigh(context, args);
case "setPriority": return setPriority(context, args);
case "getInfo": return getInfo(context, args);
}
throw new NoSuchMethodException();
}
} }

View File

@ -320,7 +320,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I
@Override @Override
@Optional.Method(modid = "OpenComputers") @Optional.Method(modid = "OpenComputers")
public String getComponentName() { public String getComponentName() {
return "ntm_energy_storage"; //ok if someone else can figure out how to do this that'd be nice (change the component name based on the type of storage block) return "ntm_energy_storage_legacy";
} }
@Callback(direct = true) @Callback(direct = true)