Jump to content

[SOLVED] Tessellator - already tessellating error


Recommended Posts

Posted

Hi,

 

I wanted to play around with tesselator, but I got this error:

 

2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:343)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.Tessellator.startDrawingQuads(Tessellator.java:333)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at morelights.renderers.LEDStripRenderer.renderWorldBlock(LEDStripRenderer.java:28)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:152)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:57)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:485)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1006)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.run(Minecraft.java:838)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.client.main.Main.main(Main.java:93)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at java.lang.reflect.Method.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2013-11-28 21:42:33 [iNFO] [sTDERR] 	at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2013-11-28 21:42:33 [iNFO] [sTDOUT] ---- Minecraft Crash Report ----
2013-11-28 21:42:33 [iNFO] [sTDOUT] // I just don't know what went wrong 
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] Time: 28.11.13 21:42
2013-11-28 21:42:33 [iNFO] [sTDOUT] Description: Unexpected error
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] java.lang.IllegalStateException: Already tesselating!
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:343)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.Tessellator.startDrawingQuads(Tessellator.java:333)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at morelights.renderers.LEDStripRenderer.renderWorldBlock(LEDStripRenderer.java:28)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:152)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:57)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:485)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1006)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.run(Minecraft.java:838)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.main.Main.main(Main.java:93)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at java.lang.reflect.Method.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] A detailed walkthrough of the error, its code path and all known details is as follows:
2013-11-28 21:42:33 [iNFO] [sTDOUT] ---------------------------------------------------------------------------------------
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] -- Head --
2013-11-28 21:42:33 [iNFO] [sTDOUT] Stacktrace:
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:343)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.Tessellator.startDrawingQuads(Tessellator.java:333)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at morelights.renderers.LEDStripRenderer.renderWorldBlock(LEDStripRenderer.java:28)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:152)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:57)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:485)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] -- Affected level --
2013-11-28 21:42:33 [iNFO] [sTDOUT] Details:
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level name: MpServer
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	All players: 1 total; [EntityClientPlayerMP['Player261'/19, l='MpServer', x=-41,40, y=5,62, z=121,90]]
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Chunk stats: MultiplayerChunkCache: 441
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level seed: 0
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level generator: ID 01 - flat, ver 0. Features enabled: false
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level generator options: 
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level spawn location: World: (-51,4,122), Chunk: (at 13,0,10 in -4,7; contains blocks -64,0,112 to -49,255,127), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level time: 357678 game time, 188737 day time
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level dimension: 0
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level storage version: 0x00000 - Unknown?
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Forced entities: 4 total; [EntityClientPlayerMP['Player261'/19, l='MpServer', x=-41,40, y=5,62, z=121,90], EntityPig['Pig'/10, l='MpServer', x=-99,75, y=4,00, z=62,22], EntityPig['Pig'/14, l='MpServer', x=-65,50, y=4,00, z=50,09], EntityPig['Pig'/15, l='MpServer', x=-66,66, y=4,00, z=47,22]]
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Retry entities: 0 total; []
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Server brand: fml,forge
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Server type: Integrated singleplayer server
2013-11-28 21:42:33 [iNFO] [sTDOUT] Stacktrace:
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:440)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2312)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.run(Minecraft.java:863)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.client.main.Main.main(Main.java:93)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at java.lang.reflect.Method.invoke(Unknown Source)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 
2013-11-28 21:42:33 [iNFO] [sTDOUT] -- System Details --
2013-11-28 21:42:33 [iNFO] [sTDOUT] Details:
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Minecraft Version: 1.6.4
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Operating System: Windows 7 (amd64) version 6.1
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Java Version: 1.7.0_45, Oracle Corporation
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Memory: 671491320 bytes (640 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	AABB Pool Size: 18395 (1030120 bytes; 0 MB) allocated, 71 (3976 bytes; 0 MB) used
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Suspicious classes: FML and Forge are installed
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	FML: MCP v8.11 FML v6.4.41.946 Minecraft Forge 9.11.1.946 4 mods loaded, 4 mods active
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	FML{6.4.41.946} [Forge Mod Loader] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Forge{9.11.1.946} [Minecraft Forge] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	morelights{1.6.4 v0.1} [More Lights Mod] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Launched Version: 1.6
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	LWJGL: 2.9.0
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	OpenGL: AMD Radeon HD 5800 Series GL version 4.2.12422 Compatibility Profile Context 13.152.0.0, ATI Technologies Inc.
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Is Modded: Definitely; Client brand changed to 'fml,forge'
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Type: Client (map_client.txt)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Resource Pack: Default
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Current Language: English (US)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Profiler Position: N/A (disabled)
2013-11-28 21:42:33 [iNFO] [sTDOUT] 	Vec3 Pool Size: 286 (16016 bytes; 0 MB) allocated, 51 (2856 bytes; 0 MB) used
2013-11-28 21:42:33 [iNFO] [sTDOUT] #@!@# Game crashed! Crash report saved to: #@!@# D:\Data\Dokumenty\Development\forge\mcp\jars\.\crash-reports\crash-2013-11-28_21.42.33-client.txt
2013-11-28 21:42:33 [iNFO] [Minecraft-Server] Stopping server
2013-11-28 21:42:33 [iNFO] [Minecraft-Server] Saving players
2013-11-28 21:42:33 [iNFO] [Minecraft-Server] Stopping server
2013-11-28 21:42:33 [iNFO] [Minecraft-Server] Saving players
AL lib: (EE) alc_cleanup: 1 device not closed

 

I was trying to google it, but I didn't find an answer :(

 

Here is the code:

 

package morelights.renderers;

import org.lwjgl.opengl.GL11;

import morelights.lib.Reference;
import morelights.proxy.ClientProxy;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

public class LEDStripRenderer implements ISimpleBlockRenderingHandler {

@Override
public void renderInventoryBlock(Block block, int metadata, int modelID,
		RenderBlocks renderer) {

}

@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z,
		Block block, int modelId, RenderBlocks renderer) {

	Tessellator tes = Tessellator.instance;
	tes.startDrawingQuads();
	int lightValue = block.getMixedBrightnessForBlock(world, x, y, z);
	tes.setBrightness(lightValue);
	tes.setColorOpaque_F(1.0F, 1.0F, 1.0F);

	tes.setTranslation(x, y, z);

	ResourceLocation textures = (new ResourceLocation(Reference.modid + ":textures/models/LEDStrip.png")); 
        Minecraft.getMinecraft().renderEngine.bindTexture(textures);
        
        tes.addVertexWithUV(0, 0, 0, 0, 1);
        tes.addVertexWithUV(0, 1, 0, 0, 0);
        tes.addVertexWithUV(0, 1, 1, 1, 0);
        tes.addVertexWithUV(0, 0, 1, 1, 1);
        
        tes.draw();

	return true;
}

@Override
public boolean shouldRender3DInInventory() {
	return true;
}

@Override
public int getRenderId() {
	return ClientProxy.LEDStripRenderType;
}
}

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Posted

