3D рендер. В слотах не отображается моделью.

Версия Minecraft
1.7.10
Класс рендера
Java:
package ru.thegeorgearts.client.renders;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import ru.thegeorgearts.client.models.default_spear;
import ru.thegeorgearts.magicrpg.Reference;

public class ItemRendererDefaultSpear implements IItemRenderer{
    
    protected default_spear model;
    
    public ItemRendererDefaultSpear() {
        model = new default_spear();
    }
    
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type) {
        case EQUIPPED:
        case EQUIPPED_FIRST_PERSON:
            return true;
        default: return false;
        }
    }

    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
        switch(type) {
        case EQUIPPED:
        case EQUIPPED_FIRST_PERSON:
            GL11.glPushMatrix();
            
            Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/default_spear.png"));
            
            GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
            
            GL11.glTranslatef(0.7F, -0.2F, 0.0F);
            
            model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
            
            GL11.glPopMatrix();
        default:
            break;
        }
    }

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
        return false;
    }
}


Скрин результата:
2019-04-29_15.39.57.png


Пытался искать, темы либо мертвые и без результата, либо ссылки уже не работают.

Проблема: Не отображается модель в слотах.
 
1,173
28
168
желательно не использовать рендерхелпер для вида от 3 лица, - совместимость с кастомом напрочь ломается
и да, у тебя должна рендерится модель и в кейсе инвентаря, типа:
Java:
case INVENTORY:
            GL11.glPushMatrix();
           
            Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/default_spear.png"));
           
            GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
           
            GL11.glTranslatef(0.7F, -0.2F, 0.0F);
           
            model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
           
            GL11.glPopMatrix(); break;
настоятельно прочитать тему про ускорение рендера моделей и загружать модели из памяти гпу, дает ощутимый прирост в производительности
 
рендерится модель и в кейсе инвентаря

Хм, попробовал это сделать. предварительно этот кейс в handleRenderType вспомнил.

Вот код:
Java:
package ru.thegeorgearts.client.renders;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import ru.thegeorgearts.client.models.default_spear;
import ru.thegeorgearts.magicrpg.Reference;

public class ItemRendererDefaultSpear implements IItemRenderer{
    
    protected default_spear model;
    
    public ItemRendererDefaultSpear() {
        model = new default_spear();
    }
    
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type) {
        case EQUIPPED:
        case INVENTORY:
        case EQUIPPED_FIRST_PERSON:
            return true;
        default: return false;
        }
    }

    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
        switch(type) {
        case EQUIPPED:
        case INVENTORY:
            GL11.glPushMatrix();
          
            Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/default_spear.png"));
          
            GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
          
            GL11.glTranslatef(0.7F, -0.2F, 0.0F);
          
            model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
          
            GL11.glPopMatrix(); break;
        case EQUIPPED_FIRST_PERSON:
            GL11.glPushMatrix();
            
            Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/default_spear.png"));
            
            GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
            
            GL11.glTranslatef(0.7F, -0.2F, 0.0F);
            
            model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
            
            GL11.glPopMatrix();
        default:
            break;
        }
        
    }

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
        return false;
    }
}


Вот краш:
Код:
---- Minecraft Crash Report ----
// Don't do that.

Time: 29.04.19 17:51
Description: Rendering item

java.lang.ArrayIndexOutOfBoundsException: 1
    at ru.thegeorgearts.client.renders.ItemRendererDefaultSpear.renderItem(ItemRendererDefaultSpear.java:47)
    at net.minecraftforge.client.ForgeHooksClient.renderInventoryItem(ForgeHooksClient.java:202)
    at net.minecraft.client.renderer.entity.RenderItem.renderItemAndEffectIntoGUI(RenderItem.java:563)
    at net.minecraft.client.gui.GuiIngame.renderInventorySlot(GuiIngame.java:955)
    at net.minecraftforge.client.GuiIngameForge.renderHotbar(GuiIngameForge.java:206)
    at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:141)
    at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1038)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1001)
    at net.minecraft.client.Minecraft.run(Minecraft.java:898)
    at net.minecraft.client.main.Main.main(SourceFile:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
    at ru.thegeorgearts.client.renders.ItemRendererDefaultSpear.renderItem(ItemRendererDefaultSpear.java:47)
    at net.minecraftforge.client.ForgeHooksClient.renderInventoryItem(ForgeHooksClient.java:202)

-- Item being rendered --
Details:
    Item Type: ru.thegeorgearts.items.DefaultSpear@af15260
    Item Aux: 0
    Item NBT: null
    Item Foil: false
Stacktrace:
    at net.minecraft.client.renderer.entity.RenderItem.renderItemAndEffectIntoGUI(RenderItem.java:563)
    at net.minecraft.client.gui.GuiIngame.renderInventorySlot(GuiIngame.java:955)
    at net.minecraftforge.client.GuiIngameForge.renderHotbar(GuiIngameForge.java:206)
    at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:141)

