From 1e58c32a5f8317bf2de70baf73ad19d6fc0ea6ab Mon Sep 17 00:00:00 2001 From: GJ Date: Mon, 4 Jun 2012 09:30:51 -0400 Subject: [PATCH] Change XP processing to use a single function. --- .../com/gmail/nossr50/api/ExperienceAPI.java | 2 +- .../commands/general/AddxpCommand.java | 13 ++++--- .../nossr50/listeners/EntityListener.java | 3 +- .../com/gmail/nossr50/runnables/GainXp.java | 3 +- .../nossr50/skills/gathering/Excavation.java | 4 +- .../nossr50/skills/gathering/Fishing.java | 3 +- .../nossr50/skills/gathering/Herbalism.java | 3 +- .../nossr50/skills/gathering/Mining.java | 3 +- .../nossr50/skills/gathering/WoodCutting.java | 6 +-- .../gmail/nossr50/skills/misc/Acrobatics.java | 9 ++--- .../gmail/nossr50/skills/repair/Repair.java | 3 +- .../java/com/gmail/nossr50/util/Skills.java | 37 +++++++++++++------ 12 files changed, 46 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java b/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java index d9ce52a65..4d63d4fea 100644 --- a/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java +++ b/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java @@ -19,7 +19,7 @@ public class ExperienceAPI { Skills.xpCheckAll(player); } else { - Skills.xpCheckSkill(skillType, player); + Skills.xpCheckSkill(skillType, player, Users.getProfile(player)); } } diff --git a/src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java b/src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java index 2277b5553..31f88045d 100644 --- a/src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.commands.CommandHelper; +import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Misc; @@ -47,7 +48,8 @@ public class AddxpCommand implements CommandExecutor { xp = Integer.valueOf(args[1]); skill = Skills.getSkillType(args[0]); - Users.getProfile(modifiedPlayer).addXPOverride(skill, xp); + PlayerProfile profile = Users.getProfile(modifiedPlayer); + profile.addXPOverride(skill, xp); if (skill.equals(SkillType.ALL)) { skillName = "all skills"; @@ -62,7 +64,7 @@ public class AddxpCommand implements CommandExecutor { Skills.xpCheckAll(modifiedPlayer); } else { - Skills.xpCheckSkill(skill, modifiedPlayer); + Skills.xpCheckSkill(skill, modifiedPlayer, profile); } } else { @@ -78,8 +80,9 @@ public class AddxpCommand implements CommandExecutor { case 3: modifiedPlayer = plugin.getServer().getPlayer(args[0]); String playerName = modifiedPlayer.getName(); + PlayerProfile profile = Users.getProfile(modifiedPlayer); - if (!Users.getProfile(modifiedPlayer).isLoaded()) { + if (!profile.isLoaded()) { sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist")); return true; } @@ -94,7 +97,7 @@ public class AddxpCommand implements CommandExecutor { skill = Skills.getSkillType(args[1]); String message; - Users.getProfile(modifiedPlayer).addXPOverride(skill, xp); + profile.addXPOverride(skill, xp); if (skill.equals(SkillType.ALL)) { skillName = "all skills"; @@ -112,7 +115,7 @@ public class AddxpCommand implements CommandExecutor { Skills.xpCheckAll(modifiedPlayer); } else { - Skills.xpCheckSkill(skill, modifiedPlayer); + Skills.xpCheckSkill(skill, modifiedPlayer, profile); } } else { diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 1e67dfae8..7865f8437 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -313,8 +313,7 @@ public class EntityListener implements Listener { break; } - PP.addXP(player, SkillType.TAMING, xp); - Skills.xpCheckSkill(SkillType.TAMING, player); + Skills.xpProcessing(player, PP, SkillType.TAMING, xp); } } } diff --git a/src/main/java/com/gmail/nossr50/runnables/GainXp.java b/src/main/java/com/gmail/nossr50/runnables/GainXp.java index 4ab834d29..452a85e31 100644 --- a/src/main/java/com/gmail/nossr50/runnables/GainXp.java +++ b/src/main/java/com/gmail/nossr50/runnables/GainXp.java @@ -39,7 +39,6 @@ public class GainXp implements Runnable { damage += health; } - PP.addXP(player, skillType, (int) (damage * baseXp)); - Skills.xpCheckSkill(skillType, player); + Skills.xpProcessing(player, PP, skillType, (int) (damage * baseXp)); } } diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java b/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java index 3cc559a15..34c0ac20d 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java @@ -107,9 +107,7 @@ public class Excavation { } } - //Handle XP related tasks - PP.addXP(player, SkillType.EXCAVATION, xp); - Skills.xpCheckSkill(SkillType.EXCAVATION, player); + Skills.xpProcessing(player, PP, SkillType.EXCAVATION, xp); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java b/src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java index 441500125..5334bf0d9 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java @@ -117,8 +117,7 @@ public class Fishing { theCatch.getItemStack().setDurability((short) (random.nextInt(maxDurability))); //Change durability to random value } - PP.addXP(player, SkillType.FISHING, Config.getInstance().getFishingBaseXP()); - Skills.xpCheckSkill(SkillType.FISHING, player); + Skills.xpProcessing(player, PP, SkillType.FISHING, Config.getInstance().getFishingBaseXP()); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java index 0594247b9..380af222b 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java @@ -288,8 +288,7 @@ public class Herbalism { } } - PP.addXP(player, SkillType.HERBALISM, xp); - Skills.xpCheckSkill(SkillType.HERBALISM, player); + Skills.xpProcessing(player, PP, SkillType.HERBALISM, xp); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java b/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java index 9bfd992c1..bd72cf305 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java @@ -275,8 +275,7 @@ public class Mining { break; } - PP.addXP(player, SkillType.MINING, xp); - Skills.xpCheckSkill(SkillType.MINING, player); + Skills.xpProcessing(player, PP, SkillType.MINING, xp); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/WoodCutting.java b/src/main/java/com/gmail/nossr50/skills/gathering/WoodCutting.java index 2ecc5267b..c83895606 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/WoodCutting.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/WoodCutting.java @@ -203,8 +203,7 @@ public class WoodCutting { } if (Permissions.getInstance().woodcutting(player)) { - PP.addXP(player, SkillType.WOODCUTTING, xp); //Tree Feller gives nerf'd XP - Skills.xpCheckSkill(SkillType.WOODCUTTING, player); + Skills.xpProcessing(player, PP, SkillType.WOODCUTTING, xp); } } @@ -384,8 +383,7 @@ public class WoodCutting { } WoodCutting.woodCuttingProcCheck(player, block); - PP.addXP(player, SkillType.WOODCUTTING, xp); - Skills.xpCheckSkill(SkillType.WOODCUTTING, player); + Skills.xpProcessing(player, PP, SkillType.WOODCUTTING, xp); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/misc/Acrobatics.java b/src/main/java/com/gmail/nossr50/skills/misc/Acrobatics.java index 1a2d6b2c8..3dbd36ce2 100644 --- a/src/main/java/com/gmail/nossr50/skills/misc/Acrobatics.java +++ b/src/main/java/com/gmail/nossr50/skills/misc/Acrobatics.java @@ -58,8 +58,7 @@ public class Acrobatics { /* Check for death */ if (health - damage >= 1) { - PP.addXP(player, SkillType.ACROBATICS, damage * ROLL_XP_MODIFIER); - Skills.xpCheckSkill(SkillType.ACROBATICS, player); + Skills.xpProcessing(player, PP, SkillType.ACROBATICS, damage * ROLL_XP_MODIFIER); event.setDamage(newDamage); @@ -76,8 +75,7 @@ public class Acrobatics { } } else if (health - damage >= 1) { - PP.addXP(player, SkillType.ACROBATICS, event.getDamage() * FALL_XP_MODIFIER); - Skills.xpCheckSkill(SkillType.ACROBATICS, player); + Skills.xpProcessing(player, PP, SkillType.ACROBATICS, event.getDamage() * FALL_XP_MODIFIER); } } @@ -111,8 +109,7 @@ public class Acrobatics { defender.sendMessage(LocaleLoader.getString("Acrobatics.Combat.Proc")); if (System.currentTimeMillis() >= (5000 + PPd.getRespawnATS()) && defender.getHealth() >= 1) { - PPd.addXP(defender, SkillType.ACROBATICS, damage * DODGE_MODIFIER); - Skills.xpCheckSkill(SkillType.ACROBATICS, defender); + Skills.xpProcessing(defender, PPd, SkillType.ACROBATICS, damage * DODGE_MODIFIER); } int newDamage = damage / 2; diff --git a/src/main/java/com/gmail/nossr50/skills/repair/Repair.java b/src/main/java/com/gmail/nossr50/skills/repair/Repair.java index 06170eec3..51eb02fa3 100644 --- a/src/main/java/com/gmail/nossr50/skills/repair/Repair.java +++ b/src/main/java/com/gmail/nossr50/skills/repair/Repair.java @@ -42,8 +42,7 @@ public class Repair { dif = (short) (dif * modify); - PP.addXP(player, SkillType.REPAIR, dif * 10); - Skills.xpCheckSkill(SkillType.REPAIR, player); + Skills.xpProcessing(player, PP, SkillType.REPAIR, dif * 10); //CLANG CLANG if (mcMMO.p.spoutEnabled) { diff --git a/src/main/java/com/gmail/nossr50/util/Skills.java b/src/main/java/com/gmail/nossr50/util/Skills.java index 9e311220a..90837a825 100644 --- a/src/main/java/com/gmail/nossr50/util/Skills.java +++ b/src/main/java/com/gmail/nossr50/util/Skills.java @@ -181,24 +181,24 @@ public class Skills { * * @param skillType The skill to check * @param player The player whose skill to check + * @param profile The profile of the player whose skill to check */ - public static void xpCheckSkill(SkillType skillType, Player player) { - PlayerProfile PP = Users.getProfile(player); + public static void xpCheckSkill(SkillType skillType, Player player, PlayerProfile profile) { int skillups = 0; - if (PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) { + if (profile.getSkillXpLevel(skillType) >= profile.getXpToLevel(skillType)) { - while (PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) { - if ((skillType.getMaxLevel() >= PP.getSkillLevel(skillType) + 1) && (Misc.getPowerLevelCap() >= PP.getPowerLevel() + 1)) { - PP.removeXP(skillType, PP.getXpToLevel(skillType)); + while (profile.getSkillXpLevel(skillType) >= profile.getXpToLevel(skillType)) { + if ((skillType.getMaxLevel() >= profile.getSkillLevel(skillType) + 1) && (Misc.getPowerLevelCap() >= profile.getPowerLevel() + 1)) { + profile.removeXP(skillType, profile.getXpToLevel(skillType)); skillups++; - PP.skillUp(skillType, 1); + profile.skillUp(skillType, 1); McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType); mcMMO.p.getServer().getPluginManager().callEvent(eventToFire); } else { - PP.addLevels(skillType, 0); + profile.addLevels(skillType, 0); } } @@ -222,15 +222,15 @@ public class Skills { /* Update custom titles */ if (SpoutConfig.getInstance().getShowPowerLevel()) { - sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl" + ChatColor.WHITE + "." + ChatColor.GREEN + String.valueOf(PP.getPowerLevel())); + sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl" + ChatColor.WHITE + "." + ChatColor.GREEN + String.valueOf(profile.getPowerLevel())); } } else { - player.sendMessage(LocaleLoader.getString(capitalized + ".Skillup", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)})); + player.sendMessage(LocaleLoader.getString(capitalized + ".Skillup", new Object[] {String.valueOf(skillups), profile.getSkillLevel(skillType)})); } } else { - player.sendMessage(LocaleLoader.getString(capitalized + ".Skillup", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)})); + player.sendMessage(LocaleLoader.getString(capitalized + ".Skillup", new Object[] {String.valueOf(skillups), profile.getSkillLevel(skillType)})); } } @@ -257,7 +257,7 @@ public class Skills { continue; } - xpCheckSkill(x, player); + xpCheckSkill(x, player, Users.getProfile(player)); } } @@ -450,4 +450,17 @@ public class Skills { return activate; } + + /** + * Handle the processing of XP gain from individual skills. + * + * @param player The player that gained XP + * @param profile The profile of the player gaining XP + * @param type The type of skill to gain XP from + * @param xp the amount of XP to gain + */ + public static void xpProcessing(Player player, PlayerProfile profile, SkillType type, int xp) { + profile.addXP(player, type, xp); + xpCheckSkill(type, player, profile); + } }