package net.minecraft.world.entity.variant; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.ClientAsset; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; public record ModelAndTexture(T model, ClientAsset asset) { public ModelAndTexture(T model, ResourceLocation assetId) { this(model, new ClientAsset(assetId)); } public static MapCodec> codec(Codec modelCodec, T defaultModel) { return RecordCodecBuilder.mapCodec( instance -> instance.group( modelCodec.optionalFieldOf("model", defaultModel).forGetter(ModelAndTexture::model), ClientAsset.DEFAULT_FIELD_CODEC.forGetter(ModelAndTexture::asset) ) .apply(instance, ModelAndTexture::new) ); } public static StreamCodec> streamCodec(StreamCodec modelCodec) { return StreamCodec.composite(modelCodec, ModelAndTexture::model, ClientAsset.STREAM_CODEC, ModelAndTexture::asset, ModelAndTexture::new); } }