195 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
	
		
			7.5 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.OpticFinder;
 | |
| 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.Dynamic;
 | |
| import java.util.Objects;
 | |
| import java.util.Optional;
 | |
| import net.minecraft.util.datafix.schemas.NamespacedSchema;
 | |
| 
 | |
| public class ItemPotionFix extends DataFix {
 | |
| 	private static final int SPLASH = 16384;
 | |
| 	private static final String[] POTIONS = DataFixUtils.make(new String[128], strings -> {
 | |
| 		strings[0] = "minecraft:water";
 | |
| 		strings[1] = "minecraft:regeneration";
 | |
| 		strings[2] = "minecraft:swiftness";
 | |
| 		strings[3] = "minecraft:fire_resistance";
 | |
| 		strings[4] = "minecraft:poison";
 | |
| 		strings[5] = "minecraft:healing";
 | |
| 		strings[6] = "minecraft:night_vision";
 | |
| 		strings[7] = null;
 | |
| 		strings[8] = "minecraft:weakness";
 | |
| 		strings[9] = "minecraft:strength";
 | |
| 		strings[10] = "minecraft:slowness";
 | |
| 		strings[11] = "minecraft:leaping";
 | |
| 		strings[12] = "minecraft:harming";
 | |
| 		strings[13] = "minecraft:water_breathing";
 | |
| 		strings[14] = "minecraft:invisibility";
 | |
| 		strings[15] = null;
 | |
| 		strings[16] = "minecraft:awkward";
 | |
| 		strings[17] = "minecraft:regeneration";
 | |
| 		strings[18] = "minecraft:swiftness";
 | |
| 		strings[19] = "minecraft:fire_resistance";
 | |
| 		strings[20] = "minecraft:poison";
 | |
| 		strings[21] = "minecraft:healing";
 | |
| 		strings[22] = "minecraft:night_vision";
 | |
| 		strings[23] = null;
 | |
| 		strings[24] = "minecraft:weakness";
 | |
| 		strings[25] = "minecraft:strength";
 | |
| 		strings[26] = "minecraft:slowness";
 | |
| 		strings[27] = "minecraft:leaping";
 | |
| 		strings[28] = "minecraft:harming";
 | |
| 		strings[29] = "minecraft:water_breathing";
 | |
| 		strings[30] = "minecraft:invisibility";
 | |
| 		strings[31] = null;
 | |
| 		strings[32] = "minecraft:thick";
 | |
| 		strings[33] = "minecraft:strong_regeneration";
 | |
| 		strings[34] = "minecraft:strong_swiftness";
 | |
| 		strings[35] = "minecraft:fire_resistance";
 | |
| 		strings[36] = "minecraft:strong_poison";
 | |
| 		strings[37] = "minecraft:strong_healing";
 | |
| 		strings[38] = "minecraft:night_vision";
 | |
| 		strings[39] = null;
 | |
| 		strings[40] = "minecraft:weakness";
 | |
| 		strings[41] = "minecraft:strong_strength";
 | |
| 		strings[42] = "minecraft:slowness";
 | |
| 		strings[43] = "minecraft:strong_leaping";
 | |
| 		strings[44] = "minecraft:strong_harming";
 | |
| 		strings[45] = "minecraft:water_breathing";
 | |
| 		strings[46] = "minecraft:invisibility";
 | |
| 		strings[47] = null;
 | |
| 		strings[48] = null;
 | |
| 		strings[49] = "minecraft:strong_regeneration";
 | |
| 		strings[50] = "minecraft:strong_swiftness";
 | |
| 		strings[51] = "minecraft:fire_resistance";
 | |
| 		strings[52] = "minecraft:strong_poison";
 | |
| 		strings[53] = "minecraft:strong_healing";
 | |
| 		strings[54] = "minecraft:night_vision";
 | |
| 		strings[55] = null;
 | |
| 		strings[56] = "minecraft:weakness";
 | |
| 		strings[57] = "minecraft:strong_strength";
 | |
| 		strings[58] = "minecraft:slowness";
 | |
| 		strings[59] = "minecraft:strong_leaping";
 | |
| 		strings[60] = "minecraft:strong_harming";
 | |
| 		strings[61] = "minecraft:water_breathing";
 | |
| 		strings[62] = "minecraft:invisibility";
 | |
| 		strings[63] = null;
 | |
| 		strings[64] = "minecraft:mundane";
 | |
| 		strings[65] = "minecraft:long_regeneration";
 | |
| 		strings[66] = "minecraft:long_swiftness";
 | |
| 		strings[67] = "minecraft:long_fire_resistance";
 | |
| 		strings[68] = "minecraft:long_poison";
 | |
| 		strings[69] = "minecraft:healing";
 | |
| 		strings[70] = "minecraft:long_night_vision";
 | |
| 		strings[71] = null;
 | |
| 		strings[72] = "minecraft:long_weakness";
 | |
| 		strings[73] = "minecraft:long_strength";
 | |
| 		strings[74] = "minecraft:long_slowness";
 | |
| 		strings[75] = "minecraft:long_leaping";
 | |
| 		strings[76] = "minecraft:harming";
 | |
| 		strings[77] = "minecraft:long_water_breathing";
 | |
| 		strings[78] = "minecraft:long_invisibility";
 | |
| 		strings[79] = null;
 | |
| 		strings[80] = "minecraft:awkward";
 | |
| 		strings[81] = "minecraft:long_regeneration";
 | |
| 		strings[82] = "minecraft:long_swiftness";
 | |
| 		strings[83] = "minecraft:long_fire_resistance";
 | |
| 		strings[84] = "minecraft:long_poison";
 | |
| 		strings[85] = "minecraft:healing";
 | |
| 		strings[86] = "minecraft:long_night_vision";
 | |
| 		strings[87] = null;
 | |
| 		strings[88] = "minecraft:long_weakness";
 | |
| 		strings[89] = "minecraft:long_strength";
 | |
| 		strings[90] = "minecraft:long_slowness";
 | |
| 		strings[91] = "minecraft:long_leaping";
 | |
| 		strings[92] = "minecraft:harming";
 | |
| 		strings[93] = "minecraft:long_water_breathing";
 | |
| 		strings[94] = "minecraft:long_invisibility";
 | |
| 		strings[95] = null;
 | |
| 		strings[96] = "minecraft:thick";
 | |
| 		strings[97] = "minecraft:regeneration";
 | |
| 		strings[98] = "minecraft:swiftness";
 | |
| 		strings[99] = "minecraft:long_fire_resistance";
 | |
| 		strings[100] = "minecraft:poison";
 | |
| 		strings[101] = "minecraft:strong_healing";
 | |
| 		strings[102] = "minecraft:long_night_vision";
 | |
| 		strings[103] = null;
 | |
| 		strings[104] = "minecraft:long_weakness";
 | |
| 		strings[105] = "minecraft:strength";
 | |
| 		strings[106] = "minecraft:long_slowness";
 | |
| 		strings[107] = "minecraft:leaping";
 | |
| 		strings[108] = "minecraft:strong_harming";
 | |
| 		strings[109] = "minecraft:long_water_breathing";
 | |
| 		strings[110] = "minecraft:long_invisibility";
 | |
| 		strings[111] = null;
 | |
| 		strings[112] = null;
 | |
| 		strings[113] = "minecraft:regeneration";
 | |
| 		strings[114] = "minecraft:swiftness";
 | |
| 		strings[115] = "minecraft:long_fire_resistance";
 | |
| 		strings[116] = "minecraft:poison";
 | |
| 		strings[117] = "minecraft:strong_healing";
 | |
| 		strings[118] = "minecraft:long_night_vision";
 | |
| 		strings[119] = null;
 | |
| 		strings[120] = "minecraft:long_weakness";
 | |
| 		strings[121] = "minecraft:strength";
 | |
| 		strings[122] = "minecraft:long_slowness";
 | |
| 		strings[123] = "minecraft:leaping";
 | |
| 		strings[124] = "minecraft:strong_harming";
 | |
| 		strings[125] = "minecraft:long_water_breathing";
 | |
| 		strings[126] = "minecraft:long_invisibility";
 | |
| 		strings[127] = null;
 | |
| 	});
 | |
| 	public static final String DEFAULT = "minecraft:water";
 | |
| 
 | |
| 	public ItemPotionFix(Schema outputSchema, boolean changesType) {
 | |
| 		super(outputSchema, changesType);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public TypeRewriteRule makeRule() {
 | |
| 		Type<?> type = this.getInputSchema().getType(References.ITEM_STACK);
 | |
| 		OpticFinder<Pair<String, String>> opticFinder = DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()));
 | |
| 		OpticFinder<?> opticFinder2 = type.findField("tag");
 | |
| 		return this.fixTypeEverywhereTyped(
 | |
| 			"ItemPotionFix",
 | |
| 			type,
 | |
| 			typed -> {
 | |
| 				Optional<Pair<String, String>> optional = typed.getOptional(opticFinder);
 | |
| 				if (optional.isPresent() && Objects.equals(((Pair)optional.get()).getSecond(), "minecraft:potion")) {
 | |
| 					Dynamic<?> dynamic = typed.get(DSL.remainderFinder());
 | |
| 					Optional<? extends Typed<?>> optional2 = typed.getOptionalTyped(opticFinder2);
 | |
| 					short s = dynamic.get("Damage").asShort((short)0);
 | |
| 					if (optional2.isPresent()) {
 | |
| 						Typed<?> typed2 = typed;
 | |
| 						Dynamic<?> dynamic2 = ((Typed)optional2.get()).get(DSL.remainderFinder());
 | |
| 						Optional<String> optional3 = dynamic2.get("Potion").asString().result();
 | |
| 						if (optional3.isEmpty()) {
 | |
| 							String string = POTIONS[s & 127];
 | |
| 							Typed<?> typed3 = ((Typed)optional2.get())
 | |
| 								.set(DSL.remainderFinder(), dynamic2.set("Potion", dynamic2.createString(string == null ? "minecraft:water" : string)));
 | |
| 							typed2 = typed.set(opticFinder2, typed3);
 | |
| 							if ((s & 16384) == 16384) {
 | |
| 								typed2 = typed2.set(opticFinder, Pair.of(References.ITEM_NAME.typeName(), "minecraft:splash_potion"));
 | |
| 							}
 | |
| 						}
 | |
| 
 | |
| 						if (s != 0) {
 | |
| 							dynamic = dynamic.set("Damage", dynamic.createShort((short)0));
 | |
| 						}
 | |
| 
 | |
| 						return typed2.set(DSL.remainderFinder(), dynamic);
 | |
| 					}
 | |
| 				}
 | |
| 
 | |
| 				return typed;
 | |
| 			}
 | |
| 		);
 | |
| 	}
 | |
| }
 |