158 lines
6.8 KiB
Diff
158 lines
6.8 KiB
Diff
From ea3a8f5ed1c5ca4b73d03342500ca257864570f7 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sat, 16 Jun 2018 13:41:00 -0400
|
|
Subject: [PATCH] Add SentientNPC Interface to Entities
|
|
|
|
Used to determine ACTUAL Living NPC's. Spigot mistakenly inversed the conditions for LivingEntity, and
|
|
used LivingEntity for Insentient Entities, and named the actual EntityLiving class EntityInsentient.
|
|
|
|
This should of all been inversed on the implementation side. To make matters worse, Spigot never
|
|
exposed the differentiator that there are entities with AI that are not sentient/alive such as
|
|
Armor stands and Players are the only things that do not implement the REAL EntityLiving class (named Insentient internally)
|
|
|
|
This interface lets you identify NPC entities capable of sentience, and able to move about and react to the world.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/entity/SentientNPC.java b/src/main/java/com/destroystokyo/paper/entity/SentientNPC.java
|
|
new file mode 100644
|
|
index 00000000..7e393254
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/entity/SentientNPC.java
|
|
@@ -0,0 +1,57 @@
|
|
+/*
|
|
+ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining
|
|
+ * a copy of this software and associated documentation files (the
|
|
+ * "Software"), to deal in the Software without restriction, including
|
|
+ * without limitation the rights to use, copy, modify, merge, publish,
|
|
+ * distribute, sublicense, and/or sell copies of the Software, and to
|
|
+ * permit persons to whom the Software is furnished to do so, subject to
|
|
+ * the following conditions:
|
|
+ *
|
|
+ * The above copyright notice and this permission notice shall be
|
|
+ * included in all copies or substantial portions of the Software.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+ */
|
|
+
|
|
+package com.destroystokyo.paper.entity;
|
|
+
|
|
+import org.bukkit.entity.LivingEntity;
|
|
+
|
|
+/**
|
|
+ * Used to determine ACTUAL Living NPC's. Spigot mistakenly inversed the conditions for LivingEntity, and
|
|
+ * used LivingEntity for Insentient Entities, and named the actual EntityLiving class EntityInsentient.
|
|
+ *
|
|
+ * This should of all been inversed on the implementation side. To make matters worse, Spigot never
|
|
+ * exposed the differentiator that there are entities with AI that are not sentient/alive such as
|
|
+ * Armor stands and Players are the only things that do not implement the REAL EntityLiving class (named Insentient internally)
|
|
+ *
|
|
+ * This interface lets you identify NPC entities capable of sentience, and able to move about and react to the world.
|
|
+ */
|
|
+public interface SentientNPC extends LivingEntity {
|
|
+
|
|
+ /**
|
|
+ * Instructs this Creature to set the specified LivingEntity as its
|
|
+ * target.
|
|
+ * <p>
|
|
+ * Hostile creatures may attack their target, and friendly creatures may
|
|
+ * follow their target.
|
|
+ *
|
|
+ * @param target New LivingEntity to target, or null to clear the target
|
|
+ */
|
|
+ public void setTarget(LivingEntity target);
|
|
+
|
|
+ /**
|
|
+ * Gets the current target of this Creature
|
|
+ *
|
|
+ * @return Current target of this creature, or null if none exists
|
|
+ */
|
|
+ public LivingEntity getTarget();
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/entity/Ambient.java b/src/main/java/org/bukkit/entity/Ambient.java
|
|
index 779e3897..ef548fb4 100644
|
|
--- a/src/main/java/org/bukkit/entity/Ambient.java
|
|
+++ b/src/main/java/org/bukkit/entity/Ambient.java
|
|
@@ -3,4 +3,5 @@ package org.bukkit.entity;
|
|
/**
|
|
* Represents an ambient mob
|
|
*/
|
|
-public interface Ambient extends LivingEntity {}
|
|
+public interface Ambient extends LivingEntity, com.destroystokyo.paper.entity.SentientNPC { // Paper
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/entity/ComplexLivingEntity.java b/src/main/java/org/bukkit/entity/ComplexLivingEntity.java
|
|
index f74411c3..1f00923e 100644
|
|
--- a/src/main/java/org/bukkit/entity/ComplexLivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/entity/ComplexLivingEntity.java
|
|
@@ -6,7 +6,7 @@ import java.util.Set;
|
|
* Represents a complex living entity - one that is made up of various smaller
|
|
* parts
|
|
*/
|
|
-public interface ComplexLivingEntity extends LivingEntity {
|
|
+public interface ComplexLivingEntity extends LivingEntity, com.destroystokyo.paper.entity.SentientNPC { // Paper
|
|
/**
|
|
* Gets a list of parts that belong to this complex entity
|
|
*
|
|
diff --git a/src/main/java/org/bukkit/entity/Creature.java b/src/main/java/org/bukkit/entity/Creature.java
|
|
index f223f55b..bbfb248e 100644
|
|
--- a/src/main/java/org/bukkit/entity/Creature.java
|
|
+++ b/src/main/java/org/bukkit/entity/Creature.java
|
|
@@ -4,7 +4,7 @@ package org.bukkit.entity;
|
|
* Represents a Creature. Creatures are non-intelligent monsters or animals
|
|
* which have very simple abilities.
|
|
*/
|
|
-public interface Creature extends LivingEntity {
|
|
+public interface Creature extends LivingEntity, com.destroystokyo.paper.entity.SentientNPC { // Paper
|
|
|
|
/**
|
|
* Instructs this Creature to set the specified LivingEntity as its
|
|
@@ -15,12 +15,12 @@ public interface Creature extends LivingEntity {
|
|
*
|
|
* @param target New LivingEntity to target, or null to clear the target
|
|
*/
|
|
- public void setTarget(LivingEntity target);
|
|
+ //public void setTarget(LivingEntity target); // Paper - moved to SentientNPC
|
|
|
|
/**
|
|
* Gets the current target of this Creature
|
|
*
|
|
* @return Current target of this creature, or null if none exists
|
|
*/
|
|
- public LivingEntity getTarget();
|
|
+ //public LivingEntity getTarget(); // Paper - moved to SentientNPC
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/entity/Flying.java b/src/main/java/org/bukkit/entity/Flying.java
|
|
index 4f16a26c..207e9922 100644
|
|
--- a/src/main/java/org/bukkit/entity/Flying.java
|
|
+++ b/src/main/java/org/bukkit/entity/Flying.java
|
|
@@ -3,4 +3,6 @@ package org.bukkit.entity;
|
|
/**
|
|
* Represents a Flying Entity.
|
|
*/
|
|
-public interface Flying extends LivingEntity {}
|
|
+public interface Flying extends LivingEntity, com.destroystokyo.paper.entity.SentientNPC { // Paper
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/entity/Slime.java b/src/main/java/org/bukkit/entity/Slime.java
|
|
index 0d87d203..d4eee19c 100644
|
|
--- a/src/main/java/org/bukkit/entity/Slime.java
|
|
+++ b/src/main/java/org/bukkit/entity/Slime.java
|
|
@@ -3,7 +3,7 @@ package org.bukkit.entity;
|
|
/**
|
|
* Represents a Slime.
|
|
*/
|
|
-public interface Slime extends LivingEntity {
|
|
+public interface Slime extends LivingEntity, com.destroystokyo.paper.entity.SentientNPC { // Paper
|
|
|
|
/**
|
|
* @return The size of the slime
|
|
--
|
|
2.18.0
|
|
|