package ttftcuts.physis.common.story;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import ttftcuts.physis.common.file.PhysisWorldSavedData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
public class Knowledge {
public static void init() {
// Knowledge types and max levels
registry.put("test", 10);
}
// ----------------
private static final String KNOWLEDGETAG = "knowledge";
private static Map<String, Integer> registry = new HashMap<String, Integer>();
public static int get(EntityPlayer player, String name) {
if (!registry.containsKey(name)) { return 0; }
NBTTagCompound tag = PhysisWorldSavedData.getPlayerTag(player, KNOWLEDGETAG);
return tag.getInteger(name);
}
public static int getMax(String name) {
if (!registry.containsKey(name)) { return 0; }
return registry.get(name);
}
public static boolean set(EntityPlayer player, String name, int value) {
if (!registry.containsKey(name)) { return false; }
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { return false; }
int clamped = Math.max(0, Math.min(registry.get(name), value));
int current = get(player, name);
if (clamped != current) {
NBTTagCompound tag = PhysisWorldSavedData.getPlayerTag(player, KNOWLEDGETAG);
tag.setInteger(name, clamped);
PhysisWorldSavedData.safeMarkDirty();
PhysisWorldSavedData.safeSendDataToPlayer(player);
return true;
}
return false;
}
public static boolean modify(EntityPlayer player, String name, int delta) {
if (!registry.containsKey(name)) { return false; }
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { return false; }
return set(player, name, get(player, name) +delta);
}
public static void giveAll(EntityPlayer player) {
for (Entry<String, Integer> entry : registry.entrySet()) {
set(player, entry.getKey(), entry.getValue());
}
}
public static void removeAll(EntityPlayer player) {
for (Entry<String, Integer> entry : registry.entrySet()) {
set(player, entry.getKey(), 0);
}
}
}