BannerEntityCustomNameToOverrideComponentFix.java
net.minecraft.util.datafix.fixes.BannerEntityCustomNameToOverrideComponentFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.BannerEntityCustomNameToOverrideComponentFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/BannerEntityCustomNameToOverrideComponentFix.java
- 起始行号:L18
- 继承:DataFix
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public BannerEntityCustomNameToOverrideComponentFix(Schema outputSchema) @ L19
- 构造器名:BannerEntityCustomNameToOverrideComponentFix
- 源码定位:L19
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
public TypeRewriteRule makeRule() @ L23
- 方法名:makeRule
- 源码定位:L23
- 返回类型:TypeRewriteRule
- 修饰符:public
参数:
- 无
说明:
TODO
private Typed<?> fix(Typed<?> input, OpticFinder<Pair<String,String>> textComponentFinder, OpticFinder<?> customNameFinder) @ L37
- 方法名:fix
- 源码定位:L37
- 返回类型:Typed<?>
- 修饰符:private
参数:
- input: Typed<?>
- textComponentFinder: OpticFinder<Pair<String,String>>
- customNameFinder: OpticFinder<?>
说明:
TODO
代码
public class BannerEntityCustomNameToOverrideComponentFix extends DataFix {
public BannerEntityCustomNameToOverrideComponentFix(Schema outputSchema) {
super(outputSchema, false);
}
@Override
public TypeRewriteRule makeRule() {
Type<?> blockEntityType = this.getInputSchema().getType(References.BLOCK_ENTITY);
TaggedChoiceType<?> blockEntityIdFinder = this.getInputSchema().findChoiceType(References.BLOCK_ENTITY);
OpticFinder<?> customNameFinder = blockEntityType.findField("CustomName");
OpticFinder<Pair<String, String>> textComponentFinder = DSL.typeFinder(
(Type<Pair<String, String>>)this.getInputSchema().getType(References.TEXT_COMPONENT)
);
return this.fixTypeEverywhereTyped("Banner entity custom_name to item_name component fix", blockEntityType, input -> {
Object blockEntityId = input.get(blockEntityIdFinder.finder()).getFirst();
return blockEntityId.equals("minecraft:banner") ? this.fix(input, textComponentFinder, customNameFinder) : input;
});
}
private Typed<?> fix(Typed<?> input, OpticFinder<Pair<String, String>> textComponentFinder, OpticFinder<?> customNameFinder) {
Optional<String> customName = input.getOptionalTyped(customNameFinder).flatMap(name -> name.getOptional(textComponentFinder).map(Pair::getSecond));
boolean isOminousBanner = customName.flatMap(LegacyComponentDataFixUtils::extractTranslationString)
.filter(e -> e.equals("block.minecraft.ominous_banner"))
.isPresent();
return isOminousBanner
? Util.writeAndReadTypedOrThrow(
input,
input.getType(),
dynamic -> {
Dynamic<?> components = dynamic.createMap(
Map.of(
dynamic.createString("minecraft:item_name"),
dynamic.createString(customName.get()),
dynamic.createString("minecraft:hide_additional_tooltip"),
dynamic.emptyMap()
)
);
return dynamic.set("components", components).remove("CustomName");
}
)
: input;
}
}