diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index cf953fb3..1d862212 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic; import java.io.File; import WayofTime.bloodmagic.command.CommandBloodMagic; +import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.meteor.MeteorConfigHandler; import lombok.Getter; import net.minecraft.creativetab.CreativeTabs; @@ -11,12 +12,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; @@ -105,8 +101,6 @@ public class BloodMagic proxy.preInit(); } - - @Mod.EventHandler public void init(FMLInitializationEvent event) { @@ -133,6 +127,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 f348f630..cd389d37 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java @@ -6,20 +6,21 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import javax.annotation.Nullable; -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. * @@ -30,6 +31,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)) @@ -109,7 +117,7 @@ public class RitualRegistry public static ArrayList getIds() { - return new ArrayList(registry.keySet()); + return new ArrayList(lookupList); } public static ArrayList getOrderedIds() @@ -121,4 +129,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 + } + }); + } }