45 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util.datafix.fixes;
 | |
| 
 | |
| import com.mojang.datafixers.DSL;
 | |
| import com.mojang.datafixers.DataFixUtils;
 | |
| import com.mojang.datafixers.Typed;
 | |
| import com.mojang.datafixers.DSL.TypeReference;
 | |
| import com.mojang.datafixers.schemas.Schema;
 | |
| import com.mojang.serialization.Dynamic;
 | |
| import com.mojang.serialization.DynamicOps;
 | |
| import java.util.function.Function;
 | |
| import java.util.function.IntFunction;
 | |
| 
 | |
| public class EntityVariantFix extends NamedEntityFix {
 | |
| 	private final String fieldName;
 | |
| 	private final IntFunction<String> idConversions;
 | |
| 
 | |
| 	public EntityVariantFix(Schema outputSchema, String name, TypeReference type, String entityName, String fieldName, IntFunction<String> idConversions) {
 | |
| 		super(outputSchema, false, name, type, entityName);
 | |
| 		this.fieldName = fieldName;
 | |
| 		this.idConversions = idConversions;
 | |
| 	}
 | |
| 
 | |
| 	private static <T> Dynamic<T> updateAndRename(Dynamic<T> dynamic, String fieldName, String newFieldName, Function<Dynamic<T>, Dynamic<T>> fixer) {
 | |
| 		return dynamic.map(object -> {
 | |
| 			DynamicOps<T> dynamicOps = dynamic.getOps();
 | |
| 			Function<T, T> function2 = objectx -> ((Dynamic)fixer.apply(new Dynamic<>(dynamicOps, (T)objectx))).getValue();
 | |
| 			return dynamicOps.get((T)object, fieldName).map(object2 -> dynamicOps.set((T)object, newFieldName, (T)function2.apply(object2))).result().orElse(object);
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	protected Typed<?> fix(Typed<?> typed) {
 | |
| 		return typed.update(
 | |
| 			DSL.remainderFinder(),
 | |
| 			dynamic -> updateAndRename(
 | |
| 				dynamic,
 | |
| 				this.fieldName,
 | |
| 				"variant",
 | |
| 				dynamicx -> DataFixUtils.orElse(
 | |
| 					dynamicx.asNumber().map(number -> dynamicx.createString((String)this.idConversions.apply(number.intValue()))).result(), dynamicx
 | |
| 				)
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| }
 |