Jump to content

Recommended Posts

Posted

Hello,

 

I have this simple texture for my Block (which is not a TileEntity), that is going to be the interior Block of a MultiBlock structure.

What I want to achieve is, that the block changes its color and animation speed while the Multiblock is doing its job.

 

So I have said Texture (16x16) with transparent pixels, and I want to merge that with a couple of other textures (depending on the state of the controller block) for the animation, those are 16x320px pngs with different colors, and animation speeds.

 

Now, how can I combine these textures, so that the main texture is the top layer, and you can see the color change through the transparent pixels?

Sure, I could just copy&paste the transparent top layer to all colored animations, but the interior block is supposed to have connected textures,

so that would result in a massive amount of png files. Not the way I'd like to go.

 

I've been reading all day about Tessellator, ISBRH and that stuff, but all tutorials where either outdated, didn't work for me (No doubt i derped somewhere), or it was way to complicated for me to understand.

Can someone guide me here please? All this rendering stuff is to complicated for my brain somehow.  :-[

 

 

-Namikon

Posted

Blocks can have multiple render layers.

These are also called rendering passes.

In your iicon register method, register icons for all layers.

Now, there's big good method getIICon with world, position and render layer parameters. Here you can check if your block is forming multiblock, and return textures based on rendering pass...

Note: you have to override some methods in order for multiple layers to work...

Posted

Ok, so in my getIIcon method I already have around 20 textures being registered, for all possible combinations of the connected texture feature.

But I must be blind, to me it looks like neither the IIconRegister.registerIcon, nor the IIcon has has a function or property to define the Layer for the texture...?

Same for the Block class. There are a bunch of methods that relate to rendering, but for most of them (Those I let google search for) lead me to the ISBR thing.

Is that the way to go?

Posted

Ok, so in my getIIcon method I already have around 20 textures being registered, for all possible combinations of the connected texture feature.

But I must be blind, to me it looks like neither the IIconRegister.registerIcon, nor the IIcon has has a function or property to define the Layer for the texture...?

Same for the Block class. There are a bunch of methods that relate to rendering, but for most of them (Those I let google search for) lead me to the ISBR thing.

Is that the way to go?

No.

First, there will be no registerIICon method with layer param, here you just register ALL your textures for ALL layers.

Second, here's excact methods that you have to use...

 

Actually, sorry, it is not possible in 1.7.10 without TESR or ISBR...

Altough, mutli layer rendering is possible with items (1.7.10&1.8) and with blocks in 1.8 without TESR or ISBR...

Posted

Aha,  good. I thought I derped hard on this. Well, not a problem. Can you recommend some tutorials for TESR and ISBR? For this case, I'll need something for non tile entities, as only the controller block will be one. So I guess I need ISBR then..?

 

 

Ok, I got it to the point where I managed to have a custom renderer for my Block. (Found the "Diamond in ice" tutorial).

But now I have a problem, the Block does render in both pass 0 and 1, but the Texture that is rendered in pass 1, is always the one that is visible.

My idea was, to draw the background texture in pass 0, and the Texture with transparent pixels on top of that, in pass 1.

But the texture from pass 0 is overwritten with the one from pass 1; The transparent areas show the grass below it, it's completely replaced.

 

 

This is my (messy..) function to render the Block:

CoreBlock tBlock = (CoreBlock)block;

FMLLog.log(Level.INFO, "RenderPass: %d start", tProxy.renderPass);
if(tProxy.renderPass == 0)
{
IIcon tBackL = tBlock.getNormalIcon();
float u = tBackL.getMinU();
float v = tBackL.getMinV();
float U = tBackL.getMaxU();
float V = tBackL.getMaxV();

Tessellator tes = Tessellator.instance;
tes.addTranslation(x, y, z);

tes.addVertexWithUV(0, 1, 1, u, v);
tes.addVertexWithUV(1, 1, 1, u, V);
tes.addVertexWithUV(1, 1, 0, U, V);
tes.addVertexWithUV(0, 1, 0, U, v);

tes.addTranslation(-x, -y, -z);
FMLLog.log(Level.INFO, "RenderPass 0 done");
}
else                    
{
IIcon tTopL = tBlock.getAlpaIcon();
float u = tTopL.getMinU();
float v = tTopL.getMinV();
float U = tTopL.getMaxU();
float V = tTopL.getMaxV();

Tessellator tes = Tessellator.instance;
tes.addTranslation(x, y, z);

tes.addVertexWithUV(0, 1, 1, u, v);
tes.addVertexWithUV(1, 1, 1, u, V);
tes.addVertexWithUV(1, 1, 0, U, V);
tes.addVertexWithUV(0, 1, 0, U, v);

tes.addTranslation(-x, -y, -z);
FMLLog.log(Level.INFO, "RenderPass 1 done");
}

 

This is the actual result:

 

Also, I wonder if that will work with an animated texture. (The one i've tried is not).

The renderer is only called when I place/break something around it, I assume it needs to redraw the texture to

"animate" the background layer?

Posted

Heh, it's always good when you find the solution yourself.

 

Ok, for anyone who is struggling with the same Problem, here is the solution: (Improvements are welcome!)

 

Goal:

A block that has an animated texture as background (That can be swapped dynamically; For example in a multiblock),

and a second texture on top of that, with transparent areas. (Good if you want to fade something in and out)

 

First, you should read this tutorial; It's working with 1.7.10 and explains a lot: http://www.minecraftforge.net/wiki/Multiple_Pass_Render_Blocks

Second, you don't need that "drawDiamond" function:

 

- Set the animated texture as default icon (getIIcon()) in your Block

- In your ISBRH Class, for Render pass 0, let Minecraft render the Block itself (And the animation!) with renderStandardBlockWithAmbientOcclusion

- Then, retrieve the texture with your alpha channel areas, and tell the renderer to draw every face of that Block again, but this time with your new texture.

- Done! There you have your animated block :)

 

 

This is the actual function i'm using now:

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

	ClientProxy tProxy = (ClientProxy)MyMod.proxy;

	CoreBlock tBlock = (CoreBlock)block;
	if(tProxy.renderPass == 0)
	{
		renderer.renderStandardBlockWithAmbientOcclusion(block, x, y, z, 1, 1, 1);

		IIcon ico = tBlock.getAlpaIcon();
		renderer.renderFaceXNeg(block, x, y, z, ico);
		renderer.renderFaceXPos(block, x, y, z, ico);

		renderer.renderFaceYNeg(block, x, y, z, ico);
		renderer.renderFaceYPos(block, x, y, z, ico);

		renderer.renderFaceZNeg(block, x, y, z, ico);
		renderer.renderFaceZPos(block, x, y, z, ico);
	}

	return false;
}

 

