From b7a392c072a92bdeef8e6fc1e2849740bdb1ccca Mon Sep 17 00:00:00 2001 From: Xor Boole Date: Tue, 6 Dec 2016 21:38:05 +1100 Subject: Implement pre-spawn API to allow modifications to spawned entities. See preceding commit for why this change was included. --- src/main/java/org/bukkit/World.java | 19 +++++++++++++++++++ src/main/java/org/bukkit/util/Consumer.java | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/main/java/org/bukkit/util/Consumer.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java index 02cad41c..f34b3a93 100644 --- a/src/main/java/org/bukkit/World.java +++ b/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/src/main/java/org/bukkit/util/Consumer.java b/src/main/java/org/bukkit/util/Consumer.java new file mode 100644 index 00000000..fb9e6b90 --- /dev/null +++ b/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); +} -- cgit v1.2.3