Hi

 

The caller has already performed tes.startDrawingQuads(); for you.  Delete that line and it should be fine.

 

You can't do two startDrawingXXX in a row without a draw between them  (and vica versa too)

 

-TGG

Posted

Hi

 

The caller has already performed tes.startDrawingQuads(); for you.  Delete that line and it should be fine.

 

You can't do two startDrawingXXX in a row without a draw between them  (and vica versa too)

 

-TGG

 

Well I was thinking about it too, but guess what... then I get "Not tesselating!" error :D

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Posted

Hi

 

Well we're making progress...

I didn't have this problem in my own ISBRH renderers so far, but perhaps you need to undo some of the setting changes you are making (setTranslate, texture, etc). 

I'd suggest removing them one by one and seeing which one(s) are causing the weirdness.

And come to think of it, I don't think you need setTranslate, the caller should have done that for you.  Setting it to 0,0,0 might actually be causing your problem.

 

Something else to be aware of - if your block has transparent bits (is not a full, opaque cube), you need to override isOpaqueBlock to return false.

http://4.bp.blogspot.com/-F0FTLzenidU/UfKBs19w_rI/AAAAAAAAABw/nxNmavM7sd4/s1600/StandardBlockWithAlpha-1.png

 

-TGG

Posted

Hi

 

