minecraft-src/net/minecraft/world/item/equipment/trim/TrimMaterial.java
2025-07-04 03:15:13 +03:00

53 lines
2.7 KiB
Java

package net.minecraft.world.item.equipment.trim;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.ComponentSerialization;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.RegistryFileCodec;
import net.minecraft.resources.ResourceKey;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.equipment.EquipmentAsset;
import net.minecraft.world.item.equipment.EquipmentAssets;
public record TrimMaterial(String assetName, Holder<Item> ingredient, Map<ResourceKey<EquipmentAsset>, String> overrideArmorAssets, Component description) {
public static final Codec<TrimMaterial> DIRECT_CODEC = RecordCodecBuilder.create(
instance -> instance.group(
ExtraCodecs.RESOURCE_PATH_CODEC.fieldOf("asset_name").forGetter(TrimMaterial::assetName),
Item.CODEC.fieldOf("ingredient").forGetter(TrimMaterial::ingredient),
Codec.unboundedMap(ResourceKey.codec(EquipmentAssets.ROOT_ID), Codec.STRING)
.optionalFieldOf("override_armor_assets", Map.of())
.forGetter(TrimMaterial::overrideArmorAssets),
ComponentSerialization.CODEC.fieldOf("description").forGetter(TrimMaterial::description)
)
.apply(instance, TrimMaterial::new)
);
public static final StreamCodec<RegistryFriendlyByteBuf, TrimMaterial> DIRECT_STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.STRING_UTF8,
TrimMaterial::assetName,
ByteBufCodecs.holderRegistry(Registries.ITEM),
TrimMaterial::ingredient,
ByteBufCodecs.map(Object2ObjectOpenHashMap::new, ResourceKey.streamCodec(EquipmentAssets.ROOT_ID), ByteBufCodecs.STRING_UTF8),
TrimMaterial::overrideArmorAssets,
ComponentSerialization.STREAM_CODEC,
TrimMaterial::description,
TrimMaterial::new
);
public static final Codec<Holder<TrimMaterial>> CODEC = RegistryFileCodec.create(Registries.TRIM_MATERIAL, DIRECT_CODEC);
public static final StreamCodec<RegistryFriendlyByteBuf, Holder<TrimMaterial>> STREAM_CODEC = ByteBufCodecs.holder(
Registries.TRIM_MATERIAL, DIRECT_STREAM_CODEC
);
public static TrimMaterial create(String assetName, Item ingredient, Component description, Map<ResourceKey<EquipmentAsset>, String> overrideArmorAssets) {
return new TrimMaterial(assetName, BuiltInRegistries.ITEM.wrapAsHolder(ingredient), overrideArmorAssets, description);
}
}