Split out identifier for devices into separate sub-interface.

It's only needed at bus level so we can wrap at that point.
This commit is contained in:
Florian Nücke
2020-11-29 13:36:34 +01:00
parent 49160acf6d
commit fd70381f31
12 changed files with 138 additions and 47 deletions

View File

@@ -1,9 +1,9 @@
package li.cil.oc2.bus;
import li.cil.oc2.api.bus.DeviceBusElement;
import li.cil.oc2.api.device.Device;
import li.cil.oc2.api.device.IdentifiableDevice;
import li.cil.oc2.common.bus.DeviceBusControllerImpl;
import li.cil.oc2.common.capabilities.Capabilities;
import li.cil.oc2.common.vm.DeviceBusControllerImpl;
import li.cil.sedna.api.device.serial.SerialDevice;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
@@ -62,7 +62,7 @@ public class DeviceBusTests {
final DeviceBusElement busElement = mock(DeviceBusElement.class);
when(tileEntity.getCapability(eq(busElementCapability), any())).thenReturn(LazyOptional.of(() -> busElement));
final Device device = mock(Device.class);
final IdentifiableDevice device = mock(IdentifiableDevice.class);
when(busElement.getLocalDevices()).thenReturn(Collections.singletonList(device));
when(device.getUniqueId()).thenReturn(UUID.randomUUID());

View File

@@ -3,15 +3,15 @@ package li.cil.oc2.vm;
import com.google.gson.*;
import it.unimi.dsi.fastutil.bytes.ByteArrayFIFOQueue;
import li.cil.oc2.api.bus.DeviceBusElement;
import li.cil.oc2.api.device.AbstractDevice;
import li.cil.oc2.api.device.Device;
import li.cil.oc2.api.device.DeviceMethod;
import li.cil.oc2.api.device.IdentifiableDevice;
import li.cil.oc2.api.device.object.Callback;
import li.cil.oc2.api.device.object.ObjectDevice;
import li.cil.oc2.api.device.object.Parameter;
import li.cil.oc2.common.bus.DeviceBusControllerImpl;
import li.cil.oc2.common.bus.DeviceBusElementImpl;
import li.cil.oc2.common.capabilities.Capabilities;
import li.cil.oc2.common.vm.DeviceBusControllerImpl;
import li.cil.oc2.common.vm.DeviceBusElementImpl;
import li.cil.oc2.common.device.IdentifiableDeviceImpl;
import li.cil.sedna.api.device.serial.SerialDevice;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
import java.io.ByteArrayOutputStream;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.mock;
@@ -117,14 +118,15 @@ public class ObjectDeviceProtocolTests {
public void annotatedObject() {
final SimpleObject object = new SimpleObject();
final ObjectDevice device = new ObjectDevice(object);
final IdentifiableDeviceImpl identifiableDevice = new IdentifiableDeviceImpl(device, UUID.randomUUID());
busElement.addDevice(device);
busElement.addDevice(identifiableDevice);
controller.scan(world, CONTROLLER_POS);
Assertions.assertEquals(42 + 23, invokeMethod(device, "add", 42, 23).getAsInt());
Assertions.assertEquals(42 + 23, invokeMethod(identifiableDevice, "add", 42, 23).getAsInt());
}
private JsonElement invokeMethod(final Device device, final String name, final Object... parameters) {
private JsonElement invokeMethod(final IdentifiableDevice device, final String name, final Object... parameters) {
final JsonObject request = new JsonObject();
request.addProperty("type", "invoke");
final JsonObject methodInvocation = new JsonObject();
@@ -241,16 +243,28 @@ public class ObjectDeviceProtocolTests {
}
}
private static final class TestDevice extends AbstractDevice {
private static final class TestDevice implements IdentifiableDevice {
private static final UUID UUID = java.util.UUID.randomUUID();
private final DeviceMethod method;
public TestDevice(final DeviceMethod method) {
this.method = method;
}
@Override
public List<String> getTypeNames() {
return Collections.singletonList(getClass().getSimpleName());
}
@Override
public List<DeviceMethod> getMethods() {
return Collections.singletonList(method);
}
@Override
public UUID getUniqueId() {
return UUID;
}
}
}