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);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置: