BlendingDataFix.java
net.minecraft.util.datafix.fixes.BlendingDataFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.BlendingDataFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/BlendingDataFix.java
- 起始行号:L16
- 继承:DataFix
- 职责:
TODO
字段/常量
-
name- 类型:
String - 修饰符:
private final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
STATUSES_TO_SKIP_BLENDING- 类型:
Set<String> - 修饰符:
private static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BlendingDataFix(Schema outputSchema) @ L22
- 构造器名:BlendingDataFix
- 源码定位:L22
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected TypeRewriteRule makeRule() @ L27
- 方法名:makeRule
- 源码定位:L27
- 返回类型:TypeRewriteRule
- 修饰符:protected
参数:
- 无
说明:
TODO
private static Dynamic<?> updateChunkTag(Dynamic<?> chunkTag, OptionalDynamic<?> contextTag) @ L35
- 方法名:updateChunkTag
- 源码定位:L35
- 返回类型:Dynamic<?>
- 修饰符:private static
参数:
- chunkTag: Dynamic<?>
- contextTag: OptionalDynamic<?>
说明:
TODO
private static Dynamic<?> updateBlendingData(Dynamic<?> chunkTag, int height, int minY) @ L56
- 方法名:updateBlendingData
- 源码定位:L56
- 返回类型:Dynamic<?>
- 修饰符:private static
参数:
- chunkTag: Dynamic<?>
- height: int
- minY: int
说明:
TODO
代码
public class BlendingDataFix extends DataFix {
private final String name;
private static final Set<String> STATUSES_TO_SKIP_BLENDING = Set.of(
"minecraft:empty", "minecraft:structure_starts", "minecraft:structure_references", "minecraft:biomes"
);
public BlendingDataFix(Schema outputSchema) {
super(outputSchema, false);
this.name = "Blending Data Fix v" + outputSchema.getVersionKey();
}
@Override
protected TypeRewriteRule makeRule() {
Type<?> chunkType = this.getOutputSchema().getType(References.CHUNK);
return this.fixTypeEverywhereTyped(
this.name, chunkType, chunk -> chunk.update(DSL.remainderFinder(), chunkTag -> updateChunkTag(chunkTag, chunkTag.get("__context")))
);
}
private static Dynamic<?> updateChunkTag(Dynamic<?> chunkTag, OptionalDynamic<?> contextTag) {
chunkTag = chunkTag.remove("blending_data");
boolean isOverworld = "minecraft:overworld".equals(contextTag.get("dimension").asString().result().orElse(""));
Optional<? extends Dynamic<?>> statusOpt = chunkTag.get("Status").result();
if (isOverworld && statusOpt.isPresent()) {
String status = NamespacedSchema.ensureNamespaced(statusOpt.get().asString("empty"));
Optional<? extends Dynamic<?>> belowZeroRetrogenOpt = chunkTag.get("below_zero_retrogen").result();
if (!STATUSES_TO_SKIP_BLENDING.contains(status)) {
chunkTag = updateBlendingData(chunkTag, 384, -64);
} else if (belowZeroRetrogenOpt.isPresent()) {
Dynamic<?> belowZeroRetrogen = (Dynamic<?>)belowZeroRetrogenOpt.get();
String targetStatus = NamespacedSchema.ensureNamespaced(belowZeroRetrogen.get("target_status").asString("empty"));
if (!STATUSES_TO_SKIP_BLENDING.contains(targetStatus)) {
chunkTag = updateBlendingData(chunkTag, 256, 0);
}
}
}
return chunkTag;
}
private static Dynamic<?> updateBlendingData(Dynamic<?> chunkTag, int height, int minY) {
return chunkTag.set(
"blending_data",
chunkTag.createMap(
Map.of(
chunkTag.createString("min_section"),
chunkTag.createInt(SectionPos.blockToSectionCoord(minY)),
chunkTag.createString("max_section"),
chunkTag.createInt(SectionPos.blockToSectionCoord(minY + height))
)
)
);
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
SectionPos.blockToSectionCoord()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NamespacedSchema.ensureNamespaced()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: