diff --git a/Changelog.txt b/Changelog.txt index d0ac6fe12..919278921 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,6 +8,7 @@ Key: - Removal Version 1.4.06-dev + + Added "Master Angler" ability to Fishing. + Added health display for mobs during combat. + Added new API method to McMMOPlayerLevelUpEvent to set levels gained + Added new permission node for /ptp; mcmmo.commands.ptp.send (enabled by default) diff --git a/src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java index 6971b53ce..796dd8919 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java @@ -15,11 +15,13 @@ public class FishingCommand extends SkillCommand { private String shakeChance; private String shakeChanceLucky; private int fishermansDietRank; + private String biteChance; private boolean canTreasureHunt; private boolean canMagicHunt; private boolean canShake; private boolean canFishermansDiet; + private boolean canMasterAngler; public FishingCommand() { super(SkillType.FISHING); @@ -27,12 +29,14 @@ public class FishingCommand extends SkillCommand { @Override protected void dataCalculations() { + boolean isStorming = player.getWorld().hasStorm(); + // TREASURE HUNTER if (canTreasureHunt) { lootTier = mcMMOPlayer.getFishingManager().getLootTier(); double enchantChance = lootTier * AdvancedConfig.getInstance().getFishingMagicMultiplier(); - if (player.getWorld().hasStorm()) { + if (isStorming) { chanceRaining = LocaleLoader.getString("Fishing.Chance.Raining"); enchantChance *= 1.1D; } @@ -53,6 +57,11 @@ public class FishingCommand extends SkillCommand { if (canFishermansDiet) { fishermansDietRank = calculateRank(Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1); } + + // MASTER ANGLER + if (canMasterAngler) { + biteChance = calculateAbilityDisplayValues((skillValue / 4) / (isStorming ? 300 : 500))[0]; + } } @Override @@ -61,11 +70,12 @@ public class FishingCommand extends SkillCommand { canMagicHunt = Permissions.magicHunter(player); canShake = Permissions.shake(player); canFishermansDiet = Permissions.fishermansDiet(player); + canMasterAngler = Permissions.masterAngler(player); } @Override protected boolean effectsHeaderPermissions() { - return canTreasureHunt || canMagicHunt || canShake; + return canTreasureHunt || canMagicHunt || canShake || canMasterAngler; } @Override @@ -87,15 +97,23 @@ public class FishingCommand extends SkillCommand { if (canFishermansDiet) { player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7"))); } + + if (canMasterAngler) { + player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.8"), LocaleLoader.getString("Fishing.Effect.9"))); + } } @Override protected boolean statsHeaderPermissions() { - return canTreasureHunt || canMagicHunt || canShake; + return canTreasureHunt || canMagicHunt || canShake || canMasterAngler; } @Override protected void statsDisplay() { + if (canMasterAngler) { + player.sendMessage(LocaleLoader.getString("Fishing.Ability.Chance", biteChance)); + } + if (canTreasureHunt) { player.sendMessage(LocaleLoader.getString("Fishing.Ability.Rank", lootTier)); } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 15fe49dde..dacd473f6 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -174,6 +174,12 @@ public class PlayerListener implements Listener { FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager(); switch (event.getState()) { + case FISHING: + if (fishingManager.canMasterAngler()) { + fishingManager.masterAngler(event.getHook()); + } + break; + case CAUGHT_FISH: fishingManager.handleFishing((Item) event.getCaught()); diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index fe84e2b82..65068352b 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -9,6 +9,7 @@ import java.util.Map; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Entity; +import org.bukkit.entity.Fish; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -41,6 +42,10 @@ public class FishingManager extends SkillManager { return target instanceof LivingEntity && getSkillLevel() >= AdvancedConfig.getInstance().getShakeUnlockLevel() && Permissions.shake(getPlayer()); } + public boolean canMasterAngler() { + return Permissions.masterAngler(getPlayer()); + } + /** * Gets the loot tier * @@ -86,6 +91,10 @@ public class FishingManager extends SkillManager { return SkillUtils.handleFoodSkills(getPlayer(), skill, eventFoodLevel, Fishing.fishermansDietRankLevel1, Fishing.fishermansDietMaxLevel, rankChange); } + public void masterAngler(Fish hook) { + hook.setBiteChance(Math.min(hook.getBiteChance() * (getSkillLevel() / 4.0), 1.0)); + } + /** * Process the results from a successful fishing trip * diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index f2ca5c25f..3111ddaef 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -143,6 +143,7 @@ public final class Permissions { public static boolean fishermansDiet(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.fishermansdiet"); } public static boolean fishingTreasureHunter(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.treasures"); } public static boolean magicHunter(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.magic"); } + public static boolean masterAngler(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.masterangler"); } public static boolean shake(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.shakemob"); } /* HERBALISM */ diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index be3fa24cd..8500491c3 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -98,6 +98,7 @@ Excavation.Skills.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used Excavation.Skillup=[[YELLOW]]Excavation skill increased by {0}. Total ({1}) #FISHING +Fishing.Ability.Chance=[[RED]]Bite Chance: [[YELLOW]]{0} Fishing.Ability.Info=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank** Fishing.Ability.Locked.0=LOCKED UNTIL {0}+ SKILL (SHAKE) Fishing.Ability.Rank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5 @@ -111,6 +112,8 @@ Fishing.Effect.4=Shake (vs. Entities) Fishing.Effect.5=Shake items off of mobs w/ fishing pole Fishing.Effect.6=Fisherman's Diet Fishing.Effect.7=Improves hunger restored from fished foods +Fishing.Effect.8=Master Angler +Fishing.Effect.9=Improves chance of getting a bite while fishing Fishing.Enchant.Chance=[[RED]]Magic Hunter Chance: [[YELLOW]]{0} Fishing.Chance.Raining=[[BLUE]] Rain Bonus Fishing.ItemFound=[[GRAY]]Treasure found! diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d0ccd63b5..2691c7b82 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -254,6 +254,7 @@ permissions: children: mcmmo.ability.fishing.fishermansdiet: true mcmmo.ability.fishing.magic: true + mcmmo.ability.fishing.masterangler: true mcmmo.ability.fishing.shakemob: true mcmmo.ability.fishing.treasures: true mcmmo.ability.fishing.vanillaxpboost: true @@ -261,6 +262,8 @@ permissions: description: Allows access to the Fishermans's Diet ability mcmmo.ability.fishing.magic: description: Allows enchanted drops from Fishing + mcmmo.ability.fishing.masterangler: + description: Allows access to the Master Angler ability mcmmo.ability.fishing.shakemob: description: Allows access to the Shake Mob ability mcmmo.ability.fishing.treasures: