Files
Purpur/patches/server/0125-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch
William Blake Galbreath 162d05fa3c Updated Upstream (Paper & Tuinity)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
d985976 Add config for mobs immune to default effects (#4835)

Tuinity Changes:
ea43797 Fix portalling from the overworld above y 255
2021-07-10 11:22:56 -05:00

66 lines
4.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <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/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 52d43c2bf1fa1bfa97aab02a9837c6b11ecafc9d..d57a1984328750f5a6db748ef2db21fb3e2dff00 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -182,6 +182,7 @@ public abstract class Player extends LivingEntity {
// Paper start
public boolean affectsSpawning = true;
// Paper end
+ public boolean isCritical = false; // Purpur
// CraftBukkit start
public boolean fauxSleeping;
@@ -1241,6 +1242,7 @@ public abstract class Player extends LivingEntity {
flag2 = flag2 && !level.paperConfig.disablePlayerCrits; // Paper
flag2 = flag2 && !this.isSprinting();
if (flag2) {
+ this.isCritical = true; // Purpur
f *= 1.5F;
}
@@ -1277,6 +1279,7 @@ public abstract class Player extends LivingEntity {
Vec3 vec3d = target.getDeltaMovement();
boolean flag5 = target.hurt(DamageSource.playerAttack(this), f);
+ this.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 f9196241a0d6f9a70c674f7dfca5e013f9839398..f60ef0605163ecf50d9f61a73a84146d214aaf19 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -952,7 +952,7 @@ public class CraftEventFactory {
} else {
damageCause = DamageCause.ENTITY_EXPLOSION;
}
- event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions);
+ event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions, damager instanceof HumanEntity && ((net.minecraft.world.entity.player.Player) damager).isCritical); // Purpur
damager.processClick(InteractionHand.MAIN_HAND); // Purpur
}
event.setCancelled(cancelled);
@@ -1031,7 +1031,7 @@ public class CraftEventFactory {
} else {
throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager.getHandle(), source.msgId));
}
- EntityDamageEvent event = new EntityDamageByEntityEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions);
+ EntityDamageEvent event = new EntityDamageByEntityEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions, entityDamage instanceof HumanEntity && ((net.minecraft.world.entity.player.Player) entityDamage).isCritical); // Purpur
event.setCancelled(cancelled);
CraftEventFactory.callEvent(event);
if (!event.isCancelled()) {
@@ -1088,7 +1088,7 @@ public class CraftEventFactory {
private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map<DamageModifier, Double> modifiers, Map<DamageModifier, Function<? super Double, Double>> modifierFunctions, boolean cancelled) {
EntityDamageEvent event;
if (damager != null) {
- event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
+ event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions, damager instanceof HumanEntity && ((net.minecraft.world.entity.player.Player) damager).isCritical); // Purpur
damager.processClick(InteractionHand.MAIN_HAND); // Purpur
} else {
event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);