OverreachingTickFix.java
net.minecraft.util.datafix.fixes.OverreachingTickFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.OverreachingTickFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/OverreachingTickFix.java
- 起始行号:L14
- 继承:DataFix
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public OverreachingTickFix(Schema outputSchema) @ L15
- 构造器名:OverreachingTickFix
- 源码定位:L15
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected TypeRewriteRule makeRule() @ L19
- 方法名:makeRule
- 源码定位:L19
- 返回类型:TypeRewriteRule
- 修饰符:protected
参数:
- 无
说明:
TODO
private static Dynamic<?> extractOverreachingTicks(Dynamic<?> remainder, int chunkX, int chunkZ, Optional<?extends Dynamic<?>> ticks, String nameInUpgradeData) @ L36
- 方法名:extractOverreachingTicks
- 源码定位:L36
- 返回类型:Dynamic<?>
- 修饰符:private static
参数:
- remainder: Dynamic<?>
- chunkX: int
- chunkZ: int
- ticks: Optional>
- nameInUpgradeData: String
说明:
TODO
代码
public class OverreachingTickFix extends DataFix {
public OverreachingTickFix(Schema outputSchema) {
super(outputSchema, false);
}
@Override
protected TypeRewriteRule makeRule() {
Type<?> chunkType = this.getInputSchema().getType(References.CHUNK);
OpticFinder<?> blockTicksFinder = chunkType.findField("block_ticks");
return this.fixTypeEverywhereTyped("Handle ticks saved in the wrong chunk", chunkType, chunk -> {
Optional<? extends Typed<?>> blockTicksOpt = chunk.getOptionalTyped(blockTicksFinder);
Optional<? extends Dynamic<?>> blockTicks = blockTicksOpt.isPresent() ? blockTicksOpt.get().write().result() : Optional.empty();
return chunk.update(DSL.remainderFinder(), remainder -> {
int chunkX = remainder.get("xPos").asInt(0);
int chunkZ = remainder.get("zPos").asInt(0);
Optional<? extends Dynamic<?>> fluidTicks = remainder.get("fluid_ticks").get().result();
remainder = extractOverreachingTicks(remainder, chunkX, chunkZ, blockTicks, "neighbor_block_ticks");
return extractOverreachingTicks(remainder, chunkX, chunkZ, fluidTicks, "neighbor_fluid_ticks");
});
});
}
private static Dynamic<?> extractOverreachingTicks(
Dynamic<?> remainder, int chunkX, int chunkZ, Optional<? extends Dynamic<?>> ticks, String nameInUpgradeData
) {
if (ticks.isPresent()) {
List<? extends Dynamic<?>> overreachingTicks = ticks.get().asStream().filter(tick -> {
int x = tick.get("x").asInt(0);
int z = tick.get("z").asInt(0);
int distX = Math.abs(chunkX - (x >> 4));
int distZ = Math.abs(chunkZ - (z >> 4));
return (distX != 0 || distZ != 0) && distX <= 1 && distZ <= 1;
}).toList();
if (!overreachingTicks.isEmpty()) {
remainder = remainder.set(
"UpgradeData", remainder.get("UpgradeData").orElseEmptyMap().set(nameInUpgradeData, remainder.createList(overreachingTicks.stream()))
);
}
}
return remainder;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: