Не отображается текстура предмета

Версия Minecraft
1.12.2
Знаю, знаю, новички часто бесят своей тупоголовостью... Но мне просто уже не к кому обратиться :cry: чувствую себя полной идиоткой. Помогите, умоляю! Учусь по вашему учебнику, ответы на любые вопросы до сих пор находила там же, в самых разных статьях, очень помогли в свое время видео. Но здесь просто в ступор впадаю. Вроде все сделала, как учили, а майн хоть убейся не видит текстуру.

Игра.jpg

Иерархия.jpg

Догадываюсь, что ответ на проблему кроется в маленьком предупреждении "Argument 'item.getRegistryName()' might be null":
Предупреждение.jpg

...но ёлки-иголки, где я что пропустила?

Код:
package ester.tutorial;

import ester.tutorial.proxy.CommonProxy;
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.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;

@Mod(modid = "tut")

public class TestMod
{
    @SidedProxy(clientSide = "ester.tutorial.proxy.ClientProxy", serverSide = "ester.tutorial.proxy.CommonProxy")
    public static CommonProxy proxy;

    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
        proxy.preInit(event);
    }

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

    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
        proxy.postInit(event);
    }
}

Код:
package ester.tutorial;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class ItemsRegister
{
    public static Item key = new ItemKey("key");

    public static void register()
    {
        setRegister(key);
    }

    @SideOnly(Side.CLIENT)
    public static void registerRender()
    {
        setRender(key);
    }

    private static void setRegister(Item item)
    {
        ForgeRegistries.ITEMS.register(item);
    }

    @SideOnly(Side.CLIENT)
    private static void setRender(Item item)
    {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
    }
}

Код:
package ester.tutorial;

import net.minecraft.item.Item;

public class ItemKey extends Item
{
    public ItemKey(String key)
    {
        this.setRegistryName(key);
        this.setUnlocalizedName(key);
    }
}

Код:
package ester.tutorial.proxy;

import ester.tutorial.ItemsRegister;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

public class ClientProxy extends CommonProxy
{
    @Override
    public void preInit (FMLPreInitializationEvent event)
    {
        super.preInit(event);
    }

    @Override
    public void init (FMLInitializationEvent event)
    {
        ItemsRegister.registerRender();
        super.init(event);
    }

    @Override
    public void postInit (FMLPostInitializationEvent event)
    {
        super.postInit(event);
    }
}

Код:
package ester.tutorial.proxy;

import ester.tutorial.ItemsRegister;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

public class CommonProxy
{
    public void preInit (FMLPreInitializationEvent event)
    {
        ItemsRegister.register();
    }

    public void init (FMLInitializationEvent event)
    {

    }

    public void postInit (FMLPostInitializationEvent event)
    {

    }
}

Код:
{
  "parent": "item/generated",
  "textures":
  {
    "layer0": "tut:items/key"
  }
}
 
929
30
66
3,005
192
592
@BestFoxy Нет, не нужно указывать.
~
models\item
Там нету s на конце слова.
Скорее всего в этом и ошибка.
~
Возможно еще..
В setRegistryName укажите свой MODID, потом поставьте запятую и key.
(setRegistryName(ModMain.MODID, key);
 
7,099
324
1,510
Где он лежит?
public static Item key = new ItemKey("key");
Создавать экземпляр предмета нужно в common-части мода.
//CommonProxy
ItemsRegister.register();
А регать рендер только в клиентской части. Если попробуешь на выделенном сервере запустить - крашнет

В setRegistryName укажите свой MODID, потом поставьте запятую и key.
Не обязательно, forge сам добавляет(возможно строго не нужно и сейчас registryName==MODID+MODID+":"+key, поэтому лучше убрать)
 
models\item
Там нету s на конце слова.

:unsure: не нашла... Где??

В setRegistryName укажите свой MODID, потом поставьте запятую и key.
(setRegistryName(ModMain.MODID, key);

еще в тексте сразу красным метит, не нравится ему... Не скомпилирует, явно


на скрине видно:
Иерархия.jpg

resources.assets.tut.models.items

Создавать экземпляр предмета нужно в common-части мода.

простите, не догоняю... Это где конкретно?? Мне показалось, я как раз в common и сделала. Там дальше уже идет строчка @SideOnly(Side.CLIENT)

А регать рендер только в клиентской части. Если попробуешь на выделенном сервере запустить - крашнет

ну, я вроде постаралась так и сделать. На CommonProxy регистрация предмета - ItemsRegister.register, собственно, так называемое "регистрируемое имя". А в ClientProxy уже ItemsRegister.registerRender
 
7,099
324
1,510
на скрине видно:
/items
а нужно
/item

простите, не догоняю... Это где конкретно?? Мне показалось, я как раз в common и сделала. Там дальше уже идет строчка @SideOnly(Side.CLIENT)
Довольно неплохо описано: Прокси - Minecraft Modding

ItemsRegister.register, собственно, так называемое "регистрируемое имя". А в ClientProxy уже ItemsRegister.registerRender
:m_faceplam:действительно, мне показалось, что один и тот же метод вызывается
 
Довольно неплохо описано: Прокси - Minecraft Modding

я как раз по этому учебнику и пытаюсь все делать :giggle: даже визуализацию этих уроков от BlockState нашла. Но, к сожалению, в поиске ошибки это не помогло(((

/items
а нужно
/item

не помогло(((
 
3,005
192
592
Вот иерархия.
У Вас в последней папке добавлено "s". У Вас - "items", а надо "item".
1538330764782.png
 
3,005
192
592
1538331843238.png
Потому что папка с текстурами называется с "s" на конце.
А в layer0 указывается путь до текстуры.
 
7,099
324
1,510
Можно лог консоли?

Подскажите, где его взять и как правильно сюда закинуть? :rolleyes: знаю, я тупой

Скорее всего проблема в этом)

Да, очень похоже на решение проблемы. Только я опять туплю... Открываю файл build.gradle и вижу совершенно другой код. В котором нет ни единого упоминания idea...

Предупреждаю - много комменченных строк. Убирать их пока слегка опасаюсь, авось пригодятся

Код:
buildscript {
    repositories {
        jcenter()
        maven { url = "http://files.minecraftforge.net/maven" }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}
apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.


version = "1.0"
group = "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "tut"

sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
compileJava {
    sourceCompatibility = targetCompatibility = '1.8'
}

minecraft {
    version = "1.12.2-14.23.4.2705"
    runDir = "run"
    
    // the mappings can be changed at any time, and must be in the following format.
    // snapshot_YYYYMMDD   snapshot are built nightly.
    // stable_#            stables are built at the discretion of the MCP team.
    // Use non-default mappings at your own risk. they may not always work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20171003"
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
}

dependencies {
    // you may put jars on which you depend on in ./libs
    // or you may define them like so..
    //compile "some.group:artifact:version:classifier"
    //compile "some.group:artifact:version"
      
    // real examples
    //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
    //provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // the deobf configurations:  'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
    // except that these dependencies get remapped to your current MCP mappings
    //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
    //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // for more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html

}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
                
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
        
    // copy everything else except the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}
 
Сверху