繁体   English   中英

物品纹理为粉红色/黑色

[英]Item textures are pink/black

我试图通过添加一个名为“铀”的新项来修改我的世界。 因此,我在主程序包和下面列出的其他一些类中创建了“ Trauma.java”类。 所有软件包和类: 软件包资源管理器

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

在游戏中

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

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

不要使用模型网格器:

模型网格器是Vanilla(Mojang)代码,正确地使用它一直是挑剔和不可靠的,如果调用得太早就会失败,而调用得太晚就会失败。 因此,Forge添加了ModelLoader类来解决该问题。

替换此行:

Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(...)

用这行:

ModelLoader.setCustomModelResourceLocation(...)

...内容是相同的。

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

  1. 停止使用GameRegistry.Register
    • 而是使用RegistryEvent.Register<T>事件(其中<T>将是<Block>来注册块, <Item>来注册项,等等)
  2. ModelRegistryEvent注册您的模型,在其他地方则没有。
    • 此事件为@SideOnly(CLIENT) ,可以在您的客户端代理中进行预订,从而避免了通过代理类转发引用的需要。 例如。 这样做是这样的 ,其中最需要的是第197-199行 ,其中在项目注册事件期间填充了数组。 该方法的其余部分处理仅少数项目/块使用的自定义状态映射器和自定义网格定义,此处不相关。
  3. 在您的未本地化名称中包含您的Mod ID。 最好的方法是setUnlocalizedName(getRegistryName().toString());

另请参阅有关事件的Forge文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM