Shared base class for item RPC devices.

This commit is contained in:
Florian Nücke
2021-08-02 23:30:38 +02:00
parent 653dc8321c
commit 582eeba505
5 changed files with 46 additions and 80 deletions

View File

@@ -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<ItemStack> 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<String> getTypeNames() {
return device.getTypeNames();
}
@Override
public List<RPCMethod> getMethods() {
return device.getMethods();
}
}

View File

@@ -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<ItemStack> 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<ItemStack>
lastOperation = MathHelper.clamp(tag.getLong(LAST_OPERATION_TAG_NAME), 0, entity.getCommandSenderWorld().getGameTime());
}
@Override
public List<String> getTypeNames() {
return device.getTypeNames();
}
@Override
public List<RPCMethod> getMethods() {
return device.getMethods();
}
@Callback
public boolean excavate(@Parameter("side") @Nullable final RobotOperationSide side) {
if (isOnCooldown()) {

View File

@@ -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<ItemStack> 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<ItemStac
private static int nextImportId = 1;
private final TerminalUserProvider userProvider;
private final ObjectDevice device;
private State state;
private ExportedFile exportedFile;
private int importingId;
@@ -105,9 +102,8 @@ public final class FileImportExportCardItemDevice extends IdentityProxy<ItemStac
///////////////////////////////////////////////////////////////////
public FileImportExportCardItemDevice(final ItemStack identity, final TerminalUserProvider userProvider) {
super(identity);
super(identity, "file_import_export");
this.userProvider = userProvider;
this.device = new ObjectDevice(this, "file_import_export");
}
///////////////////////////////////////////////////////////////////
@@ -146,16 +142,6 @@ public final class FileImportExportCardItemDevice extends IdentityProxy<ItemStac
///////////////////////////////////////////////////////////////////
@Override
public List<String> getTypeNames() {
return device.getTypeNames();
}
@Override
public List<RPCMethod> getMethods() {
return device.getMethods();
}
@Override
public void suspend() {
reset();

View File

@@ -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<ItemStack> 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<String> getTypeNames() {
return device.getTypeNames();
}
@Override
public List<RPCMethod> getMethods() {
return device.getMethods();
}
@Callback
public void move(@Parameter("fromSlot") final int fromSlot,
@Parameter("intoSlot") final int intoSlot,

View File

@@ -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<ItemStack> 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<ItemSta
///////////////////////////////////////////////////////////////////
private final TileEntity tileEntity;
private final ObjectDevice device;
private final RedstoneEmitter[] capabilities;
private final byte[] output = new byte[Constants.BLOCK_FACE_COUNT];
///////////////////////////////////////////////////////////////////
public RedstoneInterfaceCardItemDevice(final ItemStack identity, final TileEntity tileEntity) {
super(identity);
super(identity, "redstone");
this.tileEntity = tileEntity;
this.device = new ObjectDevice(this, "redstone");
capabilities = new RedstoneEmitter[Constants.BLOCK_FACE_COUNT];
for (int i = 0; i < Constants.BLOCK_FACE_COUNT; i++) {
@@ -84,16 +76,6 @@ public final class RedstoneInterfaceCardItemDevice extends IdentityProxy<ItemSta
System.arraycopy(serializedOutput, 0, output, 0, Math.min(serializedOutput.length, output.length));
}
@Override
public List<String> getTypeNames() {
return device.getTypeNames();
}
@Override
public List<RPCMethod> getMethods() {
return device.getMethods();
}
@Callback(name = GET_REDSTONE_INPUT)
public int getRedstoneInput(@Parameter(SIDE) @Nullable final Side side) {
if (side == null) throw new IllegalArgumentException();