minecraft-src/net/minecraft/world/entity/variant/ModelAndTexture.java
2025-07-04 03:45:38 +03:00

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);
}
}