ItemShulkerBoxColorFix.java
net.minecraft.util.datafix.fixes.ItemShulkerBoxColorFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.ItemShulkerBoxColorFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/ItemShulkerBoxColorFix.java
- 起始行号:L16
- 继承:DataFix
- 职责:
TODO
字段/常量
NAMES_BY_COLOR- 类型:
String[] - 修饰符:
public static final - 源码定位:
L17 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ItemShulkerBoxColorFix(Schema outputSchema, boolean changesType) @ L36
- 构造器名:ItemShulkerBoxColorFix
- 源码定位:L36
- 修饰符:public
参数:
- outputSchema: Schema
- changesType: boolean
说明:
TODO
方法
下面的方法块按源码顺序生成。
public TypeRewriteRule makeRule() @ L40
- 方法名:makeRule
- 源码定位:L40
- 返回类型:TypeRewriteRule
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class ItemShulkerBoxColorFix extends DataFix {
public static final String[] NAMES_BY_COLOR = new String[]{
"minecraft:white_shulker_box",
"minecraft:orange_shulker_box",
"minecraft:magenta_shulker_box",
"minecraft:light_blue_shulker_box",
"minecraft:yellow_shulker_box",
"minecraft:lime_shulker_box",
"minecraft:pink_shulker_box",
"minecraft:gray_shulker_box",
"minecraft:silver_shulker_box",
"minecraft:cyan_shulker_box",
"minecraft:purple_shulker_box",
"minecraft:blue_shulker_box",
"minecraft:brown_shulker_box",
"minecraft:green_shulker_box",
"minecraft:red_shulker_box",
"minecraft:black_shulker_box"
};
public ItemShulkerBoxColorFix(Schema outputSchema, boolean changesType) {
super(outputSchema, changesType);
}
@Override
public TypeRewriteRule makeRule() {
Type<?> itemStackType = this.getInputSchema().getType(References.ITEM_STACK);
OpticFinder<Pair<String, String>> idF = DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()));
OpticFinder<?> tagF = itemStackType.findField("tag");
OpticFinder<?> blockEntityF = tagF.type().findField("BlockEntityTag");
return this.fixTypeEverywhereTyped(
"ItemShulkerBoxColorFix",
itemStackType,
input -> {
Optional<Pair<String, String>> idOpt = input.getOptional(idF);
if (idOpt.isPresent() && Objects.equals(idOpt.get().getSecond(), "minecraft:shulker_box")) {
Optional<? extends Typed<?>> tagOpt = input.getOptionalTyped(tagF);
if (tagOpt.isPresent()) {
Typed<?> tag = (Typed<?>)tagOpt.get();
Optional<? extends Typed<?>> blockEntityOpt = tag.getOptionalTyped(blockEntityF);
if (blockEntityOpt.isPresent()) {
Typed<?> blockEntity = (Typed<?>)blockEntityOpt.get();
Dynamic<?> blockEntityRest = blockEntity.get(DSL.remainderFinder());
int color = blockEntityRest.get("Color").asInt(0);
blockEntityRest.remove("Color");
return input.set(tagF, (Typed<?>) tag.set(blockEntityF, blockEntity.set(DSL.remainderFinder(), blockEntityRest)))
.set(idF, Pair.of(References.ITEM_NAME.typeName(), NAMES_BY_COLOR[color % 16]));
}
}
}
return input;
}
);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NamespacedSchema.namespacedString()
- 引用位置: