From bfbd868a37b8c02e34965469cde894b3cbe0331a Mon Sep 17 00:00:00 2001 From: Xor Boole Date: Tue, 6 Dec 2016 21:39:20 +1100 Subject: [PATCH] Implement pre-spawn API to allow modifications to spawned entities. See preceding commit for why this change was included. --- .../org/bukkit/craftbukkit/CraftWorld.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 80e65f592b..0987a77997 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -58,6 +58,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.messaging.StandardMessenger; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionType; +import org.bukkit.util.Consumer; import org.bukkit.util.Vector; public class CraftWorld implements World { @@ -852,7 +853,12 @@ public class CraftWorld implements World { } public T spawn(Location location, Class clazz) throws IllegalArgumentException { - return spawn(location, clazz, SpawnReason.CUSTOM); + return spawn(location, clazz, null, SpawnReason.CUSTOM); + } + + @Override + public T spawn(Location location, Class clazz, Consumer function) throws IllegalArgumentException { + return spawn(location, clazz, function, SpawnReason.CUSTOM); } @Override @@ -1174,20 +1180,29 @@ public class CraftWorld implements World { @SuppressWarnings("unchecked") public T addEntity(net.minecraft.server.Entity entity, SpawnReason reason) throws IllegalArgumentException { + return addEntity(entity, reason, null); + } + + @SuppressWarnings("unchecked") + public T addEntity(net.minecraft.server.Entity entity, SpawnReason reason, Consumer function) throws IllegalArgumentException { Preconditions.checkArgument(entity != null, "Cannot spawn null entity"); if (entity instanceof EntityInsentient) { ((EntityInsentient) entity).prepare(getHandle().D(new BlockPosition(entity)), (GroupDataEntity) null); } + if (function != null) { + function.accept((T) entity.getBukkitEntity()); + } + world.addEntity(entity, reason); return (T) entity.getBukkitEntity(); } - public T spawn(Location location, Class clazz, SpawnReason reason) throws IllegalArgumentException { + public T spawn(Location location, Class clazz, Consumer function, SpawnReason reason) throws IllegalArgumentException { net.minecraft.server.Entity entity = createEntity(location, clazz); - return addEntity(entity, reason); + return addEntity(entity, reason, function); } public ChunkSnapshot getEmptyChunkSnapshot(int x, int z, boolean includeBiome, boolean includeBiomeTempRain) {