簡體   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