From 5f8f96dcb6ce650ba76c042394a7baa9e37a0cd7 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sat, 3 Sep 2011 03:51:33 +0200 Subject: [PATCH] Basicly implemented Achievements support. --- build.xml | 5 +- .../XmlStats/Datasource/AchievementsDS.java | 27 +++++ .../XmlStats/Datasource/MoneyDS.java | 2 +- src/de/sockenklaus/XmlStats/Webserver.java | 6 +- src/de/sockenklaus/XmlStats/XmlStats.java | 8 +- .../XmlWorkers/XmlWorkerAchievements.java | 98 ++++++++++++++++++- 6 files changed, 135 insertions(+), 11 deletions(-) diff --git a/build.xml b/build.xml index 0fc50c1..5326928 100644 --- a/build.xml +++ b/build.xml @@ -11,7 +11,10 @@ - + + + + diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 180cd31..03dc44f 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -3,10 +3,37 @@ */ package de.sockenklaus.XmlStats.Datasource; +import java.io.File; +import java.util.HashMap; + +import com.nidefawl.Achievements.AchPropertiesFile; +import com.nidefawl.Achievements.AchievementListData; +import com.nidefawl.Achievements.Achievements; +import com.nidefawl.Achievements.AchievementsLoader; + +import de.sockenklaus.XmlStats.XmlStats; +import de.sockenklaus.XmlStats.XmlStatsRegistry; + /** * @author socrates * */ public class AchievementsDS extends Datasource { + + public HashMap getAchievementsList(){ + Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); + + if(XmlStats.checkAchievements()){ + return ach.achievementList; + } + else return new HashMap(); + //return AchievementsLoader.LoadAchievementsList(ach, ach.getDataFolder().getPath(), getListLocation(ach)); + } + + /*private String getListLocation(Achievements ach){ + AchPropertiesFile props = new AchPropertiesFile(new File(ach.getDataFolder(), "achievements.properties")); + + return props.getString("achievements-list", "achievements.txt", ""); + }*/ } diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index bd0be8e..4f211c3 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -51,7 +51,7 @@ public class MoneyDS extends Datasource { private Double getBalance(String playerName){ Double result = 0.0; - if (XmlStats.isiConomyHooked()){ + if (XmlStats.checkiConomy()){ if(this.iConomy.hasAccount(playerName)){ Account account = this.iConomy.getAccount(playerName); diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index bde6c17..37e4a4f 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -77,7 +77,7 @@ public class Webserver { this.server.createContext("/users.xml", new XmlWorkerUsers()); - if(XmlStats.isStatsHooked()){ + if(XmlStats.checkStats()){ server.createContext("/userstats.xml", new XmlWorkerUserstats()); XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml"); } @@ -85,7 +85,7 @@ public class Webserver { XmlStats.LogWarn("Stats not loaded correctly. Disabling /userstats.xml"); } - if (XmlStats.isiConomyHooked()){ + if (XmlStats.checkiConomy()){ server.createContext("/money.xml", new XmlWorkerMoney()); XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml."); } @@ -93,7 +93,7 @@ public class Webserver { XmlStats.LogWarn("iConomy not loaded correctly. Disabling /money.xml"); } - if(XmlStats.isAchievementsHooked()){ + if(XmlStats.checkAchievements()){ server.createContext("/achievements.xml", new XmlWorkerAchievements()); } else { diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index d59ebee..8ddc91a 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -181,7 +181,7 @@ public class XmlStats extends JavaPlugin { * * @return true, if is stats hooked */ - public static boolean isStatsHooked(){ + public static boolean checkStats(){ Stats StatsTemp = (Stats)XmlStatsRegistry.get("stats"); if (StatsTemp != null){ @@ -195,7 +195,7 @@ public class XmlStats extends JavaPlugin { * * @return true, if is i conomy hooked */ - public static boolean isiConomyHooked(){ + public static boolean checkiConomy(){ iConomy iConomyTemp = (iConomy)XmlStatsRegistry.get("iconomy"); if (iConomyTemp != null){ @@ -209,8 +209,8 @@ public class XmlStats extends JavaPlugin { * * @return true, if is Achievements hooked */ - public static boolean isAchievementsHooked(){ - Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievments"); + public static boolean checkAchievements(){ + Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievements"); if (AchievementsTemp != null){ if(AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements") && AchievementsTemp.isEnabled()) return true; diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java index 20956dd..0df3df6 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java @@ -3,8 +3,26 @@ */ 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.Achievements.AchievementListData; +import com.nidefawl.Stats.Stats; + +import de.sockenklaus.XmlStats.Datasource.AchievementsDS; /** * @author socrates @@ -12,13 +30,89 @@ import java.util.Map; */ public class XmlWorkerAchievements extends XmlWorker { + AchievementsDS achDS; + + public XmlWorkerAchievements(){ + this.achDS = new AchievementsDS(); + } + /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override 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 achList = achDS.getAchievementsList(); + + Element root = doc.createElement("achievements"); + doc.appendChild(root); + + /* + * Hier wird das XML aufgebaut + */ + for(String achName : achList.keySet()){ + root.appendChild(getAchievement(doc, achList.get(achName))); + } + + /* + * 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 ""; + } + + private Element getAchievement(Document doc, AchievementListData data){ + Element elem_ach = doc.createElement("achievement"); + elem_ach.setAttribute("enabled", String.valueOf(data.isEnabled())); + + Element elem_name = doc.createElement("name"); + elem_name.setTextContent(data.getName()); + elem_ach.appendChild(elem_name); + + Element elem_description = doc.createElement("description"); + elem_description.setTextContent(data.getDescription()); + elem_ach.appendChild(elem_description); + + Element elem_category = doc.createElement("category"); + elem_category.setTextContent(data.getCategory()); + elem_ach.appendChild(elem_category); + + Element elem_stat = doc.createElement("stat"); + elem_stat.setTextContent(data.getKey()); + elem_ach.appendChild(elem_stat); + + Element elem_value = doc.createElement("value"); + elem_value.setTextContent(String.valueOf(data.getValue())); + elem_ach.appendChild(elem_value); + + Element elem_maxawards = doc.createElement("maxawards"); + elem_maxawards.setTextContent(String.valueOf(data.getMaxawards())); + elem_ach.appendChild(elem_maxawards); + + Element elem_commands = doc.createElement("commands"); + elem_commands.setTextContent(data.commands.toString()); + elem_ach.appendChild(elem_commands); + + return elem_ach; + } }