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

60 lines
1.9 KiB
Java

package net.minecraft.util.datafix.fixes;
import com.mojang.datafixers.DSL;
import com.mojang.datafixers.TypeRewriteRule;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Dynamic;
import org.slf4j.Logger;
public class LevelUUIDFix extends AbstractUUIDFix {
private static final Logger LOGGER = LogUtils.getLogger();
public LevelUUIDFix(Schema outputSchema) {
super(outputSchema, References.LEVEL);
}
@Override
protected TypeRewriteRule makeRule() {
return this.fixTypeEverywhereTyped(
"LevelUUIDFix",
this.getInputSchema().getType(this.typeReference),
typed -> typed.updateTyped(DSL.remainderFinder(), typedx -> typedx.update(DSL.remainderFinder(), dynamic -> {
dynamic = this.updateCustomBossEvents(dynamic);
dynamic = this.updateDragonFight(dynamic);
return this.updateWanderingTrader(dynamic);
}))
);
}
private Dynamic<?> updateWanderingTrader(Dynamic<?> dynamic) {
return (Dynamic<?>)replaceUUIDString(dynamic, "WanderingTraderId", "WanderingTraderId").orElse(dynamic);
}
private Dynamic<?> updateDragonFight(Dynamic<?> dynamic) {
return dynamic.update(
"DimensionData",
dynamicx -> dynamicx.updateMapValues(
pair -> pair.mapSecond(
dynamicxx -> dynamicxx.update("DragonFight", dynamicxxx -> (Dynamic)replaceUUIDLeastMost(dynamicxxx, "DragonUUID", "Dragon").orElse(dynamicxxx))
)
)
);
}
private Dynamic<?> updateCustomBossEvents(Dynamic<?> dynamic) {
return dynamic.update(
"CustomBossEvents",
dynamicx -> dynamicx.updateMapValues(
pair -> pair.mapSecond(
dynamicxx -> dynamicxx.update(
"Players", dynamic2 -> dynamicxx.createList(dynamic2.asStream().map(dynamicxxxx -> (Dynamic)createUUIDFromML(dynamicxxxx).orElseGet(() -> {
LOGGER.warn("CustomBossEvents contains invalid UUIDs.");
return dynamicxxxx;
})))
)
)
)
);
}
}