From 3301fc3d9dbc5e815c5370c40ed7d0e7730458d1 Mon Sep 17 00:00:00 2001 From: GJ Date: Wed, 7 Mar 2012 09:05:08 -0500 Subject: [PATCH] Leaderboard.java cleanup --- .../java/com/gmail/nossr50/Leaderboard.java | 528 ++++++++++-------- 1 file changed, 283 insertions(+), 245 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/Leaderboard.java b/src/main/java/com/gmail/nossr50/Leaderboard.java index a6071b18d..120818ed5 100644 --- a/src/main/java/com/gmail/nossr50/Leaderboard.java +++ b/src/main/java/com/gmail/nossr50/Leaderboard.java @@ -1,19 +1,21 @@ /* - This file is part of mcMMO. - - mcMMO is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - mcMMO is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with mcMMO. If not, see . + * Copyright (C) 2012 Matt 'The Yeti' Burnett & mcMMO Development + * Copyright (C) 2010-2011 'nossr50' + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + package com.gmail.nossr50; import java.io.BufferedReader; @@ -30,246 +32,282 @@ import com.gmail.nossr50.datatypes.PlayerStat; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.Tree; -public class Leaderboard -{ - static String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; //$NON-NLS-1$ - protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$ - - /* - * Read from the file - */ - 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 - try { - //Open the user file - FileReader file = new FileReader(location); - BufferedReader in = new BufferedReader(file); - String line = ""; //$NON-NLS-1$ - ArrayList players = new ArrayList(); - while((line = in.readLine()) != null) - { - String[] character = line.split(":"); //$NON-NLS-1$ - String p = character[0]; - - //Prevent the same player from being added multiple times - if(players.contains(p)) - continue; - else - players.add(p); +public class Leaderboard { + static String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; + protected static final Logger log = Logger.getLogger("Minecraft"); - int Plvl = 0; - - if(character.length > 1 && m.isInt(character[1])) - { - Mining.add(p, Integer.valueOf(character[1])); - Plvl += Integer.valueOf(character[1]); - } - if(character.length > 5 && m.isInt(character[5])){ - WoodCutting.add(p, Integer.valueOf(character[5])); - Plvl += Integer.valueOf(character[5]); - } - if(character.length > 7 && m.isInt(character[7])){ - Repair.add(p, Integer.valueOf(character[7])); - Plvl += Integer.valueOf(character[7]); - } - if(character.length > 8 && m.isInt(character[8])){ - Unarmed.add(p, Integer.valueOf(character[8])); - Plvl += Integer.valueOf(character[8]); - } - if(character.length > 9 && m.isInt(character[9])){ - Herbalism.add(p, Integer.valueOf(character[9])); - Plvl += Integer.valueOf(character[9]); - } - if(character.length > 10 && m.isInt(character[10])){ - Excavation.add(p, Integer.valueOf(character[10])); - Plvl += Integer.valueOf(character[10]); - } - if(character.length > 11 && m.isInt(character[11])){ - Archery.add(p, Integer.valueOf(character[11])); - Plvl += Integer.valueOf(character[11]); - } - if(character.length > 12 && m.isInt(character[12])){ - Swords.add(p, Integer.valueOf(character[12])); - Plvl += Integer.valueOf(character[12]); - } - if(character.length > 13 && m.isInt(character[13])){ - Axes.add(p, Integer.valueOf(character[13])); - Plvl += Integer.valueOf(character[13]); - } - if(character.length > 14 && m.isInt(character[14])){ - Acrobatics.add(p, Integer.valueOf(character[14])); - Plvl += Integer.valueOf(character[14]); - } - if(character.length > 24 && m.isInt(character[24])){ - Taming.add(p, Integer.valueOf(character[24])); - Plvl += Integer.valueOf(character[24]); - } - if(character.length > 34 && m.isInt(character[34])) - { - Fishing.add(p, Integer.valueOf(character[34])); - Plvl += Integer.valueOf(character[34]); - } - - PowerLevel.add(p, Plvl); - } - in.close(); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$ - + location + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ + /** + * 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 + try { + FileReader file = new FileReader(location); + BufferedReader in = new BufferedReader(file); + String line = ""; + ArrayList players = new ArrayList(); + + while (in.readLine() != null) { + line = in.readLine(); + String[] character = line.split(":"); + String p = character[0]; + int powerLevel = 0; + + //Prevent the same player from being added multiple times + if (players.contains(p)) { + continue; + } + else { + players.add(p); + } + + if (character.length > 1 && m.isInt(character[1])) { + Mining.add(p, Integer.valueOf(character[1])); + powerLevel += Integer.valueOf(character[1]); + } + + if (character.length > 5 && m.isInt(character[5])) { + WoodCutting.add(p, Integer.valueOf(character[5])); + powerLevel += Integer.valueOf(character[5]); + } + + if (character.length > 7 && m.isInt(character[7])) { + Repair.add(p, Integer.valueOf(character[7])); + powerLevel += Integer.valueOf(character[7]); + } + + if (character.length > 8 && m.isInt(character[8])) { + Unarmed.add(p, Integer.valueOf(character[8])); + powerLevel += Integer.valueOf(character[8]); + } + + if (character.length > 9 && m.isInt(character[9])) { + Herbalism.add(p, Integer.valueOf(character[9])); + powerLevel += Integer.valueOf(character[9]); + } + + if (character.length > 10 && m.isInt(character[10])) { + Excavation.add(p, Integer.valueOf(character[10])); + powerLevel += Integer.valueOf(character[10]); + } + + if (character.length > 11 && m.isInt(character[11])) { + Archery.add(p, Integer.valueOf(character[11])); + powerLevel += Integer.valueOf(character[11]); + } + + if (character.length > 12 && m.isInt(character[12])) { + Swords.add(p, Integer.valueOf(character[12])); + powerLevel += Integer.valueOf(character[12]); + } + + if (character.length > 13 && m.isInt(character[13])) { + Axes.add(p, Integer.valueOf(character[13])); + powerLevel += Integer.valueOf(character[13]); + } + + if (character.length > 14 && m.isInt(character[14])) { + Acrobatics.add(p, Integer.valueOf(character[14])); + powerLevel += Integer.valueOf(character[14]); + } + + if (character.length > 24 && m.isInt(character[24])) { + Taming.add(p, Integer.valueOf(character[24])); + powerLevel += Integer.valueOf(character[24]); + } + + if (character.length > 34 && m.isInt(character[34])) { + Fishing.add(p, Integer.valueOf(character[34])); + powerLevel += Integer.valueOf(character[34]); + } + + PowerLevel.add(p, powerLevel); + } + in.close(); } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e); + } + //Write the leader board files - leaderWrite(Mining.inOrder(), SkillType.MINING); //$NON-NLS-1$ - leaderWrite(WoodCutting.inOrder(), SkillType.WOODCUTTING); //$NON-NLS-1$ - leaderWrite(Repair.inOrder(), SkillType.REPAIR); //$NON-NLS-1$ - leaderWrite(Unarmed.inOrder(), SkillType.UNARMED); //$NON-NLS-1$ - leaderWrite(Herbalism.inOrder(), SkillType.HERBALISM); //$NON-NLS-1$ - leaderWrite(Excavation.inOrder(), SkillType.EXCAVATION); //$NON-NLS-1$ - leaderWrite(Archery.inOrder(), SkillType.ARCHERY); //$NON-NLS-1$ - leaderWrite(Swords.inOrder(), SkillType.SWORDS); //$NON-NLS-1$ - leaderWrite(Axes.inOrder(), SkillType.AXES); //$NON-NLS-1$ - leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS); //$NON-NLS-1$ - leaderWrite(Taming.inOrder(), SkillType.TAMING); //$NON-NLS-1$ - leaderWrite(Fishing.inOrder(), SkillType.FISHING); //$NON-NLS-1$ - leaderWrite(PowerLevel.inOrder(), SkillType.ALL); //$NON-NLS-1$ - } - public static void leaderWrite(PlayerStat[] ps, SkillType skillType) - { - String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$ - //CHECK IF THE FILE EXISTS - File theDir = new File(theLocation); - if(!theDir.exists()) - { - //properties = new PropertiesFile(location); - FileWriter writer = null; - try { - writer = new FileWriter(theLocation); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while creating " + theLocation, e); //$NON-NLS-1$ - } finally { - try { - if (writer != null) { - writer.close(); - } - } catch (IOException e) { - log.log(Level.SEVERE, "Exception while closing writer for " + theLocation, e); //$NON-NLS-1$ - } - } - } else { - try { - FileReader file = new FileReader(theLocation); - - //HERP - BufferedReader in = new BufferedReader(file); - StringBuilder writer = new StringBuilder(); - - for(PlayerStat p : ps) - { - if(p.name.equals("$mcMMO_DummyInfo")) //$NON-NLS-1$ - continue; - if(p.statVal == 0) - continue; - writer.append(p.name + ":" + p.statVal); //$NON-NLS-1$ - writer.append("\r\n"); //$NON-NLS-1$ - } - - in.close(); - //Write the new file - FileWriter out = new FileWriter(theLocation); - out.write(writer.toString()); - out.close(); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - //Create/open the file - //Loop through backward writing each player - //Close the file - } - - public static String[] retrieveInfo(String skillName, int pagenumber) - { - String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillName + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$ - try { - FileReader file = new FileReader(theLocation); - BufferedReader in = new BufferedReader(file); - - int destination = (pagenumber - 1) * 10; //How many lines to skip through - int x = 0; //how many lines we've gone through - int y = 0; //going through the lines - String line = ""; //$NON-NLS-1$ - String[] info = new String[10]; //what to return - while((line = in.readLine()) != null && y < 10) - { - x++; - if(x >= destination && y < 10){ - info[y] = line.toString(); - y++; - } - } - in.close(); - return info; - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$ - + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ + 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); + } + + /** + * Write to the leaderboards. + * + * @param ps Stats to write to the leaderboard + * @param skillType Skill type to write the leaderboard of + */ + private static void leaderWrite(PlayerStat[] ps, SkillType skillType) { + String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; + File theDir = new File(theLocation); + + //CHECK IF THE FILE EXISTS + if (!theDir.exists()) { + FileWriter writer = null; + + try { + writer = new FileWriter(theLocation); + } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while creating " + theLocation, e); + } + finally { + try { + if (writer != null) { + writer.close(); + } + } + catch (IOException e) { + log.log(Level.SEVERE, "Exception while closing writer for " + theLocation, e); + } + } } + else { + try { + FileReader file = new FileReader(theLocation); + BufferedReader in = new BufferedReader(file); + StringBuilder writer = new StringBuilder(); + + for (PlayerStat p : ps) { + if (p.name.equals("$mcMMO_DummyInfo")) { + continue; + } + + if (p.statVal == 0) { + continue; + } + + writer.append(p.name + ":" + p.statVal); + writer.append("\r\n"); + } + + in.close(); + FileWriter out = new FileWriter(theLocation); + out.write(writer.toString()); + out.close(); + } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); + } + } + } + + /** + * Retrieve leaderboard info. + * + * @param skillName Skill to retrieve info on. + * @param pagenumber Which page in the leaderboards to retrieve + * @return the requested leaderboard information + */ + public static String[] retrieveInfo(String skillName, int pagenumber) { + String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillName + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$ + + try { + FileReader file = new FileReader(theLocation); + BufferedReader in = new BufferedReader(file); + int destination = (pagenumber - 1) * 10; //How many lines to skip through + int x = 0; //how many lines we've gone through + int y = 0; //going through the lines + String line = ""; + String[] info = new String[10]; //what to return + + while (in.readLine() != null && y < 10) { + line = in.readLine(); + x++; + + if (x >= destination && y < 10) { + info[y] = line.toString(); + y++; + } + } + + in.close(); + return info; + } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while reading " + theLocation + " (Are you sure you formatted it correctly?)", e); + } + return null; //Shouldn't get here - } - public static void updateLeaderboard(PlayerStat ps, SkillType skillType) - { - if(LoadProperties.useMySQL) - return; - String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$ - try { - //Open the file - FileReader file = new FileReader(theLocation); + } + + /** + * Update the leaderboards. + * + * @param ps Stats to update the leaderboard with. + * @param skillType Skill whose leaderboard is being updated. + */ + public static void updateLeaderboard(PlayerStat ps, SkillType skillType) { + if (LoadProperties.useMySQL) { + return; + } + + String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; + + try { + FileReader file = new FileReader(theLocation); BufferedReader in = new BufferedReader(file); StringBuilder writer = new StringBuilder(); - String line = ""; //$NON-NLS-1$ - Boolean inserted = false; - //While not at the end of the file - while((line = in.readLine()) != null) - { - //Insert the player into the line before it finds a smaller one - if(Integer.valueOf(line.split(":")[1]) < ps.statVal && !inserted) //$NON-NLS-1$ - { - writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$ - inserted = true; - } - //Write anything that isn't the player already in the file so we remove the duplicate - if(!line.split(":")[0].equalsIgnoreCase(ps.name)) //$NON-NLS-1$ - { - writer.append(line).append("\r\n"); //$NON-NLS-1$ - } - } - - if(!inserted) - { - writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$ - } - - in.close(); - //Write the new file + String line = ""; + Boolean inserted = false; + + while (in.readLine() != null) { + line = in.readLine(); + + //Insert the player into the line before it finds a smaller one + if (Integer.valueOf(line.split(":")[1]) < ps.statVal && !inserted) { + writer.append(ps.name + ":" + ps.statVal).append("\r\n"); + inserted = true; + } + + //Write anything that isn't the player already in the file so we remove the duplicate + if (!line.split(":")[0].equalsIgnoreCase(ps.name)) { + writer.append(line).append("\r\n"); + } + } + + if(!inserted) { + writer.append(ps.name + ":" + ps.statVal).append("\r\n"); + } + + in.close(); + + //Write the new file FileWriter out = new FileWriter(theLocation); out.write(writer.toString()); out.close(); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$ } - } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); + } + } }