From 7a549ce211dd7a440fead859b1128e8c2d3a6c32 Mon Sep 17 00:00:00 2001
From: NuclearW
Date: Thu, 8 Mar 2012 13:22:14 -0500
Subject: [PATCH 1/9] Return after we cancel an event For EntityDamageByEntity
and EntityDamage
---
.../com/gmail/nossr50/listeners/mcEntityListener.java | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java
index d753a6f16..55e1dc535 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java
@@ -60,8 +60,10 @@ public class mcEntityListener implements Listener
{
if(!defender.getWorld().getPVP())
return;
- if(Party.getInstance().inSameParty((Player)defender, (Player)attacker))
+ if(Party.getInstance().inSameParty((Player)defender, (Player)attacker)) {
event.setCancelled(true);
+ return;
+ }
}
//Make sure defender is not invincible
@@ -91,8 +93,10 @@ public class mcEntityListener implements Listener
*/
Player player = (Player) entity;
PlayerProfile PP = Users.getProfile(player);
- if(PP.getGodMode())
- event.setCancelled(true);
+ if(PP.getGodMode()) {
+ event.setCancelled(true);
+ return;
+ }
if(!m.isInvincible(player, event))
{
From 714f829f3edabd43ac5656c3ec15fcb0489fb3b6 Mon Sep 17 00:00:00 2001
From: TheYeti
Date: Thu, 8 Mar 2012 11:33:27 -0800
Subject: [PATCH 2/9] Fix for CraftOfflinePlayer in Taming yet again
---
Changelog.txt | 1 +
src/main/java/com/gmail/nossr50/skills/Taming.java | 10 +++++++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/Changelog.txt b/Changelog.txt
index 9aab4bd56..07bfcdf0f 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -16,6 +16,7 @@ Version 2.0.00-dev
= Fixed issue with Blast Mining not seeing TNT for detonation due to snow
! Changed Call of the Wild to activate on left-click rather than right-click
! Changed Blast Mining to track based on Entity ID vs. Location
+ = Fix Taming to hopefully properly handle offline players....again
Version 1.3.02
+ Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them
diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java
index 9dabaf404..152091cdc 100644
--- a/src/main/java/com/gmail/nossr50/skills/Taming.java
+++ b/src/main/java/com/gmail/nossr50/skills/Taming.java
@@ -1,6 +1,7 @@
package com.gmail.nossr50.skills;
import org.bukkit.Material;
+import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@@ -103,7 +104,14 @@ public class Taming
{
DamageCause cause = event.getCause();
Wolf wolf = (Wolf) event.getEntity();
- Player master = (Player) wolf.getOwner();
+ Player master;
+ if ( wolf.getOwner() instanceof Player ) {
+ master = (Player) wolf.getOwner();
+ }
+ else {
+ OfflinePlayer oMaster = (OfflinePlayer) wolf.getOwner();
+ master = (Player) oMaster.getPlayer();
+ }
int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING);
switch(cause)
From 88ab232ccdd77574f78a8cd79fb7a00bd944337e Mon Sep 17 00:00:00 2001
From: TheYeti
Date: Thu, 8 Mar 2012 12:11:09 -0800
Subject: [PATCH 3/9] Undo Taming fix, attempt fix of block interact NPE
---
Changelog.txt | 2 +-
.../com/gmail/nossr50/listeners/mcPlayerListener.java | 8 +++++++-
src/main/java/com/gmail/nossr50/skills/Taming.java | 9 +--------
3 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/Changelog.txt b/Changelog.txt
index 07bfcdf0f..3b4e5f3fe 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -16,7 +16,7 @@ Version 2.0.00-dev
= Fixed issue with Blast Mining not seeing TNT for detonation due to snow
! Changed Call of the Wild to activate on left-click rather than right-click
! Changed Blast Mining to track based on Entity ID vs. Location
- = Fix Taming to hopefully properly handle offline players....again
+ = Attempted fix of block interaction returning NPE's
Version 1.3.02
+ Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
index d716aa965..c57bccad3 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
@@ -156,7 +156,13 @@ public class mcPlayerListener implements Listener
Action action = event.getAction();
Block block = event.getClickedBlock();
ItemStack is = player.getItemInHand();
- Material mat = block.getType();
+ Material mat;
+ if (block.equals(null)) {
+ mat = Material.AIR;
+ }
+ else {
+ mat = block.getType();
+ }
/*
* Ability checks
diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java
index 152091cdc..093c87286 100644
--- a/src/main/java/com/gmail/nossr50/skills/Taming.java
+++ b/src/main/java/com/gmail/nossr50/skills/Taming.java
@@ -104,14 +104,7 @@ public class Taming
{
DamageCause cause = event.getCause();
Wolf wolf = (Wolf) event.getEntity();
- Player master;
- if ( wolf.getOwner() instanceof Player ) {
- master = (Player) wolf.getOwner();
- }
- else {
- OfflinePlayer oMaster = (OfflinePlayer) wolf.getOwner();
- master = (Player) oMaster.getPlayer();
- }
+ Player master = (Player) wolf.getOwner();
int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING);
switch(cause)
From e9e7d462f7234a517abb12455a5d6debd1cd1df6 Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 16:17:57 -0500
Subject: [PATCH 4/9] 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);
From 9eb5535c75a1ee8dfcce9cb6f72b9642af094513 Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 16:30:50 -0500
Subject: [PATCH 5/9] Fixed the NPE PlayerInteractEvent.
---
.../java/com/gmail/nossr50/BlockChecks.java | 120 ++++++++++++++++++
src/main/java/com/gmail/nossr50/Combat.java | 8 +-
.../nossr50/listeners/mcPlayerListener.java | 2 +-
3 files changed, 125 insertions(+), 5 deletions(-)
create mode 100644 src/main/java/com/gmail/nossr50/BlockChecks.java
diff --git a/src/main/java/com/gmail/nossr50/BlockChecks.java b/src/main/java/com/gmail/nossr50/BlockChecks.java
new file mode 100644
index 000000000..022365eb1
--- /dev/null
+++ b/src/main/java/com/gmail/nossr50/BlockChecks.java
@@ -0,0 +1,120 @@
+package com.gmail.nossr50;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+
+import com.gmail.nossr50.config.LoadProperties;
+
+public class BlockChecks {
+
+ /**
+ * Checks to see if a block type awards XP.
+ *
+ * @param material {@link 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;
+ }
+ }
+
+ /**
+ * Check if a block should allow for the activation of abilities.
+ *
+ * @param material Type of {@link Block} to check
+ * @return true if the block should allow ability activation, false otherwise
+ */
+ 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:
+ return false;
+
+ default:
+ break;
+ }
+
+ if (Material.getMaterial(LoadProperties.anvilID).equals(material)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+
+ /**
+ * Check if a block type is an ore.
+ *
+ * @param material The type of {@link Block} to check
+ * @return true if the Block is an ore, false otherwise
+ */
+ public static boolean isOre(Material material) {
+ switch (material) {
+ case COAL_ORE:
+ case DIAMOND_ORE:
+ case GLOWING_REDSTONE_ORE:
+ case GOLD_ORE:
+ case IRON_ORE:
+ case LAPIS_ORE:
+ case REDSTONE_ORE:
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java
index 45b0f08d2..daba5777b 100644
--- a/src/main/java/com/gmail/nossr50/Combat.java
+++ b/src/main/java/com/gmail/nossr50/Combat.java
@@ -99,16 +99,16 @@ public class Combat {
}
else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().taming(attacker) && targetType.equals(EntityType.WOLF)) {
Wolf wolf = (Wolf) target;
- String message = "Combat.BeastLore" + " ";
+ String message = mcLocale.getString("Combat.BeastLore") + " ";
int health = wolf.getHealth();
event.setCancelled(true);
if (wolf.isTamed()) {
- message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)}) + " ");
- message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health}));
+ message = message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)}) + " ");
+ message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health}));
}
else {
- message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health}));
+ message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health}));
}
attacker.sendMessage(message);
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
index a913ed1bf..d3e5feeab 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
@@ -158,7 +158,7 @@ public class mcPlayerListener implements Listener
Block block = event.getClickedBlock();
ItemStack is = player.getItemInHand();
Material mat;
- if (block.equals(null)) {
+ if (block == null) {
mat = Material.AIR;
}
else {
From 052e3cd99769c601da17d1b34e413907898ce8fe Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 16:55:43 -0500
Subject: [PATCH 6/9] More cleanup.
---
src/main/java/com/gmail/nossr50/mcMMO.java | 219 +++++++++++++-----
.../java/com/gmail/nossr50/skills/Taming.java | 1 -
2 files changed, 158 insertions(+), 62 deletions(-)
diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java
index f99e09008..e2cb223fe 100644
--- a/src/main/java/com/gmail/nossr50/mcMMO.java
+++ b/src/main/java/com/gmail/nossr50/mcMMO.java
@@ -313,16 +313,19 @@ public class mcMMO extends JavaPlugin {
public void onDisable() {
//Make sure to save player information if the server shuts down
- for(Player x : Bukkit.getOnlinePlayers()) {
+ 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!
}
-
+
+ /**
+ * Register the commands.
+ */
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");
@@ -337,8 +340,7 @@ public class mcMMO extends JavaPlugin {
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());
@@ -353,129 +355,224 @@ public class mcMMO extends JavaPlugin {
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());
-
+
+ //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());
+ }
+
+ if (LoadProperties.mcstatsEnable) {
+ getCommand("mcstats").setExecutor(new McstatsCommand());
+ }
+
//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));
-
+ 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));
+ 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));
+ }
+
+ if (LoadProperties.inspectEnable) {
+ getCommand("inspect").setExecutor(new InspectCommand(this));
+ }
+
+ if (LoadProperties.xprateEnable) {
+ getCommand("xprate").setExecutor(new XprateCommand());
+ }
+
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
+ if (LoadProperties.xplockEnable) {
+ getCommand("xplock").setExecutor(new XplockCommand());
+ }
+
getCommand("mchud").setExecutor(new MchudCommand());
- if(LoadProperties.xplockEnable) getCommand("xplock").setExecutor(new XplockCommand());
-
}
- /*
+ /**
+ * Update mcMMO from a given version
+ *
* 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.
+ *
+ * @param age Specifies which updater code to run
*/
public void updateFrom(int age) {
+
//No updater code needed, just update the version.
- if(age == -1) {
+ if (age == -1) {
updateVersion();
return;
}
+
//Updater code from age 1 goes here
- if(age <= 1) {
+ 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) {
-
+ if (age <= 2) {
+
}
updateVersion();
}
-
+
+ /**
+ * Update the version file.
+ */
public void updateVersion() {
try {
versionFile.createNewFile();
BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
vout.write(this.getDescription().getVersion());
vout.close();
- } catch (IOException ex) {
+ }
+ catch (IOException ex) {
ex.printStackTrace();
- } catch (SecurityException ex) {
+ }
+ catch (SecurityException ex) {
ex.printStackTrace();
}
}
+ /**
+ * Get the current mcMMO version.
+ *
+ * @return a String representing the current mcMMO version
+ */
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) { }
}
-
+ 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;
-
+
+ /**
+ * Reload the Treasures.yml file.
+ */
public void reloadTreasuresConfig() {
if (treasuresConfigFile == null) {
- treasuresConfigFile = new File(getDataFolder(), "treasures.yml");
+ treasuresConfigFile = new File(getDataFolder(), "treasures.yml");
}
+
treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile);
-
- // Look for defaults in the jar
- InputStream defConfigStream = getResource("treasures.yml");
+ InputStream defConfigStream = getResource("treasures.yml"); // Look for defaults in the jar
+
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
treasuresConfig.setDefaults(defConfig);
}
}
-
+
+ /**
+ * Get the Treasures config information.
+ *
+ * @return the configuration object for treasures.yml
+ */
public FileConfiguration getTreasuresConfig() {
if (treasuresConfig == null) {
reloadTreasuresConfig();
}
+
return treasuresConfig;
}
-
+
+ /**
+ * Save the Treasures config informtion.
+ */
public void saveTreasuresConfig() {
if (treasuresConfig == null || treasuresConfigFile == null) {
- return;
+ return;
}
+
try {
treasuresConfig.save(treasuresConfigFile);
- } catch (IOException ex) {
- Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex);
+ }
+ catch (IOException ex) {
+ log.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/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java
index 093c87286..5eb39a21b 100644
--- a/src/main/java/com/gmail/nossr50/skills/Taming.java
+++ b/src/main/java/com/gmail/nossr50/skills/Taming.java
@@ -1,7 +1,6 @@
package com.gmail.nossr50.skills;
import org.bukkit.Material;
-import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
From bce418bee89db1b2c65cbaf32164e0b133c42b16 Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 17:26:13 -0500
Subject: [PATCH 7/9] Cleanup.
---
src/main/java/com/gmail/nossr50/Users.java | 182 ++++++++++--------
.../java/com/gmail/nossr50/mcPermissions.java | 79 +++++---
2 files changed, 159 insertions(+), 102 deletions(-)
diff --git a/src/main/java/com/gmail/nossr50/Users.java b/src/main/java/com/gmail/nossr50/Users.java
index 699a20e0b..6a586253a 100644
--- a/src/main/java/com/gmail/nossr50/Users.java
+++ b/src/main/java/com/gmail/nossr50/Users.java
@@ -1,114 +1,136 @@
package com.gmail.nossr50;
import java.io.*;
-import java.util.Properties;
import java.util.logging.Logger;
import java.util.HashMap;
-import org.bukkit.entity.*;
+import org.bukkit.entity.Player;
import com.gmail.nossr50.datatypes.PlayerProfile;
-
public class Users {
private static volatile Users instance;
protected static final Logger log = Logger.getLogger("Minecraft");
+
String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
String directory = "plugins/mcMMO/FlatFileStuff/";
String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
-
- //public static ArrayList players;
+
public static HashMap players = new HashMap();
- private Properties properties = new Properties();
-
- //To load
- public void load() throws IOException {
- properties.load(new FileInputStream(location));
- }
- //To save
- public void save()
- {
- try
- {
- properties.store(new FileOutputStream(location), null);
- }catch(IOException ex) {
- }
- }
-
- public void loadUsers()
- {
- new File(directory).mkdir();
- new File(directoryb).mkdir();
+
+ /**
+ * Load users.
+ */
+ public void loadUsers() {
+ new File(directory).mkdir();
+ new File(directoryb).mkdir();
File theDir = new File(location);
- if(!theDir.exists())
- {
- try {
- FileWriter writer = new FileWriter(theDir);
- writer.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
+
+ if (!theDir.exists()) {
+ try {
+ FileWriter writer = new FileWriter(theDir);
+ writer.close();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
-
- public static void addUser(Player player)
- {
- if(!players.containsKey(player))
- players.put(player, new PlayerProfile(player.getName()));
+ /**
+ * Add a new user.
+ *
+ * @param player The player to create a user record for
+ */
+ public static void addUser(Player player) {
+ if (!players.containsKey(player)) {
+ players.put(player, new PlayerProfile(player.getName()));
+ }
}
- public static void clearUsers()
- {
- players.clear();
+
+ /**
+ * Clear all users.
+ */
+ public static void clearUsers() {
+ players.clear();
}
- public static HashMap getProfiles(){
- return players;
+
+ /**
+ * Get all PlayerProfiles.
+ *
+ * @return a HashMap containing the PlayerProfile of everyone in the database
+ */
+ public static HashMap getProfiles() {
+ return players;
}
-
- public static void removeUser(Player player)
- {
- //Only remove PlayerProfile if user is offline and we have it in memory
- if(!player.isOnline() && players.containsKey(player))
- {
- players.get(player).save();
- players.remove(player);
- }
+
+ /**
+ * Remove a user from the database.
+ *
+ * @param player The player to remove
+ */
+ public static void removeUser(Player player) {
+
+ //Only remove PlayerProfile if user is offline and we have it in memory
+ if (!player.isOnline() && players.containsKey(player)) {
+ players.get(player).save();
+ players.remove(player);
+ }
}
-
- public static void removeUserByName(String playerName)
- {
+
+ /**
+ * Remove a user from the DB by name.
+ *
+ * @param playerName The name of the player to remove
+ */
+ public static void removeUserByName(String playerName) {
Player target = null;
- for(Player player : players.keySet())
- {
+
+ for (Player player : players.keySet()) {
PlayerProfile PP = players.get(player);
- if(PP.getPlayerName().equals(playerName))
- {
+
+ if (PP.getPlayerName().equals(playerName)) {
target = player;
}
}
-
+
players.remove(target);
}
- public static PlayerProfile getProfile(Player player){
- if(players.get(player) != null)
- return players.get(player);
- else
- {
- players.put(player, new PlayerProfile(player.getName()));
- return players.get(player);
- }
+ /**
+ * Get the profile of an online player.
+ *
+ * @param player The player whose profile to retrieve
+ * @return the player's profile
+ */
+ public static PlayerProfile getProfile(Player player) {
+ if(players.get(player) != null) {
+ return players.get(player);
+ }
+ else {
+ players.put(player, new PlayerProfile(player.getName()));
+ return players.get(player);
+ }
}
-
- public static PlayerProfile getOfflineProfile(String playerName){
+
+ /**
+ * Get the profile of an offline player.
+ *
+ * @param playerName Name of the player whose profile to retrieve
+ * @return the player's profile
+ */
+ public static PlayerProfile getOfflineProfile(String playerName) {
return new PlayerProfile(playerName, false);
}
-
- public static Users getInstance() {
- if (instance == null) {
- instance = new Users();
- }
- return instance;
- }
-}
\ No newline at end of file
+ /**
+ * Get an instance of this class.
+ *
+ * @return an instance of this class
+ */
+ public static Users getInstance() {
+ if (instance == null) {
+ instance = new Users();
+ }
+ return instance;
+ }
+}
diff --git a/src/main/java/com/gmail/nossr50/mcPermissions.java b/src/main/java/com/gmail/nossr50/mcPermissions.java
index 56a8afb5c..e4357800c 100644
--- a/src/main/java/com/gmail/nossr50/mcPermissions.java
+++ b/src/main/java/com/gmail/nossr50/mcPermissions.java
@@ -2,118 +2,153 @@ package com.gmail.nossr50;
import org.bukkit.entity.Player;
-public class mcPermissions
-{
+public class mcPermissions {
private static volatile mcPermissions instance;
-
+
public boolean permission(Player player, String perm) {
return player.hasPermission(perm);
}
- public boolean admin(Player player){
+
+ public boolean admin(Player player) {
return player.hasPermission("mcmmo.admin");
}
+
public boolean mcrefresh(Player player) {
return player.hasPermission("mcmmo.tools.mcrefresh");
}
+
public boolean mcremove(Player player) {
return player.hasPermission("mcmmo.tools.mcremove");
}
+
public boolean mmoedit(Player player) {
return player.hasPermission("mcmmo.tools.mmoedit");
}
- public boolean herbalismAbility(Player player){
+
+ public boolean herbalismAbility(Player player) {
return player.hasPermission("mcmmo.ability.herbalism");
}
- public boolean excavationAbility(Player player){
+
+ public boolean excavationAbility(Player player) {
return player.hasPermission("mcmmo.ability.excavation");
}
- public boolean unarmedAbility(Player player){
- return player.hasPermission("mcmmo.ability.unarmed");
+
+ public boolean unarmedAbility(Player player) {
+ return player.hasPermission("mcmmo.ability.unarmed");
}
- public boolean chimaeraWing(Player player){
- return player.hasPermission("mcmmo.item.chimaerawing");
+
+ public boolean chimaeraWing(Player player) {
+ return player.hasPermission("mcmmo.item.chimaerawing");
}
- public boolean miningAbility(Player player){
- return player.hasPermission("mcmmo.ability.mining");
+
+ public boolean miningAbility(Player player) {
+ return player.hasPermission("mcmmo.ability.mining");
}
- public boolean axesAbility(Player player){
- return player.hasPermission("mcmmo.ability.axes");
+
+ public boolean axesAbility(Player player) {
+ return player.hasPermission("mcmmo.ability.axes");
}
- public boolean swordsAbility(Player player){
- return player.hasPermission("mcmmo.ability.swords");
+
+ public boolean swordsAbility(Player player) {
+ return player.hasPermission("mcmmo.ability.swords");
}
+
public boolean woodCuttingAbility(Player player) {
- return player.hasPermission("mcmmo.ability.woodcutting");
+ return player.hasPermission("mcmmo.ability.woodcutting");
}
+
public boolean mcgod(Player player) {
- return player.hasPermission("mcmmo.tools.mcgod");
+ return player.hasPermission("mcmmo.tools.mcgod");
}
+
public boolean motd(Player player) {
return player.hasPermission("mcmmo.motd");
}
+
public boolean mcAbility(Player player) {
return player.hasPermission("mcmmo.commands.ability");
}
+
public boolean partyChat(Player player) {
return player.hasPermission("mcmmo.chat.partychat");
}
+
public boolean partyLock(Player player) {
return player.hasPermission("mcmmo.chat.partylock");
}
+
public boolean partyTeleport(Player player) {
return player.hasPermission("mcmmo.commands.ptp");
}
+
public boolean inspect(Player player) {
return player.hasPermission("mcmmo.commands.inspect");
}
+
public boolean party(Player player) {
return player.hasPermission("mcmmo.commands.party");
}
+
public boolean adminChat(Player player) {
return player.hasPermission("mcmmo.chat.adminchat");
}
+
public static mcPermissions getInstance() {
- if (instance == null) {
- instance = new mcPermissions();
- }
- return instance;
+ if (instance == null) {
+ instance = new mcPermissions();
+ }
+
+ return instance;
}
+
public boolean taming(Player player) {
return player.hasPermission("mcmmo.skills.taming");
}
+
public boolean mining(Player player) {
return player.hasPermission("mcmmo.skills.mining");
}
+
public boolean blastMining(Player player) {
return player.hasPermission("mcmmo.skills.blastmining");
}
+
public boolean fishing(Player player) {
return player.hasPermission("mcmmo.skills.fishing");
}
+
public boolean woodcutting(Player player) {
return player.hasPermission("mcmmo.skills.woodcutting");
}
+
public boolean repair(Player player) {
return player.hasPermission("mcmmo.skills.repair");
}
+
public boolean unarmed(Player player) {
return player.hasPermission("mcmmo.skills.unarmed");
}
+
public boolean archery(Player player) {
return player.hasPermission("mcmmo.skills.archery");
}
+
public boolean herbalism(Player player) {
return player.hasPermission("mcmmo.skills.herbalism");
}
+
public boolean excavation(Player player) {
return player.hasPermission("mcmmo.skills.excavation");
}
+
public boolean swords(Player player) {
return player.hasPermission("mcmmo.skills.swords");
}
+
public boolean axes(Player player) {
return player.hasPermission("mcmmo.skills.axes");
}
+
public boolean acrobatics(Player player) {
return player.hasPermission("mcmmo.skills.acrobatics");
}
From d393e4d124c928a403c882e92513de22a26d089c Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 18:09:31 -0500
Subject: [PATCH 8/9] Cleanup & a few memory leak fixes.
---
Changelog.txt | 4 +-
.../java/com/gmail/nossr50/BlockChecks.java | 47 +-
.../nossr50/listeners/mcBlockListener.java | 490 +++++++++---------
3 files changed, 288 insertions(+), 253 deletions(-)
diff --git a/Changelog.txt b/Changelog.txt
index 3b4e5f3fe..3e394d301 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -14,9 +14,11 @@ Version 2.0.00-dev
+ Added bookshelves to list of blocks that don't trigger abilities.
= Fixed ClassCastException from Taming preventDamage checks
= Fixed issue with Blast Mining not seeing TNT for detonation due to snow
+ = Fixed issue with block interaction returning NPEs
+ = Fixed issue where every block broken had a mining check applied
+ = Fixed issue where blocks weren't being removed from the watchlist
! Changed Call of the Wild to activate on left-click rather than right-click
! Changed Blast Mining to track based on Entity ID vs. Location
- = Attempted fix of block interaction returning NPE's
Version 1.3.02
+ Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them
diff --git a/src/main/java/com/gmail/nossr50/BlockChecks.java b/src/main/java/com/gmail/nossr50/BlockChecks.java
index 022365eb1..5b9c5d7cd 100644
--- a/src/main/java/com/gmail/nossr50/BlockChecks.java
+++ b/src/main/java/com/gmail/nossr50/BlockChecks.java
@@ -10,7 +10,7 @@ public class BlockChecks {
/**
* Checks to see if a block type awards XP.
*
- * @param material {@link Block} type to check
+ * @param material The type of Block to check
* @return true if the block type awards XP, false otherwise
*/
public static boolean shouldBeWatched(Material material) {
@@ -58,7 +58,7 @@ public class BlockChecks {
/**
* Check if a block should allow for the activation of abilities.
*
- * @param material Type of {@link Block} to check
+ * @param material The type of Block to check
* @return true if the block should allow ability activation, false otherwise
*/
public static boolean abilityBlockCheck(Material material) {
@@ -99,7 +99,7 @@ public class BlockChecks {
/**
* Check if a block type is an ore.
*
- * @param material The type of {@link Block} to check
+ * @param material The type of Block to check
* @return true if the Block is an ore, false otherwise
*/
public static boolean isOre(Material material) {
@@ -117,4 +117,45 @@ public class BlockChecks {
return false;
}
}
+
+ /**
+ * Adds the block the the appropriate watchlist.
+ *
+ * @param material the type of Block to watch
+ * @param block the Block to watch
+ * @param plugin mcMMO plugin instance
+ */
+ public static void watchBlock(Material material, Block block, mcMMO plugin) {
+
+ boolean addToChangeQueue = true;
+
+ switch (material) {
+ case CACTUS:
+ case GLOWING_REDSTONE_ORE:
+ case JACK_O_LANTERN:
+ case LOG:
+ case PUMPKIN:
+ case REDSTONE_ORE:
+ case SUGAR_CANE_BLOCK:
+ case VINE:
+ addToChangeQueue = false; //We don't want these added to changeQueue - these use their data
+ plugin.misc.blockWatchList.add(block);
+ break;
+
+ case BROWN_MUSHROOM:
+ case RED_MUSHROOM:
+ case RED_ROSE:
+ case YELLOW_FLOWER:
+ case WATER_LILY:
+ addToChangeQueue = false; //We don't want these added to chaneQueue - they're already being added to the fast queue
+ plugin.fastChangeQueue.push(block);
+ break;
+
+ default:
+ break;
+ }
+
+ if(addToChangeQueue)
+ plugin.changeQueue.push(block);
+ }
}
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
index 5eb93c4a7..22ed17372 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
@@ -31,269 +31,261 @@ import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.skills.*;
import com.gmail.nossr50.events.FakeBlockBreakEvent;
-public class mcBlockListener implements Listener
-{
+public class mcBlockListener implements Listener {
private final mcMMO plugin;
- public mcBlockListener(final mcMMO plugin)
- {
+ public mcBlockListener(final mcMMO plugin) {
this.plugin = plugin;
}
-
+
+ /**
+ * Monitor BlockPlace events.
+ *
+ * @param event The event to monitor
+ */
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onBlockPlace(BlockPlaceEvent event)
- {
- //Setup some basic variables
- Block block;
- Player player = event.getPlayer();
-
- //When blocks are placed on snow this event reports the wrong block.
- if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getType().equals(Material.SNOW))
- block = event.getBlockAgainst();
- else
- block = event.getBlock();
-
- int id = block.getTypeId();
- Material mat = block.getType();
-
- //Check if the blocks placed should be monitored so they do not give out XP in the future
- if(BlockChecks.shouldBeWatched(mat))
- {
- //Only needed for blocks that use their block data (wood, pumpkins, etc.)
- boolean shouldBeChanged = true;
-
- switch(mat)
- {
- case CACTUS:
- case GLOWING_REDSTONE_ORE:
- case JACK_O_LANTERN:
- case LOG:
- case PUMPKIN:
- case REDSTONE_ORE:
- case SUGAR_CANE_BLOCK:
- case VINE:
- shouldBeChanged = false; //We don't want these added to changeQueue
- plugin.misc.blockWatchList.add(block);
- break;
- case BROWN_MUSHROOM:
- case RED_MUSHROOM:
- case RED_ROSE:
- case YELLOW_FLOWER:
- case WATER_LILY:
- plugin.fastChangeQueue.push(block);
- break;
- }
-
- if(shouldBeChanged)
- plugin.changeQueue.push(block);
- }
-
- if(id == LoadProperties.anvilID && LoadProperties.anvilmessages)
- {
- PlayerProfile PP = Users.getProfile(player);
- if(!PP.getPlacedAnvil())
- {
- if(LoadProperties.spoutEnabled)
- {
- SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
- if(sPlayer.isSpoutCraftEnabled())
- sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
- }
- else
- event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
-
- PP.togglePlacedAnvil();
- }
- }
+ public void onBlockPlace(BlockPlaceEvent event) {
+ Block block;
+ Player player = event.getPlayer();
+
+ //When blocks are placed on snow this event reports the wrong block.
+ if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getType().equals(Material.SNOW)) {
+ block = event.getBlockAgainst();
+ }
+ else {
+ block = event.getBlock();
+ }
+
+ int id = block.getTypeId();
+ Material mat = block.getType();
+
+ //Check if the blocks placed should be monitored so they do not give out XP in the future
+ if (BlockChecks.shouldBeWatched(mat)) {
+ BlockChecks.watchBlock(mat, block, plugin);
+ }
+
+ if (id == LoadProperties.anvilID && LoadProperties.anvilmessages) {
+ PlayerProfile PP = Users.getProfile(player);
+
+ if (!PP.getPlacedAnvil()) {
+ if (LoadProperties.spoutEnabled) {
+ SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+
+ if (sPlayer.isSpoutCraftEnabled()) {
+ sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.getMaterial(id));
+ }
+ }
+ else {
+ event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil"));
+ }
+
+ PP.togglePlacedAnvil();
+ }
+ }
}
+ /**
+ * Monitor BlockBreak events.
+ *
+ * @param event The event to monitor
+ */
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onBlockBreak(BlockBreakEvent event)
- {
- Player player = event.getPlayer();
- PlayerProfile PP = Users.getProfile(player);
- Block block = event.getBlock();
- int id = block.getTypeId();
- ItemStack inhand = player.getItemInHand();
-
- if(event instanceof FakeBlockBreakEvent)
- return;
-
- /*
- * HERBALISM
- */
-
- //Green Terra
- if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block)))
- Skills.abilityCheck(player, SkillType.HERBALISM);
-
- //Wheat && Triple drops
- if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
- Herbalism.herbalismProcCheck(block, player, event, plugin);
-
- if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5)
- Herbalism.herbalismProcCheck(block, player, event, plugin);
-
- /*
- * MINING
- */
- if(mcPermissions.getInstance().mining(player))
- {
- if(LoadProperties.miningrequirespickaxe && ItemChecks.isMiningPick(inhand))
- Mining.miningBlockCheck(player, block, plugin);
- else if(!LoadProperties.miningrequirespickaxe)
- Mining.miningBlockCheck(player, block, plugin);
- }
-
- /*
- * WOOD CUTTING
- */
-
- if(mcPermissions.getInstance().woodcutting(player) && id == 17)
- {
- if(LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand))
- WoodCutting.woodcuttingBlockCheck(player, block, plugin);
- else if(!LoadProperties.woodcuttingrequiresaxe)
- WoodCutting.woodcuttingBlockCheck(player, block, plugin);
-
- if(PP.getTreeFellerMode())
- WoodCutting.treeFeller(event, plugin);
- }
-
- /*
- * EXCAVATION
- */
- if(Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 5)
- {
- if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand))
- Excavation.excavationProcCheck(block, player);
- else if(!LoadProperties.excavationRequiresShovel)
- Excavation.excavationProcCheck(block, player);
- }
-
- //Change the byte back when broken
- if(block.getData() == 5 && BlockChecks.shouldBeWatched(block.getType()))
- {
- block.setData((byte) 0);
- if(plugin.misc.blockWatchList.contains(block))
- plugin.misc.blockWatchList.remove(block);
- }
+ public void onBlockBreak(BlockBreakEvent event) {
+ Player player = event.getPlayer();
+ PlayerProfile PP = Users.getProfile(player);
+ Block block = event.getBlock();
+ Material mat = block.getType();
+ ItemStack inhand = player.getItemInHand();
+
+ if(event instanceof FakeBlockBreakEvent) {
+ return;
+ }
+
+ /*
+ * HERBALISM
+ */
+
+ //Green Terra
+ if (PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((mat.equals(Material.CROPS) && block.getData() == (byte) 0x7) || Herbalism.canBeGreenTerra(block))) {
+ Skills.abilityCheck(player, SkillType.HERBALISM);
+ }
+
+ //Wheat && Triple drops
+ if (PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block)) {
+ Herbalism.herbalismProcCheck(block, player, event, plugin);
+ }
+
+ if (mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5) {
+ Herbalism.herbalismProcCheck(block, player, event, plugin);
+ }
+
+ /*
+ * MINING
+ */
+
+ if (mcPermissions.getInstance().mining(player) && Mining.canBeSuperBroken(block)) {
+ if (LoadProperties.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
+ Mining.miningBlockCheck(player, block, plugin);
+ }
+ else if (!LoadProperties.miningrequirespickaxe) {
+ Mining.miningBlockCheck(player, block, plugin);
+ }
+ }
+
+ /*
+ * WOOD CUTTING
+ */
+
+ if(mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) {
+ if (LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
+ WoodCutting.woodcuttingBlockCheck(player, block, plugin);
+ }
+ else if (!LoadProperties.woodcuttingrequiresaxe) {
+ WoodCutting.woodcuttingBlockCheck(player, block, plugin);
+ }
+
+ if (PP.getTreeFellerMode()) {
+ WoodCutting.treeFeller(event, plugin);
+ }
+ }
+
+ /*
+ * EXCAVATION
+ */
+
+ if (Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 0x5)
+ {
+ if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
+ Excavation.excavationProcCheck(block, player);
+ }
+ else if(!LoadProperties.excavationRequiresShovel) {
+ Excavation.excavationProcCheck(block, player);
+ }
+ }
+
+ //Change the byte back when broken
+ if (block.getData() == (byte) 0x5 && BlockChecks.shouldBeWatched(mat)) {
+ block.setData((byte) 0x0);
+ }
+ else if(plugin.misc.blockWatchList.contains(block)) {
+ plugin.misc.blockWatchList.remove(block);
+ }
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockDamage(BlockDamageEvent event)
{
- Player player = event.getPlayer();
- PlayerProfile PP = Users.getProfile(player);
- ItemStack inhand = player.getItemInHand();
- Block block = event.getBlock();
- int id = block.getTypeId();
- Material mat = block.getType();
+ Player player = event.getPlayer();
+ PlayerProfile PP = Users.getProfile(player);
+ ItemStack inhand = player.getItemInHand();
+ Block block = event.getBlock();
+ int id = block.getTypeId();
+ Material mat = block.getType();
- /*
- * ABILITY PREPARATION CHECKS
- */
- if(BlockChecks.abilityBlockCheck(mat))
- {
- if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
- Skills.abilityCheck(player, SkillType.HERBALISM);
- if(PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player))
- Skills.abilityCheck(player, SkillType.WOODCUTTING);
- if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
- Skills.abilityCheck(player, SkillType.MINING);
- if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
- Skills.abilityCheck(player, SkillType.EXCAVATION);
- }
-
- if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW)))
- Skills.abilityCheck(player, SkillType.UNARMED);
-
- /*
- * TREE FELLER STUFF
- */
- if(LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode())
- SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
-
- /*
- * GREEN TERRA STUFF
- */
- if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player))
- Herbalism.greenTerra(player, block);
-
- /*
- * GIGA DRILL BREAKER CHECKS
- */
- if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player))
- {
- if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand))
- {
- event.setInstaBreak(true);
- Excavation.gigaDrillBreaker(player, block);
- }
- else if(!LoadProperties.excavationRequiresShovel)
- {
- event.setInstaBreak(true);
- Excavation.gigaDrillBreaker(player, block);
- }
- }
- /*
- * BERSERK MODE CHECKS
- */
- if(PP.getBerserkMode()
- && m.blockBreakSimulate(block, player, true)
- && player.getItemInHand().getTypeId() == 0
- && (Excavation.canBeGigaDrillBroken(block) || id == 78)
- && mcPermissions.getInstance().unarmedAbility(player))
- {
- event.setInstaBreak(true);
-
- if(LoadProperties.spoutEnabled)
- SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
- }
-
- /*
- * SUPER BREAKER CHECKS
- */
- if(PP.getSuperBreakerMode()
- && Mining.canBeSuperBroken(block)
- && m.blockBreakSimulate(block, player, true)
- && mcPermissions.getInstance().miningAbility(player))
- {
- if(LoadProperties.miningrequirespickaxe)
- {
- if(ItemChecks.isMiningPick(inhand)){
-
- event.setInstaBreak(true);
- Mining.SuperBreakerBlockCheck(player, block, plugin);
- }
- } else {
- event.setInstaBreak(true);
- Mining.SuperBreakerBlockCheck(player, block, plugin);
- }
- }
-
- /*
- * LEAF BLOWER CHECKS
- */
- if(id == 18
- && mcPermissions.getInstance().woodCuttingAbility(player)
- && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100
- && m.blockBreakSimulate(block, player, true))
- {
- if(LoadProperties.woodcuttingrequiresaxe)
- {
- if(ItemChecks.isAxe(inhand)){
- event.setInstaBreak(true);
- WoodCutting.leafBlower(player, block);
- }
- }
- else if(inhand.getTypeId() != 359)
- {
- event.setInstaBreak(true);
- WoodCutting.leafBlower(player, block);
- }
-
- }
+ /*
+ * ABILITY PREPARATION CHECKS
+ */
+ if(BlockChecks.abilityBlockCheck(mat))
+ {
+ if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
+ Skills.abilityCheck(player, SkillType.HERBALISM);
+ if(PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player))
+ Skills.abilityCheck(player, SkillType.WOODCUTTING);
+ if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
+ Skills.abilityCheck(player, SkillType.MINING);
+ if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
+ Skills.abilityCheck(player, SkillType.EXCAVATION);
+ }
+
+ if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW)))
+ Skills.abilityCheck(player, SkillType.UNARMED);
+
+ /*
+ * TREE FELLER STUFF
+ */
+ if(LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode())
+ SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
+
+ /*
+ * GREEN TERRA STUFF
+ */
+ if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player))
+ Herbalism.greenTerra(player, block);
+
+ /*
+ * GIGA DRILL BREAKER CHECKS
+ */
+ if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player))
+ {
+ if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand))
+ {
+ event.setInstaBreak(true);
+ Excavation.gigaDrillBreaker(player, block);
+ }
+ else if(!LoadProperties.excavationRequiresShovel)
+ {
+ event.setInstaBreak(true);
+ Excavation.gigaDrillBreaker(player, block);
+ }
+ }
+ /*
+ * BERSERK MODE CHECKS
+ */
+ if(PP.getBerserkMode()
+ && m.blockBreakSimulate(block, player, true)
+ && player.getItemInHand().getTypeId() == 0
+ && (Excavation.canBeGigaDrillBroken(block) || id == 78)
+ && mcPermissions.getInstance().unarmedAbility(player))
+ {
+ event.setInstaBreak(true);
+
+ if(LoadProperties.spoutEnabled)
+ SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+ }
+
+ /*
+ * SUPER BREAKER CHECKS
+ */
+ if(PP.getSuperBreakerMode()
+ && Mining.canBeSuperBroken(block)
+ && m.blockBreakSimulate(block, player, true)
+ && mcPermissions.getInstance().miningAbility(player))
+ {
+ if(LoadProperties.miningrequirespickaxe)
+ {
+ if(ItemChecks.isMiningPick(inhand)){
+
+ event.setInstaBreak(true);
+ Mining.SuperBreakerBlockCheck(player, block, plugin);
+ }
+ } else {
+ event.setInstaBreak(true);
+ Mining.SuperBreakerBlockCheck(player, block, plugin);
+ }
+ }
+
+ /*
+ * LEAF BLOWER CHECKS
+ */
+ if(id == 18
+ && mcPermissions.getInstance().woodCuttingAbility(player)
+ && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100
+ && m.blockBreakSimulate(block, player, true))
+ {
+ if(LoadProperties.woodcuttingrequiresaxe)
+ {
+ if(ItemChecks.isAxe(inhand)){
+ event.setInstaBreak(true);
+ WoodCutting.leafBlower(player, block);
+ }
+ }
+ else if(inhand.getTypeId() != 359)
+ {
+ event.setInstaBreak(true);
+ WoodCutting.leafBlower(player, block);
+ }
+
+ }
}
@EventHandler
From c3e1cf868192f4e34854de767eb63dbd0813764a Mon Sep 17 00:00:00 2001
From: GJ
Date: Thu, 8 Mar 2012 18:15:14 -0500
Subject: [PATCH 9/9] Another leak...
---
Changelog.txt | 1 +
.../java/com/gmail/nossr50/listeners/mcBlockListener.java | 5 ++---
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Changelog.txt b/Changelog.txt
index 3e394d301..c726c6a29 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -16,6 +16,7 @@ Version 2.0.00-dev
= Fixed issue with Blast Mining not seeing TNT for detonation due to snow
= Fixed issue with block interaction returning NPEs
= Fixed issue where every block broken had a mining check applied
+ = Fixed issue where every block broken had a herbalism check applied
= Fixed issue where blocks weren't being removed from the watchlist
! Changed Call of the Wild to activate on left-click rather than right-click
! Changed Blast Mining to track based on Entity ID vs. Location
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
index 22ed17372..0dccf4a7b 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
@@ -115,7 +115,7 @@ public class mcBlockListener implements Listener {
Herbalism.herbalismProcCheck(block, player, event, plugin);
}
- if (mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5) {
+ if (mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 0x5 && Herbalism.canBeGreenTerra(block)) {
Herbalism.herbalismProcCheck(block, player, event, plugin);
}
@@ -153,8 +153,7 @@ public class mcBlockListener implements Listener {
* EXCAVATION
*/
- if (Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 0x5)
- {
+ if (Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 0x5) {
if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
Excavation.excavationProcCheck(block, player);
}