From 8d5696507ae9c7ff6104c15f084256fd2eaa5d21 Mon Sep 17 00:00:00 2001 From: GJ Date: Wed, 15 May 2013 01:19:14 -0400 Subject: [PATCH] Add bow force multiplier to Archery XP. --- Changelog.txt | 1 + .../com/gmail/nossr50/config/AdvancedConfig.java | 2 ++ .../com/gmail/nossr50/listeners/EntityListener.java | 10 +++++++++- src/main/java/com/gmail/nossr50/mcMMO.java | 1 + .../com/gmail/nossr50/util/skills/CombatUtils.java | 12 ++++++++++-- src/main/resources/advanced.yml | 3 +++ 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 9c40a3d43..14c27af83 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -24,6 +24,7 @@ Version 1.4.06-dev + Added McMMOAbilityActivateEvent and McMMOAbilityDeactivateEvent + Added config options to toggle the size of fireworks + Added config option to multiply xp gains from mob spawner mobs + + Added multiplier to Archery XP based on bow force = Fixed bug where players were able to join the same party multiple times = Fixed displaying partial names when trying to use /ptp = Fixed wolves from Call of the Wild only having 8 health diff --git a/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java b/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java index 01ace400d..f481e4d7b 100644 --- a/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java +++ b/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java @@ -52,6 +52,8 @@ public class AdvancedConfig extends AutoUpdateConfigLoader { public double getRetrieveChanceMax() { return config.getDouble("Skills.Archery.Retrieve_MaxBonus", 100.0D); } public int getRetrieveMaxBonusLevel() { return config.getInt("Skills.Archery.Retrieve_MaxBonusLevel", 1000); } + public double getForceMultiplier() { return config.getDouble("Skills.Archery.Force_Multiplier", 2.0D); } + /* AXES */ public int getBonusDamageAxesBonusMax() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonus", 4); } public int getBonusDamageAxesMaxBonusLevel() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonusLevel", 200); } diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 8f5a8c2b5..76a2c6096 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -4,6 +4,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.AnimalTamer; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; import org.bukkit.entity.LivingEntity; @@ -28,8 +29,10 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent; import com.gmail.nossr50.events.fake.FakeEntityDamageEvent; @@ -59,7 +62,12 @@ public class EntityListener implements Listener { ItemStack bow = event.getBow(); if (bow != null && bow.containsEnchantment(Enchantment.ARROW_INFINITE)) { - event.getProjectile().setMetadata(mcMMO.infiniteArrowKey, mcMMO.metadataValue); + Entity projectile = event.getProjectile(); + + if (projectile instanceof Arrow) { + projectile.setMetadata(mcMMO.infiniteArrowKey, mcMMO.metadataValue); + projectile.setMetadata(mcMMO.bowForceKey, new FixedMetadataValue(plugin, Math.min(event.getForce() * AdvancedConfig.getInstance().getForceMultiplier(), 1.0))); + } } } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 9f9b28016..212fbef89 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -95,6 +95,7 @@ public class mcMMO extends JavaPlugin { public final static String customVisibleKey = "mcMMO: Name Visibility"; public final static String droppedItemKey = "mcMMO: Tracked Item"; public final static String infiniteArrowKey = "mcMMO: Infinite Arrow"; + public final static String bowForceKey = "mcMMO: Bow Force"; public static FixedMetadataValue metadataValue; diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index f99146d82..4d40c9ffe 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -250,7 +250,9 @@ public final class CombatUtils { } archeryManager.distanceXpBonus(target); - startGainXp(mcMMOPlayer, target, SkillType.ARCHERY); + + double forceMultiplier = damager.hasMetadata(mcMMO.bowForceKey) ? damager.getMetadata(mcMMO.bowForceKey).get(0).asDouble() : 1.0; + startGainXp(mcMMOPlayer, target, SkillType.ARCHERY, forceMultiplier); } break; @@ -424,6 +426,10 @@ public final class CombatUtils { } } + public static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, SkillType skillType) { + startGainXp(mcMMOPlayer, target, skillType, 1.0); + } + /** * Start the task that gives combat XP. * @@ -431,7 +437,7 @@ public final class CombatUtils { * @param target The defending entity * @param skillType The skill being used */ - public static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, SkillType skillType) { + public static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, SkillType skillType, double multiplier) { double baseXP = 0; if (target instanceof Player) { @@ -514,6 +520,8 @@ public final class CombatUtils { baseXP *= 10; } + baseXP *= multiplier; + if (baseXP != 0) { new AwardCombatXpTask(mcMMOPlayer, skillType, baseXP, target).runTaskLater(mcMMO.p, 0); } diff --git a/src/main/resources/advanced.yml b/src/main/resources/advanced.yml index 780d3ac28..c96ff3c77 100644 --- a/src/main/resources/advanced.yml +++ b/src/main/resources/advanced.yml @@ -71,6 +71,9 @@ Skills: # Retrieve_MaxBonusLevel: Maximum bonus level for Arrow retrieval, at this level the chance of retrieving arrows from mobs is Retrieve_MaxBonus Retrieve_MaxChance: 100.0 Retrieve_MaxBonusLevel: 1000 + + #Force_Multiplier: Multiply the force of the bow by this for an XP boost. + Force_Multiplier: 2.0 # # Settings for Axes ###