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);
}
});
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExtraDataFixUtils.cast()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NamespacedSchema.namespacedString()
- 引用位置: