minecraft-source/src/net/minecraft/util/datafix/fixes/SavedDataVillageCropFix.java

62 lines
2.6 KiB
Java

package net.minecraft.util.datafix.fixes;
import java.util.stream.Stream;
import com.mojang.datafixers.Dynamic;
import java.util.function.Function;
import com.mojang.datafixers.TypeRewriteRule;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.datafixers.DataFix;
public class SavedDataVillageCropFix extends DataFix {
public SavedDataVillageCropFix(final Schema schema, final boolean boolean2) {
super(schema, boolean2);
}
public TypeRewriteRule makeRule() {
return this.writeFixAndRead("SavedDataVillageCropFix", this.getInputSchema().getType(References.STRUCTURE_FEATURE), this.getOutputSchema().getType(References.STRUCTURE_FEATURE), (Function)this::fixTag);
}
private <T> Dynamic<T> fixTag(final Dynamic<T> dynamic) {
return (Dynamic<T>)dynamic.update("Children", (Function)SavedDataVillageCropFix::updateChildren);
}
private static <T> Dynamic<T> updateChildren(final Dynamic<T> dynamic) {
return dynamic.asStreamOpt().map(SavedDataVillageCropFix::updateChildren).<Dynamic<T>>map(dynamic::createList).orElse(dynamic);
}
private static Stream<? extends Dynamic<?>> updateChildren(final Stream<? extends Dynamic<?>> stream) {
final String string2;
return stream.map(dynamic -> {
string2 = dynamic.get("id").asString("");
if ("ViF".equals(string2)) {
return SavedDataVillageCropFix.updateSingleField(dynamic);
}
else if ("ViDF".equals(string2)) {
return SavedDataVillageCropFix.updateDoubleField(dynamic);
}
else {
return dynamic;
}
});
}
private static <T> Dynamic<T> updateSingleField(Dynamic<T> dynamic) {
dynamic = SavedDataVillageCropFix.<T>updateCrop(dynamic, "CA");
return SavedDataVillageCropFix.<T>updateCrop(dynamic, "CB");
}
private static <T> Dynamic<T> updateDoubleField(Dynamic<T> dynamic) {
dynamic = SavedDataVillageCropFix.<T>updateCrop(dynamic, "CA");
dynamic = SavedDataVillageCropFix.<T>updateCrop(dynamic, "CB");
dynamic = SavedDataVillageCropFix.<T>updateCrop(dynamic, "CC");
return SavedDataVillageCropFix.<T>updateCrop(dynamic, "CD");
}
private static <T> Dynamic<T> updateCrop(final Dynamic<T> dynamic, final String string) {
if (dynamic.get(string).asNumber().isPresent()) {
return (Dynamic<T>)dynamic.set(string, (Dynamic)BlockStateData.getTag(dynamic.get(string).asInt(0) << 4));
}
return dynamic;
}
}