From 1edde4b1e25edec1f9e0783711f9645cc2caa8ae Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Thu, 1 May 2014 19:29:04 +0200 Subject: [PATCH] missing check-in for #1594 --- .../api/blueprints/SchematicRegistry.java | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/api/buildcraft/api/blueprints/SchematicRegistry.java b/api/buildcraft/api/blueprints/SchematicRegistry.java index 4252b4dd..c7f0083c 100644 --- a/api/buildcraft/api/blueprints/SchematicRegistry.java +++ b/api/buildcraft/api/blueprints/SchematicRegistry.java @@ -10,11 +10,15 @@ package buildcraft.api.blueprints; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; +import java.util.HashSet; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import buildcraft.core.BuildCraftConfiguration; public class SchematicRegistry { @@ -23,13 +27,24 @@ public class SchematicRegistry { Object [] params; } + private static final HashSet explicitSchematicBlocks = new HashSet(); + private static final HashMap schematicBlocks = new HashMap(); private static final HashMap , SchematicConstructor> schematicEntities = new HashMap, SchematicConstructor>(); + private static final HashSet modsSupporting = new HashSet(); + private static final HashSet modsForbidden = new HashSet(); + private static final HashSet blocksForbidden = new HashSet(); + public static void registerSchematicBlock (Block block, Class clas, Object ... params) { + explicitSchematicBlocks.add(block); + internalRegisterSchematicBlock(block, clas, params); + } + + private static void internalRegisterSchematicBlock (Block block, Class clas, Object ... params) { SchematicConstructor c = new SchematicConstructor (); c.clas = clas; c.params = params; @@ -55,9 +70,9 @@ public class SchematicRegistry { if (!schematicBlocks.containsKey(block)) { if (block instanceof ITileEntityProvider) { - registerSchematicBlock(block, SchematicTile.class); + internalRegisterSchematicBlock(block, SchematicTile.class); } else { - registerSchematicBlock(block, SchematicBlock.class); + internalRegisterSchematicBlock(block, SchematicBlock.class); } } @@ -106,4 +121,47 @@ public class SchematicRegistry { return null; } + public static void declareBlueprintSupport (String modid) { + modsSupporting.add(modid); + } + + public static boolean isExplicitlySupported (Block block) { + String modid = Block.blockRegistry.getNameForObject(block).split(":") [0]; + + return explicitSchematicBlocks.contains(block) || modsSupporting.contains(modid); + } + + public static boolean isAllowedForBuilding (Block block) { + String name = Block.blockRegistry.getNameForObject(block); + String modid = name.split(":") [0]; + + return !modsForbidden.contains(modid) && !blocksForbidden.contains(name); + } + + public static void readConfiguration (BuildCraftConfiguration conf) { + Property excludedMods = conf.get(Configuration.CATEGORY_GENERAL, "builder.excludedMods", new String [0], + "mods that should be excluded from the builder."); + Property excludedBlocks = conf.get(Configuration.CATEGORY_GENERAL, "builder.excludedBlocks", new String [0], + "blocks that should be excluded from the builder."); + + for (String id : excludedMods.getStringList()) { + id = BuildCraftConfiguration.stripSurroundingQuotes (id.trim()); + + if (id.length() > 0) { + modsForbidden.add(id); + } + } + + for (String id : excludedBlocks.getStringList()) { + id = BuildCraftConfiguration.stripSurroundingQuotes (id.trim()); + + if (id.length() > 0) { + blocksForbidden.add(id); + } + } + } + + static { + modsSupporting.add ("minecraft"); + } }