28 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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>(T model, ClientAsset asset) {
 | |
| 	public ModelAndTexture(T model, ResourceLocation assetId) {
 | |
| 		this(model, new ClientAsset(assetId));
 | |
| 	}
 | |
| 
 | |
| 	public static <T> MapCodec<ModelAndTexture<T>> codec(Codec<T> 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 <T> StreamCodec<RegistryFriendlyByteBuf, ModelAndTexture<T>> streamCodec(StreamCodec<? super RegistryFriendlyByteBuf, T> modelCodec) {
 | |
| 		return StreamCodec.composite(modelCodec, ModelAndTexture::model, ClientAsset.STREAM_CODEC, ModelAndTexture::asset, ModelAndTexture::new);
 | |
| 	}
 | |
| }
 |