EntityVariantFix.java

net.minecraft.util.datafix.fixes.EntityVariantFix

信息

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

    TODO

字段/常量

  • fieldName

    • 类型: String
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

  • idConversions

    • 类型: IntFunction<String>
    • 修饰符: private final
    • 源码定位: L15
    • 说明:

      TODO

内部类/嵌套类型

构造器

public EntityVariantFix(Schema outputSchema, String name, TypeReference type, String entityName, String fieldName, IntFunction<String> idConversions) @ L17

  • 构造器名:EntityVariantFix
  • 源码定位:L17
  • 修饰符:public

参数:

  • outputSchema: Schema
  • name: String
  • type: TypeReference
  • entityName: String
  • fieldName: String
  • idConversions: IntFunction

说明:

TODO

方法

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

private static <T> Dynamic<T> updateAndRename(Dynamic<T> input, String oldKey, String newKey, Function<Dynamic<T>,Dynamic<T>> function) @ L23

  • 方法名:updateAndRename
  • 源码定位:L23
  • 返回类型: Dynamic
  • 修饰符:private static

参数:

  • input: Dynamic
  • oldKey: String
  • newKey: String
  • function: Function<Dynamic,Dynamic>

说明:

TODO

protected Typed<?> fix(Typed<?> typed) @ L31

  • 方法名:fix
  • 源码定位:L31
  • 返回类型:Typed<?>
  • 修饰符:protected

参数:

  • typed: Typed<?>

说明:

TODO

代码

public class EntityVariantFix extends NamedEntityFix {
    private final String fieldName;
    private final IntFunction<String> idConversions;
 
    public EntityVariantFix(Schema outputSchema, String name, TypeReference type, String entityName, String fieldName, IntFunction<String> idConversions) {
        super(outputSchema, false, name, type, entityName);
        this.fieldName = fieldName;
        this.idConversions = idConversions;
    }
 
    private static <T> Dynamic<T> updateAndRename(Dynamic<T> input, String oldKey, String newKey, Function<Dynamic<T>, Dynamic<T>> function) {
        return input.map(v -> {
            DynamicOps<T> ops = input.getOps();
            Function<T, T> liftedFunction = value -> function.apply(new Dynamic<>(ops, value)).getValue();
            return ops.get((T)v, oldKey).map(fieldValue -> ops.set((T)v, newKey, liftedFunction.apply((T)fieldValue))).result().orElse((T)v);
        });
    }
 
    @Override
    protected Typed<?> fix(Typed<?> typed) {
        return typed.update(
            DSL.remainderFinder(),
            remainder -> updateAndRename(
                remainder,
                this.fieldName,
                "variant",
                catType -> DataFixUtils.orElse(catType.asNumber().map(e -> catType.createString(this.idConversions.apply(e.intValue()))).result(), catType)
            )
        );
    }
}

引用的其他类