Well we're making progress...

I didn't have this problem in my own ISBRH renderers so far, but perhaps you need to undo some of the setting changes you are making (setTranslate, texture, etc). 

I'd suggest removing them one by one and seeing which one(s) are causing the weirdness.

And come to think of it, I don't think you need setTranslate, the caller should have done that for you.  Setting it to 0,0,0 might actually be causing your problem.

 

Ok so binding the texture was the problem. So how do I tell the tessellator which texture to use?

 

 

Something else to be aware of - if your block has transparent bits (is not a full, opaque cube), you need to override isOpaqueBlock to return false.

http://4.bp.blogspot.com/-F0FTLzenidU/UfKBs19w_rI/AAAAAAAAABw/nxNmavM7sd4/s1600/StandardBlockWithAlpha-1.png

 

-TGG

I know that ;)

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Posted

Hi

 

From looking in EntityRenderer.renderWorld I think this should work:

 

Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);

         

-TGG

 

Well it's almost the same as I did it before and this is binding the texture map for vanilla blocks (and even then there is no texture). But now I know why it was doing that glitch where blocks didn't have texture. It was because I was binding my texture, but then it using it for every block in that chunk. So I have just put Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); when I finished rendering my block and it's not doing that glitch, but my block is still not rendering (or doesn't have texture)

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Posted

Hi

 

Sounds like it might be rendering but not in the place you expect.

 

Suggest to try

// comment this out		tes.setTranslation(x, y, z);

	ResourceLocation textures = (new ResourceLocation(Reference.modid + ":textures/models/LEDStrip.png")); 
        Minecraft.getMinecraft().renderEngine.bindTexture(textures);
        
        tes.addVertexWithUV(x,     y,     z, 0, 1);
        tes.addVertexWithUV(x, y+1,     z, 0, 0);
        tes.addVertexWithUV(x, y+1, z+1, 1, 0);
        tes.addVertexWithUV(x,     y, z+1, 1, 1);

-TGG

 

Posted

Hi

 

Sounds like it might be rendering but not in the place you expect.

 

Suggest to try

// comment this out		tes.setTranslation(x, y, z);

	ResourceLocation textures = (new ResourceLocation(Reference.modid + ":textures/models/LEDStrip.png")); 
        Minecraft.getMinecraft().renderEngine.bindTexture(textures);
        
        tes.addVertexWithUV(x,     y,     z, 0, 1);
        tes.addVertexWithUV(x, y+1,     z, 0, 0);
        tes.addVertexWithUV(x, y+1, z+1, 1, 0);
        tes.addVertexWithUV(x,     y, z+1, 1, 1);

-TGG

 

I've already done that ;)

 

Actual code:

package morelights.renderers;

import org.lwjgl.opengl.GL11;

import morelights.lib.Reference;
import morelights.proxy.ClientProxy;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

public class LEDStripRenderer implements ISimpleBlockRenderingHandler {

@Override
public void renderInventoryBlock(Block block, int metadata, int modelID,
		RenderBlocks renderer) {

}

@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z,
		Block block, int modelId, RenderBlocks renderer) {

	Tessellator tes = Tessellator.instance;
	int lightValue = block.getMixedBrightnessForBlock(world, x, y, z);
	tes.setBrightness(lightValue);
	tes.setColorOpaque_F(1.0F, 1.0F, 1.0F);

	ResourceLocation texture = (new ResourceLocation(Reference.modid + ":textures/models/LEDStrip.png"));
	Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
        
        tes.addVertexWithUV(0, 0, 0, 0, 1);
        tes.addVertexWithUV(0, 1, 0, 0, 0);
        tes.addVertexWithUV(0, 1, 1, 1, 0);
        tes.addVertexWithUV(0, 0, 1, 1, 1);
        
        Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
        
	return true;
}

@Override
public boolean shouldRender3DInInventory() {
	return true;
}

