BlockPosFormatAndRenamesFix.java
net.minecraft.util.datafix.fixes.BlockPosFormatAndRenamesFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.BlockPosFormatAndRenamesFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/BlockPosFormatAndRenamesFix.java
- 起始行号:L18
- 继承:DataFix
- 职责:
TODO
字段/常量
PATROLLING_MOBS- 类型:
List<String> - 修饰符:
private static final - 源码定位:
L19 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BlockPosFormatAndRenamesFix(Schema outputSchema) @ L23
- 构造器名:BlockPosFormatAndRenamesFix
- 源码定位:L23
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
private Typed<?> fixFields(Typed<?> typed, Map<String,String> fields) @ L27
- 方法名:fixFields
- 源码定位:L27
- 返回类型:Typed<?>
- 修饰符:private
参数:
- typed: Typed<?>
- fields: Map<String,String>
说明:
TODO
private <T> Dynamic<T> fixMapSavedData(Dynamic<T> data) @ L37
- 方法名:fixMapSavedData
- 源码定位:L37
- 返回类型:
Dynamic - 修饰符:private
参数:
- data: Dynamic
说明:
TODO
public TypeRewriteRule makeRule() @ L49
- 方法名:makeRule
- 源码定位:L49
- 返回类型:TypeRewriteRule
- 修饰符:public
参数:
- 无
说明:
TODO
private void addEntityRules(List<TypeRewriteRule> rules) @ L77
- 方法名:addEntityRules
- 源码定位:L77
- 返回类型:void
- 修饰符:private
参数:
- rules: List
说明:
TODO
private void addBlockEntityRules(List<TypeRewriteRule> rules) @ L95
- 方法名:addBlockEntityRules
- 源码定位:L95
- 返回类型:void
- 修饰符:private
参数:
- rules: List
说明:
TODO
private TypeRewriteRule createEntityFixer(TypeReference type, String entityName, Map<String,String> fields) @ L100
- 方法名:createEntityFixer
- 源码定位:L100
- 返回类型:TypeRewriteRule
- 修饰符:private
参数:
- type: TypeReference
- entityName: String
- fields: Map<String,String>
说明:
TODO
代码
public class BlockPosFormatAndRenamesFix extends DataFix {
private static final List<String> PATROLLING_MOBS = List.of(
"minecraft:witch", "minecraft:ravager", "minecraft:pillager", "minecraft:illusioner", "minecraft:evoker", "minecraft:vindicator"
);
public BlockPosFormatAndRenamesFix(Schema outputSchema) {
super(outputSchema, true);
}
private Typed<?> fixFields(Typed<?> typed, Map<String, String> fields) {
return typed.update(DSL.remainderFinder(), tag -> {
for (Entry<String, String> entry : fields.entrySet()) {
tag = tag.renameAndFixField(entry.getKey(), entry.getValue(), ExtraDataFixUtils::fixBlockPos);
}
return tag;
});
}
private <T> Dynamic<T> fixMapSavedData(Dynamic<T> data) {
return data.update("frames", frames -> frames.createList(frames.asStream().map(frame -> {
frame = frame.renameAndFixField("Pos", "pos", ExtraDataFixUtils::fixBlockPos);
frame = frame.renameField("Rotation", "rotation");
return frame.renameField("EntityId", "entity_id");
}))).update("banners", banners -> banners.createList(banners.asStream().map(banner -> {
banner = banner.renameField("Pos", "pos");
banner = banner.renameField("Color", "color");
return banner.renameField("Name", "name");
})));
}
@Override
public TypeRewriteRule makeRule() {
List<TypeRewriteRule> rules = new ArrayList<>();
this.addEntityRules(rules);
this.addBlockEntityRules(rules);
rules.add(
this.writeFixAndRead(
"BlockPos format for map frames",
this.getInputSchema().getType(References.SAVED_DATA_MAP_DATA),
this.getOutputSchema().getType(References.SAVED_DATA_MAP_DATA),
input -> input.update("data", this::fixMapSavedData)
)
);
Type<?> itemStackType = this.getInputSchema().getType(References.ITEM_STACK);
rules.add(
this.fixTypeEverywhereTyped(
"BlockPos format for compass target",
itemStackType,
ItemStackTagFix.createFixer(
itemStackType,
"minecraft:compass"::equals,
typed -> typed.update(DSL.remainderFinder(), tag -> tag.update("LodestonePos", ExtraDataFixUtils::fixBlockPos))
)
)
);
return TypeRewriteRule.seq(rules);
}
private void addEntityRules(List<TypeRewriteRule> rules) {
rules.add(this.createEntityFixer(References.ENTITY, "minecraft:bee", Map.of("HivePos", "hive_pos", "FlowerPos", "flower_pos")));
rules.add(this.createEntityFixer(References.ENTITY, "minecraft:end_crystal", Map.of("BeamTarget", "beam_target")));
rules.add(this.createEntityFixer(References.ENTITY, "minecraft:wandering_trader", Map.of("WanderTarget", "wander_target")));
for (String patrollingMob : PATROLLING_MOBS) {
rules.add(this.createEntityFixer(References.ENTITY, patrollingMob, Map.of("PatrolTarget", "patrol_target")));
}
rules.add(
this.fixTypeEverywhereTyped(
"BlockPos format in Leash for mobs",
this.getInputSchema().getType(References.ENTITY),
input -> input.update(DSL.remainderFinder(), tag -> tag.renameAndFixField("Leash", "leash", ExtraDataFixUtils::fixBlockPos))
)
);
}
private void addBlockEntityRules(List<TypeRewriteRule> rules) {
rules.add(this.createEntityFixer(References.BLOCK_ENTITY, "minecraft:beehive", Map.of("FlowerPos", "flower_pos")));
rules.add(this.createEntityFixer(References.BLOCK_ENTITY, "minecraft:end_gateway", Map.of("ExitPortal", "exit_portal")));
}
private TypeRewriteRule createEntityFixer(TypeReference type, String entityName, Map<String, String> fields) {
String name = "BlockPos format in " + fields.keySet() + " for " + entityName + " (" + type.typeName() + ")";
OpticFinder<?> entityF = DSL.namedChoice(entityName, this.getInputSchema().getChoiceType(type, entityName));
return this.fixTypeEverywhereTyped(
name, this.getInputSchema().getType(type), input -> input.updateTyped(entityF, entity -> this.fixFields(entity, fields))
);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ItemStackTagFix.createFixer()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: