From 9a23bc0752aeee839bd861d548d1c6938b719c11 Mon Sep 17 00:00:00 2001
From: Andrew-71 <andrey.nikitin.vladimirovich@gmail.com>
Date: Fri, 12 May 2023 10:55:53 +0300
Subject: [PATCH] Make ComputerCraft optional

---
 Fabric/build.gradle                           |  5 ++-
 .../a71/tardim_ic/tardim_ic/Registration.java | 25 +++++--------
 .../DigitalInterfaceBlock.java                |  3 +-
 .../DigitalInterfaceTileEntity.java           |  3 +-
 .../tardim_ic/registration/CommandInit.java   |  2 --
 .../registration/ComputerCraftCompat.java     | 36 +++++++++++++++++++
 .../tardim_ic/registration/Exteriors.java     |  4 +++
 Fabric/src/main/resources/fabric.mod.json     |  9 +++--
 8 files changed, 62 insertions(+), 25 deletions(-)
 create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java
 create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java

diff --git a/Fabric/build.gradle b/Fabric/build.gradle
index e9f8306..f2f9c97 100644
--- a/Fabric/build.gradle
+++ b/Fabric/build.gradle
@@ -21,7 +21,10 @@ dependencies {
     modImplementation "io.netty:netty-codec-http:4.1.77.Final"
 
     modImplementation "curse.maven:tardim-531315:4453924"
-    modImplementation "curse.maven:cc-restitched-462672:3908334"
+    //modImplementation "curse.maven:cc-restitched-462672:3908334"
+    //.. maybe?
+    modApi "curse.maven:cc-restitched-462672:3908334"
+    modCompileOnly "curse.maven:cc-restitched-462672:3908334"
 }
 
 loom {
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java
index 3d9e1a3..32ccbea 100644
--- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java
@@ -6,9 +6,9 @@ import com.swdteam.tardim.common.block.BlockTardimRoof;
 import com.swdteam.tardim.common.init.TardimRegistry;
 import com.swdteam.tardim.tileentity.TileEntityTardim;
 
-import dan200.computercraft.api.ComputerCraftAPI;
 
 import com.mojang.datafixers.types.Type;
+import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.Util;
 import net.minecraft.core.BlockPos;
 import net.minecraft.resources.ResourceLocation;
@@ -31,13 +31,11 @@ import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityT
 import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
 import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
 
-import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceBlock;
-import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfacePeripheralProvider;
-import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceTileEntity;
 import su.a71.tardim_ic.tardim_ic.redstone_input.RedstoneInputBlock;
 import su.a71.tardim_ic.tardim_ic.redstone_input.RedstoneInputTileEntity;
 import su.a71.tardim_ic.tardim_ic.Constants;
 import su.a71.tardim_ic.tardim_ic.registration.CommandInit;
+import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat;
 import su.a71.tardim_ic.tardim_ic.soviet_chronobox.SovietChronoboxTileEntity;
 
 public class Registration {
@@ -47,7 +45,6 @@ public class Registration {
     public static Block FLOOR_SOVIET_CHRONOBOX;
     public static BlockEntityType<TileEntityTardim> TILE_SOVIET_CHRONOBOX;
 
-    public static final Block DIGITAL_TARDIM_INTERFACE = new DigitalInterfaceBlock();
     public static final Block REDSTONE_TARDIM_INPUT = new RedstoneInputBlock();
 
     // Tile Entities
@@ -57,15 +54,9 @@ public class Registration {
             FabricBlockEntityTypeBuilder.create(RedstoneInputTileEntity::new, REDSTONE_TARDIM_INPUT).build()
     );
 
-    public static final BlockEntityType<DigitalInterfaceTileEntity> DIGITAL_TARDIM_INTERFACE_TILEENTITY = Registry.register(
-            Registry.BLOCK_ENTITY_TYPE,
-            new ResourceLocation("tardim_ic", "digital_tardim_interface"),
-            FabricBlockEntityTypeBuilder.create(DigitalInterfaceTileEntity::new, DIGITAL_TARDIM_INTERFACE).build()
-    );
-
-    private static final CreativeModeTab TARDIM_IC_TAB = FabricItemGroupBuilder
+    public static final CreativeModeTab TARDIM_IC_TAB = FabricItemGroupBuilder
             .create(new ResourceLocation("tardim_ic"))
-            .icon(() -> new ItemStack(DIGITAL_TARDIM_INTERFACE))
+            .icon(() -> new ItemStack(REDSTONE_TARDIM_INPUT))
             .build();
 
     // Cloister bell
@@ -81,12 +72,13 @@ public class Registration {
 
     // Register our stuff
     public static void register() {
+        if (FabricLoader.getInstance().isModLoaded("computercraft")) {
+            ComputerCraftCompat.register();
+        }
+
         Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "redstone_tardim_input"), REDSTONE_TARDIM_INPUT);
         Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "redstone_tardim_input"), new BlockItem(REDSTONE_TARDIM_INPUT, new FabricItemSettings().tab(TARDIM_IC_TAB)));
 
-        Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "digital_tardim_interface"), DIGITAL_TARDIM_INTERFACE);
-        Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "digital_tardim_interface"), new BlockItem(DIGITAL_TARDIM_INTERFACE, new FabricItemSettings().tab(TARDIM_IC_TAB)));
-
         Registry.register(Registry.SOUND_EVENT, CLOISTER_SOUND, CLOISTER_SOUND_EVENT);
 
         FLOOR_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_floor_soviet"), new BlockTardimFloor(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion(), new BlockTardimFloor.TardimTileData() {