@Override
public int getRenderId() {
	return ClientProxy.LEDStripRenderType;
}
}

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Posted

Hi

 

Your code currently renders from [0,0,0] to [1,1,1] instead of from [x,y,z] to [x+1, y+1, z+1].

Did you try that [x,y,z] to [x+1, y+1, z+1] already?

I think the tes.setTranslation(x, y, z) won't work because the caller has set the viewpoint and translation relative to the chunk coordinates, not relative to an origin of [0,0,0]

 

-TGG

 

Posted

Also, if you want to change the texture, you need to do it while the tesselator is not tesselating, otherwise you'll mess up rendering of other blocks. You also need to restore the previous texture when you're finished, again while the tesselator is not tesselating. The correct procedure is:

 

tes.draw();
/* bind your texture here */
tes.startDrawingQuads();
/* draw your block here */
test.draw();
/* restore the default texture */
tes.startDrawingQuads();

 

But note that using a custom texture for rendering blocks is no longer the recommended way of doing things. The modern way is to provide each of your block images as a separate image file, and let MC stitch them into the main texture. This eliminates the need to switch textures while rendering blocks, simplifying your rendering code and improving graphics performance.

 

To see how it's done, take a look at the

registerIcons()

method of some of the vanilla blocks, and how RenderBlocks makes use of the

Icon

