diff --git a/src/main/java/li/cil/oc2/api/bus/device/data/BaseBlockDevice.java b/src/main/java/li/cil/oc2/api/bus/device/data/BlockDeviceData.java
similarity index 75%
rename from src/main/java/li/cil/oc2/api/bus/device/data/BaseBlockDevice.java
rename to src/main/java/li/cil/oc2/api/bus/device/data/BlockDeviceData.java
index 6ae183b1..ecf08c7c 100644
--- a/src/main/java/li/cil/oc2/api/bus/device/data/BaseBlockDevice.java
+++ b/src/main/java/li/cil/oc2/api/bus/device/data/BlockDeviceData.java
@@ -18,21 +18,25 @@ import net.minecraftforge.registries.IForgeRegistryEntry;
* must be created. For example, if the implementation's registry name is
* {@code my_mod:my_block_device}:
*
- * /give ? oc2:hard_drive{oc2:{base:"my_mod:my_block_device"}}
+ * /give ? oc2:hard_drive{oc2:{data:"my_mod:my_block_device"}}
+ *
+ * The drive can be made readonly by also specifying the {@code readonly} tag:
+ *
+ * /give ? oc2:hard_drive{oc2:{data:"my_mod:my_block_device",readonly:true}}
*
*/
-public interface BaseBlockDevice extends IForgeRegistryEntry {
+public interface BlockDeviceData extends IForgeRegistryEntry {
/**
* The registry name of the registry holding block device bases.
*/
- ResourceLocation REGISTRY = new ResourceLocation(API.MOD_ID, "base_block_device");
+ ResourceLocation REGISTRY = new ResourceLocation(API.MOD_ID, "block_device_data");
/**
* Gets the read-only base block device this implementation describes.
*
* @return the block device.
*/
- BlockDevice get();
+ BlockDevice getBlockDevice();
/**
* The display name of this block device base. May be shown in the tooltip
@@ -40,5 +44,5 @@ public interface BaseBlockDevice extends IForgeRegistryEntry {
*
* @return the display name of this block device.
*/
- ITextComponent getName();
+ ITextComponent getDisplayName();
}
diff --git a/src/main/java/li/cil/oc2/api/bus/device/data/Firmware.java b/src/main/java/li/cil/oc2/api/bus/device/data/Firmware.java
index 05b21a96..5a857a4f 100644
--- a/src/main/java/li/cil/oc2/api/bus/device/data/Firmware.java
+++ b/src/main/java/li/cil/oc2/api/bus/device/data/Firmware.java
@@ -45,5 +45,5 @@ public interface Firmware extends IForgeRegistryEntry {
*
* @return the display name of this firmware.
*/
- ITextComponent getName();
+ ITextComponent getDisplayName();
}
diff --git a/src/main/java/li/cil/oc2/api/bus/device/data/FirmwareLoader.java b/src/main/java/li/cil/oc2/api/bus/device/vm/FirmwareLoader.java
similarity index 77%
rename from src/main/java/li/cil/oc2/api/bus/device/data/FirmwareLoader.java
rename to src/main/java/li/cil/oc2/api/bus/device/vm/FirmwareLoader.java
index bc392dd3..cf92b914 100644
--- a/src/main/java/li/cil/oc2/api/bus/device/data/FirmwareLoader.java
+++ b/src/main/java/li/cil/oc2/api/bus/device/vm/FirmwareLoader.java
@@ -1,6 +1,4 @@
-package li.cil.oc2.api.bus.device.data;
-
-import li.cil.oc2.api.bus.device.vm.VMDevice;
+package li.cil.oc2.api.bus.device.vm;
/**
* This interface serves as a marker for devices that load firmware.
diff --git a/src/main/java/li/cil/oc2/client/renderer/tileentity/ComputerTileEntityRenderer.java b/src/main/java/li/cil/oc2/client/renderer/tileentity/ComputerTileEntityRenderer.java
index 8a56ff8e..b0e8b479 100644
--- a/src/main/java/li/cil/oc2/client/renderer/tileentity/ComputerTileEntityRenderer.java
+++ b/src/main/java/li/cil/oc2/client/renderer/tileentity/ComputerTileEntityRenderer.java
@@ -41,6 +41,8 @@ public final class ComputerTileEntityRenderer extends TileEntityRenderer INITIALIZER = DeferredRegister.create(BaseBlockDevice.class, API.MOD_ID);
+public final class BlockDeviceDataRegistration {
+ private static final DeferredRegister INITIALIZER = DeferredRegister.create(BlockDeviceData.class, API.MOD_ID);
///////////////////////////////////////////////////////////////////
- public static final Supplier> REGISTRY = INITIALIZER.makeRegistry(BaseBlockDevice.REGISTRY.getPath(), RegistryBuilder::new);
+ public static final Supplier> REGISTRY = INITIALIZER.makeRegistry(BlockDeviceData.REGISTRY.getPath(), RegistryBuilder::new);
///////////////////////////////////////////////////////////////////
- public static final RegistryObject BUILDROOT = INITIALIZER.register("buildroot", BuildrootRootFileSystem::new);
+ public static final RegistryObject BUILDROOT = INITIALIZER.register("buildroot", BuildrootBlockDeviceData::new);
///////////////////////////////////////////////////////////////////
diff --git a/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootRootFileSystem.java b/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootBlockDeviceData.java
similarity index 50%
rename from src/main/java/li/cil/oc2/common/bus/device/data/BuildrootRootFileSystem.java
rename to src/main/java/li/cil/oc2/common/bus/device/data/BuildrootBlockDeviceData.java
index 90042d64..a585126d 100644
--- a/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootRootFileSystem.java
+++ b/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootBlockDeviceData.java
@@ -1,6 +1,6 @@
package li.cil.oc2.common.bus.device.data;
-import li.cil.oc2.api.bus.device.data.BaseBlockDevice;
+import li.cil.oc2.api.bus.device.data.BlockDeviceData;
import li.cil.sedna.api.device.BlockDevice;
import li.cil.sedna.buildroot.Buildroot;
import li.cil.sedna.device.block.ByteBufferBlockDevice;
@@ -12,29 +12,33 @@ import org.apache.logging.log4j.Logger;
import java.io.IOException;
-public final class BuildrootRootFileSystem extends ForgeRegistryEntry implements BaseBlockDevice {
+public final class BuildrootBlockDeviceData extends ForgeRegistryEntry implements BlockDeviceData {
private static final Logger LOGGER = LogManager.getLogger();
- private static final ByteBufferBlockDevice ROOT_FS;
+ ///////////////////////////////////////////////////////////////////
+
+ private static final ByteBufferBlockDevice INSTANCE;
static {
- ByteBufferBlockDevice rootfs;
+ ByteBufferBlockDevice instance;
try {
- rootfs = ByteBufferBlockDevice.createFromStream(Buildroot.getRootFilesystem(), true);
+ instance = ByteBufferBlockDevice.createFromStream(Buildroot.getRootFilesystem(), true);
} catch (final IOException e) {
LOGGER.error(e);
- rootfs = ByteBufferBlockDevice.create(0, true);
+ instance = ByteBufferBlockDevice.create(0, true);
}
- ROOT_FS = rootfs;
+ INSTANCE = instance;
+ }
+
+ ///////////////////////////////////////////////////////////////////
+
+ @Override
+ public BlockDevice getBlockDevice() {
+ return INSTANCE;
}
@Override
- public BlockDevice get() {
- return ROOT_FS;
- }
-
- @Override
- public ITextComponent getName() {
+ public ITextComponent getDisplayName() {
return new StringTextComponent("Linux");
}
}
diff --git a/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootFirmware.java b/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootFirmware.java
index 0c6b8024..c07a140d 100644
--- a/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootFirmware.java
+++ b/src/main/java/li/cil/oc2/common/bus/device/data/BuildrootFirmware.java
@@ -23,7 +23,7 @@ public final class BuildrootFirmware extends ForgeRegistryEntry implem
}
@Override
- public ITextComponent getName() {
- return new StringTextComponent("OpenSBI+Linux");
+ public ITextComponent getDisplayName() {
+ return new StringTextComponent("Linux");
}
}
diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/ByteBufferFlashMemoryVMDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/ByteBufferFlashMemoryVMDevice.java
index 73f73c38..c5e518f2 100644
--- a/src/main/java/li/cil/oc2/common/bus/device/item/ByteBufferFlashMemoryVMDevice.java
+++ b/src/main/java/li/cil/oc2/common/bus/device/item/ByteBufferFlashMemoryVMDevice.java
@@ -2,7 +2,7 @@ package li.cil.oc2.common.bus.device.item;
import com.google.common.eventbus.Subscribe;
import li.cil.oc2.api.bus.device.ItemDevice;
-import li.cil.oc2.api.bus.device.data.FirmwareLoader;
+import li.cil.oc2.api.bus.device.vm.FirmwareLoader;
import li.cil.oc2.api.bus.device.vm.VMContext;
import li.cil.oc2.api.bus.device.vm.VMDevice;
import li.cil.oc2.api.bus.device.vm.VMDeviceLoadResult;
diff --git a/src/main/java/li/cil/oc2/common/bus/device/item/FirmwareFlashMemoryVMDevice.java b/src/main/java/li/cil/oc2/common/bus/device/item/FirmwareFlashMemoryVMDevice.java
index 138655ee..9bc0a5f0 100644
--- a/src/main/java/li/cil/oc2/common/bus/device/item/FirmwareFlashMemoryVMDevice.java
+++ b/src/main/java/li/cil/oc2/common/bus/device/item/FirmwareFlashMemoryVMDevice.java
@@ -3,7 +3,7 @@ package li.cil.oc2.common.bus.device.item;
import com.google.common.eventbus.Subscribe;
import li.cil.oc2.api.bus.device.ItemDevice;
import li.cil.oc2.api.bus.device.data.Firmware;
-import li.cil.oc2.api.bus.device.data.FirmwareLoader;
+import li.cil.oc2.api.bus.device.vm.FirmwareLoader;
import li.cil.oc2.api.bus.device.vm.VMContext;
import li.cil.oc2.api.bus.device.vm.VMDevice;
import li.cil.oc2.api.bus.device.vm.VMDeviceLoadResult;
diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/item/HardDriveItemDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/item/HardDriveItemDeviceProvider.java
index c4d85a63..38b2a005 100644
--- a/src/main/java/li/cil/oc2/common/bus/device/provider/item/HardDriveItemDeviceProvider.java
+++ b/src/main/java/li/cil/oc2/common/bus/device/provider/item/HardDriveItemDeviceProvider.java
@@ -3,13 +3,13 @@ package li.cil.oc2.common.bus.device.provider.item;
import li.cil.oc2.api.bus.device.DeviceType;
import li.cil.oc2.api.bus.device.DeviceTypes;
import li.cil.oc2.api.bus.device.ItemDevice;
-import li.cil.oc2.api.bus.device.data.BaseBlockDevice;
+import li.cil.oc2.api.bus.device.data.BlockDeviceData;
import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery;
import li.cil.oc2.common.Config;
import li.cil.oc2.common.bus.device.item.HardDriveVMDevice;
import li.cil.oc2.common.bus.device.item.SparseHardDriveVMDevice;
import li.cil.oc2.common.bus.device.provider.util.AbstractItemDeviceProvider;
-import li.cil.oc2.common.item.HardDriveItem;
+import li.cil.oc2.common.item.BlockDeviceItem;
import li.cil.oc2.common.item.Items;
import li.cil.sedna.api.device.BlockDevice;
import net.minecraft.item.ItemStack;
@@ -28,14 +28,14 @@ public final class HardDriveItemDeviceProvider extends AbstractItemDeviceProvide
protected Optional getItemDevice(final ItemDeviceQuery query) {
final ItemStack stack = query.getItemStack();
- final boolean readonly = HardDriveItem.isReadonly(stack);
- final BaseBlockDevice baseBlockDevice = HardDriveItem.getBaseBlockDevice(stack);
- if (baseBlockDevice != null) {
- final BlockDevice base = baseBlockDevice.get();
+ final boolean readonly = BlockDeviceItem.isReadonly(stack);
+ final BlockDeviceData handler = BlockDeviceItem.getData(stack);
+ if (handler != null) {
+ final BlockDevice base = handler.getBlockDevice();
return Optional.of(new SparseHardDriveVMDevice(stack, base, readonly));
}
- final int size = MathHelper.clamp(HardDriveItem.getCapacity(stack), 0, Config.maxHardDriveSize);
+ final int size = MathHelper.clamp(BlockDeviceItem.getCapacity(stack), 0, Config.maxHardDriveSize);
return Optional.of(new HardDriveVMDevice(stack, size, readonly));
}
diff --git a/src/main/java/li/cil/oc2/common/container/TypedDeviceItemStackHandler.java b/src/main/java/li/cil/oc2/common/container/TypedDeviceItemStackHandler.java
index 624935f4..a6aba62e 100644
--- a/src/main/java/li/cil/oc2/common/container/TypedDeviceItemStackHandler.java
+++ b/src/main/java/li/cil/oc2/common/container/TypedDeviceItemStackHandler.java
@@ -11,11 +11,15 @@ import java.util.function.Function;
public class TypedDeviceItemStackHandler extends DeviceItemStackHandler {
private final DeviceType deviceType;
+ ///////////////////////////////////////////////////////////////////
+
public TypedDeviceItemStackHandler(final int size, final Function> deviceLookup, final DeviceType deviceType) {
super(size, deviceLookup);
this.deviceType = deviceType;
}
+ ///////////////////////////////////////////////////////////////////
+
@Override
public boolean isItemValid(final int slot, final ItemStack stack) {
return super.isItemValid(slot, stack) && Devices.getDeviceTypes(stack).contains(deviceType);
diff --git a/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java b/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java
index 76d936a9..00f9aef7 100644
--- a/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java
+++ b/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java
@@ -89,7 +89,7 @@ public final class FlashMemoryItem extends AbstractStorageItem {
protected ITextComponent getDisplayNameSuffix(final ItemStack stack) {
final Firmware firmware = getFirmware(stack);
if (firmware != null) {
- return firmware.getName();
+ return firmware.getDisplayName();
} else {
return super.getDisplayNameSuffix(stack);
}
diff --git a/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java b/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java
index bb98a18f..44b71a72 100644
--- a/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java
+++ b/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java
@@ -37,7 +37,7 @@ public final class BlobStorage {
private static final HashMultimap> WRITE_HANDLES = HashMultimap.create();
private static final HashMultimap> READ_HANDLES = HashMultimap.create();
private static final ExecutorService WORKERS = Executors.newCachedThreadPool(r -> {
- final Thread thread = new Thread(r, "OC2 BlobStorage Thread");
+ final Thread thread = new Thread(r, "Blob Storage I/O");
thread.setDaemon(false);
return thread;
});
diff --git a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachineState.java b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachineState.java
index 1b9a6720..c7b71f2a 100644
--- a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachineState.java
+++ b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachineState.java
@@ -1,6 +1,6 @@
package li.cil.oc2.common.vm;
-import li.cil.oc2.api.bus.device.data.FirmwareLoader;
+import li.cil.oc2.api.bus.device.vm.FirmwareLoader;
import li.cil.oc2.api.bus.device.vm.VMDeviceLoadResult;
import li.cil.oc2.api.bus.device.vm.event.VMPausingEvent;
import li.cil.oc2.common.Constants;
diff --git a/src/main/java/li/cil/oc2/common/vm/ManagedEventBus.java b/src/main/java/li/cil/oc2/common/vm/ManagedEventBus.java
index f54e0a0a..175b785e 100644
--- a/src/main/java/li/cil/oc2/common/vm/ManagedEventBus.java
+++ b/src/main/java/li/cil/oc2/common/vm/ManagedEventBus.java
@@ -10,10 +10,14 @@ public final class ManagedEventBus implements VMLifecycleEventBus {
private final EventBus eventBus;
private final ArrayList subscribers = new ArrayList<>();
+ ///////////////////////////////////////////////////////////////////
+
public ManagedEventBus(final EventBus eventBus) {
this.eventBus = eventBus;
}
+ ///////////////////////////////////////////////////////////////////
+
public void invalidate() {
for (final Object subscriber : subscribers) {
eventBus.unregister(subscriber);
diff --git a/src/main/java/li/cil/oc2/common/vm/VirtualMachineRunner.java b/src/main/java/li/cil/oc2/common/vm/VirtualMachineRunner.java
index 608f892e..07e0a666 100644
--- a/src/main/java/li/cil/oc2/common/vm/VirtualMachineRunner.java
+++ b/src/main/java/li/cil/oc2/common/vm/VirtualMachineRunner.java
@@ -18,6 +18,7 @@ public class VirtualMachineRunner implements Runnable {
private static final ExecutorService VM_RUNNERS = Executors.newCachedThreadPool(r -> {
final Thread thread = new Thread(r);
thread.setDaemon(true);
+ thread.setName("VirtualMachine Runner");
return thread;
});
diff --git a/src/main/java/li/cil/oc2/common/vm/VirtualMachineState.java b/src/main/java/li/cil/oc2/common/vm/VirtualMachineState.java
index 42494e7d..6e16a345 100644
--- a/src/main/java/li/cil/oc2/common/vm/VirtualMachineState.java
+++ b/src/main/java/li/cil/oc2/common/vm/VirtualMachineState.java
@@ -8,8 +8,6 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import javax.annotation.Nullable;
public interface VirtualMachineState {
- boolean isRunning();
-
AbstractDeviceBusController.BusState getBusState();
@OnlyIn(Dist.CLIENT)
@@ -26,11 +24,13 @@ public interface VirtualMachineState {
@OnlyIn(Dist.CLIENT)
void setBootErrorClient(ITextComponent value);
+ boolean isRunning();
+
void start();
void stop();
- public enum RunState {
+ enum RunState {
STOPPED,
LOADING_DEVICES,
RUNNING,