Browse Source

Merge branch 'master' of github.com:mcMMO-Dev/mcMMO into tridentsxbows

nossr50 4 years ago
parent
commit
9e5c9ec567

+ 23 - 1
Changelog.txt

@@ -60,11 +60,33 @@ Version 2.2.000
 
 
     Notes:
     Notes:
     These are the first new skills that I've written for mcMMO in about 9 years, I'll be listening closely to feedback and tweaking them often.
     These are the first new skills that I've written for mcMMO in about 9 years, I'll be listening closely to feedback and tweaking them often.
+Version 2.1.145
+    Reverted 'Changed one of the PlayerInteractEvent listeners to ignore cancelled events' from 2.1.144
+
+
+Version 2.1.144
+    Steel Arm Style damage is now customizable in advanced.yml (make sure to set override to true)
+    Fixed a bug where Deflect worked against non-arrow projectiles
+    Fixed a bug where Deflect was checked twice, resulting in two chances to deflect effectively
+    Fixed a bug where Roll wouldn't award XP when fall height was over a certain amount
+    Lowered the XP ceiling of Roll
+    Fixed a NPE that would happen involving taming in combat processing
+    Updated hu_HU locale (thanks andris155)
+    Fixed a bug where mcMMO could erase item data on Wheat Seeds when using Green Thumb on a block
+    Changed one of the PlayerInteractEvent listeners to ignore cancelled events (should improve plugin compatibility)
+    mmodebug mode now prints some information when fuel efficiency is applied to a furnace
+
+    NOTES:
+    I seem to consistently find old bugs in mcMMO, this deflect bug where it was checked twice, who knows how many years its been in mcMMO, I didn't check but its probably between 5-7.
+    I was waiting to make Steel Arm Customizable for the config update (due in the future), but enough people ask for it that I decided to do the extra work to put it into 2.1.XX
+    Tridents & Crossbows is likely going to be in development continuing into September, I am taking my time to make it feature packed and I hope you guys will appreciate it.
+
+>>>>>>> 2810d36e085d6adaa209a6a119f92504234a0560
 Version 2.1.143
 Version 2.1.143
     mcMMO now tracks super ability boosted items through persistent metadata
     mcMMO now tracks super ability boosted items through persistent metadata
     mcMMO no longer relies on lore to tell if an item has been modified by a super ability
     mcMMO no longer relies on lore to tell if an item has been modified by a super ability
     Slight buff to Rupture (1 more tick duration across all ranks)
     Slight buff to Rupture (1 more tick duration across all ranks)
-    Lore no longer gets added to items being buffed by mcMMO
+    Lore no longer gets added to items being buffed by mcMMO./
 
 
     NOTES:
     NOTES:
         The item tracking is persistent for MC versions 1.13-1.16.2 (and beyond). However the code handling the persistence for 1.13.2 differs from the other versions. It shouldn't result in any problems.
         The item tracking is persistent for MC versions 1.13-1.16.2 (and beyond). However the code handling the persistence for 1.13.2 differs from the other versions. It shouldn't result in any problems.

+ 5 - 0
src/main/java/com/gmail/nossr50/config/AdvancedConfig.java

@@ -981,6 +981,11 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
 
 
     /* UNARMED */
     /* UNARMED */
 
 
+    public boolean isSteelArmDamageCustom() { return config.getBoolean("Skills.Unarmed.SteelArmStyle.Damage_Override", false); }
+    public double getSteelArmOverride(int rank, double def) {
+        String key = "Rank_" + rank;
+        return config.getDouble("Skills.Unarmed.SteelArmStyle.Override." + key, def);
+    }
     public boolean getDisarmProtected() { return config.getBoolean("Skills.Unarmed.Disarm.AntiTheft", false); }
     public boolean getDisarmProtected() { return config.getBoolean("Skills.Unarmed.Disarm.AntiTheft", false); }
 
 
     /* WOODCUTTING */
     /* WOODCUTTING */

+ 5 - 5
src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java

