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 0000000..0826420
Binary files /dev/null and b/lib/iConomy.jar differ
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"};
}