BoatSplitFix.java

net.minecraft.util.datafix.fixes.BoatSplitFix

信息

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

    TODO

字段/常量

内部类/嵌套类型

构造器

public BoatSplitFix(Schema outputSchema) @ L15

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

参数:

  • outputSchema: Schema

说明:

TODO

方法

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

private static boolean isNormalBoat(String id) @ L19

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

参数:

  • id: String

说明:

TODO

private static boolean isChestBoat(String id) @ L23

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

参数:

  • id: String

说明:

TODO

private static boolean isAnyBoat(String id) @ L27

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

参数:

  • id: String

说明:

TODO

private static String mapVariantToNormalBoat(String id) @ L31

  • 方法名:mapVariantToNormalBoat
  • 源码定位:L31
  • 返回类型:String
  • 修饰符:private static

参数:

  • id: String

说明:

TODO

private static String mapVariantToChestBoat(String id) @ L45

  • 方法名:mapVariantToChestBoat
  • 源码定位:L45
  • 返回类型:String
  • 修饰符:private static

参数:

  • id: String

说明:

TODO

public TypeRewriteRule makeRule() @ L59

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

参数:

说明:

TODO

代码

public class BoatSplitFix extends DataFix {
    public BoatSplitFix(Schema outputSchema) {
        super(outputSchema, true);
    }
 
    private static boolean isNormalBoat(String id) {
        return id.equals("minecraft:boat");
    }
 
    private static boolean isChestBoat(String id) {
        return id.equals("minecraft:chest_boat");
    }
 
    private static boolean isAnyBoat(String id) {
        return isNormalBoat(id) || isChestBoat(id);
    }
 
    private static String mapVariantToNormalBoat(String id) {
        return switch (id) {
            case "spruce" -> "minecraft:spruce_boat";
            case "birch" -> "minecraft:birch_boat";
            case "jungle" -> "minecraft:jungle_boat";
            case "acacia" -> "minecraft:acacia_boat";
            case "cherry" -> "minecraft:cherry_boat";
            case "dark_oak" -> "minecraft:dark_oak_boat";
            case "mangrove" -> "minecraft:mangrove_boat";
            case "bamboo" -> "minecraft:bamboo_raft";
            default -> "minecraft:oak_boat";
        };
    }
 
    private static String mapVariantToChestBoat(String id) {
        return switch (id) {
            case "spruce" -> "minecraft:spruce_chest_boat";
            case "birch" -> "minecraft:birch_chest_boat";
            case "jungle" -> "minecraft:jungle_chest_boat";
            case "acacia" -> "minecraft:acacia_chest_boat";
            case "cherry" -> "minecraft:cherry_chest_boat";
            case "dark_oak" -> "minecraft:dark_oak_chest_boat";
            case "mangrove" -> "minecraft:mangrove_chest_boat";
            case "bamboo" -> "minecraft:bamboo_chest_raft";
            default -> "minecraft:oak_chest_boat";
        };
    }
 
    @Override
    public TypeRewriteRule makeRule() {
        OpticFinder<String> idF = DSL.fieldFinder("id", NamespacedSchema.namespacedString());
        Type<?> oldType = this.getInputSchema().getType(References.ENTITY);
        Type<?> newType = this.getOutputSchema().getType(References.ENTITY);
        return this.fixTypeEverywhereTyped("BoatSplitFix", oldType, newType, input -> {
            Optional<String> id = input.getOptional(idF);
            if (id.isPresent() && isAnyBoat(id.get())) {
                Dynamic<?> tag = input.getOrCreate(DSL.remainderFinder());
                Optional<String> maybeBoatId = tag.get("Type").asString().result();
                String newId;
                if (isChestBoat(id.get())) {
                    newId = maybeBoatId.map(BoatSplitFix::mapVariantToChestBoat).orElse("minecraft:oak_chest_boat");
                } else {
                    newId = maybeBoatId.map(BoatSplitFix::mapVariantToNormalBoat).orElse("minecraft:oak_boat");
                }
 
                return ExtraDataFixUtils.cast(newType, input).update(DSL.remainderFinder(), remainder -> remainder.remove("Type")).set(idF, newId);
            } else {
                return ExtraDataFixUtils.cast(newType, input);
            }
        });
    }
}

引用的其他类

  • Schema

    • 引用位置: 参数
  • ExtraDataFixUtils

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

    • 引用位置: 方法调用
    • 关联成员: NamespacedSchema.namespacedString()