Permalink
Browse files

Merge pull request #406 from Glitchfinder/master

Fixing a few issues in the Tracker
  • Loading branch information...
2 parents e607e04 + 707a388 commit bfdb825e0b9576e70964ef248c374f691eaada59 @Glitchfinder Glitchfinder committed Jan 1, 2013
@@ -3,4 +3,11 @@
public class PlayerStat {
public String name;
public int statVal = 0;
+
+ public PlayerStat() {};
+
+ public PlayerStat(String name, int value) {
+ this.name = name;
+ this.statVal = value;
+ }
}
@@ -1,50 +0,0 @@
-package com.gmail.nossr50.datatypes;
-
-import java.util.ArrayList;
-
-public class Tree {
-
- private TreeNode root = null;
-
- /**
- * Add a node to this tree.
- *
- * @param p Player name
- * @param in Stat value
- */
- public void add(String p, int in) {
- if (root == null) {
- root = new TreeNode(p, in);
- }
- else {
- root.add(p, in);
- }
- }
-
- /**
- * Retrieve an array of PlayerStats from the Tree.
- *
- * @return the player stats of this tree, in order
- */
- public PlayerStat[] inOrder() {
- if (root != null) {
- ArrayList<PlayerStat> order = root.inOrder(new ArrayList<PlayerStat>());
- return order.toArray(new PlayerStat[order.size()]);
- }
- else {
-
- /*
- * Throw some dummy info in case the users file is empty.
- * It's not a good fix but its better than rewriting the whole system.
- */
- ArrayList<PlayerStat> x = new ArrayList<PlayerStat>();
- PlayerStat y = new PlayerStat();
-
- y.name = "$mcMMO_DummyInfo";
- y.statVal = 0;
- x.add(y);
-
- return x.toArray(new PlayerStat[x.size()]);
- }
- }
-}
@@ -1,50 +0,0 @@
-package com.gmail.nossr50.datatypes;
-
-import java.util.ArrayList;
-
-public class TreeNode {
- TreeNode left = null;
- TreeNode right = null;
- PlayerStat ps = new PlayerStat();
-
- public TreeNode(String p, int in) {
- ps.statVal = in;
- ps.name = p;
- }
-
- public void add (String p, int in) {
- if (in >= ps.statVal) {
- if (left == null) {
- left = new TreeNode(p, in);
- }
- else {
- left.add(p, in);
- }
- }
- else if(in < ps.statVal) {
- if (right == null) {
- right = new TreeNode(p, in);
- }
- else {
- right.add(p, in);
- }
- }
- }
-
- public ArrayList<PlayerStat> inOrder(ArrayList<PlayerStat> a) {
- //if left node is not null than assign arrayList(a) to left.inOrder()
- //GOES THROUGH THE ENTIRE LEFT BRANCH AND GRABS THE GREATEST NUMBER
-
- if (left != null) {
- a = left.inOrder(a);
- }
-
- a.add(ps);
-
- if (right != null) {
- a = right.inOrder(a);
- }
-
- return a;
- }
-}
@@ -1,5 +1,6 @@
package com.gmail.nossr50.skills.repair;
+import java.lang.reflect.Field;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
@@ -108,6 +109,7 @@ protected static void addEnchants(Player player, ItemStack is) {
is.removeEnchantment(x);
}
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Lost"));
+ clearEnchantTag(is);
return;
}
@@ -141,6 +143,7 @@ protected static void addEnchants(Player player, ItemStack is) {
if (newEnchants.isEmpty()) {
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Fail"));
+ clearEnchantTag(is);
}
else if (downgraded || newEnchants.size() < enchants.size()) {
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Downgrade"));
@@ -150,6 +153,33 @@ else if (downgraded || newEnchants.size() < enchants.size()) {
}
}
+ private static void clearEnchantTag(ItemStack is) {
+ Object o;
+ Class c;
+ Field f;
+
+ o = is;
+ c = o.getClass();
+
+ try {
+ f = c.getDeclaredField("handle");
+ f.setAccessible(true);
+ o = f.get(o);
+
+ c = o.getClass();
+ f = c.getDeclaredField("tag");
+ o = f.get(o);
+
+ c = o.getClass();
+ f = c.getDeclaredField("map");
+ f.setAccessible(true);
+ Map tagMap = (Map) f.get(o);
+
+ tagMap.remove("ench");
+ }
+ catch(Exception e) {}
+ }
+
/**
* Gets chance of keeping enchantment during repair.
*
@@ -6,12 +6,14 @@
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.PlayerStat;
import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.datatypes.Tree;
public class Leaderboard {
private static mcMMO plugin = mcMMO.p;
@@ -22,22 +24,22 @@
* Create the leaderboards.
*/
public static void makeLeaderboards() {
- //Make Trees
- Tree Mining = new Tree();
- Tree WoodCutting = new Tree();
- Tree Herbalism = new Tree();
- Tree Excavation = new Tree();
- Tree Acrobatics = new Tree();
- Tree Repair = new Tree();
- Tree Swords = new Tree();
- Tree Axes = new Tree();
- Tree Archery = new Tree();
- Tree Unarmed = new Tree();
- Tree Taming = new Tree();
- Tree Fishing = new Tree();
- Tree PowerLevel = new Tree();
-
- //Add Data To Trees
+ //Make Lists
+ List<PlayerStat> Mining = new ArrayList<PlayerStat>();
+ List<PlayerStat> WoodCutting = new ArrayList<PlayerStat>();
+ List<PlayerStat> Herbalism = new ArrayList<PlayerStat>();
+ List<PlayerStat> Excavation = new ArrayList<PlayerStat>();
+ List<PlayerStat> Acrobatics = new ArrayList<PlayerStat>();
+ List<PlayerStat> Repair = new ArrayList<PlayerStat>();
+ List<PlayerStat> Swords = new ArrayList<PlayerStat>();
+ List<PlayerStat> Axes = new ArrayList<PlayerStat>();
+ List<PlayerStat> Archery = new ArrayList<PlayerStat>();
+ List<PlayerStat> Unarmed = new ArrayList<PlayerStat>();
+ List<PlayerStat> Taming = new ArrayList<PlayerStat>();
+ List<PlayerStat> Fishing = new ArrayList<PlayerStat>();
+ List<PlayerStat> PowerLevel = new ArrayList<PlayerStat>();
+
+ //Add Data To Lists
try {
FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file);
@@ -58,87 +60,104 @@ public static void makeLeaderboards() {
}
if (character.length > 1 && Misc.isInt(character[1])) {
- Mining.add(p, Integer.valueOf(character[1]));
+ Mining.add(new PlayerStat(p, Integer.valueOf(character[1])));
powerLevel += Integer.valueOf(character[1]);
}
if (character.length > 5 && Misc.isInt(character[5])) {
- WoodCutting.add(p, Integer.valueOf(character[5]));
+ WoodCutting.add(new PlayerStat(p, Integer.valueOf(character[5])));
powerLevel += Integer.valueOf(character[5]);
}
if (character.length > 7 && Misc.isInt(character[7])) {
- Repair.add(p, Integer.valueOf(character[7]));
+ Repair.add(new PlayerStat(p, Integer.valueOf(character[7])));
powerLevel += Integer.valueOf(character[7]);
}
if (character.length > 8 && Misc.isInt(character[8])) {
- Unarmed.add(p, Integer.valueOf(character[8]));
+ Unarmed.add(new PlayerStat(p, Integer.valueOf(character[8])));
powerLevel += Integer.valueOf(character[8]);
}
if (character.length > 9 && Misc.isInt(character[9])) {
- Herbalism.add(p, Integer.valueOf(character[9]));
+ Herbalism.add(new PlayerStat(p, Integer.valueOf(character[9])));
powerLevel += Integer.valueOf(character[9]);
}
if (character.length > 10 && Misc.isInt(character[10])) {
- Excavation.add(p, Integer.valueOf(character[10]));
+ Excavation.add(new PlayerStat(p, Integer.valueOf(character[10])));
powerLevel += Integer.valueOf(character[10]);
}
if (character.length > 11 && Misc.isInt(character[11])) {
- Archery.add(p, Integer.valueOf(character[11]));
+ Archery.add(new PlayerStat(p, Integer.valueOf(character[11])));
powerLevel += Integer.valueOf(character[11]);
}
if (character.length > 12 && Misc.isInt(character[12])) {
- Swords.add(p, Integer.valueOf(character[12]));
+ Swords.add(new PlayerStat(p, Integer.valueOf(character[12])));
powerLevel += Integer.valueOf(character[12]);
}
if (character.length > 13 && Misc.isInt(character[13])) {
- Axes.add(p, Integer.valueOf(character[13]));
+ Axes.add(new PlayerStat(p, Integer.valueOf(character[13])));
powerLevel += Integer.valueOf(character[13]);
}
if (character.length > 14 && Misc.isInt(character[14])) {
- Acrobatics.add(p, Integer.valueOf(character[14]));
+ Acrobatics.add(new PlayerStat(p, Integer.valueOf(character[14])));
powerLevel += Integer.valueOf(character[14]);
}
if (character.length > 24 && Misc.isInt(character[24])) {
- Taming.add(p, Integer.valueOf(character[24]));
+ Taming.add(new PlayerStat(p, Integer.valueOf(character[24])));
powerLevel += Integer.valueOf(character[24]);
}
if (character.length > 34 && Misc.isInt(character[34])) {
- Fishing.add(p, Integer.valueOf(character[34]));
+ Fishing.add(new PlayerStat(p, Integer.valueOf(character[34])));
powerLevel += Integer.valueOf(character[34]);
}
- PowerLevel.add(p, powerLevel);
+ PowerLevel.add(new PlayerStat(p, powerLevel));
}
in.close();
}
catch (Exception e) {
plugin.getLogger().severe(("Exception while reading " + location + " (Are you sure you formatted it correctly?)" + e.toString()));
}
+ //Sort the leader boards
+ SkillComparator c = new SkillComparator();
+ Collections.sort(Mining, c);
+ Collections.sort(WoodCutting, c);
+ Collections.sort(Repair, c);
+ Collections.sort(Unarmed, c);
+ Collections.sort(Herbalism, c);
+ Collections.sort(Excavation, c);
+ Collections.sort(Archery, c);
+ Collections.sort(Swords, c);
+ Collections.sort(Axes, c);
+ Collections.sort(Acrobatics, c);
+ Collections.sort(Taming, c);
+ Collections.sort(Fishing, c);
+ Collections.sort(PowerLevel, c);
+
//Write the leader board files
- leaderWrite(Mining.inOrder(), SkillType.MINING);
- leaderWrite(WoodCutting.inOrder(), SkillType.WOODCUTTING);
- leaderWrite(Repair.inOrder(), SkillType.REPAIR);
- leaderWrite(Unarmed.inOrder(), SkillType.UNARMED);
- leaderWrite(Herbalism.inOrder(), SkillType.HERBALISM);
- leaderWrite(Excavation.inOrder(), SkillType.EXCAVATION);
- leaderWrite(Archery.inOrder(), SkillType.ARCHERY);
- leaderWrite(Swords.inOrder(), SkillType.SWORDS);
- leaderWrite(Axes.inOrder(), SkillType.AXES);
- leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS);
- leaderWrite(Taming.inOrder(), SkillType.TAMING);
- leaderWrite(Fishing.inOrder(), SkillType.FISHING);
- leaderWrite(PowerLevel.inOrder(), SkillType.ALL);
+ PlayerStat[] a = new PlayerStat[1];
+ leaderWrite(Mining.toArray(a), SkillType.MINING);
+ leaderWrite(WoodCutting.toArray(a), SkillType.WOODCUTTING);
+ leaderWrite(Repair.toArray(a), SkillType.REPAIR);
+ leaderWrite(Unarmed.toArray(a), SkillType.UNARMED);
+ leaderWrite(Herbalism.toArray(a), SkillType.HERBALISM);
+ leaderWrite(Excavation.toArray(a), SkillType.EXCAVATION);
+ leaderWrite(Archery.toArray(a), SkillType.ARCHERY);
+ leaderWrite(Swords.toArray(a), SkillType.SWORDS);
+ leaderWrite(Axes.toArray(a), SkillType.AXES);
+ leaderWrite(Acrobatics.toArray(a), SkillType.ACROBATICS);
+ leaderWrite(Taming.toArray(a), SkillType.TAMING);
+ leaderWrite(Fishing.toArray(a), SkillType.FISHING);
+ leaderWrite(PowerLevel.toArray(a), SkillType.ALL);
}
/**
@@ -298,4 +317,10 @@ public static void updateLeaderboard(PlayerStat ps, SkillType skillType) {
plugin.getLogger().severe("Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)" + e.toString());
}
}
+ private static class SkillComparator implements Comparator<PlayerStat> {
+ @Override
+ public int compare(PlayerStat o1, PlayerStat o2) {
+ return (o2.statVal - o1.statVal);
+ }
+ }
}
@@ -253,7 +253,7 @@ public static void dropItem(Location location, ItemStack itemStack) {
return;
}
- location.getWorld().dropItemNaturally(location, itemStack);
+ location.getWorld().dropItemNaturally(location, itemStack).setItemStack(itemStack);
}
/**

0 comments on commit bfdb825

Please sign in to comment.