如何在 Spigot 中使用 ProtocolLib 发送动画包?

How can I send Animation-Packet with ProtocolLib in Spigot?

我想在没有损坏的实体上显示损坏动画。 不:

entity.damage(2);

然后

public void onEntityDamage(EntityDamageEvent event) {
    event.setDamage(0);

更像:

entity.setHealth(entity.getHealth - 2);
"Send a packet to Player Damage Animation IF POSSIBLE WITH ProtocolLib"

方法Player.damage让一切都“正常”的方法

如果您想发送自己的数据包,您应该使用 PacketPlayOutAnimation,值为 1 (Why?)

对于 1.16 及更低版本:

import net.minecraft.server.MC_VERSION.PacketPlayOutAnimation;

EntityPlayer ep = ((CraftPlayer) p).getHandle();
ep.playerConnection.sendPacket(new PacketPlayOutAnimation(ep, 1));

对于 1.17 及更高版本:

import net.minecraft.network.protocol.game.PacketPlayOutAnimation;

EntityPlayer ep = ((CraftPlayer) p).getHandle();
ep.b.sendPacket(new PacketPlayOutAnimation(ep, 1));

这里是直接导入minecraft版本的版本。您可以对所有版本使用 reflection to use those NMS

或者使用 ProtocolLib,它似乎是这样的:

PacketContainer packetContainer = protocolManager.createPacket(Play.Server.ANIMATION);
packetContainer.getIntegers().write(0, entityId);
packetContainer.getIntegers().write(0, 1);
manager.sendServerPacket(p, packetContainer); // seems to be how you send packet

ProtocolLib 中有关数据包的更多信息here