geforkt von Mirrors/Paper
b31089a929
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: d264e972 #591: Add option for a consumer before spawning an item 1c537fce #590: Add spawn and transform reasons for piglin zombification. CraftBukkit Changes: ee5006d1 #810: Add option for a consumer before spawning an item f6a39d3c #809: Add spawn and transform reasons for piglin zombification. 0c24068a Organise imports Spigot Changes: bff52619 Organise imports
60 Zeilen
3.1 KiB
Diff
60 Zeilen
3.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Fri, 3 Jul 2020 15:03:33 -0700
|
|
Subject: [PATCH] Improve EntityTargetLivingEntityEvent for 1.16 mobs
|
|
|
|
CraftBukkit has a bug in their implementation and is incorrectly handling forget
|
|
Also adds more target reasons for why it forgot target.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BehaviorAttackTargetForget.java b/src/main/java/net/minecraft/server/BehaviorAttackTargetForget.java
|
|
index 2e1b817a639fdd46b07dc70150f246cac3b35232..d98f57d2025c488dc1884132678005b861566869 100644
|
|
--- a/src/main/java/net/minecraft/server/BehaviorAttackTargetForget.java
|
|
+++ b/src/main/java/net/minecraft/server/BehaviorAttackTargetForget.java
|
|
@@ -27,15 +27,15 @@ public class BehaviorAttackTargetForget<E extends EntityInsentient> extends Beha
|
|
|
|
protected void a(WorldServer worldserver, E e0, long i) {
|
|
if (a((EntityLiving) e0)) {
|
|
- this.d(e0);
|
|
+ this.d(e0, org.bukkit.event.entity.EntityTargetEvent.TargetReason.FORGOT_TARGET); // Paper
|
|
} else if (this.c(e0)) {
|
|
- this.d(e0);
|
|
+ this.d(e0, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_DIED); // Paper
|
|
} else if (this.a(e0)) {
|
|
- this.d(e0);
|
|
+ this.d(e0, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_OTHER_LEVEL); // Paper
|
|
} else if (!IEntitySelector.f.test(this.b(e0))) {
|
|
- this.d(e0);
|
|
+ this.d(e0, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_INVALID); // Paper
|
|
} else if (this.b.test(this.b(e0))) {
|
|
- this.d(e0);
|
|
+ this.d(e0, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_INVALID); // Paper
|
|
}
|
|
}
|
|
|
|
@@ -59,17 +59,20 @@ public class BehaviorAttackTargetForget<E extends EntityInsentient> extends Beha
|
|
return optional.isPresent() && !((EntityLiving) optional.get()).isAlive();
|
|
}
|
|
|
|
- private void d(E e0) {
|
|
+ private void d(E e0, EntityTargetEvent.TargetReason reason) {
|
|
// CraftBukkit start
|
|
- EntityLiving old = e0.getBehaviorController().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null);
|
|
- EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(e0, null, (old != null && !old.isAlive()) ? EntityTargetEvent.TargetReason.TARGET_DIED : EntityTargetEvent.TargetReason.FORGOT_TARGET);
|
|
+ // Paper start - fix this event
|
|
+ //EntityLiving old = e0.getBehaviorController().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null);
|
|
+ EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(e0, null, reason);
|
|
if (event.isCancelled()) {
|
|
return;
|
|
}
|
|
- if (event.getTarget() != null) {
|
|
+ // comment out, bad logic - bad
|
|
+ /*if (event.getTarget() != null) {
|
|
e0.getBehaviorController().setMemory(MemoryModuleType.ATTACK_TARGET, ((CraftLivingEntity) event.getTarget()).getHandle());
|
|
return;
|
|
- }
|
|
+ }*/
|
|
+ // Paper end
|
|
// CraftBukkit end
|
|
e0.getBehaviorController().removeMemory(MemoryModuleType.ATTACK_TARGET);
|
|
}
|