diff --git a/paper-api/src/main/java/org/bukkit/World.java b/paper-api/src/main/java/org/bukkit/World.java index 02cad41cd9..f34b3a930f 100644 --- a/paper-api/src/main/java/org/bukkit/World.java +++ b/paper-api/src/main/java/org/bukkit/World.java @@ -16,6 +16,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; import org.bukkit.metadata.Metadatable; import org.bukkit.plugin.messaging.PluginMessageRecipient; +import org.bukkit.util.Consumer; import org.bukkit.util.Vector; /** @@ -701,6 +702,24 @@ public interface World extends PluginMessageRecipient, Metadatable { */ public T spawn(Location location, Class clazz) throws IllegalArgumentException; + /** + * Spawn an entity of a specific class at the given {@link Location}, with + * the supplied function run before the entity is added to the world. + *
+ * Note that when the function is run, the entity will not be actually in + * the world. Any operation involving such as teleporting the entity is undefined + * until after this function returns. + * + * @param location the {@link Location} to spawn the entity at + * @param clazz the class of the {@link Entity} to spawn + * @param function the function to be run before the entity is spawned. + * @param the class of the {@link Entity} to spawn + * @return an instance of the spawned {@link Entity} + * @throws IllegalArgumentException if either parameter is null or the + * {@link Entity} requested cannot be spawned + */ + public T spawn(Location location, Class clazz, Consumer function) throws IllegalArgumentException; + /** * Spawn a {@link FallingBlock} entity at the given {@link Location} of * the specified {@link Material}. The material dictates what is falling. diff --git a/paper-api/src/main/java/org/bukkit/util/Consumer.java b/paper-api/src/main/java/org/bukkit/util/Consumer.java new file mode 100644 index 0000000000..fb9e6b90f8 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/util/Consumer.java @@ -0,0 +1,17 @@ +package org.bukkit.util; + +/** + * Represents an operation that accepts a single input argument and returns no + * result. + * + * @param the type of the input to the operation + */ +public interface Consumer { + + /** + * Performs this operation on the given argument. + * + * @param t the input argument + */ + void accept(T t); +}