元数据项错误

时间:2019-08-13 15:53:17

标签: java minecraft forge

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

当我试图用item:0或什么都不给我的玩家时,我得到了这个物品,它的id只是不带:number的物品,但是当我给item:1时,给定的物品会叠加到物品上: 0。当我从库存中抛出item:0时,item:1成功地提供了自定义纹理,但其id是item,而不是item: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"));
    }

item:0 = trowel_clear(默认变体)

项目:1 = trowel_plaster(1个变体)

项目:2 = trowel_石膏(2个变体)

控制台中没有任何错误。

1 个答案:

答案 0 :(得分:0)

我实际上不确定发生了什么问题,因为您已将其他方法隐藏在并非应该放置的其他方法后面(为什么ModItems拥有registerRender方法?)

无论如何,如果我针对具有变体的项目剖析my own code 1 ,我会注意到两件事:

  1. 我在您的代码中看不到任何与variantName + "=" + variant.getByOrdinal(stack.getMetadata()));等效的内容。该字符串实际上是将元数据映射到其他模型的字符串。我的变体均已指定为枚举,并已硬映射为metadata <-> enum ordinal
  2. 我没有看到对ModelLoader.setCustomModelResourceLocation()的调用,这告诉游戏如何去寻找该字符串的资源。

您的代码可能确实包含了这些内容,但是您没有将其包含在问题中,因此很难弄清哪里出了问题。

  1. 请注意,我在这里链接的类是我自定义构建的系统的一半,该系统用于处理RegistryEvent系统,该方式更友好于从1.7.10的GameRegistry系统过渡到。有一些奇怪的重定向涉及仅将数据推入数组到read them back out again later中,如果您只是在相关事件中构造 事件(即the more widely accepted standard),这实际上是没有必要的。我在不同的地方做同样的事情。