Sort rituals by component count to avoid conflicts ()

Large rituals can now use, for example, the Serenade of the Nether layout if wanted.

(cherry picked from commit 0b93c11)
This commit is contained in:
Nicholas Ignoffo 2017-02-27 17:37:30 -08:00
parent 4e7f0d12f9
commit 3cbfb0a40f
2 changed files with 36 additions and 12 deletions
src/main/java/WayofTime/bloodmagic

View file

@ -3,6 +3,7 @@ package WayofTime.bloodmagic;
import java.io.File; import java.io.File;
import WayofTime.bloodmagic.command.CommandBloodMagic; import WayofTime.bloodmagic.command.CommandBloodMagic;
import WayofTime.bloodmagic.api.registry.RitualRegistry;
import WayofTime.bloodmagic.meteor.MeteorConfigHandler; import WayofTime.bloodmagic.meteor.MeteorConfigHandler;
import lombok.Getter; import lombok.Getter;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
@ -11,12 +12,7 @@ import net.minecraft.launchwrapper.Launch;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.*;
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.network.NetworkRegistry; import net.minecraftforge.fml.common.network.NetworkRegistry;
import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.annot.Handler;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
@ -105,8 +101,6 @@ public class BloodMagic
proxy.preInit(); proxy.preInit();
} }
@Mod.EventHandler @Mod.EventHandler
public void init(FMLInitializationEvent event) public void init(FMLInitializationEvent event)
{ {
@ -133,6 +127,11 @@ public class BloodMagic
proxy.postInit(); proxy.postInit();
} }
@Mod.EventHandler
public void loadComplete(FMLLoadCompleteEvent event) {
RitualRegistry.orderLookupList();
}
@Mod.EventHandler @Mod.EventHandler
public void modMapping(FMLModIdMappingEvent event) public void modMapping(FMLModIdMappingEvent event)
{ {

View file

@ -6,20 +6,21 @@ import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.Map;
public class RitualRegistry public class RitualRegistry
{ {
public static final Map<Ritual, Boolean> enabledRituals = new HashMap<Ritual, Boolean>(); public static final Map<Ritual, Boolean> enabledRituals = new HashMap<Ritual, Boolean>();
private static final BiMap<String, Ritual> registry = HashBiMap.create(); private static final BiMap<String, Ritual> registry = HashBiMap.create();
private static final List<String> lookupList = new ArrayList<String>();
/** /**
* Ordered list for actions that depend on the order that the rituals were * Ordered list for actions that depend on the order that the rituals were
* registered in * registered in
*/ */
private static final ArrayList<String> orderedIdList = new ArrayList<String>(); private static final ArrayList<String> orderedIdList = new ArrayList<String>();
private static boolean locked;
/** /**
* The safe way to register a new Ritual. * 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) 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 (ritual != null)
{ {
if (registry.containsKey(id)) if (registry.containsKey(id))
@ -109,7 +117,7 @@ public class RitualRegistry
public static ArrayList<String> getIds() public static ArrayList<String> getIds()
{ {
return new ArrayList<String>(registry.keySet()); return new ArrayList<String>(lookupList);
} }
public static ArrayList<String> getOrderedIds() public static ArrayList<String> getOrderedIds()
@ -121,4 +129,21 @@ public class RitualRegistry
{ {
return new ArrayList<Ritual>(registry.values()); return new ArrayList<Ritual>(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<String>()
{
@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
}
});
}
} }