From 59e004f0b9e15aba62b47ff9e31ccb5f733df3f2 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sun, 28 Aug 2011 05:28:57 +0200 Subject: [PATCH] Added basic iConomy support to show the users holdings. --- .classpath | 1 + README.md | 7 +- lib/iConomy.jar | Bin 0 -> 174371 bytes .../XmlStats/Datasource/MoneyDS.java | 49 ++++++++ .../{StatsDS.java => UserstatsDS.java} | 8 +- src/de/sockenklaus/XmlStats/Settings.java | 4 - src/de/sockenklaus/XmlStats/WebServer.java | 9 +- src/de/sockenklaus/XmlStats/XmlStats.java | 117 ++++++++++++++---- .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 66 +++++++++- .../XmlWorkers/XmlWorkerUserstats.java | 6 +- 10 files changed, 225 insertions(+), 42 deletions(-) create mode 100644 lib/iConomy.jar rename src/de/sockenklaus/XmlStats/Datasource/{StatsDS.java => UserstatsDS.java} (93%) diff --git a/.classpath b/.classpath index 33dc2b9..d9bbf01 100644 --- a/.classpath +++ b/.classpath @@ -8,5 +8,6 @@ + diff --git a/README.md b/README.md index 0f313de..adf634f 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,7 @@ For the added up stats of all known players: To fetch the stats of the given user: http://server:port/userstats.xml?player=username - -The following commands are planned but not implemented yet: - -to get data provided by the iConomy plugin: + +To get data provided by the iConomy plugin: http://server:port/money.xml - http://server:port/money.xml?player=username \ No newline at end of file diff --git a/lib/iConomy.jar b/lib/iConomy.jar new file mode 100644 index 0000000000000000000000000000000000000000..0826420b26a498107d4f267d2f31c05167e7940b GIT binary patch literal 174371 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 literal 0 HcmV?d00001 diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index 17d6d64..dd8653b 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -14,9 +14,58 @@ */ package de.sockenklaus.XmlStats.Datasource; +import java.util.ArrayList; +import java.util.HashMap; + +import com.iConomy.iConomy; +import com.iConomy.system.Account; +import com.iConomy.system.Holdings; + +import de.sockenklaus.XmlStats.XmlStats; + /** * The Class MoneyDS. */ public class MoneyDS extends Datasource { + private iConomy iConomy; + private ArrayList allPlayers; + + public MoneyDS(){ + this.iConomy = XmlStats.getiConomyPlugin(); + this.allPlayers = fetchAllPlayers(); + } + + public HashMap getBalances(){ + HashMap result = new HashMap(); + + for (String playerName : allPlayers){ + result.put(playerName, getBalance(playerName)); + } + + return result; + } + + @SuppressWarnings("static-access") + private Double getBalance(String playerName){ + Double result = 0.0; + + if (XmlStats.isiConomyHooked()){ + if(this.iConomy.hasAccount(playerName)){ + Account account = this.iConomy.getAccount(playerName); + + if (account != null){ + Holdings balance = account.getHoldings(); + result = balance.balance(); + } + else XmlStats.LogError("The player has an account but it isn't valid. Bad data will return."); + } + else XmlStats.LogError("This player doesn't have a bank account and this action will return bad data"); + } + else { + XmlStats.LogError("Something went wrong! /money.xml shouldn't be enabled but it's datasource was called! This will return bad results."); + } + + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java b/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java similarity index 93% rename from src/de/sockenklaus/XmlStats/Datasource/StatsDS.java rename to src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java index 7104c8d..1643ca5 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java @@ -29,7 +29,7 @@ import de.sockenklaus.XmlStats.XmlStats; /** * The Class StatsDS. */ -public class StatsDS extends Datasource { +public class UserstatsDS extends Datasource { private Stats statsPlugin; private ArrayList allPlayerNames; @@ -38,7 +38,7 @@ public class StatsDS extends Datasource { /** * Instantiates a new stats ds. */ - public StatsDS() { + public UserstatsDS() { this.statsPlugin = XmlStats.getStatsPlugin(); this.allPlayerNames = fetchAllPlayers(); this.stats = fetchPlayerStats(allPlayerNames); @@ -129,4 +129,8 @@ public class StatsDS extends Datasource { return result; } + + public void sortStats(){ + + } } diff --git a/src/de/sockenklaus/XmlStats/Settings.java b/src/de/sockenklaus/XmlStats/Settings.java index 6bf34d8..e0e0b29 100644 --- a/src/de/sockenklaus/XmlStats/Settings.java +++ b/src/de/sockenklaus/XmlStats/Settings.java @@ -42,10 +42,6 @@ public class Settings { else { conf.setProperty("options.webserver-enabled", false); conf.setProperty("options.webserver-port", 9123); - conf.setProperty("plugins.stats", true); - conf.setProperty("plugins.users", true); - conf.setProperty("plugins.achievements", false); - conf.setProperty("plugins.economy", false); conf.save(); } } diff --git a/src/de/sockenklaus/XmlStats/WebServer.java b/src/de/sockenklaus/XmlStats/WebServer.java index 162a3e4..b390589 100644 --- a/src/de/sockenklaus/XmlStats/WebServer.java +++ b/src/de/sockenklaus/XmlStats/WebServer.java @@ -44,7 +44,14 @@ public class WebServer { server.createContext("/users.xml", new XmlWorkerUsers()); server.createContext("/userstats.xml", new XmlWorkerUserstats()); - server.createContext("/money.xml", new XmlWorkerMoney()); + + if (XmlStats.isiConomyHooked()){ + server.createContext("/money.xml", new XmlWorkerMoney()); + XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml."); + } + else { + XmlStats.LogWarn("iConomy not loaded correctly. Disabling /money.xml"); + } this.server.start(); } diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index 5914fc6..9472ea0 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -18,8 +18,14 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Server; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event.Type; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import com.iConomy.iConomy; import com.nidefawl.Stats.Stats; // TODO: Auto-generated Javadoc @@ -32,9 +38,10 @@ public class XmlStats extends JavaPlugin { private final static double version = 0.01; private final static String logprefix = "[XmlStats]"; private boolean enabled = false; - private static Stats statsPlugin; + private static Stats Stats = null; + private static iConomy iConomy = null; private static Server serverRef; - private WebServer xmlQueryServer; + private WebServer webServer; private Settings settings; /* (non-Javadoc) @@ -42,10 +49,13 @@ public class XmlStats extends JavaPlugin { */ @Override public void onDisable() { - if(enabled && xmlQueryServer.isRunning()){ - enabled = false; + if(this.enabled && this.webServer.isRunning()){ + this.enabled = false; - xmlQueryServer.stopServer(); + iConomy = null; + Stats = null; + + this.webServer.stopServer(); getServer().getScheduler().cancelTasks(this); @@ -58,30 +68,26 @@ public class XmlStats extends JavaPlugin { */ @Override public void onEnable() { - + getDataFolder().mkdirs(); - statsPlugin = (Stats)getServer().getPluginManager().getPlugin("Stats"); + serverRef = getServer(); + this.settings = new Settings(this); - settings = new Settings(this); - - if (settings.getBoolean("options.webserver-enabled")){ - if (getServer().getPluginManager().isPluginEnabled("Stats")){ - try { - xmlQueryServer = new WebServer(settings.getInt("options.webserver-port")); + this.hookPlugins(); + + if (this.settings.getBoolean("options.webserver-enabled")){ + try { + this.webServer = new WebServer(settings.getInt("options.webserver-port")); - enabled = true; - LogInfo("Plugin Enabled"); - } - catch (Exception ex){ - LogError("Fehler beim Erstellen des Webservers:"); - LogError(ex.getMessage()); - } - - } - else { - LogError("Stats-Plugin laeuft nicht... Breche ab..."); + this.enabled = true; + LogInfo("Plugin Enabled"); } + catch (Exception ex){ + LogError("Fehler beim Erstellen des Webservers:"); + LogError(ex.getMessage()); + ex.printStackTrace(); + } } else { LogWarn("Webserver ist derzeit in der "+settings.getSettingsFilename()+" deaktiviert."); @@ -123,7 +129,7 @@ public class XmlStats extends JavaPlugin { * @return the stats plugin */ public static Stats getStatsPlugin(){ - return statsPlugin; + return Stats; } /** @@ -134,5 +140,66 @@ public class XmlStats extends JavaPlugin { public static Server getServerRef(){ return serverRef; } + + public static iConomy getiConomyPlugin(){ + return iConomy; + } + + public void onPluginDisable(PluginDisableEvent event){ + if(iConomy != null){ + if(event.getPlugin().getDescription().getName().equals("iConomy")){ + iConomy = null; + LogInfo("iConomy is disabled now. Unhooking."); + } + } + if(Stats != null){ + if(event.getPlugin().getDescription().getName().equals("Stats")){ + Stats = null; + LogInfo("Stats is disabled now. Unhooking."); + } + } + + } + + public void onPluginEnable(PluginEnableEvent event){ + this.hookPlugins(); + } + + private void hookPlugins(){ + Plugin StatsTemp = getServer().getPluginManager().getPlugin("Stats"); + Plugin iConomyTemp = getServer().getPluginManager().getPlugin("iConomy"); + if(StatsTemp != null){ + if(StatsTemp.isEnabled() && StatsTemp.getClass().getName().equals("com.nidefawl.Stats.Stats")){ + Stats = (Stats)StatsTemp; + LogInfo("Hooked into Stats!"); + } + } + else { + LogError("Stats not found! Can't hook into it."); + } + if (iConomyTemp != null) { + if (iConomyTemp.isEnabled() && iConomyTemp.getClass().getName().equals("com.iConomy.iConomy")) { + iConomy = (iConomy)iConomyTemp; + LogInfo("Hooked into iConomy"); + } + } + else { + LogError("iConomy not found! Can't hook into it."); + } + } + + public static boolean isStatsHooked(){ + if (Stats != null){ + if(Stats.getClass().getName().equals("com.nidefawl.Stats.Stats") && Stats.isEnabled()) return true; + } + return false; + } + + public static boolean isiConomyHooked(){ + if (iConomy != null){ + if (iConomy.getClass().getName().equals("com.iConomy.iConomy") && iConomy.isEnabled()) return true; + } + return false; + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index 883774c..3a03c51 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -14,8 +14,25 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; +import java.io.StringWriter; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.nidefawl.Stats.Stats; + +import de.sockenklaus.XmlStats.Datasource.MoneyDS; // TODO: Auto-generated Javadoc /** @@ -23,12 +40,57 @@ import java.util.Map; */ public class XmlWorkerMoney extends XmlWorker { + private MoneyDS moneyDS; + + public XmlWorkerMoney(){ + this.moneyDS = new MoneyDS(); + } + /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override public String getXML(Map> parameters) { - // TODO Auto-generated method stub - return null; + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.newDocument(); + DOMSource source = new DOMSource(doc); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + + HashMap balances = moneyDS.getBalances(); + + Element root = doc.createElement("money"); + doc.appendChild(root); + + /* + * Hier wird das XML aufgebaut + */ + + for (String playerName : balances.keySet()){ + Element elem_player = doc.createElement("player"); + elem_player.setAttribute("name", playerName); + elem_player.setAttribute("balance", String.valueOf(balances.get(playerName))); + + root.appendChild(elem_player); + } + + /* + * Hier endet der XML-Aufbau + */ + + transformer.transform(source, result); + return writer.toString(); + } + + catch (Exception e){ + Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); + Stats.log.log(Level.SEVERE, e.getMessage()); + } + + return ""; } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java index 161b0f9..c03b391 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java @@ -37,7 +37,7 @@ import com.nidefawl.Stats.ItemResolver.hModItemResolver; import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; -import de.sockenklaus.XmlStats.Datasource.StatsDS; +import de.sockenklaus.XmlStats.Datasource.UserstatsDS; // TODO: Auto-generated Javadoc /** @@ -46,7 +46,7 @@ import de.sockenklaus.XmlStats.Datasource.StatsDS; public class XmlWorkerUserstats extends XmlWorker { /** The stats ds. */ - private StatsDS statsDS; + private UserstatsDS statsDS; private hModItemResolver itemResolver; private String[] resolveCats; @@ -54,7 +54,7 @@ public class XmlWorkerUserstats extends XmlWorker { * Instantiates a new xml worker userstats. */ public XmlWorkerUserstats(){ - this.statsDS = new StatsDS(); + this.statsDS = new UserstatsDS(); itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt")); resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; }