憨憨冰棍
如题 如何使用 ProtocolLib制作一个 物品实体 悬浮在半空
这是从AI哪里得到的 但是packet.getWatchableCollectionModifier() 返回的是空值 所以无效 如果不使用packet.getWatchableCollectionModifier().write(0, dataWatcher.getWatchableObjects()); 则生成的是一个空白的物品实体 会瞬间消失

    public static void spawnFloatingItem(Player player,ItemStack itemStack) {
        Location location = player.getLocation().add(0, 2, 0);

        new BukkitRunnable() {
            @Override
            public void run() {
                x++;
                if(x>=500){
                    x=0;
                    this.cancel();
                }
                // 创建PacketContainer
                PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SPAWN_ENTITY);
                packet.getIntegers().write(0, entityID);
                packet.getEntityTypeModifier().write(0, EntityType.DROPPED_ITEM);
                packet.getUUIDs().write(0, UUID.randomUUID());
                packet.getDoubles().write(0, location.getX());
                packet.getDoubles().write(1, location.getY());
                packet.getDoubles().write(2, location.getZ());

                WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
                String itemName = ItemUtil.getDisplayName(itemStack);
                dataWatcher.setObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true), Optional.of(WrappedChatComponent.fromText(itemName).getHandle()));
                dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, WrappedDataWatcher.Registry.get(Boolean.class)), true); // 掉落物是否无法被捡起
                dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(7, WrappedDataWatcher.Registry.getItemStackSerializer(false)), itemStack);
                System.out.println(packet.getWatchableCollectionModifier().toString());
                packet.getWatchableCollectionModifier().write(0, dataWatcher.getWatchableObjects());

                try {
                    ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
                } catch (Exception e) {
                }
            }
        }.runTaskTimer(FLottery.plugin,0,1);
    }复制代码