Allow rituals to be disabled via config (#545)

Not automated like the old method, but works. Requires an MC restart. Might look at making it reload-able while ingame at a later date.
This commit is contained in:
Nick 2016-02-01 17:05:39 -08:00
parent 6b6c78477c
commit 7e8b469349
7 changed files with 123 additions and 109 deletions

View file

@ -23,17 +23,30 @@ public class ImperfectRitualRegistry
* @param id
* - The ID for the imperfect ritual. Cannot be duplicated.
*/
public static void registerRitual(ImperfectRitual imperfectRitual, String id)
public static void registerRitual(ImperfectRitual imperfectRitual, String id, boolean enabled)
{
if (imperfectRitual != null)
{
if (registry.containsKey(id))
BloodMagicAPI.getLogger().error("Duplicate imperfect ritual id: %s", id);
else
{
registry.put(id, imperfectRitual);
enabledRituals.put(imperfectRitual, enabled);
}
}
}
public static void registerRitual(ImperfectRitual imperfectRitual, String id)
{
registerRitual(imperfectRitual, id, true);
}
public static void registerRitual(ImperfectRitual imperfectRitual, boolean enabled)
{
registerRitual(imperfectRitual, imperfectRitual.getName(), enabled);
}
public static void registerRitual(ImperfectRitual imperfectRitual)
{
registerRitual(imperfectRitual, imperfectRitual.getName());
@ -72,7 +85,7 @@ public class ImperfectRitualRegistry
{
try
{
return true;
return enabledRituals.get(imperfectRitual);
} catch (NullPointerException e)
{
BloodMagicAPI.getLogger().error("Invalid Imperfect Ritual was called");
@ -80,6 +93,10 @@ public class ImperfectRitualRegistry
}
}
public static boolean ritualEnabled(String id) {
return ritualEnabled(getRitualForId(id));
}
public static BiMap<String, ImperfectRitual> getRegistry()
{
return HashBiMap.create(registry);

View file

@ -28,7 +28,7 @@ public class RitualRegistry
* @param id
* - The ID for the ritual. Cannot be duplicated.
*/
public static void registerRitual(Ritual ritual, String id)
public static void registerRitual(Ritual ritual, String id, boolean enabled)
{
if (ritual != null)
{
@ -37,11 +37,27 @@ public class RitualRegistry
else
{
registry.put(id, ritual);
enabledRituals.put(ritual, enabled);
orderedIdList.add(id);
}
}
}
public static void registerRitual(Ritual ritual, boolean enabled)
{
registerRitual(ritual, ritual.getName(), enabled);
}
public static void registerRitual(Ritual ritual, String id)
{
registerRitual(ritual, id, true);
}
public static void registerRitual(Ritual ritual)
{
registerRitual(ritual, ritual.getName());
}
public static Ritual getRitualForId(String id)
{
Ritual ritual = registry.get(id);
@ -67,7 +83,7 @@ public class RitualRegistry
{
try
{
return true;
return enabledRituals.get(ritual);
} catch (NullPointerException e)
{
BloodMagicAPI.getLogger().error("Invalid Ritual was called");
@ -75,6 +91,10 @@ public class RitualRegistry
}
}
public static boolean ritualEnabled(String id) {
return ritualEnabled(getRitualForId(id));
}
public static BiMap<String, Ritual> getRegistry()
{
return HashBiMap.create(registry);

View file

@ -1,23 +1,16 @@
package WayofTime.bloodmagic.api.util.helper;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import net.minecraftforge.common.config.Configuration;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry;
import WayofTime.bloodmagic.api.registry.RitualRegistry;
import WayofTime.bloodmagic.api.ritual.IRitualStone;
import WayofTime.bloodmagic.api.ritual.Ritual;
import WayofTime.bloodmagic.api.ritual.RitualComponent;
import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual;
public class RitualHelper
{
@ -116,72 +109,4 @@ public class RitualHelper
return true;
}
public static void checkImperfectRituals(Configuration config, String packageName, String category)
{
checkRituals(config, packageName, category, ImperfectRitual.class, ImperfectRitualRegistry.enabledRituals);
}
public static void checkRituals(Configuration config, String packageName, String category)
{
checkRituals(config, packageName, category, Ritual.class, RitualRegistry.enabledRituals);
}
/**
* Adds your Ritual to the {@link RitualRegistry#enabledRituals} Map. This
* is used to determine whether your effect is enabled or not.
*
* The config option will be created as {@code B:ClassName=true}.
*
* Should be safe to modify at any point.
*
* @param config
* - Your mod's Forge {@link Configuration} object.
* @param packageName
* - The package your Rituals are located in.
* @param category
* - The config category to write to.
*/
@SuppressWarnings("unchecked")
private static void checkRituals(Configuration config, String packageName, String category, Class ritualClass, Map enabledMap)
{
String name = packageName;
if (!name.startsWith("/"))
name = "/" + name;
name = name.replace('.', '/');
URL url = BloodMagic.class.getResource(name);
File directory = new File(url.getFile());
if (directory.exists())
{
String[] files = directory.list();
for (String file : files)
{
if (file.endsWith(".class"))
{
String className = file.substring(0, file.length() - 6);
try
{
Object o = Class.forName(packageName + "." + className).newInstance();
if (ritualClass.isInstance(o))
enabledMap.put(ritualClass.cast(o), config.get(category, className, true).getBoolean());
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
}
}
}
}