Merge pull request #2857 from DTK-MrRaccoon/octhing

OpenComputers methods for rbmk indicator and lever
This commit is contained in:
HbmMods 2026-04-20 11:40:33 +02:00 committed by GitHub
commit bbc13b6fef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 137 additions and 2 deletions

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine.rbmk; package com.hbm.tileentity.machine.rbmk;
import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKIndicator; import com.hbm.inventory.gui.GUIScreenRBMKIndicator;
import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IGUIProvider;
@ -8,14 +9,20 @@ import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
import com.hbm.util.BufferUtil; import com.hbm.util.BufferUtil;
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 li.cil.oc.api.network.SimpleComponent;
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;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver { @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
/* __________ /* __________
* / /| * / /|
@ -195,4 +202,81 @@ public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGU
indicator.max = data.hasKey("max" + i) ? data.getInteger("max" + i) : Integer.MAX_VALUE; indicator.max = data.hasKey("max" + i) ? data.getInteger("max" + i) : Integer.MAX_VALUE;
} }
} }
// OpenComputers methods
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "rbmk_indicator";
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getIndicatorInfo(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {null, "Invalid index (1-6)"};
java.util.LinkedHashMap<String, Object> map = new java.util.LinkedHashMap<>();
map.put("active", indicators[idx].active);
map.put("polling", indicators[idx].polling);
map.put("light", indicators[idx].light);
map.put("color", indicators[idx].color);
map.put("label", indicators[idx].label);
map.put("channel", indicators[idx].rtty);
map.put("min", indicators[idx].min);
map.put("max", indicators[idx].max);
return new Object[] {map};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorActive(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].active = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorLight(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].light = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorColor(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].color = MathHelper.clamp_int(args.checkInteger(1), 0, 0xffffff);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorLabel(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].label = args.checkString(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorBounds(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
long min = (long) args.checkInteger(1);
long max = (long) args.checkInteger(2);
indicators[idx].min = min;
indicators[idx].max = max;
markDirty();
return new Object[] {true};
}
} }

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine.rbmk; package com.hbm.tileentity.machine.rbmk;
import com.hbm.handler.CompatHandler;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKLever; import com.hbm.inventory.gui.GUIScreenRBMKLever;
@ -10,15 +11,21 @@ import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.network.RTTYSystem; import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.util.BufferUtil; import com.hbm.util.BufferUtil;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
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.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver { @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
/* __________ /* __________
* / /| * / /|
@ -230,4 +237,48 @@ public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIPro
this.markDirty(); this.markDirty();
} }
// OpenComputers methods
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "rbmk_lever";
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getLeverInfo(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {null, "Invalid index (1-2)"};
java.util.LinkedHashMap<String, Object> map = new java.util.LinkedHashMap<>();
map.put("active", levers[idx].active);
map.put("polling", levers[idx].polling);
map.put("state", levers[idx].flipProgress >= 1.0);
map.put("progress", levers[idx].flipProgress);
map.put("label", levers[idx].label);
map.put("channel", levers[idx].rtty);
map.put("commandOn", levers[idx].commandOn);
map.put("commandOff", levers[idx].commandOff);
return new Object[] {map};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setLeverActive(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {false, "Invalid index (1-2)"};
levers[idx].active = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setLeverLabel(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {false, "Invalid index (1-2)"};
levers[idx].label = args.checkString(1);
markDirty();
return new Object[] {true};
}
} }