Add critical hit check to EntityDamagedByEntityEvent

This commit is contained in:
BillyGalbreath
2020-11-24 04:35:06 -06:00
parent 1349e72168
commit cfcf7d7d69
2 changed files with 92 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Tue, 24 Nov 2020 04:30:34 -0600
Subject: [PATCH] Add critical hit check to EntityDamagedByEntityEvent
diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
index 869bad740..7ef65376a 100644
--- a/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
+++ b/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
@@ -10,6 +10,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class EntityDamageByEntityEvent extends EntityDamageEvent {
private final Entity damager;
+ private boolean isCritical; // Purpur
public EntityDamageByEntityEvent(@NotNull final Entity damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, final double damage) {
super(damagee, cause, damage);
@@ -30,4 +31,25 @@ public class EntityDamageByEntityEvent extends EntityDamageEvent {
public Entity getDamager() {
return damager;
}
+
+ // Purpur start
+
+ /**
+ * Whether this damage was done by a critical hit
+ *
+ * @return True if critical hit
+ */
+ public boolean isCritical() {
+ return this.isCritical;
+ }
+
+ /**
+ * Set whether this damage was done by a critical hit
+ *
+ * @param isCritical True if critical hit
+ */
+ public void setCritical(boolean isCritical) {
+ this.isCritical = isCritical;
+ }
+ // Purpur end
}

View File

@@ -0,0 +1,48 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Tue, 24 Nov 2020 04:30:46 -0600
Subject: [PATCH] Add critical hit check to EntityDamagedByEntityEvent
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index deb6c9342..00497dd44 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -73,6 +73,7 @@ public abstract class EntityHuman extends EntityLiving {
// Paper start
public boolean affectsSpawning = true;
// Paper end
+ public static boolean isCritical = false; // Purpur
// CraftBukkit start
public boolean fauxSleeping;
@@ -1060,6 +1061,7 @@ public abstract class EntityHuman extends EntityLiving {
flag2 = flag2 && !world.paperConfig.disablePlayerCrits; // Paper
flag2 = flag2 && !this.isSprinting();
if (flag2) {
+ isCritical = true; // Purpur
f *= 1.5F;
}
@@ -1096,6 +1098,7 @@ public abstract class EntityHuman extends EntityLiving {
Vec3D vec3d = entity.getMot();
boolean flag5 = entity.damageEntity(DamageSource.playerAttack(this), f);
+ isCritical = false; // Purpur
if (flag5) {
if (i > 0) {
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 8bb9449a6..544c95bc5 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1049,6 +1049,9 @@ public class CraftEventFactory {
EntityDamageEvent event;
if (damager != null) {
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
+ if (damager instanceof EntityHuman) {
+ ((EntityDamageByEntityEvent) event).setCritical(((EntityHuman)damager).isCritical);
+ }
damager.processClick(EnumHand.MAIN_HAND); // Purpur
} else {
event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);