Sort rituals by component count to avoid conflicts (#1070)

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

View file

@ -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)
{

View file

@ -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<Ritual, Boolean> enabledRituals = new HashMap<Ritual, Boolean>();
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
* registered in
*/
private static final ArrayList<String> orderedIdList = new ArrayList<String>();
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<String> getIds()
{
return new ArrayList<String>(registry.keySet());
return new ArrayList<String>(lookupList);
}
public static ArrayList<String> getOrderedIds()
@ -121,4 +129,21 @@ public class RitualRegistry
{
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
}
});
}
}