ChestedHorsesInventoryZeroIndexingFix.java

net.minecraft.util.datafix.fixes.ChestedHorsesInventoryZeroIndexingFix

信息

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

    TODO

字段/常量

内部类/嵌套类型

构造器

public ChestedHorsesInventoryZeroIndexingFix(Schema v3807) @ L15

  • 构造器名:ChestedHorsesInventoryZeroIndexingFix
  • 源码定位:L15
  • 修饰符:public

参数:

  • v3807: Schema

说明:

TODO

方法

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

protected TypeRewriteRule makeRule() @ L19

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

参数:

说明:

TODO

private TypeRewriteRule horseLikeInventoryIndexingFixer(OpticFinder<Pair<String,Pair<Either<Pair<String,String>,Unit>,Pair<Either<?,Unit>,Dynamic<?>>>>> itemStackFinder, Type<?> schema, String horseId) @ L34

  • 方法名:horseLikeInventoryIndexingFixer
  • 源码定位:L34
  • 返回类型:TypeRewriteRule
  • 修饰符:private

参数:

  • itemStackFinder: OpticFinder<Pair<String,Pair<Either<Pair<String,String>,Unit>,Pair<Either,Dynamic>>>>
  • schema: Type<?>
  • horseId: String

说明:

TODO

代码

public class ChestedHorsesInventoryZeroIndexingFix extends DataFix {
    public ChestedHorsesInventoryZeroIndexingFix(Schema v3807) {
        super(v3807, false);
    }
 
    @Override
    protected TypeRewriteRule makeRule() {
        OpticFinder<Pair<String, Pair<Either<Pair<String, String>, Unit>, Pair<Either<?, Unit>, Dynamic<?>>>>> itemStackFinder = DSL.typeFinder(
            (Type<Pair<String, Pair<Either<Pair<String, String>, Unit>, Pair<Either<?, Unit>, Dynamic<?>>>>>)this.getInputSchema()
                .getType(References.ITEM_STACK)
        );
        Type<?> entityType = this.getInputSchema().getType(References.ENTITY);
        return TypeRewriteRule.seq(
            this.horseLikeInventoryIndexingFixer(itemStackFinder, entityType, "minecraft:llama"),
            this.horseLikeInventoryIndexingFixer(itemStackFinder, entityType, "minecraft:trader_llama"),
            this.horseLikeInventoryIndexingFixer(itemStackFinder, entityType, "minecraft:mule"),
            this.horseLikeInventoryIndexingFixer(itemStackFinder, entityType, "minecraft:donkey")
        );
    }
 
    private TypeRewriteRule horseLikeInventoryIndexingFixer(
        OpticFinder<Pair<String, Pair<Either<Pair<String, String>, Unit>, Pair<Either<?, Unit>, Dynamic<?>>>>> itemStackFinder, Type<?> schema, String horseId
    ) {
        Type<?> choiceType = this.getInputSchema().getChoiceType(References.ENTITY, horseId);
        OpticFinder<?> entityFinder = DSL.namedChoice(horseId, choiceType);
        OpticFinder<?> itemsFieldFinder = choiceType.findField("Items");
        return this.fixTypeEverywhereTyped(
            "Fix non-zero indexing in chest horse type " + horseId,
            schema,
            input -> input.updateTyped(
                entityFinder,
                horseLike -> horseLike.updateTyped(
                    itemsFieldFinder,
                    items -> items.update(
                        itemStackFinder,
                        namedStack -> namedStack.mapSecond(
                            itemStack -> itemStack.mapSecond(
                                pair -> pair.mapSecond(remainder -> remainder.update("Slot", slot -> slot.createByte((byte)(slot.asInt(2) - 2))))
                            )
                        )
                    )
                )
            )
        );
    }
}

引用的其他类