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

java.lang.Object
ch.njol.skript.entity.EntityData<E>
All Implemented Interfaces:
SyntaxElement, YggdrasilSerializable, YggdrasilSerializable.YggdrasilExtendedSerializable
Direct Known Subclasses:
AxolotlData, BeeData, BoatChestData, BoatData, CatData, ChickenData, CowData, CreeperData, DisplayData, DroppedItemData, EndermanData, FallingBlockData, FoxData, FrogData, GoatData, LlamaData, MinecartData, MooshroomData, OcelotData, PandaData, ParrotData, PigData, RabbitData, SalmonData, SheepData, SimpleEntityData, StriderData, ThrownPotionData, TropicalFishData, VillagerData, WolfData, XpOrbData, ZombieVillagerData

public abstract class EntityData<E extends org.bukkit.entity.Entity> extends Object implements SyntaxElement, YggdrasilSerializable.YggdrasilExtendedSerializable
  • Field Details

    • WORLD_1_17_CONSUMER_METHOD

      @Nullable protected static @Nullable Method WORLD_1_17_CONSUMER_METHOD
    • WORLD_1_17_CONSUMER

      protected static boolean WORLD_1_17_CONSUMER
    • LANGUAGE_NODE

      public static final String LANGUAGE_NODE
      See Also:
    • m_age_pattern

      public static final Message m_age_pattern
    • m_baby

      public static final Adjective m_baby
    • m_adult

      public static final Adjective m_adult
    • serializer

      public static Serializer<EntityData> serializer
    • matchedPattern

      protected int matchedPattern
  • Constructor Details

    • EntityData

      public EntityData()
  • Method Details

    • onRegistrationStop

      public static void onRegistrationStop()
    • register

      public static <E extends org.bukkit.entity.Entity, T extends EntityData<E>> void register(Class<T> dataClass, String name, Class<E> entityClass, String codeName) throws IllegalArgumentException
      Throws:
      IllegalArgumentException
    • register

      public static <E extends org.bukkit.entity.Entity, T extends EntityData<E>> void register(Class<T> dataClass, String name, Class<E> entityClass, int defaultName, String... codeNames) throws IllegalArgumentException
      Throws:
      IllegalArgumentException
    • 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 matchedPattern, SkriptParser.ParseResult parseResult)
      Initializes this EntityData from the matched pattern and its associated literals.

      This is used when parsing entity data from user-written patterns such as "a saddled pig".

      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.
      matchedPattern - The index of the pattern 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.

      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.
      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" would return "a pig". This is typically used to obtain the base entity type without any modifiers or traits.

      Returns:
      A generalized EntityData representing the base entity type.
    • toString

      public final String toString()
      Overrides:
      toString in class Object
    • getName

      protected Noun getName()
    • getAgeAdjective

      @Nullable protected @Nullable Adjective getAgeAdjective()
    • toString

      public String toString(int flags)
    • isPlural

      public Kleenean isPlural()
      Returns:
      Kleenean determining whether this EntityData is representing plurality.
    • isBaby

      public Kleenean isBaby()
      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()
      Overrides:
      hashCode in class Object
    • equals_i

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

      public final boolean equals(@Nullable @Nullable Object obj)
      Overrides:
      equals in class Object
    • getInfo

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

      @Nullable public static @Nullable ch.njol.skript.entity.EntityData.EntityDataInfo<?> getInfo(String codeName)
      Retrieves the EntityData.EntityDataInfo associated with the given codeName.
      Parameters:
      codeName - The code name used to register the entity data.
      Returns:
      The corresponding EntityData.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)
      Prints errors.
      Parameters:
      string -
      Returns:
      The parsed entity data
    • 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.

      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.
      Parameters:
      location - The Location to spawn the entity at.
      Returns:
      The Entity object that is spawned.
    • spawn

      @Deprecated(since="2.8.0", forRemoval=true) @Nullable public E spawn(org.bukkit.Location location, @Nullable org.bukkit.util.Consumer<E> consumer)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Spawn this entity data at a location. The consumer allows for modification to the entity before it actually gets spawned.

      Bukkit's own Consumer is deprecated. Use spawn(Location, Consumer)

      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.
    • 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.
      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)
    • getAll

      public static <E extends org.bukkit.entity.Entity> E[] getAll(EntityData<?>[] types, Class<E> type, org.bukkit.World @Nullable [] worlds)
      Parameters:
      types -
      type -
      worlds - worlds or null for all
      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)
    • 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)
    • toString

      public static String toString(Class<? extends org.bukkit.entity.Entity> entityClass)
    • toString

      public static String toString(org.bukkit.entity.Entity entity, int flags)
    • toString

      public static String toString(Class<? extends org.bukkit.entity.Entity> entityClass, int flags)
    • isInstance

      public final boolean isInstance(@Nullable @Nullable org.bukkit.entity.Entity entity)
    • 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.
    • 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
      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
      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
    • deserialize

      @Deprecated(since="2.3.0", forRemoval=true) protected boolean deserialize(String string)
      Deprecated, for removal: This API element is subject to removal in a future version.
    • getSyntaxTypeName

      @NotNull public @NotNull String getSyntaxTypeName()
      Specified by:
      getSyntaxTypeName in interface SyntaxElement
      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
      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)
      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)