51 lines
1.9 KiB
Java
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
|
|
);
|
|
}
|
|
}
|