minecraft-src/net/minecraft/util/datafix/fixes/StructureSettingsFlattenFix.java
2025-07-04 01:41:11 +03:00

51 lines
1.9 KiB
Java

package net.minecraft.util.datafix.fixes;
import com.mojang.datafixers.DataFix;
import com.mojang.datafixers.DataFixUtils;
import com.mojang.datafixers.OpticFinder;
import com.mojang.datafixers.TypeRewriteRule;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.datafixers.types.Type;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import net.minecraft.Util;
public class StructureSettingsFlattenFix extends DataFix {
public StructureSettingsFlattenFix(Schema outputSchema) {
super(outputSchema, false);
}
@Override
protected TypeRewriteRule makeRule() {
Type<?> type = this.getInputSchema().getType(References.WORLD_GEN_SETTINGS);
OpticFinder<?> opticFinder = type.findField("dimensions");
return this.fixTypeEverywhereTyped(
"StructureSettingsFlatten",
type,
typed -> typed.updateTyped(
opticFinder,
typedx -> Util.writeAndReadTypedOrThrow(typedx, opticFinder.type(), dynamic -> dynamic.updateMapValues(StructureSettingsFlattenFix::fixDimension))
)
);
}
private static Pair<Dynamic<?>, Dynamic<?>> fixDimension(Pair<Dynamic<?>, Dynamic<?>> dimensions) {
Dynamic<?> dynamic = dimensions.getSecond();
return Pair.of(
dimensions.getFirst(),
dynamic.update("generator", dynamicx -> dynamicx.update("settings", dynamicxx -> dynamicxx.update("structures", StructureSettingsFlattenFix::fixStructures)))
);
}
private static Dynamic<?> fixStructures(Dynamic<?> dynamic) {
Dynamic<?> dynamic2 = dynamic.get("structures")
.orElseEmptyMap()
.updateMapValues(pair -> pair.mapSecond(dynamic2x -> dynamic2x.set("type", dynamic.createString("minecraft:random_spread"))));
return DataFixUtils.orElse(
dynamic.get("stronghold")
.result()
.map(dynamic3 -> dynamic2.set("minecraft:stronghold", dynamic3.set("type", dynamic.createString("minecraft:concentric_rings")))),
dynamic2
);
}
}