File tree Expand file tree Collapse file tree 4 files changed +71
-0
lines changed
paper-generator/src/main/java/io/papermc/generator
paper-server/src/main/java/org/bukkit/craftbukkit/entity Expand file tree Collapse file tree 4 files changed +71
-0
lines changed Original file line number Diff line number Diff line change 1+ package io .papermc .paper .entity ;
2+
3+ import org .bukkit .entity .Entity ;
4+
5+ /**
6+ * Represents the reason an entity was removed.
7+ *
8+ * @see Entity#getRemovalReason()
9+ */
10+ public enum RemovalReason {
11+ // Start generate - RemovalReason
12+ // @GeneratedFrom 1.21.8
13+ KILLED (true , false ),
14+ DISCARDED (true , false ),
15+ UNLOADED_TO_CHUNK (false , true ),
16+ UNLOADED_WITH_PLAYER (false , false ),
17+ CHANGED_DIMENSION (false , false );
18+ // End generate - RemovalReason
19+
20+ private final boolean destroy ;
21+ private final boolean save ;
22+
23+ RemovalReason (final boolean destroy , final boolean save ) {
24+ this .destroy = destroy ;
25+ this .save = save ;
26+ }
27+
28+ /**
29+ * {@return whether the entity should be destroyed after being removed}
30+ */
31+ public boolean shouldDestroy () {
32+ return this .destroy ;
33+ }
34+
35+ /**
36+ * {@return whether the entity should be saved after being removed}
37+ */
38+ public boolean shouldSave () {
39+ return this .save ;
40+ }
41+ }
Original file line number Diff line number Diff line change 55import java .util .UUID ;
66import io .papermc .paper .datacomponent .DataComponentView ;
77import io .papermc .paper .entity .LookAnchor ;
8+ import io .papermc .paper .entity .RemovalReason ;
89import net .kyori .adventure .util .TriState ;
910import org .bukkit .Chunk ; // Paper
1011import org .bukkit .EntityEffect ;
@@ -424,6 +425,16 @@ final class Holder {
424425 */
425426 public void remove ();
426427
428+ /**
429+ * {@return true if it was removed by a plugin}
430+ */
431+ boolean isPluginRemoved ();
432+
433+ /**
434+ * {@return the reason this entity was removed}
435+ */
436+ @ Nullable RemovalReason getRemovalReason ();
437+
427438 /**
428439 * Returns true if this entity has been marked for removal.
429440 *
Original file line number Diff line number Diff line change 2424import io .papermc .generator .utils .Formatting ;
2525import io .papermc .paper .datacomponent .item .consumable .ItemUseAnimation ;
2626import io .papermc .paper .dialog .Dialog ;
27+ import io .papermc .paper .entity .RemovalReason ;
2728import io .papermc .typewriter .preset .EnumCloneRewriter ;
2829import io .papermc .typewriter .preset .model .EnumValue ;
2930import io .papermc .typewriter .replace .SearchMetadata ;
@@ -102,6 +103,12 @@ private static void bootstrapApi(PatternSourceSetRewriter sourceSet) {
102103 sourceSet
103104 .register ("PotionType" , PotionType .class , new EnumRegistryRewriter <>(Registries .POTION ))
104105 .register ("EntityType" , EntityType .class , new EntityTypeRewriter ())
106+ .register ("RemovalReason" , RemovalReason .class , new EnumCloneRewriter <>(net .minecraft .world .entity .Entity .RemovalReason .class ) {
107+ @ Override
108+ protected EnumValue .Builder rewriteEnumValue (net .minecraft .world .entity .Entity .RemovalReason reason ) {
109+ return super .rewriteEnumValue (reason ).arguments (Boolean .toString (reason .shouldDestroy ()), Boolean .toString (reason .shouldSave ()));
110+ }
111+ })
105112 .register ("DisplaySlot" , DisplaySlot .class , new EnumCloneRewriter <>(net .minecraft .world .scores .DisplaySlot .class ) {
106113 @ Override
107114 protected EnumValue .Builder rewriteEnumValue (net .minecraft .world .scores .DisplaySlot slot ) {
Original file line number Diff line number Diff line change 77import com .google .common .collect .Lists ;
88import com .mojang .logging .LogUtils ;
99import io .papermc .paper .datacomponent .DataComponentType ;
10+ import io .papermc .paper .entity .RemovalReason ;
1011import io .papermc .paper .entity .TeleportFlag ;
1112import java .util .HashSet ;
1213import java .util .List ;
@@ -469,6 +470,17 @@ public void remove() {
469470 this .entity .discard (this .getHandle ().generation ? null : EntityRemoveEvent .Cause .PLUGIN );
470471 }
471472
473+ @ Override
474+ public boolean isPluginRemoved () {
475+ return this .entity .pluginRemoved ;
476+ }
477+
478+ @ Override
479+ public @ Nullable RemovalReason getRemovalReason () {
480+ if (this .entity .removalReason == null ) return null ;
481+ return RemovalReason .valueOf (this .entity .removalReason .name ());
482+ }
483+
472484 @ Override
473485 public boolean isDead () {
474486 return !this .entity .isAlive ();
You can’t perform that action at this time.
0 commit comments