Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-15 12:30:06 +01:00
SPIGOT-6032: Add best effort target events for new entities
Dieser Commit ist enthalten in:
Ursprung
52fd29c0dc
Commit
c3a22e7850
32
nms-patches/BehaviorAttackTargetForget.patch
Normale Datei
32
nms-patches/BehaviorAttackTargetForget.patch
Normale Datei
@ -0,0 +1,32 @@
|
|||||||
|
--- a/net/minecraft/server/BehaviorAttackTargetForget.java
|
||||||
|
+++ b/net/minecraft/server/BehaviorAttackTargetForget.java
|
||||||
|
@@ -3,6 +3,11 @@
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
+// CraftBukkit start
|
||||||
|
+import org.bukkit.craftbukkit.entity.CraftLivingEntity;
|
||||||
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
|
+import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
|
+// CraftBukkit end
|
||||||
|
|
||||||
|
public class BehaviorAttackTargetForget<E extends EntityInsentient> extends Behavior<E> {
|
||||||
|
|
||||||
|
@@ -54,6 +59,17 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
private void d(E e0) {
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ EntityLiving old = e0.getBehaviorController().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null);
|
||||||
|
+ EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(e0, old, (old != null && !old.isAlive()) ? EntityTargetEvent.TargetReason.TARGET_DIED : EntityTargetEvent.TargetReason.FORGOT_TARGET);
|
||||||
|
+ if (event.isCancelled()) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ if (event.getTarget() != null) {
|
||||||
|
+ e0.getBehaviorController().setMemory(MemoryModuleType.ATTACK_TARGET, ((CraftLivingEntity) event.getTarget()).getHandle());
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
e0.getBehaviorController().removeMemory(MemoryModuleType.ATTACK_TARGET);
|
||||||
|
}
|
||||||
|
}
|
38
nms-patches/BehaviorAttackTargetSet.patch
Normale Datei
38
nms-patches/BehaviorAttackTargetSet.patch
Normale Datei
@ -0,0 +1,38 @@
|
|||||||
|
--- a/net/minecraft/server/BehaviorAttackTargetSet.java
|
||||||
|
+++ b/net/minecraft/server/BehaviorAttackTargetSet.java
|
||||||
|
@@ -4,6 +4,11 @@
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
+// CraftBukkit start
|
||||||
|
+import org.bukkit.craftbukkit.entity.CraftLivingEntity;
|
||||||
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
|
+import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
|
+// CraftBukkit end
|
||||||
|
|
||||||
|
public class BehaviorAttackTargetSet<E extends EntityInsentient> extends Behavior<E> {
|
||||||
|
|
||||||
|
@@ -33,13 +38,21 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void a(WorldServer worldserver, E e0, long i) {
|
||||||
|
- ((Optional) this.c.apply(e0)).ifPresent((entityliving) -> {
|
||||||
|
+ (this.c.apply(e0)).ifPresent((entityliving) -> { // CraftBukkit - decompile error
|
||||||
|
this.a(e0, entityliving);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void a(E e0, EntityLiving entityliving) {
|
||||||
|
- e0.getBehaviorController().setMemory(MemoryModuleType.ATTACK_TARGET, (Object) entityliving);
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(e0, entityliving, (entityliving instanceof EntityPlayer) ? EntityTargetEvent.TargetReason.CLOSEST_PLAYER : EntityTargetEvent.TargetReason.CLOSEST_ENTITY);
|
||||||
|
+ if (event.isCancelled()) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ entityliving = (event.getTarget() != null) ? ((CraftLivingEntity) event.getTarget()).getHandle() : null;
|
||||||
|
+ // CraftBukkit end
|
||||||
|
+
|
||||||
|
+ e0.getBehaviorController().setMemory(MemoryModuleType.ATTACK_TARGET, entityliving); // CraftBukkit - decompile error
|
||||||
|
e0.getBehaviorController().removeMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren