69 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util.datafix.fixes;
 | |
| 
 | |
| import com.mojang.datafixers.DSL;
 | |
| import com.mojang.datafixers.DataFix;
 | |
| import com.mojang.datafixers.DataFixUtils;
 | |
| import com.mojang.datafixers.TypeRewriteRule;
 | |
| import com.mojang.datafixers.Typed;
 | |
| import com.mojang.datafixers.schemas.Schema;
 | |
| import com.mojang.datafixers.types.Type;
 | |
| import com.mojang.datafixers.util.Pair;
 | |
| import com.mojang.serialization.DataResult;
 | |
| import com.mojang.serialization.Dynamic;
 | |
| import java.util.Optional;
 | |
| import java.util.stream.Stream;
 | |
| 
 | |
| public class MobSpawnerEntityIdentifiersFix extends DataFix {
 | |
| 	public MobSpawnerEntityIdentifiersFix(Schema outputSchema, boolean changesType) {
 | |
| 		super(outputSchema, changesType);
 | |
| 	}
 | |
| 
 | |
| 	private Dynamic<?> fix(Dynamic<?> dynamic) {
 | |
| 		if (!"MobSpawner".equals(dynamic.get("id").asString(""))) {
 | |
| 			return dynamic;
 | |
| 		} else {
 | |
| 			Optional<String> optional = dynamic.get("EntityId").asString().result();
 | |
| 			if (optional.isPresent()) {
 | |
| 				Dynamic<?> dynamic2 = DataFixUtils.orElse(dynamic.get("SpawnData").result(), dynamic.emptyMap());
 | |
| 				dynamic2 = dynamic2.set("id", dynamic2.createString(((String)optional.get()).isEmpty() ? "Pig" : (String)optional.get()));
 | |
| 				dynamic = dynamic.set("SpawnData", dynamic2);
 | |
| 				dynamic = dynamic.remove("EntityId");
 | |
| 			}
 | |
| 
 | |
| 			Optional<? extends Stream<? extends Dynamic<?>>> optional2 = dynamic.get("SpawnPotentials").asStreamOpt().result();
 | |
| 			if (optional2.isPresent()) {
 | |
| 				dynamic = dynamic.set(
 | |
| 					"SpawnPotentials",
 | |
| 					dynamic.createList(
 | |
| 						((Stream)optional2.get())
 | |
| 							.map(
 | |
| 								dynamicx -> {
 | |
| 									Optional<String> optionalx = dynamicx.get("Type").asString().result();
 | |
| 									if (optionalx.isPresent()) {
 | |
| 										Dynamic<?> dynamic2 = DataFixUtils.orElse(dynamicx.get("Properties").result(), dynamicx.emptyMap())
 | |
| 											.set("id", dynamicx.createString((String)optionalx.get()));
 | |
| 										return dynamicx.set("Entity", dynamic2).remove("Type").remove("Properties");
 | |
| 									} else {
 | |
| 										return dynamicx;
 | |
| 									}
 | |
| 								}
 | |
| 							)
 | |
| 					)
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			return dynamic;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public TypeRewriteRule makeRule() {
 | |
| 		Type<?> type = this.getOutputSchema().getType(References.UNTAGGED_SPAWNER);
 | |
| 		return this.fixTypeEverywhereTyped("MobSpawnerEntityIdentifiersFix", this.getInputSchema().getType(References.UNTAGGED_SPAWNER), type, typed -> {
 | |
| 			Dynamic<?> dynamic = typed.get(DSL.remainderFinder());
 | |
| 			dynamic = dynamic.set("id", dynamic.createString("MobSpawner"));
 | |
| 			DataResult<? extends Pair<? extends Typed<?>, ?>> dataResult = type.readTyped(this.fix(dynamic));
 | |
| 			return dataResult.result().isEmpty() ? typed : (Typed)((Pair)dataResult.result().get()).getFirst();
 | |
| 		});
 | |
| 	}
 | |
| }
 |