package net.minecraft.client.renderer.item.properties.select; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.PrimitiveCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import javax.annotation.Nullable; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.component.DataComponents; import net.minecraft.util.ExtraCodecs; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.CustomModelData; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public record CustomModelDataProperty(int index) implements SelectItemModelProperty { public static final PrimitiveCodec VALUE_CODEC = Codec.STRING; public static final SelectItemModelProperty.Type TYPE = SelectItemModelProperty.Type.create( RecordCodecBuilder.mapCodec( p_378187_ -> p_378187_.group(ExtraCodecs.NON_NEGATIVE_INT.optionalFieldOf("index", 0).forGetter(CustomModelDataProperty::index)) .apply(p_378187_, CustomModelDataProperty::new) ), VALUE_CODEC ); @Nullable public String get(ItemStack p_378758_, @Nullable ClientLevel p_376603_, @Nullable LivingEntity p_375827_, int p_376216_, ItemDisplayContext p_378582_) { CustomModelData custommodeldata = p_378758_.get(DataComponents.CUSTOM_MODEL_DATA); return custommodeldata != null ? custommodeldata.getString(this.index) : null; } @Override public SelectItemModelProperty.Type type() { return TYPE; } @Override public Codec valueCodec() { return VALUE_CODEC; } }