From 719283177e668aea371f7566823cfee2d02d7941 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 26 Mar 2019 08:22:39 -0700 Subject: [PATCH 01/10] Shake has an upper limit of 10 damage (will be configurable in the near future), alchemy ranks adjusted --- Changelog.txt | 4 ++++ pom.xml | 2 +- .../com/gmail/nossr50/listeners/BlockListener.java | 10 ++++++---- .../gmail/nossr50/skills/fishing/FishingManager.java | 2 +- src/main/resources/skillranks.yml | 8 ++++---- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 2cc673afe..26017d672 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -7,6 +7,10 @@ Key: ! Change - Removal +Version 2.1.25 + Shake now has an upper limit of damage (10) - Will be configurable in 2.2 which is coming in the near future + Rank 1 of Catalysis & Concoctions are now available at level 0 by default (update skillranks.yml or delete it to regen a new one) + Version 2.1.24 Fixed an exploit where you could clone inventories diff --git a/pom.xml b/pom.xml index 380dafa61..518a5a4f2 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.24 + 2.1.25-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 03c5ee8fd..55fd3c69d 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -65,18 +65,20 @@ public class BlockListener implements Listener { if(is.getAmount() <= 0) continue; - //Extra Protection - if(event.getBlock().getState() instanceof Container) - return; - if(event.getBlock().getState().getMetadata(mcMMO.doubleDropKey).size() > 0) { + //Extra Protection + if(event.getBlock().getState() instanceof Container) + return; event.getBlock().getState().removeMetadata(mcMMO.doubleDropKey, plugin); event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); } else if(event.getBlock().getState().getMetadata(mcMMO.tripleDropKey).size() > 0) { + //Extra Protection + if(event.getBlock().getState() instanceof Container) + return; event.getBlock().getState().removeMetadata(mcMMO.tripleDropKey, plugin); event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); 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 381d558a6..17385ad62 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -420,7 +420,7 @@ public class FishingManager extends SkillManager { } Misc.dropItem(target.getLocation(), drop); - CombatUtils.dealDamage(target, Math.max(target.getMaxHealth() / 4, 1), EntityDamageEvent.DamageCause.CUSTOM, getPlayer()); // Make it so you can shake a mob no more than 4 times. + CombatUtils.dealDamage(target, Math.min(Math.max(target.getMaxHealth() / 4, 1), 10), EntityDamageEvent.DamageCause.CUSTOM, getPlayer()); // Make it so you can shake a mob no more than 4 times. applyXpGain(ExperienceConfig.getInstance().getFishingShakeXP(), XPGainReason.PVE); } } diff --git a/src/main/resources/skillranks.yml b/src/main/resources/skillranks.yml index 2a2d0c346..a1422b9fd 100644 --- a/src/main/resources/skillranks.yml +++ b/src/main/resources/skillranks.yml @@ -8,12 +8,12 @@ Alchemy: Catalysis: Standard: - Rank_1: 10 + Rank_1: 0 RetroMode: - Rank_1: 100 + Rank_1: 0 Concoctions: Standard: - Rank_1: 10 + Rank_1: 0 Rank_2: 25 Rank_3: 35 Rank_4: 50 @@ -22,7 +22,7 @@ Alchemy: Rank_7: 85 Rank_8: 100 RetroMode: - Rank_1: 100 + Rank_1: 0 Rank_2: 250 Rank_3: 350 Rank_4: 500 From 7a3d608f3645228111cfc0611c4f3fdb1d579fe1 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 26 Mar 2019 08:36:13 -0700 Subject: [PATCH 02/10] 2.1.25 --- Changelog.txt | 1 + pom.xml | 2 +- .../datatypes/skills/PrimarySkillType.java | 45 ++++++++++++------- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 26017d672..03784e5ed 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -10,6 +10,7 @@ Key: Version 2.1.25 Shake now has an upper limit of damage (10) - Will be configurable in 2.2 which is coming in the near future Rank 1 of Catalysis & Concoctions are now available at level 0 by default (update skillranks.yml or delete it to regen a new one) + NOTE: The change to shake was to make mcMMO more compatible with plugins that spawn entities with large amounts of HP Version 2.1.24 Fixed an exploit where you could clone inventories diff --git a/pom.xml b/pom.xml index 518a5a4f2..de5ecbbf2 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.25-SNAPSHOT + 2.1.25 mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java index f48e49a9b..1440ea9ff 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java @@ -35,21 +35,36 @@ import java.util.Collections; import java.util.List; public enum PrimarySkillType { - ACROBATICS(AcrobaticsManager.class, Color.WHITE, ImmutableList.of(SubSkillType.ACROBATICS_DODGE, SubSkillType.ACROBATICS_ROLL)), - ALCHEMY(AlchemyManager.class, Color.FUCHSIA, ImmutableList.of(SubSkillType.ALCHEMY_CATALYSIS, SubSkillType.ALCHEMY_CONCOCTIONS)), - ARCHERY(ArcheryManager.class, Color.MAROON, ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT)), - AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE, ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)), - EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL, ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_ARCHAEOLOGY)), - FISHING(FishingManager.class, Color.NAVY, ImmutableList.of(SubSkillType.FISHING_FISHERMANS_DIET, SubSkillType.FISHING_TREASURE_HUNTER, SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_MAGIC_HUNTER, SubSkillType.FISHING_MASTER_ANGLER, SubSkillType.FISHING_SHAKE)), - HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbilityType.GREEN_TERRA, ToolType.HOE, ImmutableList.of(SubSkillType.HERBALISM_GREEN_TERRA, SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB)), - MINING(MiningManager.class, Color.GRAY, SuperAbilityType.SUPER_BREAKER, ToolType.PICKAXE, ImmutableList.of(SubSkillType.MINING_SUPER_BREAKER, SubSkillType.MINING_DEMOLITIONS_EXPERTISE, SubSkillType.MINING_BIGGER_BOMBS, SubSkillType.MINING_BLAST_MINING, SubSkillType.MINING_DOUBLE_DROPS)), - REPAIR(RepairManager.class, Color.SILVER, ImmutableList.of(SubSkillType.REPAIR_ARCANE_FORGING, SubSkillType.REPAIR_REPAIR_MASTERY, SubSkillType.REPAIR_SUPER_REPAIR)), - SALVAGE(SalvageManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.SALVAGE_ADVANCED_SALVAGE, SubSkillType.SALVAGE_ARCANE_SALVAGE)), - SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SubSkillType.SMELTING_UNDERSTANDING_THE_ART, /*SubSkillType.SMELTING_FLUX_MINING,*/ SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)), - SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), - TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)), - UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)), - WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER)); + ACROBATICS(AcrobaticsManager.class, Color.WHITE, + ImmutableList.of(SubSkillType.ACROBATICS_DODGE, SubSkillType.ACROBATICS_ROLL)), + ALCHEMY(AlchemyManager.class, Color.FUCHSIA, + ImmutableList.of(SubSkillType.ALCHEMY_CATALYSIS, SubSkillType.ALCHEMY_CONCOCTIONS)), + ARCHERY(ArcheryManager.class, Color.MAROON, + ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT)), + AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE, + ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)), + EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL, + ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_ARCHAEOLOGY)), + FISHING(FishingManager.class, Color.NAVY, + ImmutableList.of(SubSkillType.FISHING_FISHERMANS_DIET, SubSkillType.FISHING_TREASURE_HUNTER, SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_MAGIC_HUNTER, SubSkillType.FISHING_MASTER_ANGLER, SubSkillType.FISHING_SHAKE)), + HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbilityType.GREEN_TERRA, ToolType.HOE, + ImmutableList.of(SubSkillType.HERBALISM_GREEN_TERRA, SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB)), + MINING(MiningManager.class, Color.GRAY, SuperAbilityType.SUPER_BREAKER, ToolType.PICKAXE, + ImmutableList.of(SubSkillType.MINING_SUPER_BREAKER, SubSkillType.MINING_DEMOLITIONS_EXPERTISE, SubSkillType.MINING_BIGGER_BOMBS, SubSkillType.MINING_BLAST_MINING, SubSkillType.MINING_DOUBLE_DROPS)), + REPAIR(RepairManager.class, Color.SILVER, + ImmutableList.of(SubSkillType.REPAIR_ARCANE_FORGING, SubSkillType.REPAIR_REPAIR_MASTERY, SubSkillType.REPAIR_SUPER_REPAIR)), + SALVAGE(SalvageManager.class, Color.ORANGE, + ImmutableList.of(SubSkillType.SALVAGE_ADVANCED_SALVAGE, SubSkillType.SALVAGE_ARCANE_SALVAGE)), + SMELTING(SmeltingManager.class, Color.YELLOW, + ImmutableList.of(SubSkillType.SMELTING_UNDERSTANDING_THE_ART, /*SubSkillType.SMELTING_FLUX_MINING,*/ SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)), + SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, + ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), + TAMING(TamingManager.class, Color.PURPLE, + ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)), + UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, + ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)), + WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE, + ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER)); private Class managerClass; private Color runescapeColor; From d324aa958941542d2e9f9fd456d341bf0af825af Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 11:27:05 -0700 Subject: [PATCH 03/10] Rescale Iron Arm Damage --- .../com/gmail/nossr50/skills/unarmed/UnarmedManager.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java b/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java index b3c081497..af30a24c6 100644 --- a/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java +++ b/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java @@ -151,7 +151,14 @@ public class UnarmedManager extends SkillManager { } public double getIronArmDamage() { - return RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_IRON_ARM_STYLE) * 2; + int rank = RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_IRON_ARM_STYLE); + + if(rank == 1) + { + return 4; + } else { + return 3 + (rank * 2); + } } /** From 018c6fc96ba39c544d8ecca4b1bf5fbd613a29e6 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 11:27:27 -0700 Subject: [PATCH 04/10] 2.1.26 Dev Version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index de5ecbbf2..a31b7980e 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.25 + 2.1.26-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO From e0341f7ae787383f4f73ca7bc9811933481dc402 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 12:11:11 -0700 Subject: [PATCH 05/10] Added new subskill to Swords, Stab --- Changelog.txt | 17 +++++++++++++++- .../datatypes/skills/PrimarySkillType.java | 2 +- .../datatypes/skills/SubSkillType.java | 1 + .../gmail/nossr50/skills/swords/Swords.java | 2 -- .../nossr50/skills/swords/SwordsManager.java | 20 +++++++++++++++++++ .../nossr50/util/skills/CombatUtils.java | 6 ++++++ .../resources/locale/locale_en_US.properties | 2 ++ src/main/resources/plugin.yml | 1 + src/main/resources/skillranks.yml | 7 +++++++ 9 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 03784e5ed..fd2214df3 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -7,6 +7,21 @@ Key: ! Change - Removal +Version 2.1.26 + Changed how Iron Arm damage is calculated (Rank 1 now effectively gives twice the damage bonus it used to, with a net result of 3 extra RAW damage before reductions) + Added a new subskill named Stab to Swords to help with lategame PVP combat + New permission node 'mcmmo.ability.swords.stab' + NOTE: Combat skills will be completely configurable in the upcoming 2.2 update, be patient <3 + + Notes: + These changes are meant to be minor tweaks to PVP, a dedicated PVP update where I do a lot more research and testing will happen after 2.3 + + Stab is unlocked at level 75/750, and ranks up again at level 100/1000 + Stab permanently adds small amounts of extra damage when attacking players with a sword. + Stab is meant to make up for Swords lackluster damage against fully geared opponents. + + Iron Arm got buffed because Unarmed was dealing lackluster damage compared to other skills. + Version 2.1.25 Shake now has an upper limit of damage (10) - Will be configurable in 2.2 which is coming in the near future Rank 1 of Catalysis & Concoctions are now available at level 0 by default (update skillranks.yml or delete it to regen a new one) @@ -17,7 +32,7 @@ Version 2.1.24 Version 2.1.23 Fixed a bug with Double Drops for Mining (Update your configs instructions below) - Fixed a 7 year old bug where damage in mcMMO from Skills was potentially getting reduced by damage reduction TWICE + Fixed a 7 year old bug where damage in mcMMO from SkillBs was potentially getting reduced by damage reduction TWICE Fixed a bug where killing entities with Rupture would not properly credit you as the killer Fixed a bug where Serrated Strikes was applying Rupture twice Players will now be ejected from Minecarts if they cast their fishing rod (anti-afk) diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java index 1440ea9ff..6c40760ad 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java @@ -58,7 +58,7 @@ public enum PrimarySkillType { SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SubSkillType.SMELTING_UNDERSTANDING_THE_ART, /*SubSkillType.SMELTING_FLUX_MINING,*/ SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)), SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, - ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), + ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_STAB, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)), UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java index c2d03f707..c743610cc 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java @@ -71,6 +71,7 @@ public enum SubSkillType { SWORDS_COUNTER_ATTACK(1), SWORDS_RUPTURE(4), SWORDS_SERRATED_STRIKES(1), + SWORDS_STAB(2), /* Taming */ TAMING_BEAST_LORE(1), diff --git a/src/main/java/com/gmail/nossr50/skills/swords/Swords.java b/src/main/java/com/gmail/nossr50/skills/swords/Swords.java index c6d49eb5f..c15d05ab7 100644 --- a/src/main/java/com/gmail/nossr50/skills/swords/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/swords/Swords.java @@ -4,10 +4,8 @@ import com.gmail.nossr50.config.AdvancedConfig; public class Swords { public static int bleedMaxTicks = AdvancedConfig.getInstance().getRuptureMaxTicks(); - public static int bleedBaseTicks = AdvancedConfig.getInstance().getRuptureBaseTicks(); public static double counterAttackModifier = AdvancedConfig.getInstance().getCounterModifier(); public static double serratedStrikesModifier = AdvancedConfig.getInstance().getSerratedStrikesModifier(); - public static int serratedStrikesBleedTicks = AdvancedConfig.getInstance().getSerratedStrikesTicks(); } diff --git a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java index 8303bae2f..14d3db3ab 100644 --- a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java +++ b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java @@ -33,6 +33,10 @@ public class SwordsManager extends SkillManager { return mcMMOPlayer.getToolPreparationMode(ToolType.SWORD) && Permissions.serratedStrikes(getPlayer()); } + public boolean canUseStab() { + return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SWORDS_STAB) && RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.SWORDS_STAB); + } + public boolean canUseRupture() { return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SWORDS_RUPTURE) && RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.SWORDS_RUPTURE); } @@ -80,6 +84,22 @@ public class SwordsManager extends SkillManager { } } + public double stabCheck(LivingEntity target) + { + if(!(target instanceof Player)) + return 0; + + int rank = RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_STAB); + + if(rank > 0) + { + double stabDamage = 1.0D + (rank * 1.5); + return stabDamage; + } + + return 0; + } + public int getToolTier(ItemStack itemStack) { if(ItemUtils.isDiamondTool(itemStack)) 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 18236eda5..ff178c18d 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -61,6 +61,12 @@ public final class CombatUtils { } } + //Add Stab Damage + if(swordsManager.canUseStab()) + { + event.setDamage(swordsManager.stabCheck(target) + initialDamage); + } + if (swordsManager.canUseSerratedStrike()) { swordsManager.serratedStrikes(target, initialDamage, modifiers); } diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 133ef89b7..8bb0a3081 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -404,6 +404,8 @@ Swords.SubSkill.SerratedStrikes.Description=Deal partial damage in an AOE with a Swords.SubSkill.SerratedStrikes.Stat=Serrated Strikes Length Swords.SubSkill.Rupture.Name=Rupture Swords.SubSkill.Rupture.Description=Apply a powerful bleed DoT +Swords.SubSkill.Stab.Name=Stab +Swords.SubSkill.Stab.Description=Adds {0} extra damage when attacking players. Swords.SubSkill.Rupture.Stat=Rupture Chance Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs] Swords.Effect.4=Serrated Strikes Rupture+ diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b4c0e7eaa..d14618a08 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -561,6 +561,7 @@ permissions: description: Allows access to all Swords abilities children: mcmmo.ability.swords.rupture: true + mcmmo.ability.swords.stab: true mcmmo.ability.swords.counterattack: true mcmmo.ability.swords.serratedstrikes: true mcmmo.ability.swords.rupture: diff --git a/src/main/resources/skillranks.yml b/src/main/resources/skillranks.yml index a1422b9fd..09b68541c 100644 --- a/src/main/resources/skillranks.yml +++ b/src/main/resources/skillranks.yml @@ -381,6 +381,13 @@ Fishing: Rank_7: 850 Rank_8: 1000 Swords: + Stab: + Standard: + Rank_1: 75 + Rank_2: 100 + RetroMode: + Rank_1: 750 + Rank_2: 1000 CounterAttack: Standard: Rank_1: 20 From c4a383c4fb967ab902b33d24dc60d6a2e19e6d36 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 12:33:04 -0700 Subject: [PATCH 06/10] Removed PVP requirement on Stab, added info about Stab to /swords --- Changelog.txt | 5 +++-- .../com/gmail/nossr50/commands/skills/SwordsCommand.java | 6 ++++++ .../java/com/gmail/nossr50/skills/swords/SwordsManager.java | 5 +---- .../java/com/gmail/nossr50/util/skills/CombatUtils.java | 3 +-- src/main/resources/locale/locale_en_US.properties | 3 ++- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index fd2214df3..c3ef43905 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -14,10 +14,11 @@ Version 2.1.26 NOTE: Combat skills will be completely configurable in the upcoming 2.2 update, be patient <3 Notes: - These changes are meant to be minor tweaks to PVP, a dedicated PVP update where I do a lot more research and testing will happen after 2.3 + I collected several sets of data before making these changes, including damage to player with and without prot 4 diamond armor, damage to those players with and without enchanted weapons, damage with and without leveling your skills, and combinations of the previously mentioned things. + These changes are meant to be minor tweaks for endgame PVP, a dedicated PVP update where I do a lot more research and testing will happen after 2.3 Stab is unlocked at level 75/750, and ranks up again at level 100/1000 - Stab permanently adds small amounts of extra damage when attacking players with a sword. + Stab permanently adds small amounts of extra damage when attacking with a sword. Stab is meant to make up for Swords lackluster damage against fully geared opponents. Iron Arm got buffed because Unarmed was dealing lackluster damage compared to other skills. diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java index 927cdad6f..e364c605f 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java @@ -94,6 +94,12 @@ public class SwordsCommand extends SkillCommand { + (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", serratedStrikesLengthEndurance) : "")); } + if(canUseSubskill(player, SubSkillType.SWORDS_STAB)) + { + messages.add(getStatMessage(SubSkillType.SWORDS_STAB, + String.valueOf(UserManager.getPlayer(player).getSwordsManager().getStabDamage()))); + } + return messages; } diff --git a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java index 14d3db3ab..59be2626b 100644 --- a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java +++ b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java @@ -84,11 +84,8 @@ public class SwordsManager extends SkillManager { } } - public double stabCheck(LivingEntity target) + public double getStabDamage() { - if(!(target instanceof Player)) - return 0; - int rank = RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_STAB); if(rank > 0) 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 ff178c18d..eaff7e518 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -21,7 +21,6 @@ import com.gmail.nossr50.util.*; import com.gmail.nossr50.util.player.NotificationManager; import com.gmail.nossr50.util.player.UserManager; import com.google.common.collect.ImmutableMap; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.*; @@ -64,7 +63,7 @@ public final class CombatUtils { //Add Stab Damage if(swordsManager.canUseStab()) { - event.setDamage(swordsManager.stabCheck(target) + initialDamage); + event.setDamage(swordsManager.getStabDamage(target) + initialDamage); } if (swordsManager.canUseSerratedStrike()) { diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 8bb0a3081..7b4b40788 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -405,7 +405,8 @@ Swords.SubSkill.SerratedStrikes.Stat=Serrated Strikes Length Swords.SubSkill.Rupture.Name=Rupture Swords.SubSkill.Rupture.Description=Apply a powerful bleed DoT Swords.SubSkill.Stab.Name=Stab -Swords.SubSkill.Stab.Description=Adds {0} extra damage when attacking players. +Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks. +Swords.SubSkill.Stab.Stat=Stab Damage Swords.SubSkill.Rupture.Stat=Rupture Chance Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs] Swords.Effect.4=Serrated Strikes Rupture+ From 404a876d6bb1bf4d4d171ed92a2405b8173bb003 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 12:36:46 -0700 Subject: [PATCH 07/10] Compiler made an oopsie --- src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 eaff7e518..afeb6d864 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -63,7 +63,7 @@ public final class CombatUtils { //Add Stab Damage if(swordsManager.canUseStab()) { - event.setDamage(swordsManager.getStabDamage(target) + initialDamage); + event.setDamage(swordsManager.getStabDamage() + initialDamage); } if (swordsManager.canUseSerratedStrike()) { From 658382dba29c2ce518f7e2326fb19533283ef828 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 16:30:29 -0700 Subject: [PATCH 08/10] Added Limit Break to Archery, Axes, Swords, Unarmed --- Changelog.txt | 15 ++- .../commands/skills/ArcheryCommand.java | 6 ++ .../nossr50/commands/skills/AxesCommand.java | 6 ++ .../commands/skills/SwordsCommand.java | 6 ++ .../commands/skills/UnarmedCommand.java | 6 ++ .../datatypes/skills/PrimarySkillType.java | 8 +- .../datatypes/skills/SubSkillType.java | 4 + .../nossr50/listeners/EntityListener.java | 30 +++++- .../nossr50/util/skills/CombatUtils.java | 82 ++++++++++++----- .../resources/locale/locale_en_US.properties | 12 +++ src/main/resources/plugin.yml | 14 +++ src/main/resources/skillranks.yml | 92 +++++++++++++++++++ 12 files changed, 250 insertions(+), 31 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index c3ef43905..75babd7ba 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,12 +8,25 @@ Key: - Removal Version 2.1.26 + Added new scaling damage buffs to all existing Combat Skills + Fixed a bug where Berserk was not adding 50% damage to attacks + Changed how Iron Arm damage is calculated (Rank 1 now effectively gives twice the damage bonus it used to, with a net result of 3 extra RAW damage before reductions) + XP is not granted for attacks while attacking with vanilla attack speed cooldown Added a new subskill named Stab to Swords to help with lategame PVP combat - New permission node 'mcmmo.ability.swords.stab' + New permission node '' NOTE: Combat skills will be completely configurable in the upcoming 2.2 update, be patient <3 + New Permissions + - mcmmo.ability.unarmed.unarmedlimitbreak + - mcmmo.ability.axes.axeslimitbreak + - mcmmo.ability.archery.archerylimitbreak + - mcmmo.ability.swords.swordslimitbreak + - mcmmo.ability.swords.stab + Notes: + The new Limit Break subskills are intended to make Prot IV players less tanky and for you to feel more powerful for having high skill level. + I collected several sets of data before making these changes, including damage to player with and without prot 4 diamond armor, damage to those players with and without enchanted weapons, damage with and without leveling your skills, and combinations of the previously mentioned things. These changes are meant to be minor tweaks for endgame PVP, a dedicated PVP update where I do a lot more research and testing will happen after 2.3 diff --git a/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java index 37fe92f67..5b9359da7 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java @@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.skills.archery.Archery; import com.gmail.nossr50.util.TextComponentFactory; +import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.SkillActivationType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; @@ -74,6 +75,11 @@ public class ArcheryCommand extends SkillCommand { messages.add(getStatMessage(SubSkillType.ARCHERY_SKILL_SHOT, skillShotBonus)); } + if(canUseSubskill(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK)) { + messages.add(getStatMessage(SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK, + String.valueOf(CombatUtils.getLimitBreakDamage(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK)))); + } + return messages; } diff --git a/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java index b4518bc4f..857b07f03 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java @@ -7,6 +7,7 @@ import com.gmail.nossr50.skills.axes.Axes; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.player.UserManager; +import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillActivationType; import net.md_5.bungee.api.chat.TextComponent; @@ -95,6 +96,11 @@ public class AxesCommand extends SkillCommand { + (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", skullSplitterLengthEndurance) : "")); } + if(canUseSubskill(player, SubSkillType.AXES_AXES_LIMIT_BREAK)) { + messages.add(getStatMessage(SubSkillType.AXES_AXES_LIMIT_BREAK, + String.valueOf(CombatUtils.getLimitBreakDamage(player, SubSkillType.AXES_AXES_LIMIT_BREAK)))); + } + return messages; } diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java index e364c605f..3b46b7b9a 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java @@ -7,6 +7,7 @@ import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.player.UserManager; +import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillActivationType; import net.md_5.bungee.api.chat.TextComponent; @@ -100,6 +101,11 @@ public class SwordsCommand extends SkillCommand { String.valueOf(UserManager.getPlayer(player).getSwordsManager().getStabDamage()))); } + if(canUseSubskill(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK)) { + messages.add(getStatMessage(SubSkillType.SWORDS_SWORDS_LIMIT_BREAK, + String.valueOf(CombatUtils.getLimitBreakDamage(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK)))); + } + return messages; } diff --git a/src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java index 59ce4f09f..64952dca4 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java @@ -6,6 +6,7 @@ import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.player.UserManager; +import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillActivationType; import net.md_5.bungee.api.chat.TextComponent; @@ -113,6 +114,11 @@ public class UnarmedCommand extends SkillCommand { //messages.add(LocaleLoader.getString("Unarmed.Ability.Chance.IronGrip", ironGripChance) + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", ironGripChanceLucky) : "")); } + if(canUseSubskill(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK)) { + messages.add(getStatMessage(SubSkillType.UNARMED_UNARMED_LIMIT_BREAK, + String.valueOf(CombatUtils.getLimitBreakDamage(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK)))); + } + return messages; } diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java index 6c40760ad..9adc27895 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java @@ -40,9 +40,9 @@ public enum PrimarySkillType { ALCHEMY(AlchemyManager.class, Color.FUCHSIA, ImmutableList.of(SubSkillType.ALCHEMY_CATALYSIS, SubSkillType.ALCHEMY_CONCOCTIONS)), ARCHERY(ArcheryManager.class, Color.MAROON, - ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT)), + ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT)), AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE, - ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)), + ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_AXES_LIMIT_BREAK, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)), EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL, ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_ARCHAEOLOGY)), FISHING(FishingManager.class, Color.NAVY, @@ -58,11 +58,11 @@ public enum PrimarySkillType { SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SubSkillType.SMELTING_UNDERSTANDING_THE_ART, /*SubSkillType.SMELTING_FLUX_MINING,*/ SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)), SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, - ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_STAB, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), + ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK, SubSkillType.SWORDS_STAB, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)), TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)), UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, - ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)), + ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)), WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER)); diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java index c743610cc..5495d5336 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java @@ -18,10 +18,12 @@ public enum SubSkillType { ARCHERY_ARROW_RETRIEVAL(1), ARCHERY_DAZE, ARCHERY_SKILL_SHOT(20), + ARCHERY_ARCHERY_LIMIT_BREAK(10), /* Axes */ AXES_ARMOR_IMPACT(20), AXES_AXE_MASTERY(4), + AXES_AXES_LIMIT_BREAK(10), AXES_CRITICAL_STRIKES(1), AXES_GREATER_IMPACT(1), AXES_SKULL_SPLITTER(1), @@ -72,6 +74,7 @@ public enum SubSkillType { SWORDS_RUPTURE(4), SWORDS_SERRATED_STRIKES(1), SWORDS_STAB(2), + SWORDS_SWORDS_LIMIT_BREAK(10), /* Taming */ TAMING_BEAST_LORE(1), @@ -92,6 +95,7 @@ public enum SubSkillType { UNARMED_DISARM(1), UNARMED_IRON_ARM_STYLE(5), UNARMED_IRON_GRIP(1), + UNARMED_UNARMED_LIMIT_BREAK(10), /* Woodcutting */ /* WOODCUTTING_BARK_SURGEON(3),*/ diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index e3e9b86f7..fb17667e3 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -187,7 +187,7 @@ public class EntityListener implements Listener { } } -/* @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + /*@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageDebugLowest(EntityDamageEvent event) { if(event instanceof FakeEntityDamageByEntityEvent) @@ -196,7 +196,8 @@ public class EntityListener implements Listener { if(event instanceof FakeEntityDamageEvent) return; - Bukkit.broadcastMessage(ChatColor.GOLD+"DMG Before Events: "+ChatColor.RESET+event.getDamage()); + Bukkit.broadcastMessage(ChatColor.DARK_AQUA+"DMG Before Events: " + +ChatColor.RESET+event.getDamage()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -208,9 +209,30 @@ public class EntityListener implements Listener { if(event instanceof FakeEntityDamageEvent) return; + if(!(event.getEntity() instanceof LivingEntity)) + return; + + LivingEntity entity = (LivingEntity) event.getEntity(); + double rawDamage = event.getDamage(); double dmgAfterReduction = event.getFinalDamage(); - Bukkit.broadcastMessage(ChatColor.GOLD+"DEBUG: " + event.getEntity().getName()+ChatColor.RESET+"RawDMG["+rawDamage+"], "+"FinalDMG=["+dmgAfterReduction+"]"); + + Bukkit.broadcastMessage(ChatColor.GOLD+"DMG After Events: " + + event.getEntity().getName()+ChatColor.RESET + +"RawDMG["+rawDamage+"], " + +"FinalDMG=["+dmgAfterReduction+"]"); + + Bukkit.broadcastMessage( + event.getEntity().getName() + +ChatColor.GREEN + +" HP " + +ChatColor.RESET + +entity.getHealth() + +ChatColor.YELLOW + +" -> " + +ChatColor.RESET + +(entity.getHealth()-event.getFinalDamage())); + Bukkit.broadcastMessage(""); }*/ @@ -381,6 +403,8 @@ public class EntityListener implements Listener { } } } + + } /** 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 afeb6d864..ae6910fee 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent; import com.gmail.nossr50.events.fake.FakeEntityDamageEvent; import com.gmail.nossr50.mcMMO; @@ -46,6 +47,7 @@ public final class CombatUtils { McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); SwordsManager swordsManager = mcMMOPlayer.getSwordsManager(); double initialDamage = event.getDamage(); + double finalDamage = initialDamage; Map modifiers = getModifiers(event); @@ -63,13 +65,19 @@ public final class CombatUtils { //Add Stab Damage if(swordsManager.canUseStab()) { - event.setDamage(swordsManager.getStabDamage() + initialDamage); + finalDamage+=swordsManager.getStabDamage(); } if (swordsManager.canUseSerratedStrike()) { swordsManager.serratedStrikes(target, initialDamage, modifiers); } + if(canUseLimitBreak(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK)) + { + finalDamage+=getLimitBreakDamage(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK); + } + + applyScaledModifiers(initialDamage, finalDamage, event); startGainXp(mcMMOPlayer, target, PrimarySkillType.SWORDS); } @@ -90,24 +98,29 @@ public final class CombatUtils { } if (axesManager.canUseAxeMastery()) { - finalDamage += axesManager.axeMastery(); - } - - if (axesManager.canCriticalHit(target)) { - finalDamage += axesManager.criticalHit(target, initialDamage); + finalDamage+=axesManager.axeMastery(); } if (axesManager.canImpact(target)) { axesManager.impactCheck(target); } else if (axesManager.canGreaterImpact(target)) { - finalDamage += axesManager.greaterImpact(target); + finalDamage+=axesManager.greaterImpact(target); } if (axesManager.canUseSkullSplitter(target)) { axesManager.skullSplitterCheck(target, initialDamage, modifiers); } + if (axesManager.canCriticalHit(target)) { + finalDamage+=axesManager.criticalHit(target, finalDamage); + } + + if(canUseLimitBreak(player, SubSkillType.AXES_AXES_LIMIT_BREAK)) + { + finalDamage+=getLimitBreakDamage(player, SubSkillType.AXES_AXES_LIMIT_BREAK); + } + applyScaledModifiers(initialDamage, finalDamage, event); startGainXp(mcMMOPlayer, target, PrimarySkillType.AXES); } @@ -116,7 +129,7 @@ public final class CombatUtils { if (event.getCause() == DamageCause.THORNS) { return; } - + double initialDamage = event.getDamage(); double finalDamage = initialDamage; @@ -127,25 +140,29 @@ public final class CombatUtils { mcMMOPlayer.checkAbilityActivation(PrimarySkillType.UNARMED); } - //Only execute bonuses if the player is not spamming if(unarmedManager.isPunchingCooldownOver()) { + //Only execute bonuses if the player is not spamming if (unarmedManager.canUseIronArm()) { - finalDamage += unarmedManager.ironArm(); + finalDamage+=unarmedManager.ironArm(); } if (unarmedManager.canUseBerserk()) { - finalDamage += unarmedManager.berserkDamage(initialDamage); + finalDamage+=unarmedManager.berserkDamage(finalDamage); } if (unarmedManager.canDisarm(target)) { unarmedManager.disarmCheck((Player) target); } + + if(canUseLimitBreak(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK)) + { + finalDamage+=getLimitBreakDamage(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK); + } } applyScaledModifiers(initialDamage, finalDamage, event); startGainXp(mcMMOPlayer, target, PrimarySkillType.UNARMED); - Unarmed.lastAttacked = System.currentTimeMillis(); //Track how often the player is punching } @@ -163,11 +180,11 @@ public final class CombatUtils { tamingManager.pummel(target, wolf); if (tamingManager.canUseSharpenedClaws()) { - finalDamage += tamingManager.sharpenedClaws(); + finalDamage+=tamingManager.sharpenedClaws(); } if (tamingManager.canUseGore()) { - finalDamage += tamingManager.gore(target, initialDamage); + finalDamage+=tamingManager.gore(target, initialDamage); } applyScaledModifiers(initialDamage, finalDamage, event); @@ -176,10 +193,11 @@ public final class CombatUtils { private static void processArcheryCombat(LivingEntity target, Player player, EntityDamageByEntityEvent event, Arrow arrow) { double initialDamage = event.getDamage(); - double finalDamage = initialDamage; McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); ArcheryManager archeryManager = mcMMOPlayer.getArcheryManager(); + + double finalDamage = event.getDamage(); if (target instanceof Player && PrimarySkillType.UNARMED.getPVPEnabled()) { UnarmedManager unarmedManager = UserManager.getPlayer((Player) target).getUnarmedManager(); @@ -194,17 +212,22 @@ public final class CombatUtils { } if (archeryManager.canSkillShot()) { - finalDamage += archeryManager.skillShot(initialDamage); + finalDamage+=archeryManager.skillShot(initialDamage); } if (archeryManager.canDaze(target)) { - finalDamage += archeryManager.daze((Player) target); + finalDamage+=archeryManager.daze((Player) target); } if (!arrow.hasMetadata(mcMMO.infiniteArrowKey) && archeryManager.canRetrieveArrows()) { archeryManager.retrieveArrows(target); } + if(canUseLimitBreak(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK)) + { + finalDamage+=getLimitBreakDamage(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK); + } + double distanceMultiplier = archeryManager.distanceXpBonusMultiplier(target, arrow); applyScaledModifiers(initialDamage, finalDamage, event); @@ -217,8 +240,7 @@ public final class CombatUtils { * @param event The event to run the combat checks on. */ public static void processCombatAttack(EntityDamageByEntityEvent event, Entity attacker, LivingEntity target) { - Entity damager = event.getDamager(); - EntityType entityType = damager.getType(); + EntityType entityType = attacker.getType(); if (attacker instanceof Player && entityType == EntityType.PLAYER) { Player player = (Player) attacker; @@ -275,7 +297,7 @@ public final class CombatUtils { } else if (entityType == EntityType.WOLF) { - Wolf wolf = (Wolf) damager; + Wolf wolf = (Wolf) attacker; AnimalTamer tamer = wolf.getOwner(); if (tamer != null && tamer instanceof Player && PrimarySkillType.TAMING.shouldProcess(target)) { @@ -287,7 +309,7 @@ public final class CombatUtils { } } else if (entityType == EntityType.ARROW) { - Arrow arrow = (Arrow) damager; + Arrow arrow = (Arrow) attacker; ProjectileSource projectileSource = arrow.getShooter(); if (projectileSource != null && projectileSource instanceof Player && PrimarySkillType.ARCHERY.shouldProcess(target)) { @@ -328,13 +350,27 @@ public final class CombatUtils { SwordsManager swordsManager = mcMMOPlayer.getSwordsManager(); - if (swordsManager.canUseCounterAttack(damager)) { - swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage()); + if (swordsManager.canUseCounterAttack(attacker)) { + swordsManager.counterAttackChecks((LivingEntity) attacker, event.getDamage()); } } } } + public static int getLimitBreakDamage(Player player, SubSkillType subSkillType) { + return RankUtils.getRank(player, subSkillType); + } + + /** + * Checks if player has access to their weapons limit break + * @param player target player + * @return true if the player has access to the limit break + */ + public static boolean canUseLimitBreak(Player player, SubSkillType subSkillType) { + return RankUtils.hasUnlockedSubskill(player, subSkillType) + && Permissions.isSubSkillEnabled(player, subSkillType); + } + /** * Attempt to damage target for value dmg with reason CUSTOM * diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 7b4b40788..1d56ea92f 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -166,6 +166,9 @@ Archery.SubSkill.Daze.Stat=Daze Chance Archery.SubSkill.ArrowRetrieval.Name=Arrow Retrieval Archery.SubSkill.ArrowRetrieval.Description=Chance to retrieve arrows from corpses Archery.SubSkill.ArrowRetrieval.Stat=Arrow Recovery Chance +Archery.SubSkill.ArcheryLimitBreak.Name=Archery Limit Break +Archery.SubSkill.ArcheryLimitBreak.Description=Breaking your limits. +Archery.SubSkill.ArcheryLimitBreak.Stat=Limit Break Bonus DMG Archery.Listener=Archery: Archery.SkillName=ARCHERY #AXES @@ -190,6 +193,9 @@ Axes.SubSkill.CriticalStrikes.Description=Double Damage Axes.SubSkill.CriticalStrikes.Stat=Critical Strike Chance Axes.SubSkill.AxeMastery.Name=Axe Mastery Axes.SubSkill.AxeMastery.Description=Adds bonus DMG +Axes.SubSkill.AxesLimitBreak.Name=Axes Limit Break +Axes.SubSkill.AxesLimitBreak.Description=Breaking your limits. +Axes.SubSkill.AxesLimitBreak.Stat=Limit Break Bonus DMG Axes.SubSkill.ArmorImpact.Name=Armor Impact Axes.SubSkill.ArmorImpact.Description=Strike with enough force to shatter armor Axes.SubSkill.GreaterImpact.Name=Greater Impact @@ -407,6 +413,9 @@ Swords.SubSkill.Rupture.Description=Apply a powerful bleed DoT Swords.SubSkill.Stab.Name=Stab Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks. Swords.SubSkill.Stab.Stat=Stab Damage +Swords.SubSkill.SwordsLimitBreak.Name=Swords Limit Break +Swords.SubSkill.SwordsLimitBreak.Description=Breaking your limits. +Swords.SubSkill.SwordsLimitBreak.Stat=Limit Break Bonus DMG Swords.SubSkill.Rupture.Stat=Rupture Chance Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs] Swords.Effect.4=Serrated Strikes Rupture+ @@ -483,6 +492,9 @@ Unarmed.SubSkill.Berserk.Stat=Berserk Length Unarmed.SubSkill.Disarm.Name=Disarm Unarmed.SubSkill.Disarm.Description=Drops the foes item held in hand Unarmed.SubSkill.Disarm.Stat=Disarm Chance +Unarmed.SubSkill.UnarmedLimitBreak.Name=Unarmed Limit Break +Unarmed.SubSkill.UnarmedLimitBreak.Description=Breaking your limits. +Unarmed.SubSkill.UnarmedLimitBreak.Stat=Limit Break Bonus DMG Unarmed.SubSkill.IronArmStyle.Name=Iron Arm Style Unarmed.SubSkill.IronArmStyle.Description=Hardens your arm over time Unarmed.SubSkill.ArrowDeflect.Name=Arrow Deflect diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d14618a08..c7fb456a8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -248,6 +248,9 @@ permissions: mcmmo.ability.archery.skillshot: true mcmmo.ability.archery.daze: true mcmmo.ability.archery.arrowretrieval: true + mcmmo.ability.archery.archerylimitbreak: true + mcmmo.ability.archery.archerylimitbreak: + description: Adds damage to bows and crossbows mcmmo.ability.archery.skillshot: description: Allows bonus damage from the Archery SkillShot ability mcmmo.ability.archery.daze: @@ -267,6 +270,9 @@ permissions: mcmmo.ability.axes.greaterimpact: true mcmmo.ability.axes.armorimpact: true mcmmo.ability.axes.skullsplitter: true + mcmmo.ability.axes.axeslimitbreak: true + mcmmo.ability.axes.axeslimitbreak: + description: Adds damage to axes mcmmo.ability.axes.axemastery: description: Allows bonus damage from Axes mcmmo.ability.axes.criticalhit: @@ -564,6 +570,11 @@ permissions: mcmmo.ability.swords.stab: true mcmmo.ability.swords.counterattack: true mcmmo.ability.swords.serratedstrikes: true + mcmmo.ability.swords.swordslimitbreak: true + mcmmo.ability.swords.stab: + description: Adds damage to swords + mcmmo.ability.swords.swordslimitbreak: + description: Adds damagee to swords mcmmo.ability.swords.rupture: description: Allows access to the Bleed ability mcmmo.ability.swords.counterattack: @@ -640,6 +651,9 @@ permissions: mcmmo.ability.unarmed.arrowdeflect: true mcmmo.ability.unarmed.disarm: true mcmmo.ability.unarmed.irongrip: true + mcmmo.ability.unarmed.unarmedlimitbreak: true + mcmmo.ability.unarmed.unarmedlimitbreak: + description: Adds damage to unarmed attacks mcmmo.ability.unarmed.berserk: description: Allows access to the Berserker ability mcmmo.ability.unarmed.blockcracker: diff --git a/src/main/resources/skillranks.yml b/src/main/resources/skillranks.yml index 09b68541c..0197e7055 100644 --- a/src/main/resources/skillranks.yml +++ b/src/main/resources/skillranks.yml @@ -31,6 +31,29 @@ Alchemy: Rank_7: 850 Rank_8: 1000 Archery: + ArcheryLimitBreak: + Standard: + Rank_1: 10 + Rank_2: 20 + Rank_3: 30 + Rank_4: 40 + Rank_5: 50 + Rank_6: 60 + Rank_7: 70 + Rank_8: 80 + Rank_9: 90 + Rank_10: 100 + RetroMode: + Rank_1: 100 + Rank_2: 200 + Rank_3: 300 + Rank_4: 400 + Rank_5: 500 + Rank_6: 600 + Rank_7: 700 + Rank_8: 800 + Rank_9: 900 + Rank_10: 1000 ArrowRetrieval: Standard: Rank_1: 2 @@ -86,6 +109,29 @@ Acrobatics: RetroMode: Rank_1: 20 Axes: + AxesLimitBreak: + Standard: + Rank_1: 10 + Rank_2: 20 + Rank_3: 30 + Rank_4: 40 + Rank_5: 50 + Rank_6: 60 + Rank_7: 70 + Rank_8: 80 + Rank_9: 90 + Rank_10: 100 + RetroMode: + Rank_1: 100 + Rank_2: 200 + Rank_3: 300 + Rank_4: 400 + Rank_5: 500 + Rank_6: 600 + Rank_7: 700 + Rank_8: 800 + Rank_9: 900 + Rank_10: 1000 SkullSplitter: Standard: Rank_1: 5 @@ -381,6 +427,29 @@ Fishing: Rank_7: 850 Rank_8: 1000 Swords: + SwordsLimitBreak: + Standard: + Rank_1: 10 + Rank_2: 20 + Rank_3: 30 + Rank_4: 40 + Rank_5: 50 + Rank_6: 60 + Rank_7: 70 + Rank_8: 80 + Rank_9: 90 + Rank_10: 100 + RetroMode: + Rank_1: 100 + Rank_2: 200 + Rank_3: 300 + Rank_4: 400 + Rank_5: 500 + Rank_6: 600 + Rank_7: 700 + Rank_8: 800 + Rank_9: 900 + Rank_10: 1000 Stab: Standard: Rank_1: 75 @@ -410,6 +479,29 @@ Swords: RetroMode: Rank_1: 100 Unarmed: + UnarmedLimitBreak: + Standard: + Rank_1: 10 + Rank_2: 20 + Rank_3: 30 + Rank_4: 40 + Rank_5: 50 + Rank_6: 60 + Rank_7: 70 + Rank_8: 80 + Rank_9: 90 + Rank_10: 100 + RetroMode: + Rank_1: 100 + Rank_2: 200 + Rank_3: 300 + Rank_4: 400 + Rank_5: 500 + Rank_6: 600 + Rank_7: 700 + Rank_8: 800 + Rank_9: 900 + Rank_10: 1000 Berserk: Standard: Rank_1: 10 From 65687ca6033bcaaed9b894cf61ecdb96f7fbdfe1 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 16:40:08 -0700 Subject: [PATCH 09/10] 2.1.26 - Combat Skills are MUCH more deadly --- Changelog.txt | 17 +++++------------ pom.xml | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 75babd7ba..2bf09f061 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -9,12 +9,10 @@ Key: Version 2.1.26 Added new scaling damage buffs to all existing Combat Skills + Added a new subskill named Stab to Swords Fixed a bug where Berserk was not adding 50% damage to attacks + Changed how Iron Arm damage is calculated (Rank 1 now effectively gives twice the damage bonus it used to, higher ranks have more damage) - Changed how Iron Arm damage is calculated (Rank 1 now effectively gives twice the damage bonus it used to, with a net result of 3 extra RAW damage before reductions) - XP is not granted for attacks while attacking with vanilla attack speed cooldown - Added a new subskill named Stab to Swords to help with lategame PVP combat - New permission node '' NOTE: Combat skills will be completely configurable in the upcoming 2.2 update, be patient <3 New Permissions @@ -26,15 +24,10 @@ Version 2.1.26 Notes: The new Limit Break subskills are intended to make Prot IV players less tanky and for you to feel more powerful for having high skill level. - + Limit Break has 10 ranks, each rank gives 1 extra RAW damage, this is damage before reductions from armor and enchantments. The net result is you deal about 50% more damage with an end game skill compared to before. + With these new changes, most skills can 2 shot normal diamond armor, and it takes about 5 hits to kill someone in Prot IV Diamond Armor. + I'm not sure everyone will like these changes, the net result is players are a lot easier to kill now, whereas before you could take quite a beating before getting killed. I collected several sets of data before making these changes, including damage to player with and without prot 4 diamond armor, damage to those players with and without enchanted weapons, damage with and without leveling your skills, and combinations of the previously mentioned things. - These changes are meant to be minor tweaks for endgame PVP, a dedicated PVP update where I do a lot more research and testing will happen after 2.3 - - Stab is unlocked at level 75/750, and ranks up again at level 100/1000 - Stab permanently adds small amounts of extra damage when attacking with a sword. - Stab is meant to make up for Swords lackluster damage against fully geared opponents. - - Iron Arm got buffed because Unarmed was dealing lackluster damage compared to other skills. Version 2.1.25 Shake now has an upper limit of damage (10) - Will be configurable in 2.2 which is coming in the near future diff --git a/pom.xml b/pom.xml index a31b7980e..fdf245bdd 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.26-SNAPSHOT + 2.1.26 mcMMO https://github.com/mcMMO-Dev/mcMMO From 732726bbd3fc1dd8bff2318f34899d793bdfe371 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 27 Mar 2019 21:05:57 -0700 Subject: [PATCH 10/10] 2.1.27 - Fixed an exploit that allowed players to dupe torches, rails, etc --- Changelog.txt | 3 +++ pom.xml | 2 +- src/main/java/com/gmail/nossr50/listeners/BlockListener.java | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Changelog.txt b/Changelog.txt index 2bf09f061..82235738a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -7,6 +7,9 @@ Key: ! Change - Removal +Version 2.1.27 + Fixed an exploit that allowed players to duplicate torches, and rails + Version 2.1.26 Added new scaling damage buffs to all existing Combat Skills Added a new subskill named Stab to Swords diff --git a/pom.xml b/pom.xml index fdf245bdd..8e40134d4 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.26 + 2.1.27 mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 55fd3c69d..9cf7452d1 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -62,6 +62,9 @@ public class BlockListener implements Listener { { ItemStack is = new ItemStack(item.getItemStack()); + if(!event.getBlock().getDrops().contains(is)) + continue; + if(is.getAmount() <= 0) continue; @@ -70,6 +73,7 @@ public class BlockListener implements Listener { //Extra Protection if(event.getBlock().getState() instanceof Container) return; + event.getBlock().getState().removeMetadata(mcMMO.doubleDropKey, plugin); event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); }