@@ -105,7 +97,6 @@ public class Registration {
         ROOF_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_roof_soviet"), new BlockTardimRoof(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion()));
         TARDIM_TYPE_SOVIET = new TardimRegistry.TardimBuilder(new ResourceLocation(Constants.MOD_ID, "tardim_soviet_chronobox"), "TARDIM Soviet Chronobox", ROOF_SOVIET_CHRONOBOX, DOOR_SOVIET_CHRONOBOX, FLOOR_SOVIET_CHRONOBOX);
 
-        ComputerCraftAPI.registerPeripheralProvider(new DigitalInterfacePeripheralProvider());
         CommandInit.init();
     }
 }
\ No newline at end of file
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java
index 9f1ee66..b0977d9 100644
--- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java
@@ -8,6 +8,7 @@ import net.minecraft.world.level.block.state.BlockState;
 import net.minecraft.world.level.material.Material;
 import org.jetbrains.annotations.NotNull;
 import su.a71.tardim_ic.tardim_ic.Registration;
+import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat;
 
 import javax.annotation.Nullable;
 
@@ -21,6 +22,6 @@ public class DigitalInterfaceBlock extends Block implements EntityBlock {
     @Nullable
     @Override
     public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) {
-        return Registration.DIGITAL_TARDIM_INTERFACE_TILEENTITY.create(pos, state);
+        return ComputerCraftCompat.DIGITAL_TARDIM_INTERFACE_TILEENTITY.create(pos, state);
     }
 }
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java
index 2e84bb7..bee0a9c 100644
--- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java
@@ -8,6 +8,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
 import net.minecraft.world.level.block.state.BlockState;
 
 import su.a71.tardim_ic.tardim_ic.Registration;
+import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat;
 
 
 public class DigitalInterfaceTileEntity extends BlockEntity {//implements IDigitalInterfaceEntity {
@@ -15,7 +16,7 @@ public class DigitalInterfaceTileEntity extends BlockEntity {//implements IDigit
 
 
     public DigitalInterfaceTileEntity(BlockPos pos, BlockState state) {
-        super(Registration.DIGITAL_TARDIM_INTERFACE_TILEENTITY, pos, state);
+        super(ComputerCraftCompat.DIGITAL_TARDIM_INTERFACE_TILEENTITY, pos, state);
         //this.data = getTardimDataInitial();
     }
 
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java
index 4db50bf..ca5e64d 100644
--- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java
@@ -4,11 +4,9 @@ package su.a71.tardim_ic.tardim_ic.registration;
 import com.swdteam.tardim.common.init.CommandManager;
 
 import su.a71.tardim_ic.tardim_ic.command.CommandCloisterBell;
-import su.a71.tardim_ic.tardim_ic.command.CommandModemTransmit;
 
 public class CommandInit {
     public static void init() {
-        CommandManager.register(new CommandModemTransmit());
         CommandManager.register(new CommandCloisterBell());
     }
 }
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java
new file mode 100644
index 0000000..9ba3347
--- /dev/null
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java
@@ -0,0 +1,36 @@
+package su.a71.tardim_ic.tardim_ic.registration;
+
+import com.swdteam.tardim.common.init.CommandManager;
+import dan200.computercraft.api.ComputerCraftAPI;
+import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
+import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder;
+import net.minecraft.core.Registry;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.item.BlockItem;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.entity.BlockEntityType;
+import su.a71.tardim_ic.tardim_ic.Constants;
+import su.a71.tardim_ic.tardim_ic.Registration;
+import su.a71.tardim_ic.tardim_ic.command.CommandModemTransmit;
+import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceBlock;
+import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfacePeripheralProvider;
+import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceTileEntity;
+
+public class ComputerCraftCompat {
+    public static final Block DIGITAL_TARDIM_INTERFACE = new DigitalInterfaceBlock();
+
+    public static final BlockEntityType<DigitalInterfaceTileEntity> DIGITAL_TARDIM_INTERFACE_TILEENTITY = Registry.register(
+            Registry.BLOCK_ENTITY_TYPE,
+            new ResourceLocation("tardim_ic", "digital_tardim_interface"),
+            FabricBlockEntityTypeBuilder.create(DigitalInterfaceTileEntity::new, DIGITAL_TARDIM_INTERFACE).build()
+    );
+
+    public static void register() {
+        Constants.LOG.info("Loaded ComputerCraft compatibility!");
+        Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "digital_tardim_interface"), DIGITAL_TARDIM_INTERFACE);
+        Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "digital_tardim_interface"), new BlockItem(DIGITAL_TARDIM_INTERFACE, new FabricItemSettings().tab(Registration.TARDIM_IC_TAB)));
+
+        CommandManager.register(new CommandModemTransmit());
+        ComputerCraftAPI.registerPeripheralProvider(new DigitalInterfacePeripheralProvider());
+    }
+}
diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java
new file mode 100644
index 0000000..590e76f
--- /dev/null
+++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java
@@ -0,0 +1,4 @@
+package su.a71.tardim_ic.tardim_ic.registration;
+
+public class Exteriors {
+}
diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json
index edd4ec9..b8939a8 100644
--- a/Fabric/src/main/resources/fabric.mod.json
+++ b/Fabric/src/main/resources/fabric.mod.json
@@ -27,8 +27,11 @@
       "fabric": "*",
       "minecraft": "1.19.x",
       "java": ">=17",
-      "tardim": ">=1.2.2",
-      "computercraft": ">=1.101.0"
-    }
+      "tardim": ">=1.2.2"
+    },
+
+   "suggests": {
+     "computercraft": ">=1.101.0"
+   }
   }
   
\ No newline at end of file