diff --git a/src/main/scala/io/izzel/taboolib/module/hologram/THologramHandler.java b/src/main/scala/io/izzel/taboolib/module/hologram/THologramHandler.java index 5bc270f..92e9e2b 100644 --- a/src/main/scala/io/izzel/taboolib/module/hologram/THologramHandler.java +++ b/src/main/scala/io/izzel/taboolib/module/hologram/THologramHandler.java @@ -6,6 +6,7 @@ import io.izzel.taboolib.TabooLib; import io.izzel.taboolib.Version; import io.izzel.taboolib.module.inject.TListener; import io.izzel.taboolib.module.lite.SimpleReflection; +import io.izzel.taboolib.module.nms.NMS; import io.izzel.taboolib.module.packet.Packet; import io.izzel.taboolib.module.packet.TPacket; import io.izzel.taboolib.util.Ref; @@ -141,7 +142,7 @@ class THologramHandler implements Listener { } public static void learn(Player player) { - player.getWorld().spawn(player.getLocation(), ArmorStand.class, c -> { + NMS.handle().spawn(player.getLocation(), ArmorStand.class, c -> { learnTarget = c; learnTarget.setMarker(true); learnTarget.setVisible(false); diff --git a/src/main/scala/io/izzel/taboolib/module/nms/NMS.java b/src/main/scala/io/izzel/taboolib/module/nms/NMS.java index 95124fe..79a9750 100644 --- a/src/main/scala/io/izzel/taboolib/module/nms/NMS.java +++ b/src/main/scala/io/izzel/taboolib/module/nms/NMS.java @@ -18,6 +18,7 @@ import org.bukkit.util.Vector; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -90,4 +91,6 @@ public abstract class NMS { abstract public void sendPacketEntityTeleport(Player player, int entity, Location location); + abstract public T spawn(Location location, Class entity, Consumer e); + } diff --git a/src/main/scala/io/izzel/taboolib/module/nms/NMSImpl.java b/src/main/scala/io/izzel/taboolib/module/nms/NMSImpl.java index 5d20693..0b522df 100644 --- a/src/main/scala/io/izzel/taboolib/module/nms/NMSImpl.java +++ b/src/main/scala/io/izzel/taboolib/module/nms/NMSImpl.java @@ -29,6 +29,7 @@ import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; +import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; @@ -38,6 +39,7 @@ import java.lang.reflect.Field; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.function.Consumer; /** * @Author 坏黑 @@ -462,4 +464,19 @@ public class NMSImpl extends NMS { SimpleReflection.setFieldValue(net.minecraft.server.v1_13_R2.PacketPlayOutEntityTeleport.class, teleport, "d", location.getZ()); ((CraftPlayer) player).getHandle().playerConnection.sendPacket((net.minecraft.server.v1_13_R2.PacketPlayOutEntityTeleport) teleport); } + + @Override + public T spawn(Location location, Class entity, Consumer e) { + if (Version.isAfter(Version.v1_12)) { + return location.getWorld().spawn(location, entity, e::accept); + } else { + Object createEntity = ((CraftWorld) location.getWorld()).createEntity(location, entity); + try { + e.accept((T) createEntity); + } catch (Throwable t) { + t.printStackTrace(); + } + return ((CraftWorld) location.getWorld()).addEntity((net.minecraft.server.v1_13_R2.Entity) createEntity, CreatureSpawnEvent.SpawnReason.CUSTOM); + } + } }