If it's a terrible way to do it, please tell me. But it seems to work fine :)

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

    • hello, I've been trying to resolve this problem on curseforge for a while because I can't find a solution, can someone help me? I put the logs of the problem above:       [23Jan2025 06:58:39.109] [main/INFO][cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, cochon93, --version, forge-47.3.10, --gameDir, C:\Users\claey\curseforge\minecraft\Instances\create, --assetsDir, C:\Users\claey\curseforge\minecraft\Install\assets, --assetIndex, 5, --uuid, fd8a812c9e7a4ecbb8c750f0b8ffddf4, --accessToken, ????????, --clientId, OWM0NDE0ZmMtOWJiMS00OTBhLWIxYWYtMmI0ODM4Y2FkYTFl, --xuid, 2535422576924500, --userType, msa, --versionType, release, --width, 1024, --height, 768, --quickPlayPath, C:\Users\claey\curseforge\minecraft\Install\quickPlay\java\1737611916744.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.3.10, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [23Jan2025 06:58:39.124] [main/INFO][cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.13 by Eclipse Adoptium; OS Windows 11 arch amd64 version 10.0 [23Jan2025 06:58:42.749] [main/INFO][net.minecraftforge.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [23Jan2025 06:58:42.835] [main/INFO][EARLYDISPLAY/]: Trying GL version 4.6 [23Jan2025 06:58:43.030] [main/INFO][EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 [23Jan2025 06:58:43.145] [main/INFO][mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/claey/curseforge/minecraft/Install/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT [23Jan2025 06:58:43.195] [pool-2-thread-1/INFO][EARLYDISPLAY/]: GL info: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2 GL version 4.6.0 NVIDIA 561.03, NVIDIA Corporation [23Jan2025 06:58:44.664] [main/WARN][net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\claey\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.3.10\fmlcore-1.20.1-47.3.10.jar is missing mods.toml file [23Jan2025 06:58:44.668] [main/WARN][net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\claey\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.3.10\javafmllanguage-1.20.1-47.3.10.jar is missing mods.toml file [23Jan2025 06:58:44.670] [main/WARN][net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\claey\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.3.10\lowcodelanguage-1.20.1-47.3.10.jar is missing mods.toml file [23Jan2025 06:58:44.674] [main/WARN][net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\claey\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.3.10\mclanguage-1.20.1-47.3.10.jar is missing mods.toml file [23Jan2025 06:58:45.326] [main/WARN][net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File: and Mod File: . Using Mod File: [23Jan2025 06:58:45.329] [main/WARN][net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select a dependency jar for JarJar which was passed in as source: cloth_config. Using Mod File: C:\Users\claey\curseforge\minecraft\Instances\create\mods\cloth-config-11.1.136-forge.jar [23Jan2025 06:58:45.329] [main/INFO][net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: Found 48 dependencies adding them to mods collection     thank you very much for your help
    • After adding all my mods and everything loading up fine, I go to create a singleplayer world and it load to 100 then crashes saying: The game crashed: exception in server tick loop Error: java.lang.NoClassDefFoundError: net/luckperms/api/LuckPermsProvider Crash Report: https://pastebin.com/nmTTFBB4
    • i have just made a modpack and i accidentally added a few fabric mods and after deleting them i can no longer launch the pack if any one could help these are my latest logs [22:42:24] [main/INFO]:additionalClassesLocator: [optifine., net.optifine.] [22:42:25] [main/INFO]:Compatibility level set to JAVA_17 [22:42:25] [main/ERROR]:Mixin config epicsamurai.mixins.json does not specify "minVersion" property [22:42:25] [main/INFO]:Launching target 'forgeclient' with arguments [--version, forge-43.4.0, --gameDir, C:\Users\Mytht\curseforge\minecraft\Instances\overseer (1), --assetsDir, C:\Users\Mytht\curseforge\minecraft\Install\assets, --uuid, 4c176bf14d4041cba29572aa4333ca1d, --username, mythtitan0, --assetIndex, 1.19, --accessToken, ????????, --clientId, MGJiMTEzNGEtMjc3Mi00ODE0LThlY2QtNzFiODMyODEyYjM4, --xuid, 2535469006485684, --userType, msa, --versionType, release, --width, 854, --height, 480] [22:42:25] [main/WARN]:Reference map 'insanelib.refmap.json' for insanelib.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'corpsecurioscompat.refmap.json' for gravestonecurioscompat.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'nitrogen_internals.refmap.json' for nitrogen_internals.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'arclight.mixins.refmap.json' for epicsamurai.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'simplyswords-common-refmap.json' for simplyswords-common.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'simplyswords-forge-refmap.json' for simplyswords.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map '${refmap_target}refmap.json' for corgilib.forge.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:25] [main/WARN]:Reference map 'MysticPotions-forge-refmap.json' for mysticpotions.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:26] [main/WARN]:Reference map 'packetfixer-forge-forge-refmap.json' for packetfixer-forge.mixins.json could not be read. If this is a development environment you can ignore this message [22:42:26] [main/WARN]:Error loading class: atomicstryker/multimine/client/MultiMineClient (java.lang.ClassNotFoundException: atomicstryker.multimine.client.MultiMineClient) [22:42:26] [main/WARN]:@Mixin target atomicstryker.multimine.client.MultiMineClient was not found treechop.forge.compat.mixins.json:MultiMineMixin [22:42:26] [main/WARN]:Error loading class: com/simibubi/create/content/contraptions/components/fan/AirCurrent (java.lang.ClassNotFoundException: com.simibubi.create.content.contraptions.components.fan.AirCurrent) [22:42:26] [main/WARN]:Error loading class: shadows/apotheosis/ench/table/ApothEnchantContainer (java.lang.ClassNotFoundException: shadows.apotheosis.ench.table.ApothEnchantContainer) [22:42:26] [main/WARN]:@Mixin target shadows.apotheosis.ench.table.ApothEnchantContainer was not found origins_classes.mixins.json:common.apotheosis.ApotheosisEnchantmentMenuMixin [22:42:26] [main/WARN]:Error loading class: se/mickelus/tetra/blocks/workbench/WorkbenchTile (java.lang.ClassNotFoundException: se.mickelus.tetra.blocks.workbench.WorkbenchTile) [22:42:26] [main/WARN]:@Mixin target se.mickelus.tetra.blocks.workbench.WorkbenchTile was not found origins_classes.mixins.json:common.tetra.WorkbenchTileMixin [22:42:27] [main/WARN]:Error loading class: tfar/davespotioneering/blockentity/AdvancedBrewingStandBlockEntity (java.lang.ClassNotFoundException: tfar.davespotioneering.blockentity.AdvancedBrewingStandBlockEntity) [22:42:27] [main/WARN]:@Mixin target tfar.davespotioneering.blockentity.AdvancedBrewingStandBlockEntity was not found itemproductionlib.mixins.json:davespotioneering/AdvancedBrewingStandBlockEntityMixin [22:42:27] [main/WARN]:Error loading class: fuzs/visualworkbench/world/inventory/ModCraftingMenu (java.lang.ClassNotFoundException: fuzs.visualworkbench.world.inventory.ModCraftingMenu) [22:42:27] [main/WARN]:@Mixin target fuzs.visualworkbench.world.inventory.ModCraftingMenu was not found itemproductionlib.mixins.json:visualworkbench/ModCraftingMenuMixin [22:42:27] [main/WARN]:Error loading class: fuzs/easymagic/world/inventory/ModEnchantmentMenu (java.lang.ClassNotFoundException: fuzs.easymagic.world.inventory.ModEnchantmentMenu) [22:42:27] [main/WARN]:@Mixin target fuzs.easymagic.world.inventory.ModEnchantmentMenu was not found skilltree.mixins.json:easymagic/ModEnchantmentMenuMixin [22:42:27] [main/WARN]:Error loading class: shadows/apotheosis/ench/table/ApothEnchantmentMenu (java.lang.ClassNotFoundException: shadows.apotheosis.ench.table.ApothEnchantmentMenu) [22:42:27] [main/WARN]:@Mixin target shadows.apotheosis.ench.table.ApothEnchantmentMenu was not found skilltree.mixins.json:apotheosis/ApothEnchantContainerMixin [22:42:27] [main/WARN]:Error loading class: shadows/apotheosis/adventure/affix/socket/SocketingRecipe (java.lang.ClassNotFoundException: shadows.apotheosis.adventure.affix.socket.SocketingRecipe) [22:42:27] [main/WARN]:@Mixin target shadows.apotheosis.adventure.affix.socket.SocketingRecipe was not found skilltree.mixins.json:apotheosis/SocketingRecipeMixin [22:42:27] [main/WARN]:Error loading class: shadows/apotheosis/adventure/affix/socket/gem/bonus/AttributeBonus (java.lang.ClassNotFoundException: shadows.apotheosis.adventure.affix.socket.gem.bonus.AttributeBonus) [22:42:27] [main/WARN]:@Mixin target shadows.apotheosis.adventure.affix.socket.gem.bonus.AttributeBonus was not found skilltree.mixins.json:apotheosis/AttributeBonusMixin [22:42:27] [main/WARN]:Error loading class: shadows/apotheosis/adventure/affix/socket/gem/bonus/EnchantmentBonus (java.lang.ClassNotFoundException: shadows.apotheosis.adventure.affix.socket.gem.bonus.EnchantmentBonus) [22:42:27] [main/WARN]:@Mixin target shadows.apotheosis.adventure.affix.socket.gem.bonus.EnchantmentBonus was not found skilltree.mixins.json:apotheosis/EnchantmentBonusMixin [22:42:27] [main/WARN]:Error loading class: shadows/apotheosis/adventure/client/AdventureModuleClient (java.lang.ClassNotFoundException: shadows.apotheosis.adventure.client.AdventureModuleClient) [22:42:27] [main/WARN]:@Mixin target shadows.apotheosis.adventure.client.AdventureModuleClient was not found skilltree.mixins.json:apotheosis/AdventureModuleClientMixin [22:42:27] [main/WARN]:Error loading class: me/shedaniel/rei/RoughlyEnoughItemsCoreClient (java.lang.ClassNotFoundException: me.shedaniel.rei.RoughlyEnoughItemsCoreClient) [22:42:27] [main/WARN]:Error loading class: com/replaymod/replay/ReplayHandler (java.lang.ClassNotFoundException: com.replaymod.replay.ReplayHandler) [22:42:27] [main/WARN]:Error loading class: net/coderbot/iris/pipeline/newshader/ExtendedShader (java.lang.ClassNotFoundException: net.coderbot.iris.pipeline.newshader.ExtendedShader) [22:42:27] [main/WARN]:Error loading class: net/irisshaders/iris/pipeline/programs/ExtendedShader (java.lang.ClassNotFoundException: net.irisshaders.iris.pipeline.programs.ExtendedShader) [22:42:27] [main/INFO]:Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.3.6).
    • My Mohist server crashed as well but all it says in logs is " C:\Minecraft Mohist server>java -Xm6G -jar mohist.jar nogul  Error: Unable to access jarfile mohist.jar   C:\Minecraft Mohist server>PAUSE press any key to continue  .  .  . " Any ideas? i have the server file that its looking for where its looking for it.
  • Topics

×
×
  • Create New...

Important Information

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