ItemStackCustomNameToOverrideComponentFix.java

net.minecraft.util.datafix.fixes.ItemStackCustomNameToOverrideComponentFix

信息

  • 全限定名:net.minecraft.util.datafix.fixes.ItemStackCustomNameToOverrideComponentFix
  • 类型:public class
  • 包:net.minecraft.util.datafix.fixes
  • 源码路径:src/main/java/net/minecraft/util/datafix/fixes/ItemStackCustomNameToOverrideComponentFix.java
  • 起始行号:L19
  • 继承:DataFix
  • 职责:

    TODO

字段/常量

  • MAP_NAMES
    • 类型: Set<String>
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ItemStackCustomNameToOverrideComponentFix(Schema outputSchema) @ L34

  • 构造器名:ItemStackCustomNameToOverrideComponentFix
  • 源码定位:L34
  • 修饰符:public

参数:

  • outputSchema: Schema

说明:

TODO

方法

下面的方法块按源码顺序生成。

public final TypeRewriteRule makeRule() @ L38

  • 方法名:makeRule
  • 源码定位:L38
  • 返回类型:TypeRewriteRule
  • 修饰符:public final

参数:

说明:

TODO

private static <T> Typed<T> fixMap(Typed<T> value) @ L60

  • 方法名:fixMap
  • 源码定位:L60
  • 返回类型: Typed
  • 修饰符:private static

参数:

  • value: Typed

说明:

TODO

private static <T> Typed<T> fixBanner(Typed<T> value) @ L64

  • 方法名:fixBanner
  • 源码定位:L64
  • 返回类型: Typed
  • 修饰符:private static

参数:

  • value: Typed

说明:

TODO

private static <T> Typed<T> fixCustomName(Typed<T> typed, Predicate<String> expectedTranslationKey) @ L68

  • 方法名:fixCustomName
  • 源码定位:L68
  • 返回类型: Typed
  • 修饰符:private static

参数:

  • typed: Typed
  • expectedTranslationKey: Predicate

说明:

TODO

代码

public class ItemStackCustomNameToOverrideComponentFix extends DataFix {
    private static final Set<String> MAP_NAMES = Set.of(
        "filled_map.buried_treasure",
        "filled_map.explorer_jungle",
        "filled_map.explorer_swamp",
        "filled_map.mansion",
        "filled_map.monument",
        "filled_map.trial_chambers",
        "filled_map.village_desert",
        "filled_map.village_plains",
        "filled_map.village_savanna",
        "filled_map.village_snowy",
        "filled_map.village_taiga"
    );
 
    public ItemStackCustomNameToOverrideComponentFix(Schema outputSchema) {
        super(outputSchema, false);
    }
 
    @Override
    public final TypeRewriteRule makeRule() {
        Type<?> itemStackType = this.getInputSchema().getType(References.ITEM_STACK);
        OpticFinder<Pair<String, String>> idFinder = DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()));
        OpticFinder<?> componentsFinder = itemStackType.findField("components");
        return this.fixTypeEverywhereTyped(
            "ItemStack custom_name to item_name component fix",
            itemStackType,
            input -> {
                Optional<Pair<String, String>> id = input.getOptional(idFinder);
                Optional<String> maybeId = id.map(Pair::getSecond);
                if (maybeId.filter(s -> s.equals("minecraft:white_banner")).isPresent()) {
                    return input.updateTyped(componentsFinder, ItemStackCustomNameToOverrideComponentFix::fixBanner);
                } else {
                    return maybeId.filter(s -> s.equals("minecraft:filled_map")).isPresent()
                        ? input.updateTyped(componentsFinder, ItemStackCustomNameToOverrideComponentFix::fixMap)
                        : input;
                }
            }
        );
    }
 
    private static <T> Typed<T> fixMap(Typed<T> value) {
        return fixCustomName(value, MAP_NAMES::contains);
    }
 
    private static <T> Typed<T> fixBanner(Typed<T> value) {
        return fixCustomName(value, e -> e.equals("block.minecraft.ominous_banner"));
    }
 
    private static <T> Typed<T> fixCustomName(Typed<T> typed, Predicate<String> expectedTranslationKey) {
        return Util.writeAndReadTypedOrThrow(
            typed,
            typed.getType(),
            value -> {
                OptionalDynamic<?> customNameTag = value.get("minecraft:custom_name");
                Optional<String> hasCorrectTranslationKey = customNameTag.asString()
                    .result()
                    .flatMap(LegacyComponentDataFixUtils::extractTranslationString)
                    .filter(expectedTranslationKey);
                return hasCorrectTranslationKey.isPresent() ? value.renameField("minecraft:custom_name", "minecraft:item_name") : value;
            }
        );
    }
}

引用的其他类

  • Schema

    • 引用位置: 参数
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.writeAndReadTypedOrThrow()
  • NamespacedSchema

    • 引用位置: 方法调用
    • 关联成员: NamespacedSchema.namespacedString()