Jump to content

Recommended Posts

Posted

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!

Posted

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.

Posted

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.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Please read the FAQ and post logs as described there.
    • Upon starting the server I get; [main/ERROR] [minecraft/Main]: Failed to start the minecraft server net.minecraftforge.fml.LoadingFailedException: Loading errors encountered: [     Framework (framework) has failed to load correctly §7java.lang.NoClassDefFoundError: net/minecraft/client/gui/components/toasts/Toast ] I suspect there is a (possibly a few) client-only mods installed on my server. Any help would be appreciated! (Yes I know there are a lot of mods...) Here is the crash log:   https://paste.ee/p/pRz5mhMl#s=0
    • That's basically what the failure does, my apologies for failing to specify.  It just tries again on the next tick until it detects the entities for that chunk are loaded, and then tries to load the entity.  From there it gets into different failure states depending on what goes wrong, but in short, if the entity fails to load once the entity list becomes available, the request is cleared and must be resubmitted by the end user.  There should be few cases where that actually happens. Yes, that is my understanding of forceloading.  That's why on a successful summon, it removes the forceload.  Otherwise it does just leave the chunks loaded long term. Thank you for your help, any knowledge is useful!  I don't often mess with forceloading and my prior experience is 1.16 so I'm also a bit out of my depth haha.
    • I will have to do more research about 1.18 chunk loading. You were unclear about how your code manages with the entity load failure. If you simply used a loop, I suggest submitting a tick task to the next tick which does the same thing, checking if the entities are loaded and if so teleporting the right one else submitting another tick task etc. Also I think forceloading permanently force loads the chunk, and it only starts to unload when you make a subsequent call to mark the chunk as not forceloaded. I may be completely wrong, I dont know much about 1.18, most of my experience is 1.20. Good luck I hope you figure it out after all this time 😅
    • i managed to fix it by reinstalling the modpack and re-add all the extra mods I've had previously.
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.