浏览代码

Fixed a NPE with taming.

nossr50 5 年之前
父节点
当前提交
5f7f6fc55a
共有 3 个文件被更改,包括 26 次插入14 次删除
  1. 3 0
      Changelog.txt
  2. 1 1
      pom.xml
  3. 22 13
      src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

+ 3 - 0
Changelog.txt

@@ -1,3 +1,6 @@
+Version 2.1.97
+    Fixed a NPE that could occur if a pet participated in combat and its master's mcMMO data was not available
+
 Version 2.1.96
     Added the setting 'Skills.General.LimitBreak.AllowPVE' to advanced.yml to allow Limit Break damage bonus to apply in PVE again, defaults to false
     Updated Limit Break locale strings

+ 1 - 1
pom.xml

@@ -2,7 +2,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.gmail.nossr50.mcMMO</groupId>
     <artifactId>mcMMO</artifactId>
-    <version>2.1.96</version>
+    <version>2.1.97-SNAPSHOT</version>
     <name>mcMMO</name>
     <url>https://github.com/mcMMO-Dev/mcMMO</url>
     <scm>

+ 22 - 13
src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

@@ -173,25 +173,34 @@ public final class CombatUtils {
         double initialDamage = event.getDamage();
         double finalDamage = initialDamage;
 
-        McMMOPlayer mcMMOPlayer = UserManager.getPlayer(master);
-        TamingManager tamingManager = mcMMOPlayer.getTamingManager();
+        if(master != null && !master.isOnline() && master.isValid()) {
+            McMMOPlayer mcMMOPlayer = UserManager.getPlayer(master);
 
-        if (tamingManager.canUseFastFoodService()) {
-            tamingManager.fastFoodService(wolf, event.getDamage());
-        }
+            //Make sure the profiles been loaded
+            if(mcMMOPlayer == null) {
+                return;
+            }
 
-        tamingManager.pummel(target, wolf);
+            TamingManager tamingManager = mcMMOPlayer.getTamingManager();
 
-        if (tamingManager.canUseSharpenedClaws()) {
-            finalDamage+=tamingManager.sharpenedClaws();
-        }
+            if (tamingManager.canUseFastFoodService()) {
+                tamingManager.fastFoodService(wolf, event.getDamage());
+            }
+
+            tamingManager.pummel(target, wolf);
 
-        if (tamingManager.canUseGore()) {
-            finalDamage+=tamingManager.gore(target, initialDamage);
+            if (tamingManager.canUseSharpenedClaws()) {
+                finalDamage+=tamingManager.sharpenedClaws();
+            }
+
+            if (tamingManager.canUseGore()) {
+                finalDamage+=tamingManager.gore(target, initialDamage);
+            }
+
+            applyScaledModifiers(initialDamage, finalDamage, event);
+            startGainXp(mcMMOPlayer, target, PrimarySkillType.TAMING);
         }
 
-        applyScaledModifiers(initialDamage, finalDamage, event);
-        startGainXp(mcMMOPlayer, target, PrimarySkillType.TAMING);
     }
 
     private static void processArcheryCombat(LivingEntity target, Player player, EntityDamageByEntityEvent event, Arrow arrow) {