CustomPacketPayload.java

net.minecraft.network.protocol.common.custom.CustomPacketPayload

信息

  • 全限定名:net.minecraft.network.protocol.common.custom.CustomPacketPayload
  • 类型:public interface
  • 包:net.minecraft.network.protocol.common.custom
  • 源码路径:src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
  • 起始行号:L13
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.network.protocol.common.custom.CustomPacketPayload.FallbackProvider

    • 类型: interface
    • 修饰符: public
    • 源码定位: L52
    • 说明:

      TODO

  • net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type

    • 类型: record
    • 修饰符: public
    • 源码定位: L56
    • 说明:

      TODO

  • net.minecraft.network.protocol.common.custom.CustomPacketPayload.TypeAndCodec

    • 类型: record
    • 修饰符: public
    • 源码定位: L59
    • 说明:

      TODO

构造器

方法

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

CustomPacketPayload.Type<?extends CustomPacketPayload> type() @ L14

  • 方法名:type
  • 源码定位:L14
  • 返回类型:CustomPacketPayload.Type<?extends CustomPacketPayload>
  • 修饰符:package-private

参数:

说明:

TODO

static <B extends ByteBuf,T extends CustomPacketPayload> StreamCodec<B,T> codec(StreamMemberEncoder<B,T> writer, StreamDecoder<B,T> reader) @ L16

  • 方法名:codec
  • 源码定位:L16
  • 返回类型:<B extends ByteBuf,T extends CustomPacketPayload> StreamCodec<B,T>
  • 修饰符:static

参数:

  • writer: StreamMemberEncoder<B,T>
  • reader: StreamDecoder<B,T>

说明:

TODO

static <T extends CustomPacketPayload> CustomPacketPayload.Type<T> createType(String id) @ L20

  • 方法名:createType
  • 源码定位:L20
  • 返回类型: CustomPacketPayload.Type
  • 修饰符:static

参数:

  • id: String

说明:

TODO

static <B extends FriendlyByteBuf> StreamCodec<B,CustomPacketPayload> codec(CustomPacketPayload.FallbackProvider<B> fallback, List<CustomPacketPayload.TypeAndCodec<?super B,?>> types) @ L24

  • 方法名:codec
  • 源码定位:L24
  • 返回类型: StreamCodec<B,CustomPacketPayload>
  • 修饰符:static

参数:

  • fallback: CustomPacketPayload.FallbackProvider
  • types: List<CustomPacketPayload.TypeAndCodec>

说明:

TODO

代码

public interface CustomPacketPayload {
    CustomPacketPayload.Type<? extends CustomPacketPayload> type();
 
    static <B extends ByteBuf, T extends CustomPacketPayload> StreamCodec<B, T> codec(StreamMemberEncoder<B, T> writer, StreamDecoder<B, T> reader) {
        return StreamCodec.ofMember(writer, reader);
    }
 
    static <T extends CustomPacketPayload> CustomPacketPayload.Type<T> createType(String id) {
        return new CustomPacketPayload.Type<>(Identifier.withDefaultNamespace(id));
    }
 
    static <B extends FriendlyByteBuf> StreamCodec<B, CustomPacketPayload> codec(
        CustomPacketPayload.FallbackProvider<B> fallback, List<CustomPacketPayload.TypeAndCodec<? super B, ?>> types
    ) {
        final Map<Identifier, StreamCodec<? super B, ? extends CustomPacketPayload>> idToType = types.stream()
            .collect(Collectors.toUnmodifiableMap(t -> t.type().id(), CustomPacketPayload.TypeAndCodec::codec));
        return new StreamCodec<B, CustomPacketPayload>() {
            private StreamCodec<? super B, ? extends CustomPacketPayload> findCodec(Identifier typeId) {
                StreamCodec<? super B, ? extends CustomPacketPayload> codec = idToType.get(typeId);
                return codec != null ? codec : fallback.create(typeId);
            }
 
            private <T extends CustomPacketPayload> void writeCap(B output, CustomPacketPayload.Type<T> type, CustomPacketPayload payload) {
                output.writeIdentifier(type.id());
                StreamCodec<B, T> codec = (StreamCodec<B, T>)this.findCodec(type.id);
                codec.encode(output, (T)payload);
            }
 
            public void encode(B output, CustomPacketPayload value) {
                this.writeCap(output, value.type(), value);
            }
 
            public CustomPacketPayload decode(B input) {
                Identifier identifier = input.readIdentifier();
                return (CustomPacketPayload)this.findCodec(identifier).decode(input);
            }
        };
    }
 
    public interface FallbackProvider<B extends FriendlyByteBuf> {
        StreamCodec<B, ? extends CustomPacketPayload> create(Identifier typeId);
    }
 
    public record Type<T extends CustomPacketPayload>(Identifier id) {
    }
 
    public record TypeAndCodec<B extends FriendlyByteBuf, T extends CustomPacketPayload>(CustomPacketPayload.Type<T> type, StreamCodec<B, T> codec) {
    }
}

引用的其他类