package net.minecraft.network.protocol.common.custom; import io.netty.buffer.ByteBuf; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.codec.StreamDecoder; import net.minecraft.network.codec.StreamMemberEncoder; import net.minecraft.resources.ResourceLocation; public interface CustomPacketPayload { CustomPacketPayload.Type type(); static StreamCodec codec(StreamMemberEncoder p_336135_, StreamDecoder p_335771_) { return StreamCodec.ofMember(p_336135_, p_335771_); } static CustomPacketPayload.Type createType(String p_331650_) { return new CustomPacketPayload.Type<>(ResourceLocation.withDefaultNamespace(p_331650_)); } static StreamCodec codec( final CustomPacketPayload.FallbackProvider p_329573_, List> p_333081_ ) { final Map> map = p_333081_.stream() .collect(Collectors.toUnmodifiableMap(p_332174_ -> p_332174_.type().id(), CustomPacketPayload.TypeAndCodec::codec)); return new StreamCodec() { private StreamCodec findCodec(ResourceLocation p_335824_) { StreamCodec streamcodec = map.get(p_335824_); return streamcodec != null ? streamcodec : p_329573_.create(p_335824_); } private void writeCap(B p_332252_, CustomPacketPayload.Type p_334465_, CustomPacketPayload p_334290_) { p_332252_.writeResourceLocation(p_334465_.id()); StreamCodec streamcodec = (StreamCodec)this.findCodec(p_334465_.id); streamcodec.encode(p_332252_, (T)p_334290_); } public void encode(B p_334992_, CustomPacketPayload p_329854_) { this.writeCap(p_334992_, p_329854_.type(), p_329854_); } public CustomPacketPayload decode(B p_334320_) { ResourceLocation resourcelocation = p_334320_.readResourceLocation(); return (CustomPacketPayload)this.findCodec(resourcelocation).decode(p_334320_); } }; } public interface FallbackProvider { StreamCodec create(ResourceLocation p_336163_); } public record Type(ResourceLocation id) { } public record TypeAndCodec(CustomPacketPayload.Type type, StreamCodec codec) { } }