如何在 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
我想在没有损坏的实体上显示损坏动画。 不:
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