BloodMagic/src/main/java/WayofTime/bloodmagic/api/livingArmour/LivingArmourHandler.java

78 lines
2.7 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.api.livingArmour;
import WayofTime.bloodmagic.api.BloodMagicAPI;
import net.minecraft.nbt.NBTTagCompound;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class LivingArmourHandler
{
public static List<Class<? extends StatTracker>> trackers = new ArrayList<Class<? extends StatTracker>>();
public static HashMap<String, Class<? extends LivingArmourUpgrade>> upgradeMap = new HashMap<String, Class<? extends LivingArmourUpgrade>>();
public static HashMap<String, Constructor<? extends LivingArmourUpgrade>> upgradeConstructorMap = new HashMap<String, Constructor<? extends LivingArmourUpgrade>>();
public static HashMap<String, Integer> upgradeMaxLevelMap = new HashMap<String, Integer>();
public static void registerStatTracker(Class<? extends StatTracker> tracker)
{
trackers.add(tracker);
}
/**
* Registers a LivingArmourUpgrade using its unique identifier and class.
* This is done to more easily load upgrades
*
* @param upgrade
*/
public static void registerArmourUpgrade(LivingArmourUpgrade upgrade)
{
Class<? extends LivingArmourUpgrade> clazz = upgrade.getClass();
upgradeMap.put(upgrade.getUniqueIdentifier(), clazz);
upgradeMaxLevelMap.put(upgrade.getUniqueIdentifier(), upgrade.getMaxTier());
try
{
Constructor<? extends LivingArmourUpgrade> ctor = clazz.getConstructor(int.class);
if (ctor == null)
{
2017-08-15 20:21:54 -07:00
BloodMagicAPI.logger.error("Error adding living armour upgrade {} as it doesn't have a valid constructor.", upgrade.getUniqueIdentifier());
} else
{
upgradeConstructorMap.put(upgrade.getUniqueIdentifier(), ctor);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
public static LivingArmourUpgrade generateUpgradeFromKey(String key, int level)
{
return generateUpgradeFromKey(key, level, null);
}
public static LivingArmourUpgrade generateUpgradeFromKey(String key, int level, NBTTagCompound tag)
{
Constructor<? extends LivingArmourUpgrade> ctor = upgradeConstructorMap.get(key);
if (ctor != null)
{
try
{
LivingArmourUpgrade upgrade = ctor.newInstance(level);
if (upgrade != null && tag != null)
{
upgrade.readFromNBT(tag);
}
return upgrade;
} catch (Exception e)
{
e.printStackTrace();
}
}
return null;
}
}