Как я могу отправить 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 здесь