ItemStackCustomNameToOverrideComponentFix.java
net.minecraft.util.datafix.fixes.ItemStackCustomNameToOverrideComponentFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.ItemStackCustomNameToOverrideComponentFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/ItemStackCustomNameToOverrideComponentFix.java
- 起始行号:L19
- 继承:DataFix
- 职责:
TODO
字段/常量
MAP_NAMES- 类型:
Set<String> - 修饰符:
private static final - 源码定位:
L20 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ItemStackCustomNameToOverrideComponentFix(Schema outputSchema) @ L34
- 构造器名:ItemStackCustomNameToOverrideComponentFix
- 源码定位:L34
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
public final TypeRewriteRule makeRule() @ L38
- 方法名:makeRule
- 源码定位:L38
- 返回类型:TypeRewriteRule
- 修饰符:public final
参数:
- 无
说明:
TODO
private static <T> Typed<T> fixMap(Typed<T> value) @ L60
- 方法名:fixMap
- 源码定位:L60
- 返回类型:
Typed - 修饰符:private static
参数:
- value: Typed
说明:
TODO
private static <T> Typed<T> fixBanner(Typed<T> value) @ L64
- 方法名:fixBanner
- 源码定位:L64
- 返回类型:
Typed - 修饰符:private static
参数:
- value: Typed
说明:
TODO
private static <T> Typed<T> fixCustomName(Typed<T> typed, Predicate<String> expectedTranslationKey) @ L68
- 方法名:fixCustomName
- 源码定位:L68
- 返回类型:
Typed - 修饰符:private static
参数:
- typed: Typed
- expectedTranslationKey: Predicate
说明:
TODO
代码
public class ItemStackCustomNameToOverrideComponentFix extends DataFix {
private static final Set<String> MAP_NAMES = Set.of(
"filled_map.buried_treasure",
"filled_map.explorer_jungle",
"filled_map.explorer_swamp",
"filled_map.mansion",
"filled_map.monument",
"filled_map.trial_chambers",
"filled_map.village_desert",
"filled_map.village_plains",
"filled_map.village_savanna",
"filled_map.village_snowy",
"filled_map.village_taiga"
);
public ItemStackCustomNameToOverrideComponentFix(Schema outputSchema) {
super(outputSchema, false);
}
@Override
public final TypeRewriteRule makeRule() {
Type<?> itemStackType = this.getInputSchema().getType(References.ITEM_STACK);
OpticFinder<Pair<String, String>> idFinder = DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()));
OpticFinder<?> componentsFinder = itemStackType.findField("components");
return this.fixTypeEverywhereTyped(
"ItemStack custom_name to item_name component fix",
itemStackType,
input -> {
Optional<Pair<String, String>> id = input.getOptional(idFinder);
Optional<String> maybeId = id.map(Pair::getSecond);
if (maybeId.filter(s -> s.equals("minecraft:white_banner")).isPresent()) {
return input.updateTyped(componentsFinder, ItemStackCustomNameToOverrideComponentFix::fixBanner);
} else {
return maybeId.filter(s -> s.equals("minecraft:filled_map")).isPresent()
? input.updateTyped(componentsFinder, ItemStackCustomNameToOverrideComponentFix::fixMap)
: input;
}
}
);
}
private static <T> Typed<T> fixMap(Typed<T> value) {
return fixCustomName(value, MAP_NAMES::contains);
}
private static <T> Typed<T> fixBanner(Typed<T> value) {
return fixCustomName(value, e -> e.equals("block.minecraft.ominous_banner"));
}
private static <T> Typed<T> fixCustomName(Typed<T> typed, Predicate<String> expectedTranslationKey) {
return Util.writeAndReadTypedOrThrow(
typed,
typed.getType(),
value -> {
OptionalDynamic<?> customNameTag = value.get("minecraft:custom_name");
Optional<String> hasCorrectTranslationKey = customNameTag.asString()
.result()
.flatMap(LegacyComponentDataFixUtils::extractTranslationString)
.filter(expectedTranslationKey);
return hasCorrectTranslationKey.isPresent() ? value.renameField("minecraft:custom_name", "minecraft:item_name") : value;
}
);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.writeAndReadTypedOrThrow()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NamespacedSchema.namespacedString()
- 引用位置: