InvalidLockComponentFix.java

net.minecraft.util.datafix.fixes.InvalidLockComponentFix

信息

  • 全限定名:net.minecraft.util.datafix.fixes.InvalidLockComponentFix
  • 类型:public class
  • 包:net.minecraft.util.datafix.fixes
  • 源码路径:src/main/java/net/minecraft/util/datafix/fixes/InvalidLockComponentFix.java
  • 起始行号:L10
  • 继承:DataComponentRemainderFix
  • 职责:

    TODO

字段/常量

  • INVALID_LOCK_CUSTOM_NAME
    • 类型: Optional<String>
    • 修饰符: private static final
    • 源码定位: L11
    • 说明:

      TODO

内部类/嵌套类型

构造器

public InvalidLockComponentFix(Schema outputSchema) @ L13

  • 构造器名:InvalidLockComponentFix
  • 源码定位:L13
  • 修饰符:public

参数:

  • outputSchema: Schema

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected <T> Dynamic<T> fixComponent(Dynamic<T> input) @ L17

  • 方法名:fixComponent
  • 源码定位:L17
  • 返回类型: Dynamic
  • 修饰符:protected

参数:

  • input: Dynamic

说明:

TODO

public static <T> Dynamic<T> fixLock(Dynamic<T> input) @ L22

  • 方法名:fixLock
  • 源码定位:L22
  • 返回类型: Dynamic
  • 修饰符:public static

参数:

  • input: Dynamic

说明:

TODO

private static <T> boolean isBrokenLock(Dynamic<T> input) @ L26

  • 方法名:isBrokenLock
  • 源码定位:L26
  • 返回类型: boolean
  • 修饰符:private static

参数:

  • input: Dynamic

说明:

TODO

private static <T> boolean isMapWithOneField(Dynamic<T> input, String fieldName, Predicate<Dynamic<T>> predicate) @ L34

  • 方法名:isMapWithOneField
  • 源码定位:L34
  • 返回类型: boolean
  • 修饰符:private static

参数:

  • input: Dynamic
  • fieldName: String
  • predicate: Predicate<Dynamic>

说明:

TODO

代码

public class InvalidLockComponentFix extends DataComponentRemainderFix {
    private static final Optional<String> INVALID_LOCK_CUSTOM_NAME = Optional.of("\"\"");
 
    public InvalidLockComponentFix(Schema outputSchema) {
        super(outputSchema, "InvalidLockComponentPredicateFix", "minecraft:lock");
    }
 
    @Override
    protected <T> @Nullable Dynamic<T> fixComponent(Dynamic<T> input) {
        return fixLock(input);
    }
 
    public static <T> @Nullable Dynamic<T> fixLock(Dynamic<T> input) {
        return isBrokenLock(input) ? null : input;
    }
 
    private static <T> boolean isBrokenLock(Dynamic<T> input) {
        return isMapWithOneField(
            input,
            "components",
            components -> isMapWithOneField(components, "minecraft:custom_name", customName -> customName.asString().result().equals(INVALID_LOCK_CUSTOM_NAME))
        );
    }
 
    private static <T> boolean isMapWithOneField(Dynamic<T> input, String fieldName, Predicate<Dynamic<T>> predicate) {
        Optional<Map<Dynamic<T>, Dynamic<T>>> map = input.getMapValues().result();
        return !map.isEmpty() && map.get().size() == 1 ? input.get(fieldName).result().filter(predicate).isPresent() : false;
    }
}

引用的其他类