AddFieldFix.java

net.minecraft.util.datafix.fixes.AddFieldFix

信息

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

    TODO

字段/常量

  • name

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

      TODO

  • type

    • 类型: TypeReference
    • 修饰符: private final
    • 源码定位: L15
    • 说明:

      TODO

  • fieldName

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

      TODO

  • path

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

      TODO

  • fieldGenerator

    • 类型: Function<Dynamic<?>,Dynamic<?>>
    • 修饰符: private final
    • 源码定位: L18
    • 说明:

      TODO

内部类/嵌套类型

构造器

public AddFieldFix(Schema outputSchema, TypeReference type, String fieldName, Function<Dynamic<?>,Dynamic<?>> fieldGenerator, String... path) @ L20

  • 构造器名:AddFieldFix
  • 源码定位:L20
  • 修饰符:public

参数:

  • outputSchema: Schema
  • type: TypeReference
  • fieldName: String
  • fieldGenerator: Function<Dynamic,Dynamic>
  • path: String…

说明:

TODO

方法

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

protected TypeRewriteRule makeRule() @ L29

  • 方法名:makeRule
  • 源码定位:L29
  • 返回类型:TypeRewriteRule
  • 修饰符:protected

参数:

说明:

TODO

private Dynamic<?> addField(Dynamic<?> dynamic, int pathIndex) @ L39

  • 方法名:addField
  • 源码定位:L39
  • 返回类型:Dynamic<?>
  • 修饰符:private

参数:

  • dynamic: Dynamic<?>
  • pathIndex: int

说明:

TODO

代码

public class AddFieldFix extends DataFix {
    private final String name;
    private final TypeReference type;
    private final String fieldName;
    private final String[] path;
    private final Function<Dynamic<?>, Dynamic<?>> fieldGenerator;
 
    public AddFieldFix(Schema outputSchema, TypeReference type, String fieldName, Function<Dynamic<?>, Dynamic<?>> fieldGenerator, String... path) {
        super(outputSchema, false);
        this.name = "Adding field `" + fieldName + "` to type `" + type.typeName().toLowerCase(Locale.ROOT) + "`";
        this.type = type;
        this.fieldName = fieldName;
        this.path = path;
        this.fieldGenerator = fieldGenerator;
    }
 
    @Override
    protected TypeRewriteRule makeRule() {
        return this.fixTypeEverywhereTyped(
            this.name,
            this.getInputSchema().getType(this.type),
            this.getOutputSchema().getType(this.type),
            input -> input.update(DSL.remainderFinder(), dynamic -> this.addField(dynamic, 0))
        );
    }
 
    private Dynamic<?> addField(Dynamic<?> dynamic, int pathIndex) {
        if (pathIndex >= this.path.length) {
            return dynamic.set(this.fieldName, this.fieldGenerator.apply(dynamic));
        } else {
            Optional<? extends Dynamic<?>> field = dynamic.get(this.path[pathIndex]).result();
            return field.isEmpty() ? dynamic : this.addField((Dynamic<?>)field.get(), pathIndex + 1);
        }
    }
}

引用的其他类