物品纹理为粉红色/黑色

时间:2018-02-20 16:22:43

标签: java json minecraft minecraft-forge

我试图通过添加一个名为"铀"的新项目来修改我的世界。因此,我创建了班级" Trauma.java"在主程序包和下面列出的一些其他类中。 所有包和类: Package Explorer

  

Trauma.java

package main;

import items.ItemUranium;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import proxy.ServerProxy;

@Mod(modid = Trauma.MODID)
public class Trauma {

    public static final String MODID = "Trauma";

    @SidedProxy(clientSide = "proxy.ClientProxy", serverSide = "proxy.ServerProxy")
    public static ServerProxy proxy;

    public static ItemUranium uranium = new ItemUranium();

    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        GameRegistry.register(uranium);
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        proxy.registerClientStuff();
    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {

    }

}
  

BasicItem.java

package items;

import net.minecraft.item.Item;

public class BasicItem extends Item {

    public BasicItem(String name) {
        setUnlocalizedName(name);
        setRegistryName(name);
    }

}
  

ItemUranium.java

package items;

public class ItemUranium extends BasicItem {

    public ItemUranium() {
        super("uranium");
    }

}
  

ClientProxy.java

package proxy;

import items.BasicItem;
import main.Trauma;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;

public class ClientProxy extends ServerProxy {

    @Override
    public void registerClientStuff ()  {
        registerItemModel(Trauma.uranium);
    }

    public static void registerItemModel(BasicItem item) {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Trauma.MODID + ":" + item.getRegistryName(), "inventory"));
    }

}
  

ServerProxy.java

package proxy;

public class ServerProxy {

    public void registerClientStuff() {}

}
  

uranium.json

{
    "parent": "item/generated",
    "textures": {
        "layer0": "Trauma:items/uranium"
    }
}

uranium.png

ingame

此外,我不知道为什么库存中的物品不被称为铀......

我花了两个小时来解决这个问题并没有帮助,所以如果你们中的某些人可以帮助我,那将是非常好的。 谢谢:))

1 个答案:

答案 0 :(得分:2)

不要使用Model Mesher:

模型网格物体是Vanilla(Mojang)代码并且正确使用它一直是挑剔和不可靠的,如果你过早地调用它会失败并且如果你太晚调用它就会失败。所以Forge添加了ModelLoader类来解决这个问题。

替换此行:

ModelLoader.setCustomModelResourceLocation(...)

这一行:

...

GameRegistry.Register内容相同。

其次,根据您使用的Minecraft版本,您应该......:

  1. 停止使用RegistryEvent.Register<T>
    • 而是使用<T>事件(其中<Block><Item>注册块,ModelRegistryEvent注册项目等)
  2. @SideOnly(CLIENT)注册模型,在其他地方注册。
    • 此事件为setUnlocalizedName(getRegistryName().toString());,可以在您的客户端代理中订阅,从而无需通过代理类转发引用。例如。我do it like this,其中lines 197-199是最常见的场景,在项目注册事件期间填充数组。该方法的其余部分处理自定义状态映射器和自定义网格定义,这些定义仅由少数项/块使用,并且在此处不相关。
  3. 在您的非本地化名称中包含您的Mod ID。最好的方法是{{1}}
  4. 另见the Forge documentation on events