@@ -75,7 +75,7 @@ public class Roll extends AcrobaticsSubSkill {
              */
              */
             Player player = (Player) ((EntityDamageEvent) event).getEntity();
             Player player = (Player) ((EntityDamageEvent) event).getEntity();
             if (canRoll(player)) {
             if (canRoll(player)) {
-                entityDamageEvent.setDamage(rollCheck(player, mmoPlayer, entityDamageEvent.getDamage()));
+                entityDamageEvent.setDamage(rollCheck(player, mmoPlayer, entityDamageEvent.getFinalDamage()));
 
 
                 if (entityDamageEvent.getFinalDamage() == 0) {
                 if (entityDamageEvent.getFinalDamage() == 0) {
                     entityDamageEvent.setCancelled(true);
                     entityDamageEvent.setCancelled(true);
@@ -119,8 +119,8 @@ public class Roll extends AcrobaticsSubSkill {
         String rollChance, rollChanceLucky, gracefulRollChance, gracefulRollChanceLucky;
         String rollChance, rollChanceLucky, gracefulRollChance, gracefulRollChanceLucky;
 
 
         /* Values related to the player */
         /* Values related to the player */
-        PlayerProfile playerProfile = mcMMO.getUserManager().getPlayer(player);
-        float skillValue = playerProfile.getSkillLevel(getPrimarySkill());
+        McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player);
+        float skillValue = mmoPlayer.getExperienceManager().getSkillLevel(getPrimarySkill());
         boolean isLucky = Permissions.lucky(player, getPrimarySkill());
         boolean isLucky = Permissions.lucky(player, getPrimarySkill());
 
 
         String[] rollStrings = RandomChanceUtil.calculateAbilityDisplayValues(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, player, SubSkillType.ACROBATICS_ROLL);
         String[] rollStrings = RandomChanceUtil.calculateAbilityDisplayValues(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, player, SubSkillType.ACROBATICS_ROLL);
@@ -188,7 +188,7 @@ public class Roll extends AcrobaticsSubSkill {
      */
      */
     private double rollCheck(Player player, McMMOPlayer mmoPlayer, double damage) {
     private double rollCheck(Player player, McMMOPlayer mmoPlayer, double damage) {
 
 
-        int skillLevel = mmoPlayer.getSkillLevel(getPrimarySkill());
+        int skillLevel = mmoPlayer.getExperienceManager().getSkillLevel(getPrimarySkill());
 
 
         if (player.isSneaking()) {
         if (player.isSneaking()) {
             return gracefulRollCheck(player, mmoPlayer, damage, skillLevel);
             return gracefulRollCheck(player, mmoPlayer, damage, skillLevel);
@@ -292,7 +292,7 @@ public class Roll extends AcrobaticsSubSkill {
 
 
     private float calculateRollXP(Player player, double damage, boolean isRoll) {
     private float calculateRollXP(Player player, double damage, boolean isRoll) {
         //Clamp Damage to account for insane DRs
         //Clamp Damage to account for insane DRs
-        damage = Math.min(40, damage);
+        damage = Math.min(20, damage);
 
 
         ItemStack boots = player.getInventory().getBoots();
         ItemStack boots = player.getInventory().getBoots();
         float xp = (float) (damage * (isRoll ? ExperienceConfig.getInstance().getRollXPModifier() : ExperienceConfig.getInstance().getFallXPModifier()));
         float xp = (float) (damage * (isRoll ? ExperienceConfig.getInstance().getRollXPModifier() : ExperienceConfig.getInstance().getFallXPModifier()));

+ 2 - 2
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -412,7 +412,7 @@ public class EntityListener implements Listener {
             Player defendingPlayer = (Player) defender;
             Player defendingPlayer = (Player) defender;
             Player attackingPlayer;
             Player attackingPlayer;
 
 
-            //If the attacker is a Player or a projectile beloning to a player
+            //If the attacker is a Player or a projectile belonging to a player
             if(attacker instanceof Projectile || attacker instanceof Player) {
             if(attacker instanceof Projectile || attacker instanceof Player) {
                 if(attacker instanceof Projectile) {
                 if(attacker instanceof Projectile) {
                     Projectile projectile = (Projectile) attacker;
                     Projectile projectile = (Projectile) attacker;
@@ -433,7 +433,7 @@ public class EntityListener implements Listener {
                         UnarmedManager unarmedManager = mmoPlayer.getUnarmedManager();
                         UnarmedManager unarmedManager = mmoPlayer.getUnarmedManager();
 
 
                         if (unarmedManager.canDeflect()) {
                         if (unarmedManager.canDeflect()) {
-                            if (unarmedManager.deflectCheck()) {
+                            if (projectile instanceof Arrow && unarmedManager.deflectCheck()) {
                                 event.setCancelled(true);
                                 event.setCancelled(true);
                                 return;
                                 return;
                             }
                             }

+ 16 - 0
src/main/java/com/gmail/nossr50/listeners/InventoryListener.java

@@ -12,6 +12,7 @@ import com.gmail.nossr50.skills.alchemy.Alchemy;
 import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
 import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
 import com.gmail.nossr50.util.ItemUtils;
 import com.gmail.nossr50.util.ItemUtils;
 import com.gmail.nossr50.util.Permissions;
 import com.gmail.nossr50.util.Permissions;
+import com.gmail.nossr50.util.player.UserManager;
 import com.gmail.nossr50.util.skills.SkillUtils;
 import com.gmail.nossr50.util.skills.SkillUtils;
 import com.gmail.nossr50.worldguard.WorldGuardManager;
 import com.gmail.nossr50.worldguard.WorldGuardManager;
 import com.gmail.nossr50.worldguard.WorldGuardUtils;
 import com.gmail.nossr50.worldguard.WorldGuardUtils;
@@ -71,7 +72,22 @@ public class InventoryListener implements Listener {
                     return;
                     return;
                 }
                 }
 
 
+
+                boolean debugMode = player.isOnline() && mcMMO.getUserManager().getPlayer(player).isDebugMode();
+
+                if(debugMode) {
+                    player.sendMessage("FURNACE FUEL EFFICIENCY DEBUG REPORT");
+                    player.sendMessage("Furnace - "+furnace.hashCode());
+                    player.sendMessage("Furnace Type: "+furnaceBlock.getType().toString());
+                    player.sendMessage("Burn Length before Fuel Efficiency is applied - "+event.getBurnTime());
+                }
+
                 event.setBurnTime(mcMMO.getUserManager().getPlayer(player).getSmeltingManager().fuelEfficiency(event.getBurnTime()));
                 event.setBurnTime(mcMMO.getUserManager().getPlayer(player).getSmeltingManager().fuelEfficiency(event.getBurnTime()));
+
+                if(debugMode) {
+                    player.sendMessage("New Furnace Burn Length (after applying fuel efficiency) "+event.getBurnTime());
+                    player.sendMessage("");
+                }
             }
             }
         }
         }
 
 

+ 9 - 1
src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java

@@ -155,12 +155,20 @@ public class UnarmedManager extends SkillManager {
 
 
     public double getSteelArmStyleDamage() {
     public double getSteelArmStyleDamage() {
         double rank = RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE);
         double rank = RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE);
+
         double bonus = 0;
         double bonus = 0;
 
 
         if(rank >= 18)
         if(rank >= 18)
             bonus = 1 + rank - 18;
             bonus = 1 + rank - 18;
 
 
-        return bonus + 0.5 + (rank / 2);
+        double finalBonus = bonus + 0.5 + (rank / 2);
+
+
+        if(AdvancedConfig.getInstance().isSteelArmDamageCustom()) {
+            return AdvancedConfig.getInstance().getSteelArmOverride(RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE), finalBonus);
+        } else {
+            return finalBonus;
+        }
     }
     }
 
 
     /**
     /**

+ 4 - 4
src/main/java/com/gmail/nossr50/util/compat/CompatibilityManager.java

@@ -5,8 +5,8 @@ import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.compat.layers.attackcooldown.PlayerAttackCooldownExploitPreventionLayer;
 import com.gmail.nossr50.util.compat.layers.attackcooldown.PlayerAttackCooldownExploitPreventionLayer;
 import com.gmail.nossr50.util.compat.layers.persistentdata.AbstractPersistentDataLayer;
 import com.gmail.nossr50.util.compat.layers.persistentdata.AbstractPersistentDataLayer;
-import com.gmail.nossr50.util.compat.layers.persistentdata.SpigotPersistentDataLayer;
-import com.gmail.nossr50.util.compat.layers.persistentdata.SpigotTemporaryDataLayer;
+import com.gmail.nossr50.util.compat.layers.persistentdata.SpigotPersistentDataLayer_1_13;
+import com.gmail.nossr50.util.compat.layers.persistentdata.SpigotPersistentDataLayer_1_14;
 import com.gmail.nossr50.util.nms.NMSVersion;
 import com.gmail.nossr50.util.nms.NMSVersion;
 import com.gmail.nossr50.util.platform.MinecraftGameVersion;
 import com.gmail.nossr50.util.platform.MinecraftGameVersion;
 import org.bukkit.command.CommandSender;
 import org.bukkit.command.CommandSender;
@@ -67,10 +67,10 @@ public class CompatibilityManager {
     private void initPersistentDataLayer() {
     private void initPersistentDataLayer() {
         if(minecraftGameVersion.getMinorVersion().asInt() >= 14 || minecraftGameVersion.getMajorVersion().asInt() >= 2) {
         if(minecraftGameVersion.getMinorVersion().asInt() >= 14 || minecraftGameVersion.getMajorVersion().asInt() >= 2) {
 
 
-            persistentDataLayer = new SpigotPersistentDataLayer();
+            persistentDataLayer = new SpigotPersistentDataLayer_1_14();
         } else {
         } else {
 
 
-            persistentDataLayer = new SpigotTemporaryDataLayer();
+            persistentDataLayer = new SpigotPersistentDataLayer_1_13();
         }
         }
 
 
         supportedLayers.put(CompatibilityType.PERSISTENT_DATA, true);
         supportedLayers.put(CompatibilityType.PERSISTENT_DATA, true);

+ 1 - 1
src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotTemporaryDataLayer.java → src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotPersistentDataLayer_1_13.java

@@ -16,7 +16,7 @@ import java.util.UUID;
 /**
 /**
  * Persistent Data API is unavailable
  * Persistent Data API is unavailable
  */
  */
-public class SpigotTemporaryDataLayer extends AbstractPersistentDataLayer {
+public class SpigotPersistentDataLayer_1_13 extends AbstractPersistentDataLayer {
 
 
     private final String FURNACE_OWNER_METADATA_KEY = "mcMMO_furnace_owner";
     private final String FURNACE_OWNER_METADATA_KEY = "mcMMO_furnace_owner";
 
 

+ 1 - 1
src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotPersistentDataLayer.java → src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotPersistentDataLayer_1_14.java

@@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable;
 
 
 import java.util.UUID;
 import java.util.UUID;
 
 
-public class SpigotPersistentDataLayer extends AbstractPersistentDataLayer {
+public class SpigotPersistentDataLayer_1_14 extends AbstractPersistentDataLayer {
 
 
     /*
     /*
      * Don't modify these keys
      * Don't modify these keys

+ 5 - 12
src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

@@ -276,18 +276,6 @@ public final class CombatUtils {
         
         
         double finalDamage = event.getDamage();
         double finalDamage = event.getDamage();
 
 
-        if (target instanceof Player && PrimarySkillType.UNARMED.getPVPEnabled()) {
-            UnarmedManager unarmedManager = mcMMO.getUserManager().getPlayer((Player) target).getUnarmedManager();
-
-            if (unarmedManager.canDeflect()) {
-                event.setCancelled(unarmedManager.deflectCheck());
-
-                if (event.isCancelled()) {
-                    return;
-                }
-            }
-        }
-
         if (archeryManager.canSkillShot()) {
         if (archeryManager.canSkillShot()) {
             //Not Additive
             //Not Additive
             finalDamage = archeryManager.skillShot(initialDamage);
             finalDamage = archeryManager.skillShot(initialDamage);
@@ -496,6 +484,11 @@ public final class CombatUtils {
 
 
                 if (target.getType() != EntityType.CREEPER && !Misc.isNPCEntityExcludingVillagers(player) && PrimarySkillType.TAMING.getPermissions(player)) {
                 if (target.getType() != EntityType.CREEPER && !Misc.isNPCEntityExcludingVillagers(player) && PrimarySkillType.TAMING.getPermissions(player)) {
                     McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player);
                     McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player);
+
+                    if(mmoPlayer == null) {
+                        return;
+                    }
+
                     TamingManager tamingManager = mmoPlayer.getTamingManager();
                     TamingManager tamingManager = mmoPlayer.getTamingManager();
                     tamingManager.attackTarget(target);
                     tamingManager.attackTarget(target);
                 }
                 }

+ 23 - 2
src/main/resources/advanced.yml

@@ -543,11 +543,32 @@ Skills:
                 Standard: 100
                 Standard: 100
                 RetroMode: 1000
                 RetroMode: 1000
 
 
-        IronArmStyle:
+        SteelArmStyle:
             # BonusMin: Minimum bonus damage for unarmed
             # BonusMin: Minimum bonus damage for unarmed
             # BonusMax: Maximum bonus damage for unarmed
             # BonusMax: Maximum bonus damage for unarmed
             # IncreaseLevel: Bonus damage increases every increase level
             # IncreaseLevel: Bonus damage increases every increase level
-            IncreaseLevel: 10
+            Damage_Override: false
+            Override:
+                Rank_1: 1
+                Rank_2: 1.5
+                Rank_3: 2.0
+                Rank_4: 2.5
+                Rank_5: 3.0
+                Rank_6: 3.5
+                Rank_7: 4.0
+                Rank_8: 4.5
+                Rank_9: 5.0
+                Rank_10: 5.5
+                Rank_11: 6.0
+                Rank_12: 6.5
+                Rank_13: 7.0
+                Rank_14: 7.5
+                Rank_15: 8.0
+                Rank_16: 8.5
+                Rank_17: 9.0
+                Rank_18: 10.5
+                Rank_19: 12.0
+                Rank_20: 13.5
     #
     #
     #  Settings for Woodcutting
     #  Settings for Woodcutting
     ###
     ###