我试图通过添加一个名为"铀"的新项目来修改我的世界。因此,我创建了班级" 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"
}
}
此外,我不知道为什么库存中的物品不被称为铀......
我花了两个小时来解决这个问题并没有帮助,所以如果你们中的某些人可以帮助我,那将是非常好的。 谢谢:))
答案 0 :(得分:2)
模型网格物体是Vanilla(Mojang)代码并且正确使用它一直是挑剔和不可靠的,如果你过早地调用它会失败并且如果你太晚调用它就会失败。所以Forge添加了ModelLoader类来解决这个问题。
替换此行:
ModelLoader.setCustomModelResourceLocation(...)
这一行:
...
GameRegistry.Register
内容相同。
其次,根据您使用的Minecraft版本,您应该......:
RegistryEvent.Register<T>
<T>
事件(其中<Block>
将<Item>
注册块,ModelRegistryEvent
注册项目等)@SideOnly(CLIENT)
注册模型,在其他地方注册。
setUnlocalizedName(getRegistryName().toString());
,可以在您的客户端代理中订阅,从而无需通过代理类转发引用。例如。我do it like this,其中lines 197-199是最常见的场景,在项目注册事件期间填充数组。该方法的其余部分处理自定义状态映射器和自定义网格定义,这些定义仅由少数项/块使用,并且在此处不相关。