Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.5] [SOLVED] How would I render multiple textures on a block?


Recommended Posts

How would I go about rendering multiple layers of textures on a single block face?


I've seen AtomicStryker's tutorial on updating textures for 1.5, but I want to, for example, be able to have fancy smart-auto-connected stained glass blocks, without having fifty thousand separate sprites. I know it could be done in some way in 1.4, as RailCraft, XyCraft, and ThaumCraft all did it, but I haven't done much modding in a while and I doubt any of it would work in 1.5 anyway.


If someone else somewhere has asked this question and you can link me to a detailed response that they got, that would be great too. But I'm not an expert modder (I haven't successfully done complex stuff since 1.2.5, and not much at all since 1.3) so the more detailed and simple an answer is, the more it would help me.

Link to comment
Share on other sites

A day later...


Does anybody at all know how? :( I really don't know enough fancy render stuff (or have the hours and hours of patience to try, fail, and repeat x1000)  to try to learn this completely on my own.


You can use an array which holds Icon instances. For example like an array with 5 textures:

private Icon[] blockTextures;


Then initialize this array in the method with the IconRegister parameter:

public void func_94332_a(IconRegister par1IconRegister) {
    this.blockTextures = new Icon[5];
    for(int i = 0; i < 5; i++) {
        this.blockTextures[i] = par1IconRegister.func_94245_a("MyMod:blockTexture_" + i);

while having these 5 texture files ready and named like blockTexture0.png, blockTexture1.png aso.


Finally decide in any of the getBlockTextureXXX methods which texture should be shown, here a metadata example:

public Icon getBlockTextureFromSideAndMetadata(int par1, int par2) {
    if(par1 < 0 || par1 >= 5)
        return this.blockTextures[0];
    return this.blockTextures[par1];

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

Assuming I understood you correctly, I'm not asking about different textures on different sides or metadata.


I'm talking about overlaying multiple textures on a single face of a single metadata block, like RailCraft's ores, so that I can have a base texture, and then several partial textures that overlay on top as I want them to, so that I only need around 10 or 16 textures instead of 2000.


Thank you for what you did tell me, but it's not what I was asking, sorry.

Link to comment
Share on other sites

I think what you are looking for is called Multi-Pass Rendering and there is a Tutorial about it on the ForgeWiki!

I can't say if the code provided there will work for 1.5 since i'm pretty new to Java but at least it's a start :)




From what i know the SecretRoomsMod has some sort of MPR going on and it get's currently ported to 1.5 so with the tutorial on the wiki and the source insight from Github you're on the right way.




Hope it helps :)

Link to comment
Share on other sites

I looked at the Secret Rooms mod code; it doesn't seem to be what I'm looking for either -- useful, definitely, if I ever want to make camoflaging blocks, which I probably will if this project gets underway, but it's not what I'm after right now, unfortunately.


The wiki page might be able to help me if it works with 1.5; I'll give it a shot soon and see if I can make that work for me.


Thank you for your help!

Link to comment
Share on other sites

UPDATE: I have gotten it to work, to some extent. With just very basic modifications to that wiki code (adding the new render method override to the block class), I've gotten this with vanilla glass and ice textures:






I still have a lot of work to do to get it to do what I want, but I do have it working a little bit.

Link to comment
Share on other sites

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.

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.


  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • I got it now I installed the java 16 jdk instead of 8. Now it works thanks!  
    • net.minecraft.ResourceLocationException: Non [a-z0-9/._-] character in path of location: minecraft:textures/models/armor/gold_layer_١.png     at net.minecraft.resources.ResourceLocation.<init>(ResourceLocation.java:37) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading}     at net.minecraft.resources.ResourceLocation.<init>(ResourceLocation.java:42) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading}     at net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer.getArmorResource(HumanoidArmorLayer.java:146) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer.m_117118_(HumanoidArmorLayer.java:60) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer.m_6494_(HumanoidArmorLayer.java:36) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer.m_6494_(HumanoidArmorLayer.java:23) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.entity.LivingEntityRenderer.m_7392_(LivingEntityRenderer.java:126) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.entity.MobRenderer.m_7392_(SourceFile:45) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading}     at net.minecraft.client.renderer.entity.MobRenderer.m_7392_(SourceFile:18) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading}     at net.minecraft.client.renderer.entity.EntityRenderDispatcher.m_114384_(EntityRenderDispatcher.java:129) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.LevelRenderer.m_109517_(LevelRenderer.java:1280) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.LevelRenderer.m_109599_(LevelRenderer.java:1076) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.GameRenderer.m_109089_(GameRenderer.java:1050) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.GameRenderer.m_109093_(GameRenderer.java:830) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1039) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:659) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:186) ~[client-1.17.1-20210706.113038-srg.jar%2353!:?] {re:classloading,pl:runtimedistcleaner:A}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[?:?] {}     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$launchService$0(CommonClientLaunchHandler.java:45) ~[fmlloader-1.17.1-37.0.126.jar%2322!:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:106) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:77) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-9.0.7.jar%235!:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:90) [bootstraplauncher-0.1.17.jar:?] {}   (This the crash report(
    • Also you should consider reading the README.txt file (there it explains how to set up the workspace and what to do on specific errors)
    • First you need to run "gradlew genEclipseRuns" / "gradlew genIntellijRuns" and then "gradlew eclipse" / "gradlew intellij". There isn't a setupdecompworkspace any more
    • Now I'm getting another error: C:\Users\<MyUserName>\Desktop\CLEAN_Phobos_1.9.0-BUILDABLE-SRC-main>gradlew setupdecompworkspace Starting a Gradle Daemon (subsequent builds will be faster) FAILURE: Build failed with an exception. * What went wrong: Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the user guide chapter on the daemon at https://docs.gradle.org/4.9/userguide/gradle_daemon.html Please read the following process output to find out more: ----------------------- FAILURE: Build failed with an exception. * What went wrong: java.lang.ExceptionInInitializerError (no error message) * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.