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 1/2] 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 From 0b3c9ddecdb9bcf8ef74b7cb6df1721572dbd4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 8 Feb 2014 22:45:19 +0100 Subject: [PATCH 2/2] cleaned up after peripheral redesign --- src/main/java/li/cil/occ/OpenComponents.java | 2 -- .../mods/computercraft/DriverPeripheral.java | 2 +- .../li/cil/occ/mods/ic2/DriverMassFab.java | 4 +-- .../cil/occ/mods/ic2/ModIndustrialCraft2.java | 6 ++-- .../occ/mods/mekanism/DriverBasicMachine.java | 13 -------- .../occ/mods/mekanism/DriverDigitalMiner.java | 13 -------- .../mekanism/DriverElectrolyticSeperator.java | 13 -------- .../occ/mods/mekanism/DriverEnergyCube.java | 13 -------- .../cil/occ/mods/mekanism/DriverFactory.java | 13 -------- .../occ/mods/mekanism/DriverGenerator.java | 13 -------- .../mekanism/DriverMetallurgicInfuser.java | 13 -------- .../occ/mods/mekanism/DriverTeleporter.java | 13 -------- .../li/cil/occ/mods/mekanism/ModMekanism.java | 31 ------------------- .../occ/mods/thermalexpansion/DriverLamp.java | 11 ++----- .../thermalexpansion/ModThermalExpansion.java | 2 +- 15 files changed, 9 insertions(+), 153 deletions(-) delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverBasicMachine.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverDigitalMiner.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverElectrolyticSeperator.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverEnergyCube.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverFactory.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverGenerator.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverMetallurgicInfuser.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/DriverTeleporter.java delete mode 100644 src/main/java/li/cil/occ/mods/mekanism/ModMekanism.java diff --git a/src/main/java/li/cil/occ/OpenComponents.java b/src/main/java/li/cil/occ/OpenComponents.java index 11ade34d2..7271eb7f4 100644 --- a/src/main/java/li/cil/occ/OpenComponents.java +++ b/src/main/java/li/cil/occ/OpenComponents.java @@ -10,7 +10,6 @@ import li.cil.occ.mods.buildcraft.ModBuildCraft; import li.cil.occ.mods.computercraft.ModComputerCraft; import li.cil.occ.mods.enderstorage.ModEnderStorage; import li.cil.occ.mods.ic2.ModIndustrialCraft2; -import li.cil.occ.mods.mekanism.ModMekanism; import li.cil.occ.mods.redstoneinmotion.ModRedstoneInMotion; import li.cil.occ.mods.thermalexpansion.ModThermalExpansion; import li.cil.occ.mods.vanilla.ModVanilla; @@ -49,7 +48,6 @@ public class OpenComponents { Registry.add(new ModBuildCraft()); Registry.add(new ModEnderStorage()); Registry.add(new ModIndustrialCraft2()); - Registry.add(new ModMekanism()); Registry.add(new ModRedstoneInMotion()); Registry.add(new ModThermalExpansion()); Registry.add(new ModVanilla()); 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 11d35591d..7d6c020b3 100644 --- a/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java +++ b/src/main/java/li/cil/occ/mods/computercraft/DriverPeripheral.java @@ -12,7 +12,7 @@ import net.minecraft.world.World; import java.util.HashSet; import java.util.Set; -public class DriverPeripheral extends DriverTileEntity { +public final class DriverPeripheral extends DriverTileEntity { private static final Set> blacklist = new HashSet>(); static { diff --git a/src/main/java/li/cil/occ/mods/ic2/DriverMassFab.java b/src/main/java/li/cil/occ/mods/ic2/DriverMassFab.java index 669001935..211c3990c 100644 --- a/src/main/java/li/cil/occ/mods/ic2/DriverMassFab.java +++ b/src/main/java/li/cil/occ/mods/ic2/DriverMassFab.java @@ -1,7 +1,5 @@ package li.cil.occ.mods.ic2; - -import cpw.mods.fml.relauncher.ReflectionHelper; import li.cil.oc.api.network.Arguments; import li.cil.oc.api.network.Callback; import li.cil.oc.api.network.Context; @@ -12,7 +10,7 @@ import li.cil.occ.util.Reflection; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class DriverMassFab extends DriverTileEntity { +public final class DriverMassFab extends DriverTileEntity { private static final Class TileController = Reflection.getClass("ic2.core.block.machine.tileentity.TileEntityMatter"); @Override diff --git a/src/main/java/li/cil/occ/mods/ic2/ModIndustrialCraft2.java b/src/main/java/li/cil/occ/mods/ic2/ModIndustrialCraft2.java index d75e83579..aa09a3328 100644 --- a/src/main/java/li/cil/occ/mods/ic2/ModIndustrialCraft2.java +++ b/src/main/java/li/cil/occ/mods/ic2/ModIndustrialCraft2.java @@ -17,13 +17,13 @@ public final class ModIndustrialCraft2 implements IMod { @Override public void initialize() { - Driver.add(new DriverReactor()); - Driver.add(new DriverReactorChamber()); Driver.add(new DriverEnergyConductor()); Driver.add(new DriverEnergySink()); Driver.add(new DriverEnergySource()); - Driver.add(new DriverMassFab()); Driver.add(new DriverEnergyStorage()); + Driver.add(new DriverMassFab()); + Driver.add(new DriverReactor()); + Driver.add(new DriverReactorChamber()); } @Override diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverBasicMachine.java b/src/main/java/li/cil/occ/mods/mekanism/DriverBasicMachine.java deleted file mode 100644 index d67fb9aec..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverBasicMachine.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverBasicMachine extends DriverPeripheral { - private static final Class TileEntityBasicMachine = Reflection.getClass("mekanism.common.tileentity.TileEntityBasicMachine"); - - @Override - public Class getTileEntityClass() { - return TileEntityBasicMachine; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverDigitalMiner.java b/src/main/java/li/cil/occ/mods/mekanism/DriverDigitalMiner.java deleted file mode 100644 index 5f8ab10ea..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverDigitalMiner.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverDigitalMiner extends DriverPeripheral { - private static final Class TileEntityDigitalMiner = Reflection.getClass("mekanism.common.tileentity.TileEntityDigitalMiner"); - - @Override - public Class getTileEntityClass() { - return TileEntityDigitalMiner; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverElectrolyticSeperator.java b/src/main/java/li/cil/occ/mods/mekanism/DriverElectrolyticSeperator.java deleted file mode 100644 index 32f837e1f..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverElectrolyticSeperator.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverElectrolyticSeperator extends DriverPeripheral { - private static final Class TileEntityElectrolyticSeparator = Reflection.getClass("mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator"); - - @Override - public Class getTileEntityClass() { - return TileEntityElectrolyticSeparator; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverEnergyCube.java b/src/main/java/li/cil/occ/mods/mekanism/DriverEnergyCube.java deleted file mode 100644 index a9ba39857..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverEnergyCube.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverEnergyCube extends DriverPeripheral { - private static final Class TileentityEnergyCube = Reflection.getClass("mekanism.common.tileentity.TileEntityEnergyCube"); - - @Override - public Class getTileEntityClass() { - return TileentityEnergyCube; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverFactory.java b/src/main/java/li/cil/occ/mods/mekanism/DriverFactory.java deleted file mode 100644 index 6d5c4ae6c..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverFactory extends DriverPeripheral { - private static final Class TileEntityFactory = Reflection.getClass("mekanism.common.tileentity.TileEntityFactory"); - - @Override - public Class getTileEntityClass() { - return TileEntityFactory; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverGenerator.java b/src/main/java/li/cil/occ/mods/mekanism/DriverGenerator.java deleted file mode 100644 index 6d05b09ad..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverGenerator.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverGenerator extends DriverPeripheral { - private static final Class TileGenerator = Reflection.getClass("mekanism.generators.common.tileentity.TileEntityGenerator"); - - @Override - public Class getTileEntityClass() { - return TileGenerator; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverMetallurgicInfuser.java b/src/main/java/li/cil/occ/mods/mekanism/DriverMetallurgicInfuser.java deleted file mode 100644 index d8e2dc3c0..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverMetallurgicInfuser.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverMetallurgicInfuser extends DriverPeripheral { - private static final Class TileEntityMetallurgicInfuser = Reflection.getClass("mekanism.common.tileentity.TileEntityMetallurgicInfuser"); - - @Override - public Class getTileEntityClass() { - return TileEntityMetallurgicInfuser; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/DriverTeleporter.java b/src/main/java/li/cil/occ/mods/mekanism/DriverTeleporter.java deleted file mode 100644 index 46f7246a7..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/DriverTeleporter.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.occ.mods.computercraft.DriverPeripheral; -import li.cil.occ.util.Reflection; - -public final class DriverTeleporter extends DriverPeripheral { - private static final Class TileEntityTeleporter = Reflection.getClass("mekanism.common.tileentity.TileEntityTeleporter"); - - @Override - public Class getTileEntityClass() { - return TileEntityTeleporter; - } -} diff --git a/src/main/java/li/cil/occ/mods/mekanism/ModMekanism.java b/src/main/java/li/cil/occ/mods/mekanism/ModMekanism.java deleted file mode 100644 index d05351767..000000000 --- a/src/main/java/li/cil/occ/mods/mekanism/ModMekanism.java +++ /dev/null @@ -1,31 +0,0 @@ -package li.cil.occ.mods.mekanism; - -import li.cil.oc.api.Driver; -import li.cil.occ.mods.IMod; -import net.minecraft.item.ItemStack; - -import java.util.Map; - -public final class ModMekanism implements IMod { - @Override - public String getModId() { - return "Mekanism"; - } - - @Override - public void initialize() { - Driver.add(new DriverBasicMachine()); - Driver.add(new DriverDigitalMiner()); - Driver.add(new DriverElectrolyticSeperator()); - Driver.add(new DriverEnergyCube()); - Driver.add(new DriverFactory()); - Driver.add(new DriverGenerator()); - Driver.add(new DriverMetallurgicInfuser()); - Driver.add(new DriverTeleporter()); - - } - - @Override - public void populate(final Map map, final ItemStack stack) { - } -} diff --git a/src/main/java/li/cil/occ/mods/thermalexpansion/DriverLamp.java b/src/main/java/li/cil/occ/mods/thermalexpansion/DriverLamp.java index 1472474e9..eaf406cb4 100644 --- a/src/main/java/li/cil/occ/mods/thermalexpansion/DriverLamp.java +++ b/src/main/java/li/cil/occ/mods/thermalexpansion/DriverLamp.java @@ -11,7 +11,7 @@ import li.cil.occ.util.Reflection; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class DriverLamp extends DriverTileEntity { +public final class DriverLamp extends DriverTileEntity { private static final Class TileLamp = Reflection.getClass("thermalexpansion.block.lamp.TileLamp"); @Override @@ -26,17 +26,12 @@ public class DriverLamp extends DriverTileEntity { public static final class Environment extends ManagedTileEntityEnvironment { public Environment(final TileEntity tileEntity) { - super(tileEntity, "Lamp"); + super(tileEntity, "lamp"); } @Callback public Object[] setColor(final Context context, final Arguments args) { - try { - return new Object[]{Reflection.invoke(tileEntity, "setColor", args.checkInteger(0))}; - } catch (Throwable t) { - return new Object[]{null, "Error"}; - } + return new Object[]{Reflection.tryInvoke(tileEntity, "setColor", args.checkInteger(0))}; } - } } diff --git a/src/main/java/li/cil/occ/mods/thermalexpansion/ModThermalExpansion.java b/src/main/java/li/cil/occ/mods/thermalexpansion/ModThermalExpansion.java index 9eb2fbac1..6f93a1b14 100644 --- a/src/main/java/li/cil/occ/mods/thermalexpansion/ModThermalExpansion.java +++ b/src/main/java/li/cil/occ/mods/thermalexpansion/ModThermalExpansion.java @@ -18,8 +18,8 @@ public final class ModThermalExpansion implements IMod { public void initialize() { Driver.add(new DriverEnderAttuned()); Driver.add(new DriverEnergyHandler()); - Driver.add(new DriverLamp()); Driver.add(new DriverEnergyInfo()); + Driver.add(new DriverLamp()); Driver.add(new DriverRedstoneControl()); Driver.add(new DriverSecureTile()); }