class.

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

    • dynamictrees and dtneapolitan are the last mentioned mod - remove these
    • https://mclo.gs/9y5ciD2 anyone ever had this issue?  Internal exception illegal argument exception: unable to fit 3194354 into 3
    • Hi! I'm trying to add my custom models/textures renderer like this: public class PonyPlayerWrapperRenderer extends EntityRenderer<Player> { // wrapper class under my LivingEntityRenderer class implementation private final PonyPlayerRenderer innerRenderer; private final PonyPlayerRenderer innerSlimRenderer; public PonyPlayerWrapperRenderer(final EntityRendererProvider.Context context) { super(context); System.out.println("creating new PonyPlayerWrapperRenderer"); this.innerRenderer = new PonyPlayerRenderer(context, false); this.innerSlimRenderer = new PonyPlayerRenderer(context, true); } @Override public void render(final Player entity, final float yaw, final float partialTicks, final PoseStack poseStack, final MultiBufferSource bufferSource, final int packedLight) { System.out.println("PonyPlayerWrapperRenderer render: " + entity.toString()); if (entity instanceof AbstractClientPlayer clientPlayer) { if (clientPlayer.getModelName().contains("slim")) { innerSlimRenderer.render(clientPlayer, yaw, partialTicks, poseStack, bufferSource, packedLight); } else { innerRenderer.render(clientPlayer, yaw, partialTicks, poseStack, bufferSource, packedLight); } } } @Override public ResourceLocation getTextureLocation(final Player player) { System.out.println("PonyPlayerWrapperRenderer getTextureLocation"); if (player instanceof AbstractClientPlayer clientPlayer) { return clientPlayer.getSkinTextureLocation(); } System.out.println("player instanceof AbstractClientPlayer is false"); return getDefaultSkin(player.getUUID()); } } public class PonyPlayerRenderer extends LivingEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> { private final PlayerModel<AbstractClientPlayer> earthModel; private final PlayerModel<AbstractClientPlayer> pegasusModel; private final PlayerModel<AbstractClientPlayer> unicornModel; public PonyPlayerRenderer(final EntityRendererProvider.Context context, final boolean slim) { super( context, slim ? new PonyModelSlim(context.bakeLayer(PonyModelSlim.LAYER_LOCATION)) : new PonyModel(context.bakeLayer(PonyModel.LAYER_LOCATION)), 0.5f ); System.out.println("creating new PonyPlayerRenderer"); this.earthModel = slim ? new PonyModelSlim(context.bakeLayer(PonyModelSlim.LAYER_LOCATION)) : new PonyModel(context.bakeLayer(PonyModel.LAYER_LOCATION)); this.pegasusModel = new PegasusModel(context.bakeLayer(PegasusModel.LAYER_LOCATION)); this.unicornModel = new UnicornModel(context.bakeLayer(UnicornModel.LAYER_LOCATION)); } @Override public void render(final AbstractClientPlayer player, final float entityYaw, final float partialTicks, final PoseStack poseStack, final MultiBufferSource buffer, final int packedLight) { final PonyRace race = player.getCapability(PONY_DATA) .map(data -> ofNullable(data.getRace()).orElse(PonyRace.EARTH)) .orElse(PonyRace.EARTH); this.model = switch (race) { case PEGASUS -> pegasusModel; case UNICORN -> unicornModel; case EARTH -> earthModel; }; super.render(player, entityYaw, partialTicks, poseStack, buffer, packedLight); } @Override public ResourceLocation getTextureLocation(final AbstractClientPlayer player) { final PonyRace race = player.getCapability(PONY_DATA) .map(data -> ofNullable(data.getRace()).orElse(PonyRace.EARTH)) .orElse(PonyRace.EARTH); return switch (race) { case EARTH -> fromNamespaceAndPath(MODID, "textures/entity/earth_pony.png"); case PEGASUS -> fromNamespaceAndPath(MODID, "textures/entity/pegasus.png"); case UNICORN -> fromNamespaceAndPath(MODID, "textures/entity/unicorn.png"); }; } } @Mod.EventBusSubscriber(modid = MODID, bus = MOD, value = CLIENT) public class ClientRenderers { // mod bus render registration config @SubscribeEvent public static void onRegisterLayerDefinitions(final EntityRenderersEvent.RegisterLayerDefinitions event) { event.registerLayerDefinition(PonyModel.LAYER_LOCATION, PonyModel::createBodyLayer); event.registerLayerDefinition(PonyModelSlim.LAYER_LOCATION, PonyModelSlim::createBodyLayer); event.registerLayerDefinition(PegasusModel.LAYER_LOCATION, PegasusModel::createBodyLayer); event.registerLayerDefinition(UnicornModel.LAYER_LOCATION, UnicornModel::createBodyLayer); event.registerLayerDefinition(InnerPonyArmorModel.LAYER_LOCATION, InnerPonyArmorModel::createBodyLayer); event.registerLayerDefinition(OuterPonyArmorModel.LAYER_LOCATION, OuterPonyArmorModel::createBodyLayer); } @SubscribeEvent public static void onRegisterRenderers(final EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(EntityType.PLAYER, PonyPlayerWrapperRenderer::new); System.out.println("onRegisterRenderers end"); } } Method onRegisterRenderers() is called and I can see it being logged. But when I enter the world, my PonyWrapperRenderer render() method doesn't ever seem to be called. I also tried to put my renderer to EntityRenderDispatcher's playerRenderers via reflection: @Mod.EventBusSubscriber(modid = MODID, bus = MOD, value = CLIENT) public class ClientRenderers { @SubscribeEvent public static void onRegisterLayerDefinitions(final EntityRenderersEvent.RegisterLayerDefinitions event) { event.registerLayerDefinition(PonyModel.LAYER_LOCATION, PonyModel::createBodyLayer); event.registerLayerDefinition(PonyModelSlim.LAYER_LOCATION, PonyModelSlim::createBodyLayer); event.registerLayerDefinition(PegasusModel.LAYER_LOCATION, PegasusModel::createBodyLayer); event.registerLayerDefinition(UnicornModel.LAYER_LOCATION, UnicornModel::createBodyLayer); event.registerLayerDefinition(InnerPonyArmorModel.LAYER_LOCATION, InnerPonyArmorModel::createBodyLayer); event.registerLayerDefinition(OuterPonyArmorModel.LAYER_LOCATION, OuterPonyArmorModel::createBodyLayer); } @SubscribeEvent public static void onClientSetup(final FMLClientSetupEvent event) { event.enqueueWork(() -> { try { final EntityRenderDispatcher dispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); final Field renderersField = getEntityRenderDispatcherField("playerRenderers"); final Field itemInHandRenderer = getEntityRenderDispatcherField("itemInHandRenderer"); @SuppressWarnings("unchecked") final Map<String, EntityRenderer<? extends Player>> playerRenderers = (Map<String, EntityRenderer<? extends Player>>)renderersField.get(dispatcher); final PonyPlayerWrapperRenderer renderer = new PonyPlayerWrapperRenderer( new EntityRendererProvider.Context( dispatcher, Minecraft.getInstance().getItemRenderer(), Minecraft.getInstance().getBlockRenderer(), (ItemInHandRenderer)itemInHandRenderer.get(dispatcher), Minecraft.getInstance().getResourceManager(), Minecraft.getInstance().getEntityModels(), Minecraft.getInstance().font ) ); playerRenderers.put("default", renderer); playerRenderers.put("slim", renderer); System.out.println("Player renderers replaced"); } catch (final Exception e) { throw new RuntimeException("Failed to replace player renderers", e); } }); } private static Field getEntityRenderDispatcherField(final String fieldName) throws NoSuchFieldException { final Field field = EntityRenderDispatcher.class.getDeclaredField(fieldName); field.setAccessible(true); return field; } } But I receive the error before Minecraft Client appears (RuntimeException: Failed to replace player renderers - from ClientRenderers onClientSetup() method - and its cause below): java.lang.IllegalArgumentException: No model for layer anotherlittlepony:earth_pony#main at net.minecraft.client.model.geom.EntityModelSet.bakeLayer(EntityModelSet.java:18) ~[forge-1.20.1-47.4.0_mapped_official_1.20.1-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.EntityRendererProvider$Context.bakeLayer(EntityRendererProvider.java:69) ~[forge-1.20.1-47.4.0_mapped_official_1.20.1-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at com.thuggeelya.anotherlittlepony.client.renderer.pony.PonyPlayerRenderer.<init>(PonyPlayerRenderer.java:32) ~[main/:?] {re:classloading} at com.thuggeelya.anotherlittlepony.client.renderer.pony.PonyPlayerWrapperRenderer.<init>(PonyPlayerWrapperRenderer.java:24) ~[main/:?] {re:classloading} at com.thuggeelya.anotherlittlepony.client.renderer.ClientRenderers.lambda$onClientSetup$0(ClientRenderers.java:79) ~[main/:?] {re:classloading} ... 33 more Problem appears when EntityRendererProvider context tries to bakeLayer with my model layer location: new PonyModel(context.bakeLayer(PonyModel.LAYER_LOCATION)); // PonyPlayerRenderer.java:32 public class PonyModel extends PlayerModel<AbstractClientPlayer> { // the model class itself public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation( ResourceLocation.fromNamespaceAndPath(MODID, "earth_pony"), "main" ); public PonyModel(final ModelPart root) { super(root, false); } public static LayerDefinition createBodyLayer() { // some CubeListBuilder stuff for model appearance } } Textures PNGs are placed at: resources/assets/[my mod id]/textures/entity. My forge version is 1.20.1. Would appreciate any help.
    • Well, a bit more information about what you're trying to do would be helpful. e.g. why you're trying to use "INVOKE_ASSIGN" instead of "INVOKE". "INVOKE_ASSIGN" calls your code after the "target" is called and its value is stored, if applicable. "INVOKE" calls your code before the target is called. "target" expects a fully qualified name, as per the SpongePowered docs, if that name is going to be remapped (which it will be if your injecting into Minecraft itself and not another mod). For more information on fully qualified names versus canonical names, see the Java specifications. Here's an example of a working "@At" from my own code that targets the "getClosestsVulnerablePlayerToEntity" call inside a mob's logic: @At(value = "INVOKE_ASSIGN", target = "net.minecraft.world.World.getClosestVulnerablePlayerToEntity(Lnet/minecraft/entity/Entity;D)Lnet/minecraft/entity/player/EntityPlayer;") Hope this helps!
    • Ran it one more time just to check, and there's no errors this time on the log??? Log : https://mclo.gs/LnuaAiu I tried allocating more memory to the modpack, around 8000MB and it's still the same; stopping at "LOAD_REGISTRIES". Are some of the mods clashing, maybe? I have no clue what to do LOL
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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