From e9e7d462f7234a517abb12455a5d6debd1cd1df6 Mon Sep 17 00:00:00 2001 From: GJ Date: Thu, 8 Mar 2012 16:17:57 -0500 Subject: [PATCH] More generic cleanup. --- src/main/java/com/gmail/nossr50/Combat.java | 4 +- .../nossr50/listeners/mcBlockListener.java | 13 +- .../nossr50/listeners/mcPlayerListener.java | 7 +- src/main/java/com/gmail/nossr50/m.java | 409 +++++----- src/main/java/com/gmail/nossr50/mcMMO.java | 771 ++++++++++-------- .../com/gmail/nossr50/skills/BlastMining.java | 4 +- 6 files changed, 657 insertions(+), 551 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index 8ceee7735..45b0f08d2 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -84,7 +84,7 @@ public class Combat { } else if (itemInHand.getType().equals(Material.AIR) && mcPermissions.getInstance().unarmed(attacker)) { Unarmed.unarmedBonus(attacker, event); - + if (PPa.getBerserkMode()) { event.setDamage(damage + (damage / 2)); } @@ -187,7 +187,7 @@ public class Combat { else if (Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2)) { deflect = true; } - + if (deflect) { event.setCancelled(true); defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java index 5023ae91c..5eb93c4a7 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.listeners; +import com.gmail.nossr50.BlockChecks; import com.gmail.nossr50.ItemChecks; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; @@ -56,7 +57,7 @@ public class mcBlockListener implements Listener Material mat = block.getType(); //Check if the blocks placed should be monitored so they do not give out XP in the future - if(m.shouldBeWatched(mat)) + if(BlockChecks.shouldBeWatched(mat)) { //Only needed for blocks that use their block data (wood, pumpkins, etc.) boolean shouldBeChanged = true; @@ -171,7 +172,7 @@ public class mcBlockListener implements Listener } //Change the byte back when broken - if(block.getData() == 5 && m.shouldBeWatched(block.getType())) + if(block.getData() == 5 && BlockChecks.shouldBeWatched(block.getType())) { block.setData((byte) 0); if(plugin.misc.blockWatchList.contains(block)) @@ -192,7 +193,7 @@ public class mcBlockListener implements Listener /* * ABILITY PREPARATION CHECKS */ - if(m.abilityBlockCheck(mat)) + if(BlockChecks.abilityBlockCheck(mat)) { if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block)) Skills.abilityCheck(player, SkillType.HERBALISM); @@ -300,7 +301,7 @@ public class mcBlockListener implements Listener { Block blockFrom = event.getBlock(); Block blockTo = event.getToBlock(); - if(m.shouldBeWatched(blockFrom.getType()) && blockFrom.getData() == (byte)5) - blockTo.setData((byte)5); - } + if(BlockChecks.shouldBeWatched(blockFrom.getType()) && blockFrom.getData() == (byte)5) + blockTo.setData((byte)5); + } } diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java index c57bccad3..a913ed1bf 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java @@ -28,6 +28,7 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; +import com.gmail.nossr50.BlockChecks; import com.gmail.nossr50.Combat; import com.gmail.nossr50.Item; import com.gmail.nossr50.ItemChecks; @@ -177,7 +178,7 @@ public class mcPlayerListener implements Listener player.updateInventory(); } - if(LoadProperties.enableAbilities && m.abilityBlockCheck(mat)) + if(LoadProperties.enableAbilities && BlockChecks.abilityBlockCheck(mat)) { if(block != null && ItemChecks.isHoe(is) && !mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) Skills.activationCheck(player, SkillType.HERBALISM); @@ -247,7 +248,7 @@ public class mcPlayerListener implements Listener */ if(action == Action.RIGHT_CLICK_AIR) Item.itemchecks(player); - if(action == Action.RIGHT_CLICK_BLOCK && m.abilityBlockCheck(mat)) + if(action == Action.RIGHT_CLICK_BLOCK && BlockChecks.abilityBlockCheck(mat)) Item.itemchecks(player); if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.LEFT_CLICK_AIR || action == Action.LEFT_CLICK_BLOCK)) @@ -337,4 +338,4 @@ public class mcPlayerListener implements Listener event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command))); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/gmail/nossr50/m.java b/src/main/java/com/gmail/nossr50/m.java index 310954cca..7bd12b52a 100644 --- a/src/main/java/com/gmail/nossr50/m.java +++ b/src/main/java/com/gmail/nossr50/m.java @@ -7,7 +7,6 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageEvent; @@ -73,54 +72,6 @@ public class m { } } - /** - * Checks to see if a block type awards XP. - * - * @param material Block type to check - * @return true if the block type awards XP, false otherwise - */ - public static boolean shouldBeWatched(Material material) { - switch (material) { - case BROWN_MUSHROOM: - case CACTUS: - case CLAY: - case COAL_ORE: - case DIAMOND_ORE: - case DIRT: - case ENDER_STONE: - case GLOWING_REDSTONE_ORE: - case GLOWSTONE: - case GOLD_ORE: - case GRASS: - case GRAVEL: - case IRON_ORE: - case JACK_O_LANTERN: - case LAPIS_ORE: - case LOG: - case MELON_BLOCK: - case MOSSY_COBBLESTONE: - case MYCEL: - case NETHERRACK: - case OBSIDIAN: - case PUMPKIN: - case RED_MUSHROOM: - case RED_ROSE: - case REDSTONE_ORE: - case SAND: - case SANDSTONE: - case SOUL_SAND: - case STONE: - case SUGAR_CANE_BLOCK: - case VINE: - case WATER_LILY: - case YELLOW_FLOWER: - return true; - - default: - return false; - } - } - /** * Gets the power level of a player. * @@ -173,199 +124,282 @@ public class m { * @param inHand The item to check the tier of * @return the tier of the item */ - public static Integer getTier(ItemStack inHand) - { - if(Repair.isWoodTools(inHand)) - return 1; - if(Repair.isStoneTools(inHand)) - return 2; - if(Repair.isIronTools(inHand)) - return 3; - if(Repair.isGoldTools(inHand)) - return 1; - if(Repair.isDiamondTools(inHand)) - return 4; - - return 1; + public static Integer getTier(ItemStack inHand) { + int tier = 0; + + if (Repair.isWoodTools(inHand)) { + tier = 1; + } + else if (Repair.isStoneTools(inHand)) { + tier = 2; + } + else if (Repair.isIronTools(inHand)) { + tier = 3; + } + else if(Repair.isGoldTools(inHand)) { + tier = 1; + } + else if(Repair.isDiamondTools(inHand)) + tier = 4; + + return tier; } - + + /** + * Determine if two locations are near each other. + * + * @param first The first location + * @param second The second location + * @param maxDistance The max distance apart + * @return true if the distance between first and second is less than maxDistance, false otherwise + */ public static boolean isNear(Location first, Location second, int maxDistance) { double relX = first.getX() - second.getX(); double relY = first.getY() - second.getY(); double relZ = first.getZ() - second.getZ(); - double dist = relX * relX + relY * relY + relZ * relZ; - - if (dist < maxDistance * maxDistance) + double dist = (relX * relX) + (relY * relY) + (relZ * relZ); + + if (dist < maxDistance * maxDistance) { return true; - - return false; - } - - public static boolean abilityBlockCheck(Material material) - { - switch(material){ - case BED_BLOCK: - case BREWING_STAND: - case BOOKSHELF: - case BURNING_FURNACE: - case CAKE_BLOCK: - case CHEST: - case DISPENSER: - case ENCHANTMENT_TABLE: - case FENCE_GATE: - case FURNACE: - case IRON_DOOR_BLOCK: - case JUKEBOX: - case LEVER: - case NOTE_BLOCK: - case STONE_BUTTON: - case TRAP_DOOR: - case WALL_SIGN: - case WOODEN_DOOR: - case WORKBENCH: + } + else { return false; } - - if(Material.getMaterial(LoadProperties.anvilID).equals(material)) - return false; - - return true; } - - public static boolean isInt(String string) - { - try - { + + /** + * Determine if a string represents an Integer + * + * @param string String to check + * @return true if the string is an Integer, false otherwise + */ + public static boolean isInt(String string) { + try { Integer.parseInt(string); + return true; } - catch(NumberFormatException nFE) - { + catch (NumberFormatException nFE) { return false; } - return true; } - - public static void mcDropItems(Location location, ItemStack is, int quantity) - { - for(int i = 0; i < quantity; i++) + + /** + * Drop items at a given location. + * + * @param location The location to drop the items at + * @param is The items to drop + * @param quantity The amount of items to drop + */ + public static void mcDropItems(Location location, ItemStack is, int quantity) { + for (int i = 0; i < quantity; i++) { mcDropItem(location, is); + } } - - public static void mcRandomDropItem(Location location, ItemStack is, int chance) - { - if(Math.random() * 100 < chance) + + /** + * Randomly drop an item at a given location. + * + * @param location The location to drop the items at + * @param is The item to drop + * @param chance The percentage chance for the item to drop + */ + public static void mcRandomDropItem(Location location, ItemStack is, double chance) { + if (Math.random() * 100 < chance) { mcDropItem(location, is); + } } - - public static void mcRandomDropItems(Location location, ItemStack is, int chance, int quantity) - { - for(int i = 0; i < quantity; i++) + + /** + * Randomly drop items at a given location. + * + * @param location The location to drop the items at + * @param is The item to drop + * @param chance The percentage chance for the item to drop + * @param quantity The amount of items to drop + */ + public static void mcRandomDropItems(Location location, ItemStack is, int chance, int quantity) { + for(int i = 0; i < quantity; i++) { mcRandomDropItem(location, is, chance); + } } - + + /** + * Drop an item at a given location. + * + * @param location The location to drop the item at + * @param itemStack The item to drop + */ public static void mcDropItem(Location location, ItemStack itemStack) { + // We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event. McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(location, itemStack); Bukkit.getPluginManager().callEvent(event); - if(event.isCancelled()) return; - - location.getWorld().dropItemNaturally(location, itemStack); + + if (event.isCancelled()) { + return; + } + else { + location.getWorld().dropItemNaturally(location, itemStack); + } } - public static boolean isOre(Block block) - { - switch (block.getType()) { - case COAL_ORE: - case DIAMOND_ORE: - case GLOWING_REDSTONE_ORE: - case GOLD_ORE: - case IRON_ORE: - case LAPIS_ORE: - case REDSTONE_ORE: - return true; - } - return false; - } - - public static void convertToMySQL() - { - if(!LoadProperties.useMySQL) + /** + * Convert FlatFile data to MySQL data. + */ + public static void convertToMySQL() { + if (!LoadProperties.useMySQL) { return; - - Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), new Runnable(){ + } + + Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getPluginManager().getPlugin("mcMMO"), new Runnable() { public void run() { String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; + try { + //Open the user file FileReader file = new FileReader(location); BufferedReader in = new BufferedReader(file); String line = ""; - String playerName = null, mining = null, party = null, miningXP = null, woodcutting = null, woodCuttingXP = null, repair = null, unarmed = null, herbalism = null, excavation = null, archery = null, swords = null, axes = null, acrobatics = null, repairXP = null, unarmedXP = null, herbalismXP = null, excavationXP = null, archeryXP = null, swordsXP = null, axesXP = null, acrobaticsXP = null, taming = null, tamingXP = null, fishing = null, fishingXP = null; - int id = 0, theCount = 0; + String playerName = null; + String party = null; + String mining = null; + String woodcutting = null; + String repair = null; + String unarmed = null; + String herbalism = null; + String excavation = null; + String archery = null; + String swords = null; + String axes = null; + String acrobatics = null; + String taming = null; + String fishing = null; + String miningXP = null; + String woodCuttingXP = null; + String repairXP = null; + String unarmedXP = null; + String herbalismXP = null; + String excavationXP = null; + String archeryXP = null; + String swordsXP = null; + String axesXP = null; + String acrobaticsXP = null; + String tamingXP = null; + String fishingXP = null; + int id = 0; + int theCount = 0; + while ((line = in.readLine()) != null) { + //Find if the line contains the player we want. String[] character = line.split(":"); playerName = character[0]; - //Check for things we don't want put in the DB - if (playerName == null - || playerName.equals("null") - || playerName - .equals("#Storage place for user information")) - continue; - //Get Mining - if (character.length > 1) + //Check for things we don't want put in the DB + if (playerName == null || playerName.equals("null") || playerName.equals("#Storage place for user information")) { + continue; + } + + if (character.length > 1) { mining = character[1]; - //Party - if (character.length > 3) + } + + if (character.length > 3) { party = character[3]; - //Mining XP - if (character.length > 4) + } + + if (character.length > 4) { miningXP = character[4]; - if (character.length > 5) + } + + if (character.length > 5) { woodcutting = character[5]; - if (character.length > 6) + } + + if (character.length > 6) { woodCuttingXP = character[6]; - if (character.length > 7) + } + + if (character.length > 7) { repair = character[7]; - if (character.length > 8) + } + + if (character.length > 8) { unarmed = character[8]; - if (character.length > 9) + } + + if (character.length > 9) { herbalism = character[9]; - if (character.length > 10) + } + + if (character.length > 10) { excavation = character[10]; - if (character.length > 11) + } + + if (character.length > 11) { archery = character[11]; - if (character.length > 12) + } + + if (character.length > 12) { swords = character[12]; - if (character.length > 13) + } + + if (character.length > 13) { axes = character[13]; - if (character.length > 14) + } + + if (character.length > 14) { acrobatics = character[14]; - if (character.length > 15) + } + + if (character.length > 15) { repairXP = character[15]; - if (character.length > 16) + } + + if (character.length > 16) { unarmedXP = character[16]; - if (character.length > 17) + } + + if (character.length > 17) { herbalismXP = character[17]; - if (character.length > 18) + } + + if (character.length > 18) { excavationXP = character[18]; - if (character.length > 19) + } + + if (character.length > 19) { archeryXP = character[19]; - if (character.length > 20) + } + + if (character.length > 20) { swordsXP = character[20]; - if (character.length > 21) + } + + if (character.length > 21) { axesXP = character[21]; - if (character.length > 22) + } + + if (character.length > 22) { acrobaticsXP = character[22]; - if (character.length > 24) + } + + if (character.length > 24) { taming = character[24]; - if (character.length > 25) + } + + if (character.length > 25) { tamingXP = character[25]; - if (character.length > 34) + } + + if (character.length > 34) { fishing = character[34]; - if (character.length > 35) + } + + if (character.length > 35) { fishingXP = character[35]; + } //Check to see if the user is in the DB id = mcMMO.database.getInt("SELECT id FROM " @@ -374,6 +408,7 @@ public class m { if (id > 0) { theCount++; + //Update the skill values mcMMO.database.write("UPDATE " + LoadProperties.MySQLtablePrefix @@ -415,8 +450,10 @@ public class m { + getInt(acrobaticsXP) + ", fishing = " + getInt(fishingXP) + " WHERE user_id = " + id); - } else { + } + else { theCount++; + //Create the user in the DB mcMMO.database.write("INSERT INTO " + LoadProperties.MySQLtablePrefix @@ -478,16 +515,14 @@ public class m { + id); } } - System.out - .println("[mcMMO] MySQL Updated from users file, " - + theCount - + " items added/updated to MySQL DB"); + + System.out.println("[mcMMO] MySQL Updated from users file, " + theCount + " items added/updated to MySQL DB"); in.close(); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while reading " + location - + " (Are you sure you formatted it correctly?)", e); + } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e); } } }, 1); } -} \ No newline at end of file +} diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 935204fcc..f99e09008 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -17,8 +17,6 @@ import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.party.Party; import com.gmail.nossr50.skills.*; -import org.bukkit.Bukkit; - import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -35,6 +33,7 @@ import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; +import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; @@ -46,367 +45,437 @@ import org.bukkit.entity.Player; import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.player.FileManager; +public class mcMMO extends JavaPlugin { -public class mcMMO extends JavaPlugin -{ - - public static String maindirectory = "plugins" + File.separator + "mcMMO"; - File file = new File(maindirectory + File.separator + "config.yml"); - static File versionFile = new File(maindirectory + File.separator + "VERSION"); - public static final Logger log = Logger.getLogger("Minecraft"); - - private final mcPlayerListener playerListener = new mcPlayerListener(this); - private final mcBlockListener blockListener = new mcBlockListener(this); - private final mcEntityListener entityListener = new mcEntityListener(this); - - //Queue for block data change for R2+ fix - public ArrayDeque changeQueue = new ArrayDeque(); - public ArrayDeque fastChangeQueue = new ArrayDeque(); + public static String maindirectory = "plugins" + File.separator + "mcMMO"; + public static File file = new File(maindirectory + File.separator + "config.yml"); + public static File versionFile = new File(maindirectory + File.separator + "VERSION"); + public static final Logger log = Logger.getLogger("Minecraft"); - private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION - private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data - private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(changeQueue); //R2 block place workaround - private Runnable FastChangeDataValueTimer = new ChangeDataValueTimer(fastChangeQueue); + private final mcPlayerListener playerListener = new mcPlayerListener(this); + private final mcBlockListener blockListener = new mcBlockListener(this); + private final mcEntityListener entityListener = new mcEntityListener(this); - //Alias - Command - public HashMap aliasMap = new HashMap(); - - public static Database database = null; - public Misc misc = new Misc(this); + //Queue for block data change for R2+ fix + public ArrayDeque changeQueue = new ArrayDeque(); + public ArrayDeque fastChangeQueue = new ArrayDeque(); - //Config file stuff - LoadProperties config; - LoadTreasures config2; - - //Jar stuff - public static File mcmmo; + private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION + private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data + private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(changeQueue); //R2 block place workaround + private Runnable FastChangeDataValueTimer = new ChangeDataValueTimer(fastChangeQueue); //R2 block place workaround for instant-break stuff - public void onEnable() - { - final Plugin thisPlugin = this; - mcmmo = this.getFile(); - new File(maindirectory).mkdir(); - - if(!versionFile.exists()) - { - updateVersion(); - } else - { - String vnum = readVersion(); - //This will be changed to whatever version preceded when we actually need updater code. - //Version 1.0.48 is the first to implement this, no checking before that version can be done. - if(vnum.equalsIgnoreCase("1.0.48")) { - updateFrom(1); - } - //Just add in more else if blocks for versions that need updater code. Increment the updateFrom age int as we do so. - //Catch all for versions not matching and no specific code being needed - else if(!vnum.equalsIgnoreCase(this.getDescription().getVersion())) updateFrom(-1); - } - - this.config = new LoadProperties(this); - this.config.load(); - - this.config2 = new LoadTreasures(this); - this.config2.load(); - - Party.getInstance().loadParties(); - new Party(this); - - if(!LoadProperties.useMySQL) - Users.getInstance().loadUsers(); //Load Users file - /* - * REGISTER EVENTS - */ + //Alias - Command + public HashMap aliasMap = new HashMap(); - PluginManager pm = getServer().getPluginManager(); + public static Database database = null; + public Misc misc = new Misc(this); - if(pm.getPlugin("Spout") != null) - LoadProperties.spoutEnabled = true; - else - LoadProperties.spoutEnabled = false; - - //Register events - pm.registerEvents(playerListener, this); - pm.registerEvents(blockListener, this); - pm.registerEvents(entityListener, this); + //Config file stuff + LoadProperties config; + LoadTreasures config2; - PluginDescriptionFile pdfFile = this.getDescription(); + //Jar stuff + public static File mcmmo; - if(LoadProperties.useMySQL) - { - database = new Database(this); - database.createStructure(); - } else - Leaderboard.makeLeaderboards(); //Make the leaderboards + /** + * Things to be run when the plugin is enabled. + */ + public void onEnable() { + final Plugin thisPlugin = this; + mcmmo = this.getFile(); + new File(maindirectory).mkdir(); - for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile - System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" ); - - //Periodic save timer (Saves every 10 minutes) - Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_SaveTimer, 0, LoadProperties.saveInterval * 1200); - - Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20); - //R2+ block place fix - Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10); - Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, FastChangeDataValueTimer, 0, 1); - - registerCommands(); - - //Spout Stuff - if(LoadProperties.spoutEnabled) - { - SpoutStuff.setupSpoutConfigs(); - SpoutStuff.registerCustomEvent(); - SpoutStuff.extractFiles(); //Extract source materials - - FileManager FM = SpoutManager.getFileManager(); - FM.addToPreLoginCache(this, SpoutStuff.getFiles()); - } - - if(LoadProperties.statsTracking) { - //Plugin Metrics running in a new thread - new Thread(new Runnable() { - public void run() { - try { - // create a new metrics object - Metrics metrics = new Metrics(); - - // 'this' in this context is the Plugin object - metrics.beginMeasuringPlugin(thisPlugin); - } catch (IOException e) { - // Failed to submit the stats :-( - } - } - }).start(); - } - } + if (!versionFile.exists()) { + updateVersion(); + } + else { + String vnum = readVersion(); - public PlayerProfile getPlayerProfile(Player player) - { - return Users.getProfile(player); - } - - public void checkXp(Player player, SkillType skillType) - { - if(skillType == SkillType.ALL) - Skills.XpCheckAll(player); - else - Skills.XpCheckSkill(skillType, player); - } - - public boolean inSameParty(Player playera, Player playerb) - { - if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){ - if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){ - return true; - } else { - return false; - } - } else { - return false; - } - } - public ArrayList getParties(){ - String location = "plugins/mcMMO/mcmmo.users"; - ArrayList parties = new ArrayList(); - try { - //Open the users file - FileReader file = new FileReader(location); - BufferedReader in = new BufferedReader(file); - String line = ""; - while((line = in.readLine()) != null) - { - String[] character = line.split(":"); - String theparty = null; - //Party - if(character.length > 3) - theparty = character[3]; - if(!parties.contains(theparty)) - parties.add(theparty); - } - in.close(); - } catch (Exception e) { - log.log(Level.SEVERE, "Exception while reading " - + location + " (Are you sure you formatted it correctly?)", e); - } - return parties; - } - public static String getPartyName(Player player){ - PlayerProfile PP = Users.getProfile(player); - return PP.getParty(); - } - public static boolean inParty(Player player){ - PlayerProfile PP = Users.getProfile(player); - return PP.inParty(); - } + //This will be changed to whatever version preceded when we actually need updater code. + //Version 1.0.48 is the first to implement this, no checking before that version can be done. + if (vnum.equalsIgnoreCase("1.0.48")) { + updateFrom(1); + } - public void onDisable() - { - //Make sure to save player information if the server shuts down - for(Player x : Bukkit.getServer().getOnlinePlayers()) - { - Users.getProfile(x).save(); - } - - Bukkit.getServer().getScheduler().cancelTasks(this); //This removes our tasks - - System.out.println("mcMMO was disabled."); //How informative! - } - - private void registerCommands() { - //Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands) - //Skills commands - aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics"); - aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery"); - aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes"); - aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation"); - aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing"); - aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism"); - aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining"); - aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair"); - aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords"); - aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming"); - aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed"); - aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting"); - - - //Register commands - //Skills commands - getCommand("acrobatics").setExecutor(new AcrobaticsCommand()); - getCommand("archery").setExecutor(new ArcheryCommand()); - getCommand("axes").setExecutor(new AxesCommand()); - getCommand("excavation").setExecutor(new ExcavationCommand()); - getCommand("fishing").setExecutor(new FishingCommand()); - getCommand("herbalism").setExecutor(new HerbalismCommand()); - getCommand("mining").setExecutor(new MiningCommand()); - getCommand("repair").setExecutor(new RepairCommand()); - getCommand("swords").setExecutor(new SwordsCommand()); - getCommand("taming").setExecutor(new TamingCommand()); - getCommand("unarmed").setExecutor(new UnarmedCommand()); - getCommand("woodcutting").setExecutor(new WoodcuttingCommand()); - - //Mc* commands - if(LoadProperties.mcremoveEnable) getCommand("mcremove").setExecutor(new McremoveCommand()); - if(LoadProperties.mcabilityEnable) getCommand("mcability").setExecutor(new McabilityCommand()); - if(LoadProperties.mccEnable) getCommand("mcc").setExecutor(new MccCommand()); - if(LoadProperties.mcgodEnable) getCommand("mcgod").setExecutor(new McgodCommand()); - if(LoadProperties.mcmmoEnable) getCommand("mcmmo").setExecutor(new McmmoCommand()); - if(LoadProperties.mcrefreshEnable) getCommand("mcrefresh").setExecutor(new McrefreshCommand(this)); - if(LoadProperties.mctopEnable) getCommand("mctop").setExecutor(new MctopCommand()); - - //Party commands - if(LoadProperties.acceptEnable) getCommand("accept").setExecutor(new AcceptCommand()); - if(LoadProperties.aEnable) getCommand("a").setExecutor(new ACommand()); - if(LoadProperties.inviteEnable) getCommand("invite").setExecutor(new InviteCommand(this)); - if(LoadProperties.partyEnable) getCommand("party").setExecutor(new PartyCommand()); - if(LoadProperties.pEnable) getCommand("p").setExecutor(new PCommand()); - if(LoadProperties.ptpEnable) getCommand("ptp").setExecutor(new PtpCommand(this)); - - //Other commands - if(LoadProperties.addxpEnable) getCommand("addxp").setExecutor(new AddxpCommand(this)); - if(LoadProperties.addlevelsEnable) getCommand("addlevels").setExecutor(new AddlevelsCommand(this)); - if(LoadProperties.mmoeditEnable) getCommand("mmoedit").setExecutor(new MmoeditCommand(this)); - getCommand("mmoupdate").setExecutor(new MmoupdateCommand()); - if(LoadProperties.mcstatsEnable) getCommand("mcstats").setExecutor(new McstatsCommand()); - if(LoadProperties.inspectEnable) getCommand("inspect").setExecutor(new InspectCommand(this)); - if(LoadProperties.xprateEnable) getCommand("xprate").setExecutor(new XprateCommand()); - - //Spout commands - getCommand("mchud").setExecutor(new MchudCommand()); - if(LoadProperties.xplockEnable) getCommand("xplock").setExecutor(new XplockCommand()); - - } + //Just add in more else if blocks for versions that need updater code. Increment the updateFrom age int as we do so. + //Catch all for versions not matching and no specific code being needed + else if (!vnum.equalsIgnoreCase(this.getDescription().getVersion())) { + updateFrom(-1); + } + } - /* - * It is important to always assume that you are updating from the lowest possible version. - * Thus, every block of updater code should be complete and self-contained; finishing all - * SQL transactions and closing all file handlers, such that the next block of updater code - * if called will handle updating as expected. - */ - public void updateFrom(int age) { - //No updater code needed, just update the version. - if(age == -1) { - updateVersion(); - return; - } - //Updater code from age 1 goes here - if(age <= 1) { - //Since age 1 is an example for now, we will just let it do nothing. - - } - //If we are updating from age 1 but we need more to reach age 2, this will run too. - if(age <= 2) { - - } - updateVersion(); - } - - public void updateVersion() { - try { - versionFile.createNewFile(); - BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile)); - vout.write(this.getDescription().getVersion()); - vout.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } catch (SecurityException ex) { - ex.printStackTrace(); - } - } + this.config = new LoadProperties(this); + this.config.load(); - public String readVersion() { - byte[] buffer = new byte[(int) versionFile.length()]; - BufferedInputStream f = null; - try { - f = new BufferedInputStream(new FileInputStream(versionFile)); - f.read(buffer); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } catch (IOException ex) { - ex.printStackTrace(); - } finally { - if (f != null) try { f.close(); } catch (IOException ignored) { } - } - - return new String(buffer); - } - - /* - * Boilerplate Custom Config Stuff - */ - - private FileConfiguration treasuresConfig = null; - private File treasuresConfigFile = null; - - public void reloadTreasuresConfig() { - if (treasuresConfigFile == null) { - treasuresConfigFile = new File(getDataFolder(), "treasures.yml"); - } - treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile); - - // Look for defaults in the jar - InputStream defConfigStream = getResource("treasures.yml"); - if (defConfigStream != null) { - YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); - treasuresConfig.setDefaults(defConfig); - } - } - - public FileConfiguration getTreasuresConfig() { - if (treasuresConfig == null) { - reloadTreasuresConfig(); - } - return treasuresConfig; - } - - public void saveTreasuresConfig() { - if (treasuresConfig == null || treasuresConfigFile == null) { - return; - } - try { - treasuresConfig.save(treasuresConfigFile); - } catch (IOException ex) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex); - } - } + this.config2 = new LoadTreasures(this); + this.config2.load(); + + Party.getInstance().loadParties(); + new Party(this); + + if (!LoadProperties.useMySQL) { + Users.getInstance().loadUsers(); + } + + PluginManager pm = getServer().getPluginManager(); + + if (pm.getPlugin("Spout") != null) { + LoadProperties.spoutEnabled = true; + } + else { + LoadProperties.spoutEnabled = false; + } + + //Register events + pm.registerEvents(playerListener, this); + pm.registerEvents(blockListener, this); + pm.registerEvents(entityListener, this); + + PluginDescriptionFile pdfFile = this.getDescription(); + + //Setup the leaderboards + if (LoadProperties.useMySQL) { + database = new Database(this); + database.createStructure(); + } + else { + Leaderboard.makeLeaderboards(); + } + + for (Player player : getServer().getOnlinePlayers()) { + Users.addUser(player); //In case of reload add all users back into PlayerProfile + } + + System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" ); + + //Periodic save timer (Saves every 10 minutes) + Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_SaveTimer, 0, LoadProperties.saveInterval * 1200); + + //Bleed & Regen timer (Runs every 20 seconds) + Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20); + + //R2+ block place fix + Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10); + Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, FastChangeDataValueTimer, 0, 1); + + registerCommands(); + + //Spout Stuff + if (LoadProperties.spoutEnabled) { + SpoutStuff.setupSpoutConfigs(); + SpoutStuff.registerCustomEvent(); + SpoutStuff.extractFiles(); //Extract source materials + + FileManager FM = SpoutManager.getFileManager(); + FM.addToPreLoginCache(this, SpoutStuff.getFiles()); + } + + if (LoadProperties.statsTracking) { + //Plugin Metrics running in a new thread + new Thread(new Runnable() { + public void run() { + try { + // create a new metrics object + Metrics metrics = new Metrics(); + + // 'this' in this context is the Plugin object + metrics.beginMeasuringPlugin(thisPlugin); + } + catch (IOException e) { + System.out.println("Failed to submit stats."); + } + } + }).start(); + } + } + + /** + * Get profile of the player. + *
+ * This function is designed for API usage. + * + * @param player Player whose profile to get + * @return the PlayerProfile object + */ + public PlayerProfile getPlayerProfile(Player player) { + return Users.getProfile(player); + } + + /** + * Check the XP of a player. + *
+ * This function is designed for API usage. + * + * @param player + * @param skillType + */ + public void checkXp(Player player, SkillType skillType) { + if (skillType == SkillType.ALL) { + Skills.XpCheckAll(player); + } + else { + Skills.XpCheckSkill(skillType, player); + } + } + + /** + * Check if two players are in the same party. + *
+ * This function is designed for API usage. + * + * @param playera The first player to check + * @param playerb The second player to check + * @return true if the two players are in the same party, false otherwise + */ + public boolean inSameParty(Player playera, Player playerb) { + if (Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()) { + if (Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())) { + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + /** + * Get a list of all current party names. + *
+ * This function is designed for API usage. + * + * @return the list of parties. + */ + public ArrayList getParties() { + String location = "plugins/mcMMO/mcmmo.users"; + ArrayList parties = new ArrayList(); + + try { + + //Open the users file + FileReader file = new FileReader(location); + BufferedReader in = new BufferedReader(file); + String line = ""; + + while((line = in.readLine()) != null) { + String[] character = line.split(":"); + String theparty = null; + + //Party + if (character.length > 3) { + theparty = character[3]; + } + + if (!parties.contains(theparty)) { + parties.add(theparty); + } + } + in.close(); + } + catch (Exception e) { + log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e); + } + return parties; + } + + /** + * Get the name of the party a player is in. + *
+ * This function is designed for API usage. + * + * @param player The player to check the party name of + * @return the name of the player's party + */ + public static String getPartyName(Player player) { + PlayerProfile PP = Users.getProfile(player); + return PP.getParty(); + } + + /** + * Checks if a player is in a party. + *
+ * This function is designed for API usage. + * + * @param player The player to check + * @return true if the player is in a party, false otherwise + */ + public static boolean inParty(Player player) { + PlayerProfile PP = Users.getProfile(player); + return PP.inParty(); + } + + /** + * Things to be run when the plugin is disabled. + */ + public void onDisable() { + + //Make sure to save player information if the server shuts down + for(Player x : Bukkit.getOnlinePlayers()) { + Users.getProfile(x).save(); + } + + Bukkit.getServer().getScheduler().cancelTasks(this); //This removes our tasks + + System.out.println("mcMMO was disabled."); //How informative! + } + + private void registerCommands() { + //Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands) + //Skills commands + aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics"); + aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery"); + aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes"); + aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation"); + aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing"); + aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism"); + aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining"); + aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair"); + aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords"); + aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming"); + aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed"); + aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting"); + + + //Register commands + //Skills commands + getCommand("acrobatics").setExecutor(new AcrobaticsCommand()); + getCommand("archery").setExecutor(new ArcheryCommand()); + getCommand("axes").setExecutor(new AxesCommand()); + getCommand("excavation").setExecutor(new ExcavationCommand()); + getCommand("fishing").setExecutor(new FishingCommand()); + getCommand("herbalism").setExecutor(new HerbalismCommand()); + getCommand("mining").setExecutor(new MiningCommand()); + getCommand("repair").setExecutor(new RepairCommand()); + getCommand("swords").setExecutor(new SwordsCommand()); + getCommand("taming").setExecutor(new TamingCommand()); + getCommand("unarmed").setExecutor(new UnarmedCommand()); + getCommand("woodcutting").setExecutor(new WoodcuttingCommand()); + + //Mc* commands + if(LoadProperties.mcremoveEnable) getCommand("mcremove").setExecutor(new McremoveCommand()); + if(LoadProperties.mcabilityEnable) getCommand("mcability").setExecutor(new McabilityCommand()); + if(LoadProperties.mccEnable) getCommand("mcc").setExecutor(new MccCommand()); + if(LoadProperties.mcgodEnable) getCommand("mcgod").setExecutor(new McgodCommand()); + if(LoadProperties.mcmmoEnable) getCommand("mcmmo").setExecutor(new McmmoCommand()); + if(LoadProperties.mcrefreshEnable) getCommand("mcrefresh").setExecutor(new McrefreshCommand(this)); + if(LoadProperties.mctopEnable) getCommand("mctop").setExecutor(new MctopCommand()); + + //Party commands + if(LoadProperties.acceptEnable) getCommand("accept").setExecutor(new AcceptCommand()); + if(LoadProperties.aEnable) getCommand("a").setExecutor(new ACommand()); + if(LoadProperties.inviteEnable) getCommand("invite").setExecutor(new InviteCommand(this)); + if(LoadProperties.partyEnable) getCommand("party").setExecutor(new PartyCommand()); + if(LoadProperties.pEnable) getCommand("p").setExecutor(new PCommand()); + if(LoadProperties.ptpEnable) getCommand("ptp").setExecutor(new PtpCommand(this)); + + //Other commands + if(LoadProperties.addxpEnable) getCommand("addxp").setExecutor(new AddxpCommand(this)); + if(LoadProperties.addlevelsEnable) getCommand("addlevels").setExecutor(new AddlevelsCommand(this)); + if(LoadProperties.mmoeditEnable) getCommand("mmoedit").setExecutor(new MmoeditCommand(this)); + getCommand("mmoupdate").setExecutor(new MmoupdateCommand()); + if(LoadProperties.mcstatsEnable) getCommand("mcstats").setExecutor(new McstatsCommand()); + if(LoadProperties.inspectEnable) getCommand("inspect").setExecutor(new InspectCommand(this)); + if(LoadProperties.xprateEnable) getCommand("xprate").setExecutor(new XprateCommand()); + + //Spout commands + getCommand("mchud").setExecutor(new MchudCommand()); + if(LoadProperties.xplockEnable) getCommand("xplock").setExecutor(new XplockCommand()); + + } + + /* + * It is important to always assume that you are updating from the lowest possible version. + * Thus, every block of updater code should be complete and self-contained; finishing all + * SQL transactions and closing all file handlers, such that the next block of updater code + * if called will handle updating as expected. + */ + public void updateFrom(int age) { + //No updater code needed, just update the version. + if(age == -1) { + updateVersion(); + return; + } + //Updater code from age 1 goes here + if(age <= 1) { + //Since age 1 is an example for now, we will just let it do nothing. + + } + //If we are updating from age 1 but we need more to reach age 2, this will run too. + if(age <= 2) { + + } + updateVersion(); + } + + public void updateVersion() { + try { + versionFile.createNewFile(); + BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile)); + vout.write(this.getDescription().getVersion()); + vout.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } catch (SecurityException ex) { + ex.printStackTrace(); + } + } + + public String readVersion() { + byte[] buffer = new byte[(int) versionFile.length()]; + BufferedInputStream f = null; + try { + f = new BufferedInputStream(new FileInputStream(versionFile)); + f.read(buffer); + } catch (FileNotFoundException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (f != null) try { f.close(); } catch (IOException ignored) { } + } + + return new String(buffer); + } + + /* + * Boilerplate Custom Config Stuff + */ + + private FileConfiguration treasuresConfig = null; + private File treasuresConfigFile = null; + + public void reloadTreasuresConfig() { + if (treasuresConfigFile == null) { + treasuresConfigFile = new File(getDataFolder(), "treasures.yml"); + } + treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile); + + // Look for defaults in the jar + InputStream defConfigStream = getResource("treasures.yml"); + if (defConfigStream != null) { + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); + treasuresConfig.setDefaults(defConfig); + } + } + + public FileConfiguration getTreasuresConfig() { + if (treasuresConfig == null) { + reloadTreasuresConfig(); + } + return treasuresConfig; + } + + public void saveTreasuresConfig() { + if (treasuresConfig == null || treasuresConfigFile == null) { + return; + } + try { + treasuresConfig.save(treasuresConfigFile); + } catch (IOException ex) { + Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex); + } + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/skills/BlastMining.java b/src/main/java/com/gmail/nossr50/skills/BlastMining.java index 10eb09a6b..334b2a864 100644 --- a/src/main/java/com/gmail/nossr50/skills/BlastMining.java +++ b/src/main/java/com/gmail/nossr50/skills/BlastMining.java @@ -10,8 +10,8 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; +import com.gmail.nossr50.BlockChecks; import com.gmail.nossr50.Users; -import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.SkillType; @@ -89,7 +89,7 @@ public class BlastMining{ while(iterator.hasNext()) { Block temp = iterator.next(); - if(m.isOre(temp)) + if(BlockChecks.isOre(temp.getType())) ores.add(temp); else debris.add(temp);