-- Affected level --
Details:
    Level name: MpServer
    All players: 1 total; [EntityClientPlayerMP['Player151'/217, l='MpServer', x=-27,80, y=77,62, z=252,40]]
    Chunk stats: MultiplayerChunkCache: 20, 20
    Level seed: 0
    Level generator: ID 00 - default, ver 1. Features enabled: false
    Level generator options:
    Level spawn location: World: (4,64,236), Chunk: (at 4,4,12 in 0,14; contains blocks 0,0,224 to 15,255,239), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
    Level time: 211497 game time, 20396 day time
    Level dimension: 0
    Level storage version: 0x00000 - Unknown?
    Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
    Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
    Forced entities: 17 total; [EntitySheep['Овца'/128, l='MpServer', x=-5,94, y=64,00, z=261,09], EntitySheep['Овца'/70, l='MpServer', x=-62,56, y=66,00, z=268,34], EntityZombie['Зомби'/71, l='MpServer', x=-49,50, y=64,00, z=282,50], EntitySkeleton['Скелет'/105, l='MpServer', x=-22,16, y=68,28, z=254,31], EntityZombie['Зомби'/106, l='MpServer', x=-24,31, y=68,22, z=248,84], EntityBat['Летучая мышь'/107, l='MpServer', x=-28,50, y=13,03, z=270,25], EntityBat['Летучая мышь'/108, l='MpServer', x=-26,06, y=16,09, z=270,44], EntityBat['Летучая мышь'/109, l='MpServer', x=-20,34, y=35,22, z=271,22], EntitySlime['Слизень'/110, l='MpServer', x=-26,31, y=15,00, z=273,69], EntityBat['Летучая мышь'/111, l='MpServer', x=-26,25, y=15,09, z=273,50], EntityClientPlayerMP['Player151'/217, l='MpServer', x=-27,80, y=77,62, z=252,40], EntityBat['Летучая мышь'/85, l='MpServer', x=-36,13, y=14,72, z=271,47], EntitySkeleton['Скелет'/86, l='MpServer', x=-41,00, y=76,00, z=259,72], EntityZombie['Зомби'/87, l='MpServer', x=-44,75, y=63,00, z=286,53], EntityZombie['Зомби'/88, l='MpServer', x=-42,28, y=69,00, z=281,53], EntityBat['Летучая мышь'/126, l='MpServer', x=-2,28, y=34,09, z=253,25], EntityBat['Летучая мышь'/127, l='MpServer', x=-15,47, y=33,66, z=258,63]]
    Retry entities: 0 total; []
    Server brand: fml,forge
    Server type: Integrated singleplayer server
Stacktrace:
    at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:373)
    at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2444)
    at net.minecraft.client.Minecraft.run(Minecraft.java:919)
    at net.minecraft.client.main.Main.main(SourceFile:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)

