MobSpawnerEntityIdentifiersFix.java

net.minecraft.util.datafix.fixes.MobSpawnerEntityIdentifiersFix

信息

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

    TODO

字段/常量

内部类/嵌套类型

构造器

public MobSpawnerEntityIdentifiersFix(Schema outputSchema, boolean changesType) @ L17

  • 构造器名:MobSpawnerEntityIdentifiersFix
  • 源码定位:L17
  • 修饰符:public

参数:

  • outputSchema: Schema
  • changesType: boolean

说明:

TODO

方法

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

private Dynamic<?> fix(Dynamic<?> input) @ L21

  • 方法名:fix
  • 源码定位:L21
  • 返回类型:Dynamic<?>
  • 修饰符:private

参数:

  • input: Dynamic<?>

说明:

TODO

public TypeRewriteRule makeRule() @ L59

  • 方法名:makeRule
  • 源码定位:L59
  • 返回类型:TypeRewriteRule
  • 修饰符:public

参数:

说明:

TODO

代码

public class MobSpawnerEntityIdentifiersFix extends DataFix {
    public MobSpawnerEntityIdentifiersFix(Schema outputSchema, boolean changesType) {
        super(outputSchema, changesType);
    }
 
    private Dynamic<?> fix(Dynamic<?> input) {
        if (!"MobSpawner".equals(input.get("id").asString(""))) {
            return input;
        } else {
            Optional<String> entityId = input.get("EntityId").asString().result();
            if (entityId.isPresent()) {
                Dynamic<?> spawnData = DataFixUtils.orElse(input.get("SpawnData").result(), input.emptyMap());
                spawnData = spawnData.set("id", spawnData.createString(entityId.get().isEmpty() ? "Pig" : entityId.get()));
                input = input.set("SpawnData", spawnData);
                input = input.remove("EntityId");
            }
 
            Optional<? extends Stream<? extends Dynamic<?>>> spawnPotentials = input.get("SpawnPotentials").asStreamOpt().result();
            if (spawnPotentials.isPresent()) {
                input = input.set(
                    "SpawnPotentials",
                    input.createList(
                        spawnPotentials.get()
                            .map(
                                spawnPotential -> {
                                    Optional<String> type = spawnPotential.get("Type").asString().result();
                                    if (type.isPresent()) {
                                        Dynamic<?> spawnData = DataFixUtils.orElse(spawnPotential.get("Properties").result(), spawnPotential.emptyMap())
                                            .set("id", spawnPotential.createString(type.get()));
                                        return spawnPotential.set("Entity", spawnData).remove("Type").remove("Properties");
                                    } else {
                                        return spawnPotential;
                                    }
                                }
                            )
                    )
                );
            }
 
            return input;
        }
    }
 
    @Override
    public TypeRewriteRule makeRule() {
        Type<?> newType = this.getOutputSchema().getType(References.UNTAGGED_SPAWNER);
        return this.fixTypeEverywhereTyped("MobSpawnerEntityIdentifiersFix", this.getInputSchema().getType(References.UNTAGGED_SPAWNER), newType, input -> {
            Dynamic<?> tag = input.get(DSL.remainderFinder());
            tag = tag.set("id", tag.createString("MobSpawner"));
            DataResult<? extends Pair<? extends Typed<?>, ?>> fixed = newType.readTyped(this.fix(tag));
            return fixed.result().isEmpty() ? input : fixed.result().get().getFirst();
        });
    }
}

引用的其他类