package net.minecraft.util.datafix.fixes; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import java.util.Map; import java.util.Optional; import java.util.function.Predicate; import javax.annotation.Nullable; public class InvalidLockComponentFix extends DataComponentRemainderFix { private static final Optional INVALID_LOCK_CUSTOM_NAME = Optional.of("\"\""); public InvalidLockComponentFix(Schema p_376929_) { super(p_376929_, "InvalidLockComponentPredicateFix", "minecraft:lock"); } @Nullable @Override protected Dynamic fixComponent(Dynamic p_377274_) { return fixLock(p_377274_); } @Nullable public static Dynamic fixLock(Dynamic p_376516_) { return isBrokenLock(p_376516_) ? null : p_376516_; } private static boolean isBrokenLock(Dynamic p_375919_) { return isMapWithOneField( p_375919_, "components", p_378206_ -> isMapWithOneField(p_378206_, "minecraft:custom_name", p_377439_ -> p_377439_.asString().result().equals(INVALID_LOCK_CUSTOM_NAME)) ); } private static boolean isMapWithOneField(Dynamic p_378567_, String p_378713_, Predicate> p_378445_) { Optional, Dynamic>> optional = p_378567_.getMapValues().result(); return !optional.isEmpty() && optional.get().size() == 1 ? p_378567_.get(p_378713_).result().filter(p_378445_).isPresent() : false; } }