64 lines
2.5 KiB
Java
64 lines
2.5 KiB
Java
package net.minecraft.util.datafix.fixes;
|
|
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.mojang.datafixers.DSL;
|
|
import com.mojang.datafixers.DataFixUtils;
|
|
import com.mojang.datafixers.Typed;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
import com.mojang.serialization.Dynamic;
|
|
|
|
public class VillagerDataFix extends NamedEntityFix {
|
|
public VillagerDataFix(Schema p_17056_, String p_17057_) {
|
|
super(p_17056_, false, "Villager profession data fix (" + p_17057_ + ")", References.ENTITY, p_17057_);
|
|
}
|
|
|
|
@Override
|
|
protected Typed<?> fix(Typed<?> p_17062_) {
|
|
Dynamic<?> dynamic = p_17062_.get(DSL.remainderFinder());
|
|
return p_17062_.set(
|
|
DSL.remainderFinder(),
|
|
dynamic.remove("Profession")
|
|
.remove("Career")
|
|
.remove("CareerLevel")
|
|
.set(
|
|
"VillagerData",
|
|
dynamic.createMap(
|
|
ImmutableMap.of(
|
|
dynamic.createString("type"),
|
|
dynamic.createString("minecraft:plains"),
|
|
dynamic.createString("profession"),
|
|
dynamic.createString(upgradeData(dynamic.get("Profession").asInt(0), dynamic.get("Career").asInt(0))),
|
|
dynamic.createString("level"),
|
|
DataFixUtils.orElse(dynamic.get("CareerLevel").result(), dynamic.createInt(1))
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
private static String upgradeData(int p_17059_, int p_17060_) {
|
|
if (p_17059_ == 0) {
|
|
if (p_17060_ == 2) {
|
|
return "minecraft:fisherman";
|
|
} else if (p_17060_ == 3) {
|
|
return "minecraft:shepherd";
|
|
} else {
|
|
return p_17060_ == 4 ? "minecraft:fletcher" : "minecraft:farmer";
|
|
}
|
|
} else if (p_17059_ == 1) {
|
|
return p_17060_ == 2 ? "minecraft:cartographer" : "minecraft:librarian";
|
|
} else if (p_17059_ == 2) {
|
|
return "minecraft:cleric";
|
|
} else if (p_17059_ == 3) {
|
|
if (p_17060_ == 2) {
|
|
return "minecraft:weaponsmith";
|
|
} else {
|
|
return p_17060_ == 3 ? "minecraft:toolsmith" : "minecraft:armorer";
|
|
}
|
|
} else if (p_17059_ == 4) {
|
|
return p_17060_ == 2 ? "minecraft:leatherworker" : "minecraft:butcher";
|
|
} else {
|
|
return p_17059_ == 5 ? "minecraft:nitwit" : "minecraft:none";
|
|
}
|
|
}
|
|
} |