diff --git a/src/main/java/li/cil/oc2/common/entity/Robot.java b/src/main/java/li/cil/oc2/common/entity/Robot.java index 069fa738..323a8612 100644 --- a/src/main/java/li/cil/oc2/common/entity/Robot.java +++ b/src/main/java/li/cil/oc2/common/entity/Robot.java @@ -8,6 +8,7 @@ import li.cil.oc2.api.bus.device.object.Parameter; import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; import li.cil.oc2.api.capabilities.TerminalUserProvider; +import li.cil.oc2.api.util.RobotOperationSide; import li.cil.oc2.common.Config; import li.cil.oc2.common.bus.AbstractDeviceBusElement; import li.cil.oc2.common.bus.CommonDeviceBusController; @@ -866,6 +867,17 @@ public ItemStack getStackInSlot(@Parameter("slot") final int slot) { return inventory.getStackInSlot(slot); } + @Callback(synchronize = false) + public String inspect(@Parameter("side") @Nullable final RobotOperationSide side) { + if (side == null) throw new IllegalArgumentException(); + final Level level = Robot.this.level; + if (!(level instanceof final ServerLevel serverLevel)) { + throw new IllegalArgumentException(); + } + final BlockPos pos = Robot.this.blockPosition(); + return level.getBlockState(pos.relative(RobotOperationSide.toGlobal(Robot.this, side))).getBlock().getDescriptionId(); + } + @Callback(synchronize = false) public boolean move(@Parameter("direction") @Nullable final MovementDirection direction) { if (direction == null) throw new IllegalArgumentException(); diff --git a/src/main/scripts/lib/lua/robot.lua b/src/main/scripts/lib/lua/robot.lua index 032820b9..ee4cf8fe 100644 --- a/src/main/scripts/lib/lua/robot.lua +++ b/src/main/scripts/lib/lua/robot.lua @@ -72,4 +72,9 @@ M.turnAsync = function(direction) end end +M.inspect = function(direction) + direction = assert(direction, "no direction specified") + return robot:inspect(direction) +end + return M diff --git a/src/main/scripts/lib/micropython/robot.py b/src/main/scripts/lib/micropython/robot.py index d8c4a59e..389548a9 100644 --- a/src/main/scripts/lib/micropython/robot.py +++ b/src/main/scripts/lib/micropython/robot.py @@ -50,6 +50,11 @@ def turn_async(self, direction): while not self.device.turn(direction): time.sleep(1) + def inspect(self, direction): + if not direction: + raise Exception("no direction specified") + return self.device.inspect(direction) + def _wait_for_last_action(self): id = self.device.getLastActionId() result = self.device.getActionResult(id)