package com.team.futurecraft; import java.util.HashMap; import org.apache.logging.log4j.Level; import com.team.futurecraft.biome.BiomePlanet; import com.team.futurecraft.space.CelestialObject; import com.team.futurecraft.space.Planet; import com.team.futurecraft.space.planets.Earth; import com.team.futurecraft.world.WorldProviderPlanet; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.common.FMLCommonHandler; /** * This is the registry for all planets in this mod. * Similar to block and recipe registries. * * @author Joseph * */ public class SpaceRegistry { private static HashMap<Integer, Planet> planets = new HashMap<Integer, Planet>(); private static HashMap<Planet, Integer> ids = new HashMap<Planet, Integer>(); private static HashMap<Planet, BiomePlanet> biomes = new HashMap<Planet, BiomePlanet>(); private static int dimensionIndex = 100; private static void registerPlanet(Planet provider) { int id = dimensionIndex; try { BiomePlanet biome = provider.type.getBiome().getDeclaredConstructor(int.class, Planet.class).newInstance(id, provider); biomes.put(provider, biome); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { } catch (Exception e) { FMLCommonHandler.instance().getFMLLogger().log(Level.ERROR, "An error occurred while registering a planet id: " + id); throw new RuntimeException(e); } DimensionManager.registerProviderType(id, WorldProviderPlanet.class, false); DimensionManager.registerDimension(id, id); planets.put(id, provider); ids.put(provider, id); dimensionIndex++; } public static void registerSystem(CelestialObject object) { CelestialObject[] objects = object.getChildren(); for (int i = 0; i < objects.length; i++) { if (objects[i].isLandable()) { if (objects[i] instanceof Earth){} else { registerPlanet((Planet)objects[i]); } } CelestialObject[] moons = objects[i].getChildren(); for (int j = 0; j < moons.length; j++) { if (moons[j] instanceof Earth){} else { registerPlanet((Planet)moons[j]); } } } } /** * Returns an ArrayList of all the registered planets. */ public static Planet[] getRegisteredPlanets() { return planets.values().toArray(new Planet[] {}); } public static BiomePlanet getBiomeForPlanet(Planet planet) { return biomes.get(planet); } public static Planet getPlanetForDimension(int id) { return planets.get(id); } public static int getDimensionForPlanet(Planet planet) { if (planet instanceof Earth) return 0; return ids.get(planet); } }