如题 如何使用 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);
}复制代码
这是从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);
}复制代码