Posted April 6, 201411 yr Hey guys! I created a mod which works perfect in eclipse, but if I compile and run it, I get the following Error if one of my Items should be rendered in the Inventory: ---- Minecraft Crash Report ---- // Shall we play a game? Time: 06.04.14 10:38 Description: Rendering item java.lang.ClassCastException: net.minecraft.block.BlockAir cannot be cast to com.bedrockminer.signcraft.block.ModBlockLargeSign at com.bedrockminer.signcraft.client.renderer.block.TileEntityLargeSignRenderer.renderTileEntity(TileEntityLargeSignRenderer.java:33) at com.bedrockminer.signcraft.client.renderer.block.ModTileEntityRenderer.renderTileEntityAsItem(ModTileEntityRenderer.java:67) at com.bedrockminer.signcraft.client.renderer.item.ModItemRenderer.renderItem(ModItemRenderer.java:35) at net.minecraftforge.client.ForgeHooksClient.renderInventoryItem(ForgeHooksClient.java:173) at net.minecraft.client.renderer.entity.RenderItem.func_82406_b(RenderItem.java:546) at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:281) at net.minecraft.client.gui.inventory.GuiContainer.func_73863_a(GuiContainer.java:110) at net.minecraft.client.renderer.InventoryEffectRenderer.func_73863_a(SourceFile:30) at net.minecraft.client.gui.inventory.GuiContainerCreative.func_73863_a(GuiContainerCreative.java:649) at net.minecraft.client.renderer.EntityRenderer.func_78480_b(EntityRenderer.java:1109) at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:981) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:870) at net.minecraft.client.main.Main.main(SourceFile:103) 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:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at com.bedrockminer.signcraft.client.renderer.block.TileEntityLargeSignRenderer.renderTileEntity(TileEntityLargeSignRenderer.java:33) at com.bedrockminer.signcraft.client.renderer.block.ModTileEntityRenderer.renderTileEntityAsItem(ModTileEntityRenderer.java:67) at com.bedrockminer.signcraft.client.renderer.item.ModItemRenderer.renderItem(ModItemRenderer.java:35) at net.minecraftforge.client.ForgeHooksClient.renderInventoryItem(ForgeHooksClient.java:173) -- Item being rendered -- Details: Item Type: com.bedrockminer.signcraft.item.itemblock.ItemLargeSign@13d938ad Item Aux: 0 Item NBT: null Item Foil: false Stacktrace: at net.minecraft.client.renderer.entity.RenderItem.func_82406_b(RenderItem.java:546) at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:281) at net.minecraft.client.gui.inventory.GuiContainer.func_73863_a(GuiContainer.java:110) at net.minecraft.client.renderer.InventoryEffectRenderer.func_73863_a(SourceFile:30) at net.minecraft.client.gui.inventory.GuiContainerCreative.func_73863_a(GuiContainerCreative.java:649) -- Screen render details -- Details: Screen name: net.minecraft.client.gui.inventory.GuiContainerCreative Mouse location: Scaled: (182, 37). Absolute: (365, 405) Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['_Bedrock_Miner_'/174, l='MpServer', x=215,18, y=65,62, z=194,70]] Chunk stats: MultiplayerChunkCache: 225, 225 Level seed: 0 Level generator: ID 01 - flat, ver 0. Features enabled: false Level generator options: Level spawn location: World: (221,64,218), Chunk: (at 13,4,10 in 13,13; contains blocks 208,0,208 to 223,255,223), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Level time: 106407 game time, 1142 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: 43 total; [EntityItem['item.tile.spikes'/68, l='MpServer', x=216,59, y=64,25, z=187,34], EntityItem['item.tile.readableBookshelf'/69, l='MpServer', x=217,13, y=64,13, z=187,44], EntityBat['Fledermaus'/70, l='MpServer', x=216,44, y=12,10, z=251,66], EntitySkeleton['Skelett'/71, l='MpServer', x=209,69, y=28,00, z=251,75], EntityZombie['Zombie'/141, l='MpServer', x=295,30, y=29,00, z=129,02], EntitySkeleton['Skelett'/140, l='MpServer', x=295,31, y=29,00, z=129,70], EntitySpider['Spinne'/76, l='MpServer', x=209,00, y=27,00, z=272,00], EntitySpider['Spinne'/72, l='MpServer', x=208,66, y=28,00, z=249,72], EntityCreeper['Creeper'/12, l='MpServer', x=187,47, y=20,00, z=244,00], EntityModMinecart['entity.fmi.fmiMinecart.name'/73, l='MpServer', x=212,17, y=64,50, z=242,21], EntityCreeper['Creeper'/13, l='MpServer', x=189,50, y=20,00, z=252,50], EntityZombie['Zombie'/14, l='MpServer', x=179,16, y=54,00, z=265,31], EntitySkeleton['Skelett'/74, l='MpServer', x=208,50, y=27,00, z=270,00], EntityZombie['Zombie'/15, l='MpServer', x=178,31, y=54,00, z=265,69], EntityCreeper['Creeper'/17, l='MpServer', x=182,88, y=53,14, z=258,25], EntitySpider['Spinne'/16, l='MpServer', x=181,38, y=54,00, z=263,81], EntityBat['Fledermaus'/19, l='MpServer', x=183,25, y=54,00, z=259,72], EntityCreeper['Creeper'/18, l='MpServer', x=185,03, y=54,00, z=267,38], EntityBat['Fledermaus'/21, l='MpServer', x=184,56, y=54,10, z=263,91], EntitySkeleton['Skelett'/80, l='MpServer', x=208,72, y=27,00, z=274,03], EntityBat['Fledermaus'/20, l='MpServer', x=181,86, y=54,00, z=267,31], EntitySkeleton['Skelett'/22, l='MpServer', x=178,50, y=54,00, z=263,50], EntitySheep['Schaf'/103, l='MpServer', x=226,94, y=64,00, z=240,97], EntityClientPlayerMP['_Bedrock_Miner_'/174, l='MpServer', x=215,18, y=65,62, z=194,70], EntitySpider['Spinne'/39, l='MpServer', x=199,72, y=52,04, z=150,59], EntitySkeleton['Skelett'/42, l='MpServer', x=208,00, y=28,00, z=256,59], EntityCow['Kuh'/110, l='MpServer', x=269,19, y=64,00, z=187,81], EntityCow['Kuh'/111, l='MpServer', x=266,94, y=64,00, z=178,88], EntitySheep['Schaf'/108, l='MpServer', x=253,97, y=64,00, z=227,97], EntityCreeper['Creeper'/40, l='MpServer', x=193,10, y=52,00, z=154,28], EntitySkeleton['Skelett'/41, l='MpServer', x=207,44, y=28,00, z=250,88], EntityZombie['Zombie'/51, l='MpServer', x=207,97, y=27,00, z=273,25], EntitySkeleton['Skelett'/50, l='MpServer', x=207,93, y=27,00, z=274,13], EntitySheep['Schaf'/114, l='MpServer', x=258,78, y=64,00, z=240,66], EntityCow['Kuh'/113, l='MpServer', x=259,94, y=64,00, z=205,68], EntityCow['Kuh'/112, l='MpServer', x=266,88, y=64,00, z=198,16], EntityCow['Kuh'/126, l='MpServer', x=278,88, y=64,00, z=197,97], EntitySheep['Schaf'/125, l='MpServer', x=274,94, y=64,00, z=196,38], EntitySheep['Schaf'/124, l='MpServer', x=272,54, y=64,00, z=177,17], EntityCow['Kuh'/123, l='MpServer', x=286,28, y=64,00, z=186,06], EntitySheep['Schaf'/122, l='MpServer', x=287,47, y=63,00, z=176,31], EntityCow['Kuh'/121, l='MpServer', x=271,22, y=64,00, z=170,31], EntityBat['Fledermaus'/120, l='MpServer', x=280,40, y=23,28, z=127,02]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.func_72914_a(WorldClient.java:384) at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2433) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:891) at net.minecraft.client.main.Main.main(SourceFile:103) 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:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) -- System Details -- Details: Minecraft Version: 1.7.2 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.7.0_60-ea, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 279060176 bytes (266 MB) / 442499072 bytes (422 MB) up to 954728448 bytes (910 MB) JVM Flags: 2 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx1G AABB Pool Size: 6681 (374136 bytes; 0 MB) allocated, 1542 (86352 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.01-pre FML v7.2.116.1024 Minecraft Forge 10.12.0.1024 9 mods loaded, 9 mods active mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available FML{7.2.116.1024} [Forge Mod Loader] (forge-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Forge{10.12.0.1024} [Minecraft Forge] (forge-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available buildingblocks{1.0} [building Blocks] (BuildingBlocks-1.0.0-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available fmi{1.0.0} [Furnace Minecart Inventory] (FurnaceMinecartInventory-1.0.0-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available naturalcraft{1.0.0} [Natural Craft] (NaturalCraft-1.0.0-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available readablebookshelf{1.0.0} [Readable Bookshelf] (ReadableBookshelf-1.0.0-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available signcraft{1.0.0} [signCraft] (SignCraft-1.0.0-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available weaponcraft{1.0.0} [Weapon Craft] (WeaponCraft-1.0.1-mc1.7.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Launched Version: 1.7.2-Forge10.12.0.1024 LWJGL: 2.9.0 OpenGL: Intel(R) HD Graphics Family GL version 3.1.0 - Build 8.15.10.2476, Intel Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [Mein Texturenpaket.zip] Current Language: Deutsch (Deutschland) Profiler Position: N/A (disabled) Vec3 Pool Size: 1718 (96208 bytes; 0 MB) allocated, 371 (20776 bytes; 0 MB) used Anisotropic Filtering: Off (1) Looks like a Blocks.air is passed to the renderer instead of the expected ModBlockLargeSign instance. Here are the corresponding code parts: First, the renderer itself. package com.bedrockminer.signcraft.client.renderer.block; import [...]; public class TileEntityLargeSignRenderer extends ModTileEntityRenderer { @Override public void renderTileEntity(TileEntity te, World world, int x, int y, int z, int meta, Block block, ItemRenderType type) { if (type != null && type.equals(ItemRenderType.INVENTORY)) { GL11.glScalef(1.2F, 1.2F, 1.2F); GL11.glTranslatef(0.0F, -0.1F, 0.4F); } if (type != null && type.equals(ItemRenderType.ENTITY)) { this.translate(0.5D, 0.5D, 0.5D); this.rotate(90.0D, 0, 1, 0); this.translate(-0.5D, -0.8D, -0.05D); } this.startDrawingQuads(); this.refreshColor(); this.rotate4Steps(meta); this.bindMCTexture(((ModBlockLargeSign)block).getBacksideName()); this.setNormal(0.0F, 0.0F, -1.0F); this.renderFace(0.0D, 0.0D, 0.0D, 1.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.0D, 0.0D, 1.0D, 0.0D); this.setNormal(0.0F, 1.0F, 0.0F); this.renderFaceTexCut(1.0D, 0.125D, 0.0D, 1.0D, 0.0D, 1.0D, 1.0D, 0.0D, 1.0D, 1.0D, 0.125D, 0.0D, 1.0D, 0.125D); this.setNormal(0.0F, -1.0F, 0.0F); this.renderFaceTexCut(1.0D, 0.125D, 0.0D, 0.0D, 0.125D, 1.0D, 0.0D, 0.125D, 1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); this.setNormal(1.0F, 0.0F, 0.0F); this.renderFaceTexCut(0.125D, 1.0D, 0.0D, 0.0D, 0.125D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 0.0D, 0.0D, 1.0D, 0.125D); this.setNormal(-1.0F, 0.0F, 0.0F); this.renderFaceTexCut(0.125D, 1.0D, 1.0D, 0.0D, 0.0D, 1.0D, 0.0D, 0.125D, 1.0D, 1.0D, 0.125D, 1.0D, 1.0D, 0.0D); this.restartDrawing(); this.setNormal(0.0F, 0.0F, 1.0F); this.bindModTexture(((ModBlockLargeSign)block).getFrontsideName()); //Here the exception is thrown! this.renderFace(1.0D, 0.0D, 0.125D, 0.0D, 0.0D, 0.125D, 0.0D, 1.0D, 0.125D, 1.0D, 1.0D, 0.125D); this.finishDrawing(); if (type == null) { FontRenderer f = this.func_147498_b(); TileEntityLargeSign tile = (TileEntityLargeSign)te; float scale = 0.01F; GL11.glTranslatef(0.5F, 0.5F, 0.5F); GL11.glScalef(scale, -scale, scale); GL11.glTranslatef(0.0F, 0.0F, -0.374F / scale); GL11.glNormal3i(0, 0, -1); GL11.glDepthMask(false); for (int i = 0; i < 6; i ++) { String s = tile.getCurrentText()[i]; if (((TileEntityLargeSign)te).editLine == i) s = "> " + s + EnumChatFormatting.RESET + " <"; if (s != "") f.drawString(s, -f.getStringWidth(s) / 2, i*16 - 45, 0); } GL11.glDepthMask(true); } } } Note that this is a TileEntity Renderer registered as ItemRenderer, I show later how I did this exactly. The parameter "block" which seems to be Blocks.air and not the real Block is passed by this method: package com.bedrockminer.signcraft.client.renderer.block; import [...]; public abstract class ModTileEntityRenderer extends TileEntitySpecialRenderer { protected Tessellator t; private float brightness; @Override /** * Initializes the renderer and overrides the abstract method */ public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { [...] //Render call for Tile Entity in World } public void renderTileEntityAsItem(TileEntity te, ItemStack stack, ItemRenderType type) { GL11.glPushMatrix(); this.field_147501_a = TileEntityRendererDispatcher.instance; this.t = Tessellator.instance; brightness = 1.0F; this.refreshColor(); int meta = stack.getItemDamage(); GL11.glPushMatrix(); renderTileEntity(te, null, 0, 0, 0, meta, Block.getBlockFromItem(stack.getItem()), type); //The Block is not correctly passed. Why? //The ItemStack contains the Block (ItemBlock) object, so I don't understand, why it's not passed. //stack.toString() == "1xtile.largeWoodSign@0" GL11.glPopMatrix(); GL11.glPopMatrix(); } public abstract void renderTileEntity(TileEntity te, World world, int x, int y, int z, int meta, Block block, ItemRenderType type); protected void bindModTexture(String texture) { bindTexture(Main.MODID, texture); } protected void bindMCTexture(String texture) { bindTexture("minecraft", texture); } /** * Sets the texture of the renderer to the Minecraft Block Texturemap */ protected void bindBlockTexture() { this.bindTexture(TextureMap.locationBlocksTexture); } /** * Sets the texture of the renderer to the Minecraft Item Texturemap */ protected void bindItemTexture() { this.bindTexture(TextureMap.locationItemsTexture); } /** * Sets the texture of the renderer to a new Texture */ protected void bindTexture(String modid, String texture) { this.bindTexture(new ResourceLocation(modid, texture)); } [...] } The ItemRenderer that is registered to the Items to be rendered is this small class: package com.bedrockminer.signcraft.client.renderer.item; import org.lwjgl.opengl.GL11; import com.bedrockminer.signcraft.client.renderer.block.ModTileEntityRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.IItemRenderer; public class ModItemRenderer implements IItemRenderer { ModTileEntityRenderer render; private final TileEntity dummytile; public ModItemRenderer(ModTileEntityRenderer render, TileEntity dummy) { this.render = render; this.dummytile = dummy; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return true; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { if (type == IItemRenderer.ItemRenderType.ENTITY) GL11.glTranslatef(-0.5F, 0.0F, -0.5F); this.render.renderTileEntityAsItem(this.dummytile, item, type); } } It's registered like this: MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlock.largeWoodSign), new ModItemRenderer(new TileEntityLargeSignRenderer(), new TileEntityLargeSign(false))); I hope, anyone of you understands this Error. As I said, in eclipse it works well... If you need more code, please write! http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
April 7, 201411 yr I see this as one of two problems, either a, you are registering your renderer to early (do it in the load with your blocks in pre to see if that helps), or it could be this: renderTileEntity(te, null, 0, 0, 0, meta, Block.getBlockFromItem(stack.getItem()), type); First, you are returning the World as a null. Probably not the best. But where I see the immediate problem is the getBlockFromItem, in the (), just put the Item for example YourMainModClass.ItemYouWant.
April 7, 201411 yr Author Well, my code is working that way. I pass null as the world, because I want to render the Item. There you need no world object. Also, the renderer should be global, so I used getBlockFromItem The problem was, that I added this mod and loaded a world in which other mods have been added previously. I made a new world and it worked. But: WHY does Forge not manage to fix these Bugs? If you save a list of ID-UnlocalizedName combinations for each world, you won't have this problem any more. This would take, of course, add a little bit of space of the disk, but not that much. I really don't understand, why these problems still appear, as they are so easy to solve. http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.