From 582eeba505a689ec6498860ae3cfe7cc48d32ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 2 Aug 2021 23:30:38 +0200 Subject: [PATCH] Shared base class for item RPC devices. --- .../device/item/AbstractItemRPCDevice.java | 34 +++++++++++++++++++ .../item/BlockOperationsModuleDevice.java | 23 ++----------- .../item/FileImportExportCardItemDevice.java | 26 ++++---------- .../item/InventoryOperationsModuleDevice.java | 21 ++---------- .../item/RedstoneInterfaceCardItemDevice.java | 22 ++---------- 5 files changed, 46 insertions(+), 80 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/bus/device/item/AbstractItemRPCDevice.java diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/AbstractItemRPCDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/AbstractItemRPCDevice.java new file mode 100644 index 00000000..e1c3aea5 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/bus/device/item/AbstractItemRPCDevice.java @@ -0,0 +1,34 @@ +package li.cil.oc2.common.bus.device.item; + +import li.cil.oc2.api.bus.device.ItemDevice; +import li.cil.oc2.api.bus.device.object.ObjectDevice; +import li.cil.oc2.api.bus.device.rpc.RPCDevice; +import li.cil.oc2.api.bus.device.rpc.RPCMethod; +import li.cil.oc2.common.bus.device.util.IdentityProxy; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public abstract class AbstractItemRPCDevice extends IdentityProxy implements RPCDevice, ItemDevice { + private final ObjectDevice device; + + /////////////////////////////////////////////////////////////////// + + protected AbstractItemRPCDevice(final ItemStack identity, final String typeName) { + super(identity); + this.device = new ObjectDevice(this, "redstone"); + + } + + /////////////////////////////////////////////////////////////////// + + @Override + public List getTypeNames() { + return device.getTypeNames(); + } + + @Override + public List getMethods() { + return device.getMethods(); + } +} diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/BlockOperationsModuleDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/BlockOperationsModuleDevice.java index d0b70a27..2a8092ac 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/item/BlockOperationsModuleDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/item/BlockOperationsModuleDevice.java @@ -1,16 +1,11 @@ package li.cil.oc2.common.bus.device.item; -import li.cil.oc2.api.bus.device.ItemDevice; import li.cil.oc2.api.bus.device.object.Callback; -import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.object.Parameter; -import li.cil.oc2.api.bus.device.rpc.RPCDevice; -import li.cil.oc2.api.bus.device.rpc.RPCMethod; import li.cil.oc2.api.capabilities.Robot; import li.cil.oc2.api.util.RobotOperationSide; import li.cil.oc2.common.Config; import li.cil.oc2.common.Constants; -import li.cil.oc2.common.bus.device.util.IdentityProxy; import li.cil.oc2.common.tags.ItemTags; import li.cil.oc2.common.util.FakePlayerUtils; import net.minecraft.block.*; @@ -37,27 +32,23 @@ import net.minecraftforge.items.ItemStackHandler; import javax.annotation.Nullable; import java.util.List; -public final class BlockOperationsModuleDevice extends IdentityProxy implements RPCDevice, ItemDevice { +public final class BlockOperationsModuleDevice extends AbstractItemRPCDevice { private static final String LAST_OPERATION_TAG_NAME = "cooldown"; private static final int COOLDOWN = Constants.SECONDS_TO_TICKS; /////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - private final Entity entity; private final Robot robot; - private final ObjectDevice device; private long lastOperation; /////////////////////////////////////////////////////////////////// public BlockOperationsModuleDevice(final ItemStack identity, final Entity entity, final Robot robot) { - super(identity); + super(identity, "block_operations"); this.entity = entity; this.robot = robot; - this.device = new ObjectDevice(this, "block_operations"); } /////////////////////////////////////////////////////////////////// @@ -74,16 +65,6 @@ public final class BlockOperationsModuleDevice extends IdentityProxy lastOperation = MathHelper.clamp(tag.getLong(LAST_OPERATION_TAG_NAME), 0, entity.getCommandSenderWorld().getGameTime()); } - @Override - public List getTypeNames() { - return device.getTypeNames(); - } - - @Override - public List getMethods() { - return device.getMethods(); - } - @Callback public boolean excavate(@Parameter("side") @Nullable final RobotOperationSide side) { if (isOnCooldown()) { diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/FileImportExportCardItemDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/FileImportExportCardItemDevice.java index 4a28de9d..28770ada 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/item/FileImportExportCardItemDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/item/FileImportExportCardItemDevice.java @@ -1,15 +1,10 @@ package li.cil.oc2.common.bus.device.item; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; -import li.cil.oc2.api.bus.device.ItemDevice; import li.cil.oc2.api.bus.device.object.Callback; import li.cil.oc2.api.bus.device.object.DocumentedDevice; -import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.object.Parameter; -import li.cil.oc2.api.bus.device.rpc.RPCDevice; -import li.cil.oc2.api.bus.device.rpc.RPCMethod; import li.cil.oc2.api.capabilities.TerminalUserProvider; -import li.cil.oc2.common.bus.device.util.IdentityProxy; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.network.message.ExportedFileMessage; import li.cil.oc2.common.network.message.RequestImportedFileMessage; @@ -25,9 +20,12 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.ref.WeakReference; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Set; +import java.util.WeakHashMap; -public final class FileImportExportCardItemDevice extends IdentityProxy implements RPCDevice, DocumentedDevice, ItemDevice { +public final class FileImportExportCardItemDevice extends AbstractItemRPCDevice implements DocumentedDevice { public static final int MAX_TRANSFERRED_FILE_SIZE = 512 * 1024; private static final String BEGIN_EXPORT_FILE = "beginExportFile"; @@ -96,7 +94,6 @@ public final class FileImportExportCardItemDevice extends IdentityProxy getTypeNames() { - return device.getTypeNames(); - } - - @Override - public List getMethods() { - return device.getMethods(); - } - @Override public void suspend() { reset(); diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/InventoryOperationsModuleDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/InventoryOperationsModuleDevice.java index 363251b4..2ae428d4 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/item/InventoryOperationsModuleDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/item/InventoryOperationsModuleDevice.java @@ -1,14 +1,9 @@ package li.cil.oc2.common.bus.device.item; -import li.cil.oc2.api.bus.device.ItemDevice; import li.cil.oc2.api.bus.device.object.Callback; -import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.object.Parameter; -import li.cil.oc2.api.bus.device.rpc.RPCDevice; -import li.cil.oc2.api.bus.device.rpc.RPCMethod; import li.cil.oc2.api.capabilities.Robot; import li.cil.oc2.api.util.RobotOperationSide; -import li.cil.oc2.common.bus.device.util.IdentityProxy; import li.cil.oc2.common.capabilities.Capabilities; import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; @@ -29,32 +24,20 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -public final class InventoryOperationsModuleDevice extends IdentityProxy implements RPCDevice, ItemDevice { +public final class InventoryOperationsModuleDevice extends AbstractItemRPCDevice { private final Entity entity; private final Robot robot; - private final ObjectDevice device; /////////////////////////////////////////////////////////////////// public InventoryOperationsModuleDevice(final ItemStack identity, final Entity entity, final Robot robot) { - super(identity); + super(identity, "inventory_operations"); this.entity = entity; this.robot = robot; - this.device = new ObjectDevice(this, "inventory_operations"); } /////////////////////////////////////////////////////////////////// - @Override - public List getTypeNames() { - return device.getTypeNames(); - } - - @Override - public List getMethods() { - return device.getMethods(); - } - @Callback public void move(@Parameter("fromSlot") final int fromSlot, @Parameter("intoSlot") final int intoSlot, diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/RedstoneInterfaceCardItemDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/RedstoneInterfaceCardItemDevice.java index 44a1232f..f749ec0d 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/item/RedstoneInterfaceCardItemDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/item/RedstoneInterfaceCardItemDevice.java @@ -1,16 +1,11 @@ package li.cil.oc2.common.bus.device.item; -import li.cil.oc2.api.bus.device.ItemDevice; import li.cil.oc2.api.bus.device.object.Callback; import li.cil.oc2.api.bus.device.object.DocumentedDevice; -import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.object.Parameter; -import li.cil.oc2.api.bus.device.rpc.RPCDevice; -import li.cil.oc2.api.bus.device.rpc.RPCMethod; import li.cil.oc2.api.capabilities.RedstoneEmitter; import li.cil.oc2.api.util.Side; import li.cil.oc2.common.Constants; -import li.cil.oc2.common.bus.device.util.IdentityProxy; import li.cil.oc2.common.capabilities.Capabilities; import li.cil.oc2.common.util.HorizontalBlockUtils; import net.minecraft.item.ItemStack; @@ -27,9 +22,8 @@ import net.minecraftforge.common.util.LazyOptional; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.List; -public final class RedstoneInterfaceCardItemDevice extends IdentityProxy implements RPCDevice, DocumentedDevice, ItemDevice, ICapabilityProvider { +public final class RedstoneInterfaceCardItemDevice extends AbstractItemRPCDevice implements DocumentedDevice, ICapabilityProvider { private static final String OUTPUT_TAG_NAME = "output"; private static final String GET_REDSTONE_INPUT = "getRedstoneInput"; @@ -41,16 +35,14 @@ public final class RedstoneInterfaceCardItemDevice extends IdentityProxy getTypeNames() { - return device.getTypeNames(); - } - - @Override - public List getMethods() { - return device.getMethods(); - } - @Callback(name = GET_REDSTONE_INPUT) public int getRedstoneInput(@Parameter(SIDE) @Nullable final Side side) { if (side == null) throw new IllegalArgumentException();