NewVillageFix.java
net.minecraft.util.datafix.fixes.NewVillageFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.NewVillageFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/NewVillageFix.java
- 起始行号:L19
- 继承:DataFix
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public NewVillageFix(Schema outputSchema, boolean changesType) @ L20
- 构造器名:NewVillageFix
- 源码定位:L20
- 修饰符:public
参数:
- outputSchema: Schema
- changesType: boolean
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected TypeRewriteRule makeRule() @ L24
- 方法名:makeRule
- 源码定位:L24
- 返回类型:TypeRewriteRule
- 修饰符:protected
参数:
- 无
说明:
TODO
private <SF> TypeRewriteRule cap(CompoundListType<String,SF> startsType) @ L31
- 方法名:cap
- 源码定位:L31
- 返回类型:
TypeRewriteRule - 修饰符:private
参数:
- startsType: CompoundListType<String,SF>
说明:
TODO
代码
public class NewVillageFix extends DataFix {
public NewVillageFix(Schema outputSchema, boolean changesType) {
super(outputSchema, changesType);
}
@Override
protected TypeRewriteRule makeRule() {
CompoundListType<String, ?> startsType = DSL.compoundList(DSL.string(), this.getInputSchema().getType(References.STRUCTURE_FEATURE));
OpticFinder<? extends List<? extends Pair<String, ?>>> finder = startsType.finder();
return this.cap(startsType);
}
private <SF> TypeRewriteRule cap(CompoundListType<String, SF> startsType) {
Type<?> chunkType = this.getInputSchema().getType(References.CHUNK);
Type<?> structureType = this.getInputSchema().getType(References.STRUCTURE_FEATURE);
OpticFinder<?> levelFinder = chunkType.findField("Level");
OpticFinder<?> structuresFinder = levelFinder.type().findField("Structures");
OpticFinder<?> startsFinder = structuresFinder.type().findField("Starts");
OpticFinder<List<Pair<String, SF>>> listFinder = startsType.finder();
return TypeRewriteRule.seq(
this.fixTypeEverywhereTyped(
"NewVillageFix",
chunkType,
input -> input.updateTyped(
levelFinder,
level -> level.updateTyped(
structuresFinder,
structures -> structures.updateTyped(
startsFinder,
starts -> starts.update(
listFinder,
list -> list.stream()
.filter(pair -> !Objects.equals(pair.getFirst(), "Village"))
.map(pair -> pair.mapFirst(name -> name.equals("New_Village") ? "Village" : name))
.collect(Collectors.toList())
)
)
.update(DSL.remainderFinder(), tag -> tag.update("References", references -> {
Optional<? extends Dynamic<?>> village = references.get("New_Village").result();
return DataFixUtils.orElse(village.map(v -> references.remove("New_Village").set("Village", (Dynamic<?>)v)), references)
.remove("Village");
}))
)
)
),
this.fixTypeEverywhereTyped(
"NewVillageStartFix",
structureType,
input -> input.update(
DSL.remainderFinder(),
tag -> tag.update(
"id",
id -> Objects.equals(NamespacedSchema.ensureNamespaced(id.asString("")), "minecraft:new_village")
? id.createString("minecraft:village")
: id
)
)
)
);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NamespacedSchema.ensureNamespaced()
- 引用位置: