Как я могу отправить Animation-Packet с помощью ProtocolLib в 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"

Спасибо за ответ

1 ответ

МетодPlayer.damageспособ сделать все как "нормально".

Если вы хотите отправить свой собственный пакет, вы должны использовать PacketPlayOutAnimation, со значением 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));

Вот версия с импортом прямой версии майнкрафта. Вы можете использовать отражение , чтобы использовать эти 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 здесь

Другие вопросы по тегам