package com.nisovin.magicspells.memory;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.Configuration;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.nisovin.magicspells.MagicSpells;
import com.nisovin.magicspells.Spell;
import com.nisovin.magicspells.Spellbook;
import com.nisovin.magicspells.util.MagicConfig;
public class MagicSpellsMemory extends JavaPlugin {
private int maxMemoryDefault = 0;
private ArrayList<String> maxMemoryPerms = new ArrayList<String>();
private ArrayList<Integer> maxMemoryAmounts = new ArrayList<Integer>();
protected String strOutOfMemory = "";
private String strMemoryUsage = "";
private HashMap<String,Integer> memoryRequirements = new HashMap<String,Integer>();
@Override
public void onEnable() {
File file = new File(getDataFolder(), "config.yml");
if (!file.exists()) {
saveDefaultConfig();
}
Configuration config = getConfig();
strOutOfMemory = config.getString("str-out-of-memory");
strMemoryUsage = config.getString("str-memory-usage");
// get max memory amounts
maxMemoryDefault = config.getInt("max-memory-default");
ConfigurationSection permsSec = config.getConfigurationSection("max-memory-perms");
if (permsSec != null) {
Set<String> perms = permsSec.getKeys(false);
if (perms != null) {
for (String perm : perms) {
maxMemoryPerms.add(perm);
maxMemoryAmounts.add(permsSec.getInt(perm));
}
}
}
// get spell mem requirements from mem config
ConfigurationSection reqSec = config.getConfigurationSection("memory-requirements");
if (reqSec != null) {
MagicSpells.log("You should move your MagicSpellsMemory memory");
MagicSpells.log("requirements to the main MagicSpells config file.");
MagicSpells.log("You can add a memory option to each spell in the");
MagicSpells.log("main MagicSpells config file.");
Set<String> spells = reqSec.getKeys(false);
if (spells != null) {
for (String spell : spells) {
int mem = reqSec.getInt(spell);
memoryRequirements.put(spell, mem);
MagicSpells.debug("Memory requirement for '" + spell + "' spell set to " + mem);
}
}
}
// get spell mem requirements from magicspells config
MagicConfig magicConfig = new MagicConfig(new File(MagicSpells.plugin.getDataFolder(), "config.yml"));
if (magicConfig.isLoaded()) {
for (String spell : magicConfig.getSpellKeys()) {
if (magicConfig.contains("spells." + spell + ".memory")) {
int mem = magicConfig.getInt("spells." + spell + ".memory", 0);
memoryRequirements.put(spell, mem);
MagicSpells.debug("Memory requirement for '" + spell + "' spell set to " + mem);
}
}
}
getServer().getPluginManager().registerEvents(new MemorySpellListener(this), this);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player player = null;
if (args.length == 1 && sender.hasPermission("magicspells.memory.checkothers")) {
List<Player> p = getServer().matchPlayer(args[0]);
if (p.size() == 1) {
player = p.get(0);
}
} else if (sender instanceof Player) {
player = (Player)sender;
}
if (player != null) {
int used = getUsedMemory(player);
int max = getMaxMemory(player);
if (sender instanceof Player) {
MagicSpells.sendMessage((Player)sender, strMemoryUsage, "%memory", used+"", "%total", max+"");
} else {
String s = strMemoryUsage.replace("%memory", used+"").replace("%total", max+"");
sender.sendMessage(s);
}
}
return true;
}
public int getRequiredMemory(Spell spell) {
if (memoryRequirements.containsKey(spell.getInternalName())) {
return memoryRequirements.get(spell.getInternalName());
} else {
return 0;
}
}
public int getMemoryRemaining(Player player) {
int max = getMaxMemory(player);
int used = getUsedMemory(player);
return max - used;
}
public int getMaxMemory(Player player) {
for (int i = 0; i < maxMemoryPerms.size(); i++) {
if (player.hasPermission("magicspells.rank." + maxMemoryPerms.get(i))) {
return maxMemoryAmounts.get(i);
}
}
return maxMemoryDefault;
}
public int getUsedMemory(Player player) {
Spellbook spellbook = MagicSpells.getSpellbook(player);
if (spellbook != null) {
int used = 0;
for (Spell spell : spellbook.getSpells()) {
if (memoryRequirements.containsKey(spell.getInternalName())) {
used += memoryRequirements.get(spell.getInternalName());
}
}
return used;
}
return 0;
}
@Override
public void onDisable() {
}
}