diff --git a/src/main/java/li/cil/oc2/Constants.java b/src/main/java/li/cil/oc2/Constants.java index 6954de27..c217c7d0 100644 --- a/src/main/java/li/cil/oc2/Constants.java +++ b/src/main/java/li/cil/oc2/Constants.java @@ -6,13 +6,23 @@ public final class Constants { public static final int KILOBYTE = 1024; public static final int MEGABYTE = 1024 * KILOBYTE; + /////////////////////////////////////////////////////////////////// + public static final String COMPUTER_BLOCK_NAME = "computer"; public static final String BUS_CABLE_BLOCK_NAME = "bus_cable"; public static final String REDSTONE_INTERFACE_BLOCK_NAME = "redstone_interface"; public static final String SCREEN_BLOCK_NAME = "screen"; - public static final String RAM_NAME = "ram"; - public static final String HDD_NAME = "hdd"; + /////////////////////////////////////////////////////////////////// + + public static final String RAM_ITEM_NAME = "ram"; + public static final String HDD_ITEM_NAME = "hdd"; + + /////////////////////////////////////////////////////////////////// + + public static final String COMMON_ITEM_GROUP_NAME = "common"; + + /////////////////////////////////////////////////////////////////// public static final String HDD_INFO_NBT_TAG_NAME = API.MOD_ID + "hdd"; public static final String HDD_SIZE_NBT_TAG_NAME = "size"; diff --git a/src/main/java/li/cil/oc2/api/API.java b/src/main/java/li/cil/oc2/api/API.java index b3e8f8a2..5a06d090 100644 --- a/src/main/java/li/cil/oc2/api/API.java +++ b/src/main/java/li/cil/oc2/api/API.java @@ -2,7 +2,6 @@ package li.cil.oc2.api; import com.google.gson.GsonBuilder; import li.cil.oc2.api.bus.device.object.Callback; -import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.bus.device.rpc.RPCMethod; import li.cil.oc2.api.imc.RPCMethodParameterTypeAdapter; @@ -13,16 +12,6 @@ public final class API { /////////////////////////////////////////////////////////////////// - /** - * IMC message for registering a {@link DeviceProvider}. - *

- * Example: - *

-     * InterModComms.sendTo(API.MOD_ID, API.IMC_ADD_DEVICE_PROVIDER, () -> new DeviceProvider() { ... });
-     * 
- */ - public static final String IMC_ADD_DEVICE_PROVIDER = "addDeviceProvider"; - /** * IMC message for registering Gson type adapters for method parameter serialization and * deserialization. diff --git a/src/main/java/li/cil/oc2/api/bus/device/provider/DeviceProvider.java b/src/main/java/li/cil/oc2/api/bus/device/provider/DeviceProvider.java index cc834535..ac37c8a9 100644 --- a/src/main/java/li/cil/oc2/api/bus/device/provider/DeviceProvider.java +++ b/src/main/java/li/cil/oc2/api/bus/device/provider/DeviceProvider.java @@ -4,6 +4,7 @@ import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.rpc.RPCDevice; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.registries.IForgeRegistryEntry; /** * Allows querying for devices given some context. @@ -24,15 +25,26 @@ import net.minecraftforge.common.util.LazyOptional; * * *

- * Providers can be registered with the IMC message {@link li.cil.oc2.api.API#IMC_ADD_DEVICE_PROVIDER}. + * Providers can be registered via the device provider registry, much like blocks and items + * are registered. For example: + *

+ * class YourModInitialization {
+ *     static DeferredRegister PROVIDERS = DeferredRegister.create(DeviceProvider.class, "your_mod_id");
+ *
+ *     static void initialize() {
+ *         PROVIDERS.register("your_device_name", YourDeviceProvider::new);
+ *
+ *         PROVIDERS.register(FMLJavaModLoadingContext.get().getModEventBus());
+ *     }
+ * }
+ * 
* * @see RPCDevice * @see ObjectDevice * @see DeviceQuery * @see BlockDeviceQuery */ -@FunctionalInterface -public interface DeviceProvider { +public interface DeviceProvider extends IForgeRegistryEntry { /** * Get a device for the specified query. * diff --git a/src/main/java/li/cil/oc2/common/CommonSetup.java b/src/main/java/li/cil/oc2/common/CommonSetup.java index 980f45de..cba8288f 100644 --- a/src/main/java/li/cil/oc2/common/CommonSetup.java +++ b/src/main/java/li/cil/oc2/common/CommonSetup.java @@ -1,6 +1,5 @@ package li.cil.oc2.common; -import li.cil.oc2.common.bus.device.provider.Providers; import li.cil.oc2.common.bus.device.rpc.RPCMethodParameterTypeAdapters; import li.cil.oc2.common.capabilities.Capabilities; import li.cil.oc2.common.integration.IMC; @@ -20,7 +19,6 @@ public final class CommonSetup { public static void run(final FMLCommonSetupEvent event) { Capabilities.initialize(); - Providers.initialize(); Network.setup(); FMLJavaModLoadingContext.get().getModEventBus().addListener(IMC::handleIMCMessages); diff --git a/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java b/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java index 6005f2b7..c263c20b 100644 --- a/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java +++ b/src/main/java/li/cil/oc2/common/bus/ItemHandlerDeviceBusElement.java @@ -1,7 +1,7 @@ package li.cil.oc2.common.bus; import li.cil.oc2.api.bus.device.Device; -import li.cil.oc2.common.bus.device.provider.Providers; +import li.cil.oc2.common.bus.device.Devices; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.ItemStackHandler; @@ -22,7 +22,7 @@ public class ItemHandlerDeviceBusElement extends AbstractGroupingDeviceBusElemen final HashSet newDevices = new HashSet<>(); final ItemStack stack = handler.getStackInSlot(slot); if (!stack.isEmpty()) { - for (final LazyOptional device : Providers.getDevices(stack)) { + for (final LazyOptional device : Devices.getDevices(stack)) { device.ifPresent(newDevices::add); device.addListener(unused -> handleSlotChanged(slot)); } diff --git a/src/main/java/li/cil/oc2/common/bus/TileEntityDeviceBusElement.java b/src/main/java/li/cil/oc2/common/bus/TileEntityDeviceBusElement.java index 0d30c010..c1e5ccd0 100644 --- a/src/main/java/li/cil/oc2/common/bus/TileEntityDeviceBusElement.java +++ b/src/main/java/li/cil/oc2/common/bus/TileEntityDeviceBusElement.java @@ -3,7 +3,7 @@ package li.cil.oc2.common.bus; import li.cil.oc2.api.bus.DeviceBus; import li.cil.oc2.api.bus.DeviceBusElement; import li.cil.oc2.api.bus.device.Device; -import li.cil.oc2.common.bus.device.provider.Providers; +import li.cil.oc2.common.bus.device.Devices; import li.cil.oc2.common.capabilities.Capabilities; import li.cil.oc2.common.util.ServerScheduler; import li.cil.oc2.common.util.WorldUtils; @@ -82,7 +82,7 @@ public class TileEntityDeviceBusElement extends AbstractGroupingDeviceBusElement final HashSet newDevices = new HashSet<>(); if (canConnectToSide(direction)) { - for (final LazyOptional device : Providers.getDevices(world, pos, direction)) { + for (final LazyOptional device : Devices.getDevices(world, pos, direction)) { device.ifPresent(newDevices::add); device.addListener(unused -> handleNeighborChanged(pos)); } diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java b/src/main/java/li/cil/oc2/common/bus/device/Devices.java similarity index 71% rename from src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java rename to src/main/java/li/cil/oc2/common/bus/device/Devices.java index dad84a7f..c196a607 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java +++ b/src/main/java/li/cil/oc2/common/bus/device/Devices.java @@ -1,44 +1,24 @@ -package li.cil.oc2.common.bus.device.provider; +package li.cil.oc2.common.bus.device; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.provider.BlockDeviceQuery; import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.bus.device.provider.DeviceQuery; import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; -import li.cil.oc2.common.bus.device.provider.util.BlockDeviceProvider; -import li.cil.oc2.common.bus.device.provider.util.TileEntityDeviceProvider; +import li.cil.oc2.common.init.Providers; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.registries.IForgeRegistry; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public final class Providers { - private static final ArrayList DEVICE_PROVIDERS = new ArrayList<>(); - - /////////////////////////////////////////////////////////////////// - - public static void initialize() { - addProvider(new EnergyStorageDeviceProvider()); - addProvider(new FluidHandlerDeviceProvider()); - addProvider(new ItemHandlerDeviceProvider()); - addProvider(new TileEntityDeviceProvider()); - addProvider(new BlockDeviceProvider()); - addProvider(new MemoryItemDeviceProvider()); - addProvider(new HardDriveItemDeviceProvider()); - } - - public static void addProvider(final DeviceProvider provider) { - if (!DEVICE_PROVIDERS.contains(provider)) { - DEVICE_PROVIDERS.add(provider); - } - } - +public final class Devices { public static List> getDevices(final TileEntity tileEntity, final Direction side) { final World world = tileEntity.getWorld(); final BlockPos pos = tileEntity.getPos(); @@ -57,8 +37,9 @@ public final class Providers { } public static List> getDevices(final DeviceQuery query) { + final IForgeRegistry providers = Providers.PROVIDERS_REGISTRY.get(); final ArrayList> devices = new ArrayList<>(); - for (final DeviceProvider provider : DEVICE_PROVIDERS) { + for (final DeviceProvider provider : providers.getValues()) { final LazyOptional device = provider.getDevice(query); if (device.isPresent()) { devices.add(device); diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/BlockDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/BlockDeviceProvider.java similarity index 87% rename from src/main/java/li/cil/oc2/common/bus/device/provider/util/BlockDeviceProvider.java rename to src/main/java/li/cil/oc2/common/bus/device/provider/BlockDeviceProvider.java index 37549052..6a516963 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/util/BlockDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/BlockDeviceProvider.java @@ -1,17 +1,17 @@ -package li.cil.oc2.common.bus.device.provider.util; +package li.cil.oc2.common.bus.device.provider; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.object.Callbacks; import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.provider.BlockDeviceQuery; -import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.bus.device.provider.DeviceQuery; +import li.cil.oc2.common.bus.device.provider.util.AbstractDeviceProvider; import li.cil.oc2.common.util.WorldUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraftforge.common.util.LazyOptional; -public class BlockDeviceProvider implements DeviceProvider { +public final class BlockDeviceProvider extends AbstractDeviceProvider { @Override public LazyOptional getDevice(final DeviceQuery query) { if (!(query instanceof BlockDeviceQuery)) { diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/EnergyStorageDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/EnergyStorageDeviceProvider.java index c03db2ba..bbb1d710 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/EnergyStorageDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/EnergyStorageDeviceProvider.java @@ -10,7 +10,7 @@ import li.cil.oc2.common.capabilities.Capabilities; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; -public class EnergyStorageDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { +public final class EnergyStorageDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { private static final String ENERGY_STORAGE_TYPE_NAME = "energyStorage"; /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/FluidHandlerDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/FluidHandlerDeviceProvider.java index a9782913..7a3d7cc7 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/FluidHandlerDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/FluidHandlerDeviceProvider.java @@ -11,7 +11,7 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; -public class FluidHandlerDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { +public final class FluidHandlerDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { private static final String FLUID_HANDLER_TYPE_NAME = "fluidHandler"; /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/HardDriveItemDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/HardDriveItemDeviceProvider.java index f4fe016b..ceb4756b 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/HardDriveItemDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/HardDriveItemDeviceProvider.java @@ -2,12 +2,12 @@ package li.cil.oc2.common.bus.device.provider; import li.cil.oc2.Config; import li.cil.oc2.Constants; -import li.cil.oc2.OpenComputers; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; import li.cil.oc2.common.bus.device.HardDiskDriveDevice; import li.cil.oc2.common.bus.device.SparseHardDiskDriveDevice; import li.cil.oc2.common.bus.device.provider.util.AbstractItemDeviceProvider; +import li.cil.oc2.common.init.Items; import li.cil.oc2.common.util.NBTTagIds; import li.cil.sedna.api.device.BlockDevice; import li.cil.sedna.buildroot.Buildroot; @@ -21,13 +21,13 @@ import org.apache.logging.log4j.Logger; import java.io.IOException; import java.util.Objects; -public class HardDriveItemDeviceProvider extends AbstractItemDeviceProvider { +public final class HardDriveItemDeviceProvider extends AbstractItemDeviceProvider { private static final Logger LOGGER = LogManager.getLogger(); /////////////////////////////////////////////////////////////////// public HardDriveItemDeviceProvider() { - super(OpenComputers.HDD_ITEM.get()); + super(Items.HDD_ITEM.get()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/ItemHandlerDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/ItemHandlerDeviceProvider.java index 5921118a..ac9fabde 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/ItemHandlerDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/ItemHandlerDeviceProvider.java @@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; -public class ItemHandlerDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { +public final class ItemHandlerDeviceProvider extends AbstractCapabilityAnyTileEntityDeviceProvider { private static final String ITEM_HANDLER_TYPE_NAME = "itemHandler"; /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/MemoryItemDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/MemoryItemDeviceProvider.java index a235cdf8..d454faf9 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/MemoryItemDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/MemoryItemDeviceProvider.java @@ -1,12 +1,12 @@ package li.cil.oc2.common.bus.device.provider; import li.cil.oc2.Constants; -import li.cil.oc2.OpenComputers; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; import li.cil.oc2.api.bus.device.vm.*; import li.cil.oc2.common.bus.device.provider.util.AbstractItemDeviceProvider; import li.cil.oc2.common.bus.device.provider.util.AbstractObjectProxy; +import li.cil.oc2.common.init.Items; import li.cil.oc2.common.serialization.BlobStorage; import li.cil.oc2.common.util.NBTTagIds; import li.cil.sedna.api.device.PhysicalMemory; @@ -23,7 +23,7 @@ import java.util.UUID; public final class MemoryItemDeviceProvider extends AbstractItemDeviceProvider { public MemoryItemDeviceProvider() { - super(OpenComputers.RAM_8M_ITEM.get()); + super(Items.RAM_8M_ITEM.get()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/TileEntityDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/TileEntityDeviceProvider.java similarity index 88% rename from src/main/java/li/cil/oc2/common/bus/device/provider/util/TileEntityDeviceProvider.java rename to src/main/java/li/cil/oc2/common/bus/device/provider/TileEntityDeviceProvider.java index 4bf683b7..cea5d476 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/util/TileEntityDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/TileEntityDeviceProvider.java @@ -1,9 +1,10 @@ -package li.cil.oc2.common.bus.device.provider.util; +package li.cil.oc2.common.bus.device.provider; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.object.Callbacks; import li.cil.oc2.api.bus.device.object.ObjectDevice; import li.cil.oc2.api.bus.device.provider.BlockDeviceQuery; +import li.cil.oc2.common.bus.device.provider.util.AbstractTileEntityDeviceProvider; import li.cil.oc2.common.util.WorldUtils; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.LazyOptional; diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractDeviceProvider.java new file mode 100644 index 00000000..a9f3c7ac --- /dev/null +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractDeviceProvider.java @@ -0,0 +1,7 @@ +package li.cil.oc2.common.bus.device.provider.util; + +import li.cil.oc2.api.bus.device.provider.DeviceProvider; +import net.minecraftforge.registries.ForgeRegistryEntry; + +public abstract class AbstractDeviceProvider extends ForgeRegistryEntry implements DeviceProvider { +} diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java index a74bb94c..f30f7aab 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractItemDeviceProvider.java @@ -1,14 +1,13 @@ package li.cil.oc2.common.bus.device.provider.util; import li.cil.oc2.api.bus.device.Device; -import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.bus.device.provider.DeviceQuery; import li.cil.oc2.api.bus.device.provider.ItemDeviceQuery; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; -public abstract class AbstractItemDeviceProvider implements DeviceProvider { +public abstract class AbstractItemDeviceProvider extends AbstractDeviceProvider { private final Item item; protected AbstractItemDeviceProvider(final Item item) { diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractTileEntityDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractTileEntityDeviceProvider.java index 0076c927..262d7401 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractTileEntityDeviceProvider.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/util/AbstractTileEntityDeviceProvider.java @@ -2,13 +2,12 @@ package li.cil.oc2.common.bus.device.provider.util; import li.cil.oc2.api.bus.device.Device; import li.cil.oc2.api.bus.device.provider.BlockDeviceQuery; -import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.bus.device.provider.DeviceQuery; import li.cil.oc2.common.util.WorldUtils; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.LazyOptional; -public abstract class AbstractTileEntityDeviceProvider implements DeviceProvider { +public abstract class AbstractTileEntityDeviceProvider extends AbstractDeviceProvider { private final Class tileEntityType; /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/init/Providers.java b/src/main/java/li/cil/oc2/common/init/Providers.java new file mode 100644 index 00000000..79c049f8 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/init/Providers.java @@ -0,0 +1,35 @@ +package li.cil.oc2.common.init; + +import li.cil.oc2.api.API; +import li.cil.oc2.api.bus.device.provider.DeviceProvider; +import li.cil.oc2.common.bus.device.provider.*; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryBuilder; + +import java.util.function.Supplier; + +public final class Providers { + private static final DeferredRegister PROVIDERS = DeferredRegister.create(DeviceProvider.class, API.MOD_ID); + + /////////////////////////////////////////////////////////////////// + + public static final Supplier> PROVIDERS_REGISTRY = PROVIDERS.makeRegistry("device_providers", RegistryBuilder::new); + + /////////////////////////////////////////////////////////////////// + + public static void initialize() { + PROVIDERS.register("block", BlockDeviceProvider::new); + PROVIDERS.register("tile_entity", TileEntityDeviceProvider::new); + + PROVIDERS.register("energy_storage", EnergyStorageDeviceProvider::new); + PROVIDERS.register("fluid_handler", FluidHandlerDeviceProvider::new); + PROVIDERS.register("item_handler", ItemHandlerDeviceProvider::new); + + PROVIDERS.register("item_memory", MemoryItemDeviceProvider::new); + PROVIDERS.register("item_hard_drive", HardDriveItemDeviceProvider::new); + + PROVIDERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + } +} diff --git a/src/main/java/li/cil/oc2/common/integration/IMC.java b/src/main/java/li/cil/oc2/common/integration/IMC.java index 67c53def..3f6fb139 100644 --- a/src/main/java/li/cil/oc2/common/integration/IMC.java +++ b/src/main/java/li/cil/oc2/common/integration/IMC.java @@ -1,9 +1,7 @@ package li.cil.oc2.common.integration; import li.cil.oc2.api.API; -import li.cil.oc2.api.bus.device.provider.DeviceProvider; import li.cil.oc2.api.imc.RPCMethodParameterTypeAdapter; -import li.cil.oc2.common.bus.device.provider.Providers; import li.cil.oc2.common.bus.device.rpc.RPCMethodParameterTypeAdapters; import net.minecraft.util.Util; import net.minecraftforge.fml.InterModComms; @@ -21,7 +19,6 @@ public final class IMC { private static final HashMap> METHODS = Util.make(() -> { HashMap> map = new HashMap<>(); - map.put(API.IMC_ADD_DEVICE_PROVIDER, IMC::addDeviceProvider); map.put(API.IMC_ADD_RPC_METHOD_PARAMETER_TYPE_ADAPTER, IMC::addRPCMethodParameterTypeAdapter); return map; @@ -38,10 +35,6 @@ public final class IMC { }); } - private static void addDeviceProvider(final InterModComms.IMCMessage message) { - getMessageParameter(message, DeviceProvider.class).ifPresent(Providers::addProvider); - } - private static void addRPCMethodParameterTypeAdapter(final InterModComms.IMCMessage message) { getMessageParameter(message, RPCMethodParameterTypeAdapter.class).ifPresent(value -> { try {