InlineBlockPosFormatFix.java
net.minecraft.util.datafix.fixes.InlineBlockPosFormatFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.InlineBlockPosFormatFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/InlineBlockPosFormatFix.java
- 起始行号:L15
- 继承:DataFix
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public InlineBlockPosFormatFix(Schema outputSchema) @ L16
- 构造器名:InlineBlockPosFormatFix
- 源码定位:L16
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
public TypeRewriteRule makeRule() @ L20
- 方法名:makeRule
- 源码定位:L20
- 返回类型:TypeRewriteRule
- 修饰符:public
参数:
- 无
说明:
TODO
private OpticFinder<?> entityFinder(String choiceName) @ L56
- 方法名:entityFinder
- 源码定位:L56
- 返回类型:OpticFinder<?>
- 修饰符:private
参数:
- choiceName: String
说明:
TODO
private Dynamic<?> fixPlayer(Dynamic<?> tag) @ L60
- 方法名:fixPlayer
- 源码定位:L60
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
private Dynamic<?> fixLivingEntity(Dynamic<?> tag) @ L96
- 方法名:fixLivingEntity
- 源码定位:L96
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
private Dynamic<?> fixVex(Dynamic<?> tag) @ L100
- 方法名:fixVex
- 源码定位:L100
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
private Dynamic<?> fixPhantom(Dynamic<?> tag) @ L104
- 方法名:fixPhantom
- 源码定位:L104
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
private Dynamic<?> fixTurtle(Dynamic<?> tag) @ L108
- 方法名:fixTurtle
- 源码定位:L108
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
private Dynamic<?> fixBlockAttached(Dynamic<?> tag) @ L114
- 方法名:fixBlockAttached
- 源码定位:L114
- 返回类型:Dynamic<?>
- 修饰符:private
参数:
- tag: Dynamic<?>
说明:
TODO
代码
public class InlineBlockPosFormatFix extends DataFix {
public InlineBlockPosFormatFix(Schema outputSchema) {
super(outputSchema, false);
}
@Override
public TypeRewriteRule makeRule() {
OpticFinder<?> vexFinder = this.entityFinder("minecraft:vex");
OpticFinder<?> phantomFinder = this.entityFinder("minecraft:phantom");
OpticFinder<?> turtleFinder = this.entityFinder("minecraft:turtle");
List<OpticFinder<?>> blockAttachedFinders = List.of(
this.entityFinder("minecraft:item_frame"),
this.entityFinder("minecraft:glow_item_frame"),
this.entityFinder("minecraft:painting"),
this.entityFinder("minecraft:leash_knot")
);
return TypeRewriteRule.seq(
this.fixTypeEverywhereTyped(
"InlineBlockPosFormatFix - player",
this.getInputSchema().getType(References.PLAYER),
player -> player.update(DSL.remainderFinder(), this::fixPlayer)
),
this.fixTypeEverywhereTyped(
"InlineBlockPosFormatFix - entity",
this.getInputSchema().getType(References.ENTITY),
entity -> {
entity = entity.update(DSL.remainderFinder(), this::fixLivingEntity)
.updateTyped(vexFinder, vex -> vex.update(DSL.remainderFinder(), this::fixVex))
.updateTyped(phantomFinder, phantom -> phantom.update(DSL.remainderFinder(), this::fixPhantom))
.updateTyped(turtleFinder, turtle -> turtle.update(DSL.remainderFinder(), this::fixTurtle));
for (OpticFinder<?> blockAttachedFinder : blockAttachedFinders) {
entity = entity.updateTyped(blockAttachedFinder, blockAttached -> blockAttached.update(DSL.remainderFinder(), this::fixBlockAttached));
}
return entity;
}
)
);
}
private OpticFinder<?> entityFinder(String choiceName) {
return DSL.namedChoice(choiceName, this.getInputSchema().getChoiceType(References.ENTITY, choiceName));
}
private Dynamic<?> fixPlayer(Dynamic<?> tag) {
tag = this.fixLivingEntity(tag);
Optional<Number> spawnX = tag.get("SpawnX").asNumber().result();
Optional<Number> spawnY = tag.get("SpawnY").asNumber().result();
Optional<Number> spawnZ = tag.get("SpawnZ").asNumber().result();
if (spawnX.isPresent() && spawnY.isPresent() && spawnZ.isPresent()) {
Dynamic<?> respawn = tag.createMap(
Map.of(
tag.createString("pos"), ExtraDataFixUtils.createBlockPos(tag, spawnX.get().intValue(), spawnY.get().intValue(), spawnZ.get().intValue())
)
);
respawn = Dynamic.copyField(tag, "SpawnAngle", respawn, "angle");
respawn = Dynamic.copyField(tag, "SpawnDimension", respawn, "dimension");
respawn = Dynamic.copyField(tag, "SpawnForced", respawn, "forced");
tag = tag.remove("SpawnX").remove("SpawnY").remove("SpawnZ").remove("SpawnAngle").remove("SpawnDimension").remove("SpawnForced");
tag = tag.set("respawn", respawn);
}
Optional<? extends Dynamic<?>> enteredNetherPos = tag.get("enteredNetherPosition").result();
if (enteredNetherPos.isPresent()) {
tag = tag.remove("enteredNetherPosition")
.set(
"entered_nether_pos",
tag.createList(
Stream.of(
tag.createDouble(enteredNetherPos.get().get("x").asDouble(0.0)),
tag.createDouble(enteredNetherPos.get().get("y").asDouble(0.0)),
tag.createDouble(enteredNetherPos.get().get("z").asDouble(0.0))
)
)
);
}
return tag;
}
private Dynamic<?> fixLivingEntity(Dynamic<?> tag) {
return ExtraDataFixUtils.fixInlineBlockPos(tag, "SleepingX", "SleepingY", "SleepingZ", "sleeping_pos");
}
private Dynamic<?> fixVex(Dynamic<?> tag) {
return ExtraDataFixUtils.fixInlineBlockPos(tag.renameField("LifeTicks", "life_ticks"), "BoundX", "BoundY", "BoundZ", "bound_pos");
}
private Dynamic<?> fixPhantom(Dynamic<?> tag) {
return ExtraDataFixUtils.fixInlineBlockPos(tag.renameField("Size", "size"), "AX", "AY", "AZ", "anchor_pos");
}
private Dynamic<?> fixTurtle(Dynamic<?> tag) {
tag = tag.remove("TravelPosX").remove("TravelPosY").remove("TravelPosZ");
tag = ExtraDataFixUtils.fixInlineBlockPos(tag, "HomePosX", "HomePosY", "HomePosZ", "home_pos");
return tag.renameField("HasEgg", "has_egg");
}
private Dynamic<?> fixBlockAttached(Dynamic<?> tag) {
return ExtraDataFixUtils.fixInlineBlockPos(tag, "TileX", "TileY", "TileZ", "block_pos");
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExtraDataFixUtils.createBlockPos(), ExtraDataFixUtils.fixInlineBlockPos()
- 引用位置:
-
- 引用位置:
参数/方法调用/返回值 - 关联成员:
Dynamic.copyField()
- 引用位置: