diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 7e0dbe25..bb2d61e8 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic; import java.io.File; +import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.meteor.MeteorConfigHandler; import lombok.Getter; import net.minecraft.creativetab.CreativeTabs; @@ -10,12 +11,7 @@ import net.minecraft.launchwrapper.Launch; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLInterModComms; -import net.minecraftforge.fml.common.event.FMLModIdMappingEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.*; import net.minecraftforge.fml.common.network.NetworkRegistry; import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; @@ -129,6 +125,11 @@ public class BloodMagic proxy.postInit(); } + @Mod.EventHandler + public void loadComplete(FMLLoadCompleteEvent event) { + RitualRegistry.orderLookupList(); + } + @Mod.EventHandler public void modMapping(FMLModIdMappingEvent event) { diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java index ff0c43d9..6ba62dfb 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java @@ -5,20 +5,21 @@ import WayofTime.bloodmagic.api.ritual.Ritual; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class RitualRegistry { public static final Map enabledRituals = new HashMap(); private static final BiMap registry = HashBiMap.create(); + private static final List lookupList = new ArrayList(); /** * Ordered list for actions that depend on the order that the rituals were * registered in */ private static final ArrayList orderedIdList = new ArrayList(); + private static boolean locked; + /** * The safe way to register a new Ritual. * @@ -29,6 +30,13 @@ public class RitualRegistry */ public static void registerRitual(Ritual ritual, String id, boolean enabled) { + if (locked) + { + BloodMagicAPI.getLogger().error("This registry has been locked. Please register your ritual earlier."); + BloodMagicAPI.getLogger().error("If you reflect this, I will hunt you down. - TehNut"); + return; + } + if (ritual != null) { if (registry.containsKey(id)) @@ -107,7 +115,7 @@ public class RitualRegistry public static ArrayList getIds() { - return new ArrayList(registry.keySet()); + return new ArrayList(lookupList); } public static ArrayList getOrderedIds() @@ -119,4 +127,21 @@ public class RitualRegistry { return new ArrayList(registry.values()); } + + public static void orderLookupList() + { + locked = true; // Lock registry so no no rituals can be registered + lookupList.clear(); // Make sure it's empty + lookupList.addAll(registry.keySet()); + Collections.sort(lookupList, new Comparator() + { + @Override + public int compare(String o1, String o2) + { + Ritual ritual1 = registry.get(o1); + Ritual ritual2 = registry.get(o2); + return ritual1.getComponents().size() > ritual2.getComponents().size() ? -1 : 0; // Put earlier if bigger + } + }); + } }