From e9af0ebdc5d9a9f79fd4ef62f30735c63323241a Mon Sep 17 00:00:00 2001 From: GJ Date: Tue, 15 May 2012 14:21:21 -0400 Subject: [PATCH] Custom tools - modify XP gain from breaking blocks on a per tool basis. --- .../gmail/nossr50/datatypes/PlayerProfile.java | 11 +++++++++++ src/main/java/com/gmail/nossr50/util/Combat.java | 1 - .../java/com/gmail/nossr50/util/ModChecks.java | 16 ++++++++++++++++ src/main/resources/plugin.yml | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java b/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java index 2a0415efc..30f849539 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java +++ b/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java @@ -9,11 +9,14 @@ import java.util.ArrayList; import org.bukkit.GameMode; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent; import com.gmail.nossr50.party.Party; +import com.gmail.nossr50.util.ItemChecks; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.ModChecks; import com.gmail.nossr50.util.Users; import com.gmail.nossr50.mcMMO; @@ -1027,6 +1030,14 @@ public class PlayerProfile { xp += trueBonus; } + if (Config.getInstance().getToolModsEnabled()) { + ItemStack item = player.getItemInHand(); + + if (ItemChecks.isCustomTool(item)) { + xp = (int) (xp * ModChecks.getToolFromItemStack(item).getXpMultiplier()); + } + } + mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerXpGainEvent(player, skillType, xp)); skillsXp.put(skillType, skillsXp.get(skillType) + xp); lastgained = skillType; diff --git a/src/main/java/com/gmail/nossr50/util/Combat.java b/src/main/java/com/gmail/nossr50/util/Combat.java index 64d4fac62..8674389f3 100644 --- a/src/main/java/com/gmail/nossr50/util/Combat.java +++ b/src/main/java/com/gmail/nossr50/util/Combat.java @@ -381,7 +381,6 @@ public class Combat { damageAmount = 1; } - //TODO: Looking at this, I think it's busted. Need to test to confirm. for (Entity entity : target.getNearbyEntities(2.5, 2.5, 2.5)) { if (!(entity instanceof LivingEntity)) { continue; diff --git a/src/main/java/com/gmail/nossr50/util/ModChecks.java b/src/main/java/com/gmail/nossr50/util/ModChecks.java index a5b8a5537..9c059db74 100644 --- a/src/main/java/com/gmail/nossr50/util/ModChecks.java +++ b/src/main/java/com/gmail/nossr50/util/ModChecks.java @@ -22,4 +22,20 @@ public class ModChecks { return false; } + + /** + * Get the custom tool associated with an item. + * + * @param item The item to check + * @return the tool if it exists, null otherwise + */ + public static CustomTool getToolFromItemStack(ItemStack item) { + for (CustomTool tool : LoadCustomTools.getInstance().customTools) { + if (tool.getItemID() == item.getTypeId()) { + return tool; + } + } + + return null; + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e40665b87..6ae656d87 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -45,7 +45,7 @@ commands: aliases: [] description: Make yourself invulnerable mcstats: - aliases: [] + aliases: [/stats] description: Shows your mcMMO stats and xp mcremove: aliases: []