WorldGenSettingsHeightAndBiomeFix.java
net.minecraft.util.datafix.fixes.WorldGenSettingsHeightAndBiomeFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.WorldGenSettingsHeightAndBiomeFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/WorldGenSettingsHeightAndBiomeFix.java
- 起始行号:L16
- 继承:DataFix
- 职责:
TODO
字段/常量
-
NAME- 类型:
String - 修饰符:
private static final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
WAS_PREVIOUSLY_INCREASED_KEY- 类型:
String - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public WorldGenSettingsHeightAndBiomeFix(Schema outputSchema) @ L20
- 构造器名:WorldGenSettingsHeightAndBiomeFix
- 源码定位:L20
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected TypeRewriteRule makeRule() @ L24
- 方法名:makeRule
- 源码定位:L24
- 返回类型:TypeRewriteRule
- 修饰符:protected
参数:
- 无
说明:
TODO
private static Dynamic<?> updateLayers(Dynamic<?> layers) @ L101
- 方法名:updateLayers
- 源码定位:L101
- 返回类型:Dynamic<?>
- 修饰符:private static
参数:
- layers: Dynamic<?>
说明:
TODO
代码
public class WorldGenSettingsHeightAndBiomeFix extends DataFix {
private static final String NAME = "WorldGenSettingsHeightAndBiomeFix";
public static final String WAS_PREVIOUSLY_INCREASED_KEY = "has_increased_height_already";
public WorldGenSettingsHeightAndBiomeFix(Schema outputSchema) {
super(outputSchema, true);
}
@Override
protected TypeRewriteRule makeRule() {
Type<?> worldGenSettingsType = this.getInputSchema().getType(References.WORLD_GEN_SETTINGS);
OpticFinder<?> dimensionsFinder = worldGenSettingsType.findField("dimensions");
Type<?> worldGenSettingsTypeNew = this.getOutputSchema().getType(References.WORLD_GEN_SETTINGS);
Type<?> dimensionsType = worldGenSettingsTypeNew.findFieldType("dimensions");
return this.fixTypeEverywhereTyped(
"WorldGenSettingsHeightAndBiomeFix",
worldGenSettingsType,
worldGenSettingsTypeNew,
input -> {
OptionalDynamic<?> wasIncreasedOpt = input.get(DSL.remainderFinder()).get("has_increased_height_already");
boolean wasExpSnap = wasIncreasedOpt.result().isEmpty();
boolean wasPreviouslyIncreased = wasIncreasedOpt.asBoolean(true);
return input.update(DSL.remainderFinder(), tag -> tag.remove("has_increased_height_already"))
.updateTyped(
dimensionsFinder,
dimensionsType,
dimensions -> Util.writeAndReadTypedOrThrow(
dimensions,
dimensionsType,
dimensionsTag -> dimensionsTag.update(
"minecraft:overworld",
overworldTag -> overworldTag.update(
"generator",
generator -> {
String generatorType = generator.get("type").asString("");
if ("minecraft:noise".equals(generatorType)) {
MutableBoolean isLargeBiomes = new MutableBoolean();
generator = generator.update(
"biome_source",
biomeSource -> {
String type = biomeSource.get("type").asString("");
if ("minecraft:vanilla_layered".equals(type) || wasExpSnap && "minecraft:multi_noise".equals(type)) {
if (biomeSource.get("large_biomes").asBoolean(false)) {
isLargeBiomes.setTrue();
}
return biomeSource.createMap(
ImmutableMap.of(
biomeSource.createString("preset"),
biomeSource.createString("minecraft:overworld"),
biomeSource.createString("type"),
biomeSource.createString("minecraft:multi_noise")
)
);
} else {
return biomeSource;
}
}
);
return isLargeBiomes.booleanValue()
? generator.update(
"settings",
settings -> "minecraft:overworld".equals(settings.asString(""))
? settings.createString("minecraft:large_biomes")
: settings
)
: generator;
} else if ("minecraft:flat".equals(generatorType)) {
return wasPreviouslyIncreased
? generator
: generator.update(
"settings", settings -> settings.update("layers", WorldGenSettingsHeightAndBiomeFix::updateLayers)
);
} else {
return generator;
}
}
)
)
)
);
}
);
}
private static Dynamic<?> updateLayers(Dynamic<?> layers) {
Dynamic<?> airLayer = layers.createMap(
ImmutableMap.of(layers.createString("height"), layers.createInt(64), layers.createString("block"), layers.createString("minecraft:air"))
);
return layers.createList(Stream.concat(Stream.of(airLayer), layers.asStream()));
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.writeAndReadTypedOrThrow()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: