package net.minecraft.util.datafix.fixes; import com.mojang.datafixers.DSL; 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.util.Pair; import com.mojang.serialization.Dynamic; import net.minecraft.util.datafix.schemas.NamespacedSchema; public class ItemStackUUIDFix extends AbstractUUIDFix { public ItemStackUUIDFix(Schema p_16129_) { super(p_16129_, References.ITEM_STACK); } @Override public TypeRewriteRule makeRule() { OpticFinder> opticfinder = DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString())); return this.fixTypeEverywhereTyped("ItemStackUUIDFix", this.getInputSchema().getType(this.typeReference), p_16132_ -> { OpticFinder opticfinder1 = p_16132_.getType().findField("tag"); return p_16132_.updateTyped(opticfinder1, p_145429_ -> p_145429_.update(DSL.remainderFinder(), p_145433_ -> { p_145433_ = this.updateAttributeModifiers(p_145433_); if (p_16132_.getOptional(opticfinder).map(p_145435_ -> "minecraft:player_head".equals(p_145435_.getSecond())).orElse(false)) { p_145433_ = this.updateSkullOwner(p_145433_); } return p_145433_; })); }); } private Dynamic updateAttributeModifiers(Dynamic p_16147_) { return p_16147_.update( "AttributeModifiers", p_16145_ -> p_16147_.createList(p_16145_.asStream().map(p_145437_ -> replaceUUIDLeastMost((Dynamic)p_145437_, "UUID", "UUID").orElse((Dynamic)p_145437_))) ); } private Dynamic updateSkullOwner(Dynamic p_16149_) { return p_16149_.update("SkullOwner", p_16151_ -> replaceUUIDString(p_16151_, "Id", "Id").orElse(p_16151_)); } }