/** * Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com * * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.api.robots; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import buildcraft.api.core.BCLog; public abstract class RobotManager { public static IRobotRegistryProvider registryProvider; public static ArrayList<Class<? extends AIRobot>> aiRobots = new ArrayList<Class<? extends AIRobot>>(); static { aiRobotsByNames = new HashMap<String, Class<? extends AIRobot>>(); aiRobotsNames = new HashMap<Class<? extends AIRobot>, String>(); aiRobotsByLegacyClassNames = new HashMap<String, Class<? extends AIRobot>>(); resourceIdNames = new HashMap<Class<? extends ResourceId>, String>(); resourceIdByNames = new HashMap<String, Class<? extends ResourceId>>(); resourceIdLegacyClassNames = new HashMap<String, Class<? extends ResourceId>>(); dockingStationNames = new HashMap<Class<? extends DockingStation>, String>(); dockingStationByNames = new HashMap<String, Class<? extends DockingStation>>(); registerResourceId(ResourceIdBlock.class, "resourceIdBlock", "buildcraft.core.robots.ResourceIdBlock"); registerResourceId(ResourceIdRequest.class, "resourceIdRequest", "buildcraft.core.robots.ResourceIdRequest"); } private static Map<Class<? extends AIRobot>, String> aiRobotsNames; private static Map<String, Class<? extends AIRobot>> aiRobotsByNames; private static Map<String, Class<? extends AIRobot>> aiRobotsByLegacyClassNames; private static Map<Class<? extends ResourceId>, String> resourceIdNames; private static Map<String, Class<? extends ResourceId>> resourceIdByNames; private static Map<String, Class<? extends ResourceId>> resourceIdLegacyClassNames; private static Map<Class<? extends DockingStation>, String> dockingStationNames; private static Map<String, Class<? extends DockingStation>> dockingStationByNames; public static void registerAIRobot(Class<? extends AIRobot> aiRobot, String name) { registerAIRobot(aiRobot, name, null); } public static void registerAIRobot(Class<? extends AIRobot> aiRobot, String name, String legacyClassName) { if (aiRobotsByNames.containsKey(name)) { BCLog.logger.info("Overriding " + aiRobotsByNames.get(name).getName() + " with " + aiRobot.getName()); } // Check if NBT-load constructor is present try { aiRobot.getConstructor(EntityRobotBase.class); } catch (NoSuchMethodException e) { throw new RuntimeException("AI class " + aiRobot.getName() + " lacks NBT load construtor! This is a bug!"); } aiRobots.add(aiRobot); aiRobotsByNames.put(name, aiRobot); aiRobotsNames.put(aiRobot, name); if (legacyClassName != null) { aiRobotsByLegacyClassNames.put(legacyClassName, aiRobot); } } public static Class<?> getAIRobotByName(String aiRobotName) { return aiRobotsByNames.get(aiRobotName); } public static String getAIRobotName(Class<? extends AIRobot> aiRobotClass) { return aiRobotsNames.get(aiRobotClass); } public static Class<?> getAIRobotByLegacyClassName(String aiRobotLegacyClassName) { return aiRobotsByLegacyClassNames.get(aiRobotLegacyClassName); } public static void registerResourceId(Class<? extends ResourceId> resourceId, String name) { registerResourceId(resourceId, name, null); } public static void registerResourceId(Class<? extends ResourceId> resourceId, String name, String legacyClassName) { resourceIdByNames.put(name, resourceId); resourceIdNames.put(resourceId, name); if (legacyClassName != null) { resourceIdLegacyClassNames.put(legacyClassName, resourceId); } } public static Class<?> getResourceIdByName(String resourceIdName) { return resourceIdByNames.get(resourceIdName); } public static String getResourceIdName(Class<? extends ResourceId> resouceIdClass) { return resourceIdNames.get(resouceIdClass); } public static Class<?> getResourceIdByLegacyClassName(String resourceIdLegacyClassName) { return resourceIdLegacyClassNames.get(resourceIdLegacyClassName); } public static void registerDockingStation(Class<? extends DockingStation> dockingStation, String name) { dockingStationByNames.put(name, dockingStation); dockingStationNames.put(dockingStation, name); } public static Class<? extends DockingStation> getDockingStationByName(String dockingStationTypeName) { return dockingStationByNames.get(dockingStationTypeName); } public static String getDockingStationName(Class<? extends DockingStation> dockingStation) { return dockingStationNames.get(dockingStation); } }