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;
            }
        );
    }
}

引用的其他类

  • Schema

    • 引用位置: 参数
  • NamespacedSchema

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