Shared base class for item RPC devices.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user