From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Ivan Pekov Date: Tue, 22 Sep 2020 12:52:34 +0300 Subject: [PATCH] PlayerAttackEntityEvent Added per request diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 4e95e542fa79a0cf548a939e575ecca55021229a..124802af04f06dfb90d46960975cdad422088dc4 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -1071,12 +1071,50 @@ public abstract class EntityHuman extends EntityLiving { flag2 = flag2 && !world.paperConfig.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); - if (flag2) { - this.isCritical = true; // Purpur - f *= 1.5F; + /* // Yatopia start - PlayerAttackEntityEvent + if (flag2) { + this.isCritical = true; // Purpur + f *= 1.5F; + } + + f += f1; + */ + net.yatopia.api.event.PlayerAttackEntityEvent playerAttackEntityEvent = + new net.yatopia.api.event.PlayerAttackEntityEvent( + getBukkitEntity(), + entity.getBukkitEntity(), + org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(getItemInMainHand()), + flag2, f + f1 + ); + float totalDamage = f + f1; + org.bukkit.Bukkit.getPluginManager().callEvent(playerAttackEntityEvent); + if (playerAttackEntityEvent.isCancelled()) { + return; } + flag2 = playerAttackEntityEvent.isCritical() && !world.paperConfig.disablePlayerCrits; + if (playerAttackEntityEvent.getDamage() == totalDamage) { + if (flag2) { + this.isCritical = true; // Purpur + f *= 1.5F; + } + f += f1; + } else { + if (playerAttackEntityEvent.getDamage() < 0) { + return; + } + float damage = playerAttackEntityEvent.getDamage() - f1; + if (damage < 0) { + return; + } + if (flag2) { + this.isCritical = true; // Purpur + damage *= 1.5F; + } + damage += f1; + f = damage; + } + // Yatopia end - f += f1; boolean flag3 = false; double d0 = (double) (this.A - this.z);