SaddleEquipmentSlotFix.java

net.minecraft.util.datafix.fixes.SaddleEquipmentSlotFix

信息

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

    TODO

字段/常量

  • ENTITIES_WITH_SADDLE_ITEM

    • 类型: Set<String>
    • 修饰符: private static final
    • 源码定位: L19
    • 说明:

      TODO

  • ENTITIES_WITH_SADDLE_FLAG

    • 类型: Set<String>
    • 修饰符: private static final
    • 源码定位: L29
    • 说明:

      TODO

  • SADDLE_FLAG

    • 类型: String
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • NEW_SADDLE

    • 类型: String
    • 修饰符: private static final
    • 源码定位: L31
    • 说明:

      TODO

内部类/嵌套类型

构造器

public SaddleEquipmentSlotFix(Schema outputSchema) @ L33

  • 构造器名:SaddleEquipmentSlotFix
  • 源码定位:L33
  • 修饰符:public

参数:

  • outputSchema: Schema

说明:

TODO

方法

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

protected TypeRewriteRule makeRule() @ L37

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

参数:

说明:

TODO

private static Dynamic<?> fixEntityWithSaddleItem(Dynamic<?> input) @ L62

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

参数:

  • input: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixEntityWithSaddleFlag(Dynamic<?> tag) @ L66

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

参数:

  • tag: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixDropChances(Dynamic<?> tag) @ L77

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

参数:

  • tag: Dynamic<?>

说明:

TODO

代码

public class SaddleEquipmentSlotFix extends DataFix {
    private static final Set<String> ENTITIES_WITH_SADDLE_ITEM = Set.of(
        "minecraft:horse",
        "minecraft:skeleton_horse",
        "minecraft:zombie_horse",
        "minecraft:donkey",
        "minecraft:mule",
        "minecraft:camel",
        "minecraft:llama",
        "minecraft:trader_llama"
    );
    private static final Set<String> ENTITIES_WITH_SADDLE_FLAG = Set.of("minecraft:pig", "minecraft:strider");
    private static final String SADDLE_FLAG = "Saddle";
    private static final String NEW_SADDLE = "saddle";
 
    public SaddleEquipmentSlotFix(Schema outputSchema) {
        super(outputSchema, true);
    }
 
    @Override
    protected TypeRewriteRule makeRule() {
        TaggedChoiceType<String> entityIdType = (TaggedChoiceType<String>)this.getInputSchema().findChoiceType(References.ENTITY);
        OpticFinder<Pair<String, ?>> entityIdF = DSL.typeFinder(entityIdType);
        Type<?> inputType = this.getInputSchema().getType(References.ENTITY);
        Type<?> outputType = this.getOutputSchema().getType(References.ENTITY);
        Type<?> patchedInputType = ExtraDataFixUtils.patchSubType(inputType, inputType, outputType);
        return this.fixTypeEverywhereTyped(
            "SaddleEquipmentSlotFix",
            inputType,
            outputType,
            input -> {
                String entityId = input.getOptional(entityIdF).map(Pair::getFirst).map(NamespacedSchema::ensureNamespaced).orElse("");
                Typed<?> fixedInput = ExtraDataFixUtils.cast(patchedInputType, input);
                if (ENTITIES_WITH_SADDLE_ITEM.contains(entityId)) {
                    return Util.writeAndReadTypedOrThrow(fixedInput, outputType, SaddleEquipmentSlotFix::fixEntityWithSaddleItem);
                } else {
                    return ENTITIES_WITH_SADDLE_FLAG.contains(entityId)
                        ? Util.writeAndReadTypedOrThrow(fixedInput, outputType, SaddleEquipmentSlotFix::fixEntityWithSaddleFlag)
                        : ExtraDataFixUtils.cast(outputType, input);
                }
            }
        );
    }
 
    private static Dynamic<?> fixEntityWithSaddleItem(Dynamic<?> input) {
        return input.get("SaddleItem").result().isEmpty() ? input : fixDropChances(input.renameField("SaddleItem", "saddle"));
    }
 
    private static Dynamic<?> fixEntityWithSaddleFlag(Dynamic<?> tag) {
        boolean hasSaddle = tag.get("Saddle").asBoolean(false);
        tag = tag.remove("Saddle");
        if (!hasSaddle) {
            return tag;
        } else {
            Dynamic<?> saddleItem = tag.emptyMap().set("id", tag.createString("minecraft:saddle")).set("count", tag.createInt(1));
            return fixDropChances(tag.set("saddle", saddleItem));
        }
    }
 
    private static Dynamic<?> fixDropChances(Dynamic<?> tag) {
        Dynamic<?> dropChances = tag.get("drop_chances").orElseEmptyMap().set("saddle", tag.createFloat(2.0F));
        return tag.set("drop_chances", dropChances);
    }
}

引用的其他类

  • Schema

    • 引用位置: 参数
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.writeAndReadTypedOrThrow()
  • ExtraDataFixUtils

    • 引用位置: 方法调用
    • 关联成员: ExtraDataFixUtils.cast(), ExtraDataFixUtils.patchSubType()
  • ResolvableProfile

    • 引用位置: 参数/返回值