diff --git a/lib/Essentials.jar b/lib/Essentials.jar new file mode 100644 index 00000000..8e43888c Binary files /dev/null and b/lib/Essentials.jar differ diff --git a/src/com/massivecraft/factions/Conf.java b/src/com/massivecraft/factions/Conf.java index e6a485b8..bf57274f 100644 --- a/src/com/massivecraft/factions/Conf.java +++ b/src/com/massivecraft/factions/Conf.java @@ -149,6 +149,7 @@ public class Conf { // Economy settings public static boolean econIConomyEnabled = false; + public static boolean econEssentialsEcoEnabled = false; public static double econCostClaimWilderness = 30.0; public static double econCostClaimFromFactionBonus = 30.0; public static double econClaimAdditionalMultiplier = 0.5; diff --git a/src/com/massivecraft/factions/Econ.java b/src/com/massivecraft/factions/Econ.java index f8052aa5..de21d25f 100644 --- a/src/com/massivecraft/factions/Econ.java +++ b/src/com/massivecraft/factions/Econ.java @@ -4,29 +4,51 @@ import org.bukkit.event.Event; import com.massivecraft.factions.listeners.FactionsServerListener; +import com.earth2me.essentials.api.Economy; import com.iConomy.*; import com.iConomy.system.*; public class Econ { - private static iConomy iConomyPlugin; + private static boolean iConomyUse = false; + private static boolean essEcoUse = false; public static void monitorPlugins() { Factions.instance.getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_ENABLE, new FactionsServerListener(), Event.Priority.Monitor, Factions.instance); Factions.instance.getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_DISABLE, new FactionsServerListener(), Event.Priority.Monitor, Factions.instance); } - public static void iConomySet(iConomy instance) { - iConomyPlugin = instance; + public static void iConomySet(boolean enable) { + iConomyUse = enable; + if (enable) { + Factions.log("Hooked into iConomy, "+(Conf.econIConomyEnabled ? "and interface is enabled" : "but interface is currently disabled (\"econIConomyEnabled\": false)")+"."); + } + else { + Factions.log("Un-hooked from iConomy."); + } + } + + public static void essentialsEcoSet(boolean enable) { + essEcoUse = enable; + if (enable) { + Factions.log("Hooked into EssentialsEco, "+(Conf.econEssentialsEcoEnabled ? "and interface is enabled" : "but interface is currently disabled (\"econEssentialsEcoEnabled\": false)")+"."); + } + else { + Factions.log("Un-hooked from EssentialsEco."); + } } public static boolean iConomyHooked() { - return iConomyPlugin != null; + return iConomyUse; + } + + public static boolean essentialsEcoHooked() { + return essEcoUse; } // If economy is enabled in conf.json, and we're successfully hooked into an economy plugin public static boolean enabled() { - return Conf.econIConomyEnabled && iConomyPlugin != null; + return (Conf.econIConomyEnabled && iConomyUse) || (Conf.econEssentialsEcoEnabled && essEcoUse); } // mainly for internal use, for a little less code repetition @@ -46,7 +68,7 @@ public class Econ { // format money string based on server's set currency type, like "24 gold" or "$24.50" public static String moneyString(double amount) { - return iConomy.format(amount); + return iConomyUse ? iConomy.format(amount) : Economy.format(amount); } // whether a player can afford specified amount @@ -56,12 +78,22 @@ public class Econ { return true; } - Holdings holdings = getIconomyHoldings(playerName); - if (holdings == null) { - return false; - } + if (iConomyUse) { + Holdings holdings = getIconomyHoldings(playerName); + if (holdings == null) { + return false; + } - return holdings.hasEnough(amount); + return holdings.hasEnough(amount); + } + else { + try { + return Economy.hasEnough(playerName, amount); + } + catch (Exception ex) { + return false; + } + } } // deduct money from their account; returns true if successful @@ -70,13 +102,27 @@ public class Econ { return true; } - Holdings holdings = getIconomyHoldings(playerName); - if (holdings == null || !holdings.hasEnough(amount)) { - return false; - } + if (iConomyUse) { + Holdings holdings = getIconomyHoldings(playerName); + if (holdings == null || !holdings.hasEnough(amount)) { + return false; + } - holdings.subtract(amount); - return true; + holdings.subtract(amount); + return true; + } + else { + try { + if (!Economy.hasEnough(playerName, amount)) { + return false; + } + Economy.subtract(playerName, amount); + return true; + } + catch (Exception ex) { + return false; + } + } } // add money to their account; returns true if successful @@ -85,13 +131,24 @@ public class Econ { return true; } - Holdings holdings = getIconomyHoldings(playerName); - if (holdings == null) { - return false; - } + if (iConomyUse) { + Holdings holdings = getIconomyHoldings(playerName); + if (holdings == null) { + return false; + } - holdings.add(amount); - return true; + holdings.add(amount); + return true; + } + else { + try { + Economy.add(playerName, amount); + return true; + } + catch (Exception ex) { + return false; + } + } } diff --git a/src/com/massivecraft/factions/Factions.java b/src/com/massivecraft/factions/Factions.java index 5238eeee..c2548241 100644 --- a/src/com/massivecraft/factions/Factions.java +++ b/src/com/massivecraft/factions/Factions.java @@ -146,6 +146,7 @@ public class Factions extends JavaPlugin { setupPermissions(); integrateEssentialsChat(); + setupEcon(); Econ.monitorPlugins(); @@ -212,6 +213,25 @@ public class Factions extends JavaPlugin { Factions.log("Permissions plugin not detected, defaulting to Bukkit superperms system"); } } + + private void setupEcon() { + if (Econ.enabled()) { + return; + } + + if (!Econ.iConomyHooked()) { + Plugin plug = this.getServer().getPluginManager().getPlugin("iConomy"); + if (plug != null && plug.getClass().getName().equals("com.iConomy.iConomy")) { + Econ.iConomySet(true); + } + } + if (!Econ.essentialsEcoHooked()) { + Plugin plug = this.getServer().getPluginManager().getPlugin("Essentials"); + if (plug != null) { + Econ.essentialsEcoSet(true); + } + } + } private void integrateEssentialsChat() { if (essChat != null) { diff --git a/src/com/massivecraft/factions/listeners/FactionsServerListener.java b/src/com/massivecraft/factions/listeners/FactionsServerListener.java index 2e7f9460..ed12ec62 100644 --- a/src/com/massivecraft/factions/listeners/FactionsServerListener.java +++ b/src/com/massivecraft/factions/listeners/FactionsServerListener.java @@ -5,35 +5,30 @@ import org.bukkit.event.server.ServerListener; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; -import com.massivecraft.factions.Conf; import com.massivecraft.factions.Econ; -import com.massivecraft.factions.Factions; - -import com.iConomy.*; public class FactionsServerListener extends ServerListener { @Override public void onPluginDisable(PluginDisableEvent event) { - if (Econ.iConomyHooked()) { - if (event.getPlugin().getDescription().getName().equals("iConomy")) { - Econ.iConomySet(null); - Factions.log("Un-hooked from iConomy."); - } + String name = event.getPlugin().getDescription().getName(); + if (Econ.iConomyHooked() && name.equals("iConomy")) { + Econ.iConomySet(false); } - } + if (Econ.essentialsEcoHooked() && name.equals("Essentials")) { + Econ.essentialsEcoSet(false); + } + } @Override public void onPluginEnable(PluginEnableEvent event) { - if (!Econ.iConomyHooked()) { - Plugin iConomy = Factions.instance.getServer().getPluginManager().getPlugin("iConomy"); - - if (iConomy != null) { - if (iConomy.isEnabled() && iConomy.getClass().getName().equals("com.iConomy.iConomy")) { - Econ.iConomySet((iConomy)iConomy); - Factions.log("Hooked into iConomy, "+(Conf.econIConomyEnabled ? "and interface is enabled" : "but interface is currently disabled (\"econIConomyEnabled\": false)")+"."); - } - } + Plugin plug = event.getPlugin(); + String name = plug.getDescription().getName(); + if (!Econ.iConomyHooked() && name.equals("iConomy") && plug.getClass().getName().equals("com.iConomy.iConomy")) { + Econ.iConomySet(true); + } + else if (!Econ.essentialsEcoHooked() && name.equals("Essentials")) { + Econ.essentialsEcoSet(true); } } } \ No newline at end of file