From 98cbaffca6b94ca89159a12e15d23dc971f519c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 8 Feb 2014 22:29:39 +0100 Subject: [PATCH] cc peripherals are now wrapped by default and can be disabled using a blacklist (in the config) --- src/main/java/li/cil/occ/OpenComponents.java | 19 +++++++-------- .../mods/computercraft/DriverPeripheral.java | 23 +++++++++++++++++++ .../mods/computercraft/ModComputerCraft.java | 5 +--- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/main/java/li/cil/occ/OpenComponents.java b/src/main/java/li/cil/occ/OpenComponents.java index f52e8a0bd..11ade34d2 100644 --- a/src/main/java/li/cil/occ/OpenComponents.java +++ b/src/main/java/li/cil/occ/OpenComponents.java @@ -25,22 +25,19 @@ public class OpenComponents { public static final Logger Log = Logger.getLogger("OpenComponents"); - public static boolean computerCraftWrapEverything; + public static String[] peripheralBlacklist = new String[]{ + "JAKJ.RedstoneInMotion.CarriageControllerEntity" + }; @Mod.EventHandler public void preInit(final FMLPreInitializationEvent e) { final Configuration config = new Configuration(e.getSuggestedConfigurationFile()); - computerCraftWrapEverything = config. - get("computercraft", "wrapEverything", computerCraftWrapEverything, "" + - "Enable this to automatically make any methods other mods'\n" + - "blocks make available to ComputerCraft available via the\n" + - "Adapter. BEWARE: this is disabled by default for a good\n" + - "reason - this will not fully work for all mods, since we\n" + - "cannot fully emulate what ComputerCraft offers to the mods'\n" + - "callbacks. Meaning when used on untested blocks this can\n" + - "very much crash or deadlock your game."). - getBoolean(computerCraftWrapEverything); + peripheralBlacklist = config.get("computercraft", "blacklist", peripheralBlacklist, "" + + "A list of tile entities by class name that should NOT be\n" + + "accessible via the Adapter block. Add blocks here that can\n" + + "lead to crashes or deadlocks (and report them, please!)"). + getStringList(); config.save(); } diff --git a/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java b/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java index 15ede910d..11d35591d 100644 --- a/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java +++ b/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java @@ -4,14 +4,37 @@ import dan200.computer.api.IPeripheral; import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.prefab.DriverTileEntity; import li.cil.oc.api.prefab.ManagedPeripheral; +import li.cil.occ.OpenComponents; +import li.cil.occ.util.Reflection; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import java.util.HashSet; +import java.util.Set; + public class DriverPeripheral extends DriverTileEntity { + private static final Set> blacklist = new HashSet>(); + + static { + for (String name : OpenComponents.peripheralBlacklist) { + final Class clazz = Reflection.getClass(name); + if (clazz != null) { + blacklist.add(clazz); + } + } + } + @Override public Class getTileEntityClass() { return IPeripheral.class; } + @Override + public boolean worksWith(final World world, final int x, final int y, final int z) { + final TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + return tileEntity != null && !blacklist.contains(tileEntity.getClass()) && super.worksWith(world, x, y, z); + } + @Override public ManagedEnvironment createEnvironment(final World world, final int x, final int y, final int z) { return new ManagedPeripheral((IPeripheral) world.getBlockTileEntity(x, y, z)); diff --git a/src/main/java/li/cil/occ/mods/computercraft/ModComputerCraft.java b/src/main/java/li/cil/occ/mods/computercraft/ModComputerCraft.java index 05cedf215..e181324f8 100644 --- a/src/main/java/li/cil/occ/mods/computercraft/ModComputerCraft.java +++ b/src/main/java/li/cil/occ/mods/computercraft/ModComputerCraft.java @@ -1,7 +1,6 @@ package li.cil.occ.mods.computercraft; import li.cil.oc.api.Driver; -import li.cil.occ.OpenComponents; import li.cil.occ.mods.IMod; import net.minecraft.item.ItemStack; @@ -15,9 +14,7 @@ public final class ModComputerCraft implements IMod { @Override public void initialize() { - if (OpenComponents.computerCraftWrapEverything) { - Driver.add(new DriverPeripheral()); - } + Driver.add(new DriverPeripheral()); } @Override