-- System Details --
Details:
    Minecraft Version: 1.7.10
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.8.0_171, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 779094376 bytes (743 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
    FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 5 mods loaded, 5 mods active
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
    UCHIJAAAA    mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
    UCHIJAAAA    FML{7.10.99.99} [Forge Mod Loader] (forgeBin-1.7.10-10.13.4.1558-1.7.10.jar)
    UCHIJAAAA    Forge{10.13.4.1558} [Minecraft Forge] (forgeBin-1.7.10-10.13.4.1558-1.7.10.jar)
    UCHIJAAAA    examplemod{1.0} [Example Mod] (bin)
    UCHIJAAAA    fammrpg{1.0} [FammRPG] (bin)
    GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 10.18.14.4206' Renderer: 'Intel(R) HD Graphics 4600'
    Launched Version: 1.7.10
    LWJGL: 2.9.1
    OpenGL: Intel(R) HD Graphics 4600 GL version 4.3.0 - Build 10.18.14.4206, Intel
    GL Caps: Using GL 1.3 multitexturing.
Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
Anisotropic filtering is supported and maximum anisotropy is 16.
Shaders are available because OpenGL 2.1 is supported.

    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Resource Packs: []
    Current Language: Русский (Россия)
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Anisotropic Filtering: Off (1)
 
7,099
324
1,509
Из-за таких умников потом приходится везде пихать if(value!=null)
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Из-за таких умников потом приходится везде пихать if(value!=null)
Я вот тоже не понял. Какие проверки, если в методе render не используется у него вообще энтити, зачем передавать тогда что-то?
 
7,099
324
1,509
А если будет использоваться? А если кто-то другой будет использовать?
 
1,173
28
168
А если будет использоваться? А если кто-то другой будет использовать?
никто не говорит, что с тс вместе мод писать будет еще один человек, или вообще вся тима
имхо, если в соло пишешь мод, вся эта хрень бесполезна
 
Поднимаю тему.

Путем махинаций у меня вышло сделать модель в дропе, но в слотах итема её нет (еррорка стоит)

Консоль при запуске выдает следующее
Код:
[14:23:35] [Client thread/ERROR]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
[14:23:35] [Client thread/ERROR]: The following texture errors were found.
[14:23:35] [Client thread/ERROR]: ==================================================
[14:23:35] [Client thread/ERROR]:   DOMAIN minecraft
[14:23:35] [Client thread/ERROR]: --------------------------------------------------
[14:23:35] [Client thread/ERROR]:   domain minecraft is missing 2 textures
[14:23:35] [Client thread/ERROR]:     domain minecraft has 3 locations:
[14:23:35] [Client thread/ERROR]:       unknown resourcepack type net.minecraft.client.resources.DefaultResourcePack : Default
[14:23:35] [Client thread/ERROR]:       mod FML resources at C:\Users\А\.gradle\caches\minecraft\net\minecraftforge\forge\1.7.10-10.13.4.1558-1.7.10\forgeBin-1.7.10-10.13.4.1558-1.7.10.jar
[14:23:35] [Client thread/ERROR]:       mod Forge resources at C:\Users\А\.gradle\caches\minecraft\net\minecraftforge\forge\1.7.10-10.13.4.1558-1.7.10\forgeBin-1.7.10-10.13.4.1558-1.7.10.jar
[14:23:35] [Client thread/ERROR]: -------------------------
[14:23:35] [Client thread/ERROR]:     The missing resources for domain minecraft are:
[14:23:35] [Client thread/ERROR]:       textures/items/MISSING_ICON_ITEM_4098_default_spear.png
[14:23:35] [Client thread/ERROR]:       textures/items/MISSING_ICON_ITEM_4099_mage_wand.png
[14:23:35] [Client thread/ERROR]: -------------------------
[14:23:35] [Client thread/ERROR]:     No other errors exist for domain minecraft
[14:23:35] [Client thread/ERROR]: ==================================================
[14:23:35] [Client thread/ERROR]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


Класс рендера теперь выглядит так:
Java:
package ru.thegeorgearts.client.renders;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import ru.thegeorgearts.client.models.mage_wand;
import ru.thegeorgearts.magicrpg.Reference;

public class ItemRendererMageWand implements IItemRenderer{
    
    protected mage_wand model;
    
    public ItemRendererMageWand() {
        model = new mage_wand();
    }
    
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
//        switch(type) {
//        case EQUIPPED:
//        case EQUIPPED_FIRST_PERSON:
//            return true;
//        default: return false;
//       
//        }
        return type != ItemRenderType.INVENTORY;
    }

    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
        
        {
            if (type == ItemRenderType.ENTITY)
            {
                GL11.glRotatef(0.0F, 0.0F, 0.0F, 1.0F);
                GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
                GL11.glTranslatef(0.0F, 0.0F, 0.0F);
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/mage_wand.png"));
              
            }
            else if (type == ItemRenderType.EQUIPPED)
            {
                GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
                GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
                GL11.glTranslatef(0.7F, 0.8F, 0.0F);
                GL11.glScalef(1.0F, 1.0F, 1.0F);
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/mage_wand.png"));
                
            }
            else if (type == ItemRenderType.EQUIPPED_FIRST_PERSON || type == ItemRenderType.FIRST_PERSON_MAP)
            {
                GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
                GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(45.0F, 0.0F, 0.0125F, 1.0F);
                GL11.glTranslatef(0.7F, 0.8F, 0.0F);
                //GL11.glScalef(1.0F, 1.0F, 1.0F);
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID, "textures/models/mage_wand.png"));
                
            }

            mage_wand tile = new mage_wand();
            model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
        }
    }

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
        return false;
    }
}



+ 1 вопрос, как дроп заставить "плавать" (вверх-вниз и на 360^)
 
Сверху