From 36f1a2d78a14104573a84f5e30d59e42c7161687 Mon Sep 17 00:00:00 2001 From: TfT_02 Date: Thu, 15 Aug 2013 20:50:19 +0200 Subject: [PATCH] Changed the way Repair hands out XP Closes #373 --- Changelog.txt | 1 + src/main/java/com/gmail/nossr50/config/Config.java | 6 ++++++ .../com/gmail/nossr50/skills/repair/RepairManager.java | 6 +++++- .../com/gmail/nossr50/skills/repair/Repairable.java | 2 +- src/main/resources/config.yml | 10 ++++++++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 47fc7a989..66b53568f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -21,6 +21,7 @@ Version 1.4.07-dev = Fixed a bug where LevelUpEvent would be called for an offline player. = Fixed a bug where teleport location was never reset if warmup was set to 0 for Chimaera Wing. = Fixed a bug where the Dodge DamageModifier wasn't being read from advanced.yml + ! Changed the way Repair hands out XP, also added config options to control Repair XP ! Improved profile saving ! Updated localization files ! Party item share category states are now saved when the server shuts down. diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index bd4fa7dc7..9cee9d9c2 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -12,6 +12,7 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.MobHealthbarType; import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.datatypes.skills.SkillType; +import com.gmail.nossr50.skills.repair.RepairMaterialType; import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.StringUtils; @@ -403,6 +404,11 @@ public class Config extends AutoUpdateConfigLoader { public int getDetonatorItemID() { return config.getInt("Skills.Mining.Detonator_ID", 259); } /* Repair */ + public double getRepairXPBase() { return config.getDouble("Experience.Repair.Base", 1000.0); } + public double getRepairXP(RepairMaterialType repairMaterialType) { + return config.getDouble("Experience.Repair." + StringUtils.getCapitalized(repairMaterialType.toString())); + } + public boolean getRepairAnvilMessagesEnabled() { return config.getBoolean("Skills.Repair.Anvil_Messages", true); } public int getRepairAnvilId() { return config.getInt("Skills.Repair.Anvil_ID", 42); } public int getSalvageAnvilId() { return config.getInt("Skills.Repair.Salvage_Anvil_ID", 41); } diff --git a/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java b/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java index c9f2384e1..f6777885d 100644 --- a/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java +++ b/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java @@ -155,7 +155,7 @@ public class RepairManager extends SkillManager { Repair.removeOneFrom(inventory, repairItemLocation); // Give out XP like candy - applyXpGain((int) ((startDurability - newDurability) * repairable.getXpMultiplier()) * 10); + applyXpGain((float) ((getPercentageRepaired(startDurability, newDurability, repairable.getMaximumDurability()) * repairable.getXpMultiplier()) * Config.getInstance().getRepairXPBase() * Config.getInstance().getRepairXP(repairable.getRepairMaterialType()))); // BWONG BWONG BWONG player.playSound(player.getLocation(), Sound.ANVIL_USE, Misc.ANVIL_USE_VOLUME, Misc.ANVIL_USE_PITCH); @@ -164,6 +164,10 @@ public class RepairManager extends SkillManager { item.setDurability(newDurability); } + private float getPercentageRepaired(short startDurability, short newDurability, short totalDurability) { + return ((startDurability - newDurability) / (float) totalDurability); + } + public void handleSalvage(Location location, ItemStack item) { Player player = getPlayer(); diff --git a/src/main/java/com/gmail/nossr50/skills/repair/Repairable.java b/src/main/java/com/gmail/nossr50/skills/repair/Repairable.java index db0716589..4b60dfdb8 100644 --- a/src/main/java/com/gmail/nossr50/skills/repair/Repairable.java +++ b/src/main/java/com/gmail/nossr50/skills/repair/Repairable.java @@ -53,7 +53,7 @@ public interface Repairable { public short getMaximumDurability(); /** - * Gets the base repair durability on which to calcuate bonuses. + * Gets the base repair durability on which to calculate bonuses. * * This is actually the maximum durability divided by the minimum quantity * diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d3dae1555..3f4a1e69b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -366,6 +366,16 @@ Experience: Redstone_Ore: 150 Sandstone: 30 Stone: 30 + Repair: + Base: 1000.0 + Wood: 0.6 + Stone: 1.3 + Iron: 2.5 + Gold: 0.3 + Diamond: 5.0 + Leather: 1.6 + String: 1.8 + Other: 1.5 Smelting: Coal_Ore: 10 Diamond_Ore: 75