提问者:小点点

如何在Spigot中发送带有Protocol colLib的动画包?


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

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"

共1个答案

匿名用户

方法Player.损坏方法使一切“正常”。

如果您想发送自己的数据包,您应该使用PacketPlayOut动画,值为1(为什么?)

对于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版本导入的版本。您可以使用反射将这些NMS用于所有版本。

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

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

在此处了解有关Protocol colLib中数据包的更多信息