ClientboundDamageEventPacket.java

net.minecraft.network.protocol.game.ClientboundDamageEventPacket

信息

  • 全限定名:net.minecraft.network.protocol.game.ClientboundDamageEventPacket
  • 类型:public record
  • 包:net.minecraft.network.protocol.game
  • 源码路径:src/main/java/net/minecraft/network/protocol/game/ClientboundDamageEventPacket.java
  • 起始行号:L16
  • 实现:Packet
  • 职责:

    TODO

字段/常量

  • STREAM_CODEC
    • 类型: StreamCodec<RegistryFriendlyByteBuf,ClientboundDamageEventPacket>
    • 修饰符: public static final
    • 源码定位: L18
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ClientboundDamageEventPacket(Entity entity, DamageSource source) @ L22

  • 构造器名:ClientboundDamageEventPacket
  • 源码定位:L22
  • 修饰符:public

参数:

  • entity: Entity
  • source: DamageSource

说明:

TODO

private ClientboundDamageEventPacket(RegistryFriendlyByteBuf input) @ L32

  • 构造器名:ClientboundDamageEventPacket
  • 源码定位:L32
  • 修饰符:private

参数:

  • input: RegistryFriendlyByteBuf

说明:

TODO

方法

下面的方法块按源码顺序生成。

private static void writeOptionalEntityId(FriendlyByteBuf output, int id) @ L42

  • 方法名:writeOptionalEntityId
  • 源码定位:L42
  • 返回类型:void
  • 修饰符:private static

参数:

  • output: FriendlyByteBuf
  • id: int

说明:

TODO

private static int readOptionalEntityId(FriendlyByteBuf input) @ L46

  • 方法名:readOptionalEntityId
  • 源码定位:L46
  • 返回类型:int
  • 修饰符:private static

参数:

  • input: FriendlyByteBuf

说明:

TODO

private void write(RegistryFriendlyByteBuf output) @ L50

  • 方法名:write
  • 源码定位:L50
  • 返回类型:void
  • 修饰符:private

参数:

  • output: RegistryFriendlyByteBuf

说明:

TODO

public PacketType<ClientboundDamageEventPacket> type() @ L62

  • 方法名:type
  • 源码定位:L62
  • 返回类型:PacketType
  • 修饰符:public

参数:

说明:

TODO

public void handle(ClientGamePacketListener listener) @ L67

  • 方法名:handle
  • 源码定位:L67
  • 返回类型:void
  • 修饰符:public

参数:

  • listener: ClientGamePacketListener

说明:

TODO

public DamageSource getSource(Level level) @ L71

  • 方法名:getSource
  • 源码定位:L71
  • 返回类型:DamageSource
  • 修饰符:public

参数:

  • level: Level

说明:

TODO

代码

public record ClientboundDamageEventPacket(int entityId, Holder<DamageType> sourceType, int sourceCauseId, int sourceDirectId, Optional<Vec3> sourcePosition)
    implements Packet<ClientGamePacketListener> {
    public static final StreamCodec<RegistryFriendlyByteBuf, ClientboundDamageEventPacket> STREAM_CODEC = Packet.codec(
        ClientboundDamageEventPacket::write, ClientboundDamageEventPacket::new
    );
 
    public ClientboundDamageEventPacket(Entity entity, DamageSource source) {
        this(
            entity.getId(),
            source.typeHolder(),
            source.getEntity() != null ? source.getEntity().getId() : -1,
            source.getDirectEntity() != null ? source.getDirectEntity().getId() : -1,
            Optional.ofNullable(source.sourcePositionRaw())
        );
    }
 
    private ClientboundDamageEventPacket(RegistryFriendlyByteBuf input) {
        this(
            input.readVarInt(),
            DamageType.STREAM_CODEC.decode(input),
            readOptionalEntityId(input),
            readOptionalEntityId(input),
            input.readOptional(i -> new Vec3(i.readDouble(), i.readDouble(), i.readDouble()))
        );
    }
 
    private static void writeOptionalEntityId(FriendlyByteBuf output, int id) {
        output.writeVarInt(id + 1);
    }
 
    private static int readOptionalEntityId(FriendlyByteBuf input) {
        return input.readVarInt() - 1;
    }
 
    private void write(RegistryFriendlyByteBuf output) {
        output.writeVarInt(this.entityId);
        DamageType.STREAM_CODEC.encode(output, this.sourceType);
        writeOptionalEntityId(output, this.sourceCauseId);
        writeOptionalEntityId(output, this.sourceDirectId);
        output.writeOptional(this.sourcePosition, (o, pos) -> {
            o.writeDouble(pos.x());
            o.writeDouble(pos.y());
            o.writeDouble(pos.z());
        });
    }
 
    @Override
    public PacketType<ClientboundDamageEventPacket> type() {
        return GamePacketTypes.CLIENTBOUND_DAMAGE_EVENT;
    }
 
    public void handle(ClientGamePacketListener listener) {
        listener.handleDamageEvent(this);
    }
 
    public DamageSource getSource(Level level) {
        if (this.sourcePosition.isPresent()) {
            return new DamageSource(this.sourceType, this.sourcePosition.get());
        } else {
            Entity cause = level.getEntity(this.sourceCauseId);
            Entity direct = level.getEntity(this.sourceDirectId);
            return new DamageSource(this.sourceType, direct, cause);
        }
    }
}

引用的其他类