Explorar o código

Fixed issues with dealing damage to Entities

GJ %!s(int64=11) %!d(string=hai) anos
pai
achega
89ddf8c4fa

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

@@ -134,6 +134,11 @@ public class EntityListener implements Listener {
 
         Entity defender = event.getEntity();
 
+        if (defender.hasMetadata(mcMMO.customDamageKey)) {
+            defender.removeMetadata(mcMMO.customDamageKey, plugin);
+            return;
+        }
+
         if (Misc.isNPCEntity(defender) || !defender.isValid() || !(defender instanceof LivingEntity)) {
             return;
         }
@@ -344,12 +349,12 @@ public class EntityListener implements Listener {
 
         if (entity.hasMetadata(mcMMO.customNameKey)) {
             entity.setCustomName(entity.getMetadata(mcMMO.customNameKey).get(0).asString());
-            entity.removeMetadata(mcMMO.customNameKey, mcMMO.p);
+            entity.removeMetadata(mcMMO.customNameKey, plugin);
         }
 
         if (entity.hasMetadata(mcMMO.customVisibleKey)) {
             entity.setCustomNameVisible(entity.getMetadata(mcMMO.customVisibleKey).get(0).asBoolean());
-            entity.removeMetadata(mcMMO.customVisibleKey, mcMMO.p);
+            entity.removeMetadata(mcMMO.customVisibleKey, plugin);
         }
     }
 

+ 1 - 0
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -97,6 +97,7 @@ public class mcMMO extends JavaPlugin {
     public final static String infiniteArrowKey    = "mcMMO: Infinite Arrow";
     public final static String bowForceKey         = "mcMMO: Bow Force";
     public final static String arrowDistanceKey    = "mcMMO: Arrow Distance";
+    public final static String customDamageKey     = "mcMMO: Custom Damage";
 
     public static FixedMetadataValue metadataValue;
 

+ 8 - 1
src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

@@ -389,7 +389,14 @@ public final class CombatUtils {
             startGainXp(mcMMOPlayer, target, skill);
         }
 
-        target.damage(damage);
+        int damageTicks = target.getNoDamageTicks();
+        double lastDamage = target.getLastDamage();
+
+        target.setMetadata(mcMMO.customDamageKey, mcMMO.metadataValue);
+        target.damage(damage, attacker);
+
+        target.setNoDamageTicks(damageTicks);
+        target.setLastDamage(lastDamage);
     }
 
     /**