Class EntityData<E extends org.bukkit.entity.Entity>

java.lang.Object
ch.njol.skript.entity.EntityData<E>
org.skriptlang.skript.bukkit.entity.EntityData<E>
Type Parameters:
E - The type of Entity.
All Implemented Interfaces:
SyntaxElement, YggdrasilSerializable, YggdrasilSerializable.YggdrasilExtendedSerializable
Direct Known Subclasses:
AxolotlData, BeeData, CatData, ChickenData, ColorableEntityData, CowData, CreeperData, DisplayData, DroppedItemData, EndermanData, FallingBlockData, FoxData, FrogData, GoatData, LlamaData, MinecartData, MooshroomData, NautilusData, PandaData, ParrotData, PigData, RabbitData, SalmonData, SheepData, SimpleEntityData, StriderData, ThrownPotionData, TropicalFishData, VillagerData, WolfData, XpOrbData, ZombieNautilusData, ZombieVillagerData

public abstract class EntityData<E extends org.bukkit.entity.Entity> extends EntityData<E> implements SyntaxElement, YggdrasilSerializable.YggdrasilExtendedSerializable
Class representing and handling Entity for comparison, changing data, matching data, and spawning with initial data.
  • Field Details

    • AGE_PATTERN

      public static final String AGE_PATTERN
      See Also:
    • AGE_BABY

      public static final GeneralNoun AGE_BABY
    • AGE_ADULT

      public static final GeneralNoun AGE_ADULT
    • groupIndex

      protected int groupIndex
      References the corresponding group in the order they're registered.
  • Constructor Details

    • EntityData

      public EntityData()
  • Method Details

    • onRegistrationStop

      @Internal public static void onRegistrationStop()
    • isRegistered

      public static boolean isRegistered(Class<? extends org.bukkit.entity.Entity> entityClass)
      Whether the entityClass is already registered.
      Parameters:
      entityClass - The entity class to check.
      Returns:
      true if registered, otherwise false.
    • getInfo

      public static EntityDataInfo<?,?> getInfo(Class<? extends EntityData<?>> entityDataClass)
      Retrieves the EntityDataInfo registered for the given entityDataClass.
      Parameters:
      entityDataClass - The EntityData class to look up.
      Returns:
      The corresponding EntityDataInfo instance.
      Throws:
      SkriptAPIException - if the class has not been registered.
    • getInfo

      @Nullable public static @Nullable EntityDataInfo<?,?> getInfo(String dataName)
      Retrieves the EntityDataInfo associated with the given codeName.
      Parameters:
      dataName - The code name used to register the entity data.
      Returns:
      The corresponding EntityDataInfo, or null if not found.
    • parse

      @Nullable public static @Nullable EntityData<?> parse(String string)
      Prints errors.
      Parameters:
      string - String with optional indefinite article at the beginning
      Returns:
      The parsed entity data
    • parseWithoutIndefiniteArticle

      @Nullable public static @Nullable EntityData<?> parseWithoutIndefiniteArticle(String string)
      Parses the provided string to an EntityData. Using this method implies that string does not contain an indefinite article.
      Parameters:
      string - The pattern to parse.
      Returns:
      The parsed entity data.
    • getAll

      public static <E extends org.bukkit.entity.Entity> E[] getAll(EntityData<?>[] types, Class<E> type, org.bukkit.World @Nullable [] worlds)
      Gets all entities that match any of the provided types and is a subclass of type. Providing worlds only gets entities in those worlds, otherwise gets entities in all worlds.
      Parameters:
      types - The types of entities to retrieve.
      type - The super type of the entities wanting to retrieve.
      worlds - The worlds to get from, or null for all worlds.
      Returns:
      All entities of this type in the given worlds.
    • getAll

      public static <E extends org.bukkit.entity.Entity> E[] getAll(EntityData<?>[] types, Class<E> type, org.bukkit.Chunk[] chunks)
      Gets all entities that match any of the provided types and is a subclass of type, within the provided chunks.
      Parameters:
      types - The types of entities to retrieve.
      type - The super type of the entities wanting to retrieve.
      chunks - The chunks to get from.
      Returns:
      All entities of this type in the given chunks.
    • fromClass

      public static <E extends org.bukkit.entity.Entity> EntityData<? super E> fromClass(Class<E> entityClass)
      Creates an EntityData that represents the given entity class.
      Parameters:
      entityClass - The class of the entity (e.g. Pig.class).
      Returns:
      An EntityData representing the provided class.
    • fromEntity

      public static <E extends org.bukkit.entity.Entity> EntityData<? super E> fromEntity(E entity)
      Creates an EntityData that represents the given entity instance.
      Parameters:
      entity - The entity to represent.
      Returns:
      An EntityData representing the provided entity.
    • toString

      public static String toString(org.bukkit.entity.Entity entity)
      Gets the string representation from the EntityData that handles the type of entity.
      Parameters:
      entity - The Entity to get the string representation of.
      Returns:
      The string representation.
    • toString

      public static String toString(Class<? extends org.bukkit.entity.Entity> entityClass)
      Gets the string representation from the EntityData that handles the entityclass.
      Parameters:
      entityClass - The Entity class to get the string representation of.
      Returns:
      The string representation.
    • toString

      public static String toString(org.bukkit.entity.Entity entity, int flags)
      Gets the string representation from the EntityData that handles the type of entity.
      Parameters:
      entity - The Entity to get the string representation of.
      flags - The flag to determine singular or plural.
      Returns:
      The string representation.
    • toString

      public static String toString(Class<? extends org.bukkit.entity.Entity> entityClass, int flags)
      Gets the string representation from the EntityData that handles the entityclass.
      Parameters:
      entityClass - The Entity class to get the string representation of.
      flags - The flag to determine singular or plural.
      Returns:
      The string representation.
    • infoBuilder

      protected static <Data extends EntityData<E>, E extends org.bukkit.entity.Entity> EntityDataInfo.Builder<? extends EntityDataInfo.Builder<?,Data,E>, Data, E> infoBuilder(Class<Data> dataClass, String dataName)
      Helper method for getting a newly constructed EntityDataInfo.Builder.
      Type Parameters:
      Data - The entity data class being used.
      E - The entity class Data is assigned to.
      Parameters:
      dataClass - The class extending EntityData.
      dataName - The name dataClass will be identified as.
      Returns:
      The constructed EntityDataInfo.Builder.
    • registerInfo

      protected static <Data extends EntityData<E>, E extends org.bukkit.entity.Entity> void registerInfo(EntityDataInfo<Data,E> info)
      Register a EntityDataInfo.
      Type Parameters:
      Data - The entity data class being used.
      E - The entity class Data is assigned to.
      Parameters:
      info - The EntityDataInfo to register.
    • init

      public final boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult)
      Performs initial setup for this EntityData before passing control to the more specific init(Expression[], int, Kleenean, ParseResult).

      This method handles common behaviors such as tracking plurality (e.g. "a pig" vs "all pigs") and entity age (e.g. "baby zombie") based on the SkriptParser.ParseResult's marker value.

      Called just after the constructor and SyntaxElement.preInit().
      Specified by:
      init in interface SyntaxElement
      Parameters:
      exprs - all %expr%s included in the matching pattern in the order they appear in the pattern. If an optional value was left out, it will still be included in this list holding the default value of the desired type, which usually depends on the event.
      matchedPattern - The index of the pattern which matched
      isDelayed - Whether this expression is used after a delay or not (i.e. if the event has already passed when this expression will be called)
      parseResult - Additional information about the match.
      Returns:
      Whether this expression was initialised successfully. An error should be printed prior to returning false to specify the cause.
      See Also:
    • init

      protected abstract boolean init(Literal<?>[] exprs, int matchedGroup, int matchedPattern, SkriptParser.ParseResult parseResult)
      Initializes this EntityData.

      As of Skript 2.13, code names can have multiple patterns. matchedGroup will be the index of the code name the matched pattern is linked to. (e.g. PigData "unsaddled pig" = 0, "pig" = 1, "saddled pig" = 2) matchedPattern will be the index of the pattern used from the patterns of the group.

      Parameters:
      exprs - An array of Literal expressions from the matched pattern, in the order they appear. If an optional value was omitted by the user, it will still be present in the array with a value of null.
      matchedGroup - The index of the group which matched.
      matchedPattern - The index of the pattern of the group which matched.
      parseResult - Additional information from the parser.
      Returns:
      true if initialization was successful, otherwise false.
    • init

      protected abstract boolean init(@Nullable @Nullable Class<? extends E> entityClass, @Nullable E entity)
      Initializes this EntityData from either an entity class or a specific Entity.

      Example usage:

                  
                      spawn a pig at location(0, 0, 0):
                              set {_entity} to event-entity
                      spawn {_entity} at location(0, 0, 0)
                  
              

      Parameters:
      entityClass - An entity's class, e.g. Player
      entity - An actual entity, or null to get an entity data for an entity class
      Returns:
      true if initialization was successful, otherwise false.
    • set

      public abstract void set(E entity)
      Applies this EntityData to a newly spawned Entity.

      This is used during entity spawning to set additional data, such as a saddled pig.

      Specified by:
      set in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      entity - The spawned entity.
    • match

      protected abstract boolean match(E entity)
      Determines whether the given Entity matches this EntityData data.

      For example:

              
                  spawn a pig at location(0, 0, 0):
                              set {_entity} to event-entity
                      if {_entity} is a pig:          # will pass
                      if {_entity} is a saddled pig:  # will not pass
              
          

      Parameters:
      entity - The Entity to match.
      Returns:
      true if the entity matches, otherwise false.
    • getType

      public abstract Class<? extends E> getType()
      Returns the Class of the Entity that this EntityData represents or handles.
      Specified by:
      getType in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      The entity's Class, such as Pig.class.
    • getSuperType

      @NotNull public abstract @NotNull EntityData<?> getSuperType()
      Returns a more general version of this EntityData with specific data removed.

      For example, calling this on "a saddled pig" should return "a pig". This is typically used to obtain the base entity type without any modifiers or traits.

      Specified by:
      getSuperType in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      A generalized EntityData representing the base entity type.
    • toString

      public final String toString()
      Specified by:
      toString in class EntityData<E extends org.bukkit.entity.Entity>
    • getName

      protected GeneralNoun getName()
      Returns:
      The name registered for this EntityData.
    • getAgeNoun

      @Nullable protected @Nullable GeneralNoun getAgeNoun()
      Returns:
      The age this EntityData represents.
    • toString

      public String toString(int flags)
      Gets the string representation of this EntityData.
      Specified by:
      toString in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      flags - The flag to determine singular or plural.
      Returns:
      The string representation.
    • isPlural

      public Kleenean isPlural()
      Specified by:
      isPlural in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      Kleenean determining whether this EntityData is representing plurality.
    • isBaby

      public Kleenean isBaby()
      Specified by:
      isBaby in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      Kleenean determining whether this EntityData is representing baby type.
    • hashCode_i

      protected abstract int hashCode_i()
      Internal method used by hashCode() to include subclass-specific fields in the hash calculation for this EntityData.
      Returns:
      A hash code representing subclass-specific data.
    • hashCode

      public final int hashCode()
      Specified by:
      hashCode in class EntityData<E extends org.bukkit.entity.Entity>
    • equals_i

      protected abstract boolean equals_i(EntityData<?> entityData)
      Internal helper for equals(Object) to compare the specific data of this EntityData with another.
      Parameters:
      entityData - The EntityData to compare with.
      Returns:
      true if the data is considered equal, otherwise false.
    • equals

      public final boolean equals(@Nullable @Nullable Object obj)
      Specified by:
      equals in class EntityData<E extends org.bukkit.entity.Entity>
    • canSpawn

      public boolean canSpawn(@Nullable @Nullable org.bukkit.World world)
      Checks whether this entity type is allowed to spawn in the given World.

      Some entity types may be restricted from spawning due to experimental datapacks.

      Specified by:
      canSpawn in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      world - The world to check spawning permissions in.
      Returns:
      true if the entity can be spawned in the given world, or in general if world is null; otherwise false.
    • spawn

      @Nullable public final E spawn(org.bukkit.Location location)
      Spawn this entity data at a location.
      Specified by:
      spawn in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      location - The Location to spawn the entity at.
      Returns:
      The Entity object that is spawned.
    • spawn

      @Nullable public E spawn(org.bukkit.Location location, @Nullable @Nullable Consumer<E> consumer)
      Spawn this entity data at a location. The consumer allows for modification to the entity before it actually gets spawned.
      Specified by:
      spawn in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      location - The Location to spawn the entity at.
      consumer - A Consumer to apply the entity changes to.
      Returns:
      The Entity object that is spawned.
    • getAll

      public E[] getAll(org.bukkit.World... worlds)
      Gets all entities that match this EntityData via match(Entity), in the provided worlds.
      Specified by:
      getAll in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      worlds - The Worlds to get entities from.
      Returns:
      The entities found.
    • isInstance

      public final boolean isInstance(@Nullable @Nullable org.bukkit.entity.Entity entity)
      Whether the provided entity is an instance of the entity class and matches,
      Specified by:
      isInstance in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      entity - The entity to check.
      Returns:
      true if instance and matches, otherwise false.
    • isSupertypeOf

      public abstract boolean isSupertypeOf(EntityData<?> entityData)
      Determines whether this EntityData is a supertype of the given entityData.

      This is used to check whether the current entity data represents a broader category than another. For example:

              
                  if a zombie is a monster:    # passes: "monster" is a supertype of "zombie"
                  if a monster is a zombie:    # fails: "zombie" is not a supertype of "monster"
              
          

      Parameters:
      entityData - The EntityData to compare against.
      Returns:
      true if this is a supertype of the given entity data, otherwise false.
    • isSupertypeOf

      @Internal @Deprecated(forRemoval=true, since="2.17") public boolean isSupertypeOf(EntityData<?> entityData)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Description copied from class: EntityData
      Determines whether this EntityData is a supertype of the given entityData.

      This is used to check whether the current entity data represents a broader category than another. For example:

              
                  if a zombie is a monster:    # passes: "monster" is a supertype of "zombie"
                  if a monster is a zombie:    # fails: "zombie" is not a supertype of "monster"
              
          

      Specified by:
      isSupertypeOf in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      entityData - The EntityData to compare against.
      Returns:
      true if this is a supertype of the given entity data, otherwise false.
    • serialize

      public Fields serialize() throws NotSerializableException
      Description copied from interface: YggdrasilSerializable.YggdrasilExtendedSerializable
      Serialises this object. Only fields contained in the returned Fields object will be written to stream.

      You can use return new Fields(this); to emulate the default behaviour.

      Specified by:
      serialize in interface YggdrasilSerializable.YggdrasilExtendedSerializable
      Specified by:
      serialize in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      A Fields object containing all fields that should be written to stream
      Throws:
      NotSerializableException - If this object or one of its fields is not serializable
    • deserialize

      public void deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException
      Description copied from interface: YggdrasilSerializable.YggdrasilExtendedSerializable
      Deserializes this object. No fields have been set when this method is called, use fields.setFields(this, yggdrasil) to set all compatible non-transient and non-static fields (and call incompatible/missing field handlers if applicable – this implies that errors will be thrown if the fields object is invalid).

      You can use fields.setFields(this); to emulate the default behaviour.

      Specified by:
      deserialize in interface YggdrasilSerializable.YggdrasilExtendedSerializable
      Specified by:
      deserialize in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      fields - A Fields object containing all fields read from stream
      Throws:
      StreamCorruptedException - If the Fields object is invalid, i.e. was not written by YggdrasilSerializable.YggdrasilExtendedSerializable.serialize() or Yggdrasil's default serialisation.
      NotSerializableException
    • getSyntaxTypeName

      @NotNull public @NotNull String getSyntaxTypeName()
      Specified by:
      getSyntaxTypeName in interface SyntaxElement
      Specified by:
      getSyntaxTypeName in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      A string naming the type of syntax this is. e.g. "expression", "section".
    • spawn

      @Nullable protected static <E extends org.bukkit.entity.Entity> E spawn(org.bukkit.Location location, Class<E> type, Consumer<E> consumer)
    • create

      @Nullable public E create()
      Creates an entity in the server but does not spawn it
      Specified by:
      create in class EntityData<E extends org.bukkit.entity.Entity>
      Returns:
      The created entity
    • create

      @Nullable public E create(org.bukkit.Location location)
      Creates an entity at the provided location, but does not spawn it NOTE: If RegionAccessor.createEntity(Location, Class) does not exist, will return spawn(Location)
      Specified by:
      create in class EntityData<E extends org.bukkit.entity.Entity>
      Parameters:
      location - The Location to create the entity at
      Returns:
      The created entity
    • create

      @Nullable protected static <E extends org.bukkit.entity.Entity> E create(org.bukkit.Location location, Class<E> type)
    • kleeneanMatch

      protected boolean kleeneanMatch(Kleenean from, boolean to)
      Checks if from is Kleenean.UNKNOWN or is equal to to.
      Parameters:
      from - The Kleenean to compare to.
      to - The
      invalid reference
      boolean
      to compare against.
      Returns:
      true if from is Kleenean.UNKNOWN or is equal to to, otherwise false.
    • kleeneanMatch

      protected boolean kleeneanMatch(Kleenean from, Kleenean to)
      Checks if from is Kleenean.UNKNOWN or is equal to to.
      Parameters:
      from - The Kleenean to compare to.
      to - The Kleenean to compare against.
      Returns:
      true if from is Kleenean.UNKNOWN or is equal to to, otherwise false.
    • dataMatch

      protected <T> boolean dataMatch(@Nullable T from, T to)
      Checks if from is null or is equal to to.
      Parameters:
      from - The object to compare to.
      to - The object to compare against.
      Returns:
      true if from is null or is equal to to, otherwise false.