有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java元数据项错误

我正在为minecraft创建一个mod,并创建了一个元数据项,它有三个变体(默认值,1和2)

当我试图给我的播放器项目:0或什么都没有,我得到这个项目,它的id只是项目没有:编号,但当我给项目:1,给定的项目添加到堆栈项目:0。当我从库存中抛出项目0时,项目1成功地提供了自定义纹理,但其id是项目,而不是项目1

这是我的产品,带有变体代码:


    public Trowel(String name, CreativeTabs tab) {
        super(name, tab);
        this.tab = tab;
    }

    public void getSubItems(Item item, CreativeTabs tabs, List<ItemStack> list) {
        for(int i = 0; i < EnumTrowel.count(); i++) {
            list.add(new ItemStack(item, 1, i));
        }
    }

    @Override
    public String getUnlocalizedName(ItemStack stack) {
        for(int i = 0; i < EnumTrowel.count(); i++) {
            if(stack.getItemDamage() == i) {
                return this.getUnlocalizedName() + "_" + EnumTrowel.values()[i].getName();
            } else {
                continue;
            }
        }
        return this.getUnlocalizedName() + "_" + EnumTrowel.CLEAR.getName();
    }

这是我的主类preInit()

    public static void preInit(FMLPreInitializationEvent event) {
        proxy.registerModelBakeryStuff();
        RegistryHandler.registerCustomMeshesAndStates();
        RegistryHandler.registerFluid(concrete);
        for(int i = 0; i < EnumTrowel.count(); i++) {
            ModItems.registerRender(ModItems.TROWEL, i, "trowel_" + EnumTrowel.values()[i].getName());
        }
    }

这是我的ClientProxy注册方法

    @Override
    public void registerModelBakeryStuff() {
        ModelBakery.registerItemVariants(ModItems.TROWEL, new ResourceLocation(Reference.MOD_ID, "trowel_clear"), new ResourceLocation(Reference.MOD_ID, "trowel_plaster"), new ResourceLocation(Reference.MOD_ID, "trowel_gypsum"));
    }

项目:0=抹子清理(默认变量)

项目:1=抹平石膏(1种变体)

项目:2=抹平石膏(2种变体)

控制台中没有任何错误


共 (1) 个答案

  1. # 1 楼答案

    我不确定到底出了什么问题,因为你已经在其他方法背后隐藏了一些东西,而这些方法实际上并不在它们应该在的地方(为什么ModItems有一个registerRender方法?)

    无论如何,如果我剖析my own code1关于带有变体的项目,我会注意到两件事:

    1. 我在你的代码中没有看到任何与variantName + "=" + variant.getByOrdinal(stack.getMetadata()));等价的东西。这个字符串实际上将元数据映射到不同的模型。我的变体都是enum指定的和硬映射的metadata <-> enum ordinal
    2. 我没有看到对ModelLoader.setCustomModelResourceLocation()的调用,这是告诉游戏如何找到该字符串的资源

    您的代码可能确实包含这些内容,但您没有将其包括在问题中,这使得很难找出哪里出了问题

    1. 注意,我在这里链接的类是一个系统的一半,我定制了这个系统来处理RegistryEvent系统,这种方式比从1.7.10的GameRegistry系统转换更友好。有一些奇怪的重定向只涉及将数据推入数组到read them back out again later,如果您只是在相关事件(即the more widely accepted standard)中构造项,那么这实际上是不必要的。我做同样的事情,只是在不同的地方