Jump to content

[1.16.1] New Lantern Not Supporting Transparency


Matt Wild

Recommended Posts

Hi, I've been trying to make a modded lantern using net.minecraft.block.LanternBlock as a base.
 

My current class is as follows:
 

import net.minecraft.block.*;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.ToolType;

public class GemLanternBase extends LanternBlock {

    public GemLanternBase(int lightValue) {
        super(LanternBlock.Properties.create(Material.IRON)
                .hardnessAndResistance(3.5f, 3.5f)
                .sound(SoundType.LANTERN)
                .harvestLevel(0)
                .harvestTool(ToolType.PICKAXE)
                .setLightLevel(value -> lightValue));
    }

}

 

I figured that using the default lantern would mean that the model in-game would support transparency, but I seem to be wrong.

The modded lantern has one difference to the default one, the chain texture doesn't support transparency. It's really annoying and I have no idea what I need to do in order to fix this. Is anyone able to help me on this one?

(p.s. I'm quite new to modding so treat me like I'm an idiot, thanks :D)

Link to comment
Share on other sites

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Hi

 

You might find this working example of transparent models useful, just by coincidence it's also a lantern...!

https://github.com/TheGreyGhost/MinecraftByExample/tree/master/src/main/java/minecraftbyexample/mbe05_block_advanced_models

https://greyminecraftcoder.blogspot.com/2020/05/minecraft-by-example.html  (mbe05)

 

Cheers

  TGG

Link to comment
Share on other sites

13 hours ago, TheGreyGhost said:

Hi

 

You might find this working example of transparent models useful, just by coincidence it's also a lantern...!

https://github.com/TheGreyGhost/MinecraftByExample/tree/master/src/main/java/minecraftbyexample/mbe05_block_advanced_models

https://greyminecraftcoder.blogspot.com/2020/05/minecraft-by-example.html  (mbe05)

 

Cheers

  TGG

Hi, thanks for the reply and the example!

My lantern is a lot less fancy than the example given but I figured that I needed the following:

 - notSolid() to be called in the block properties
 - make the getRenderType method return BlockRenderType.MODEL

My new class looks like this:
 

import net.minecraft.block.*;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.ToolType;

public class GemLanternBase extends LanternBlock {

    public GemLanternBase(int lightValue) {
        super(LanternBlock.Properties.create(Material.IRON)
                .hardnessAndResistance(3.5f, 3.5f)
                .sound(SoundType.LANTERN)
                .harvestLevel(0)
                .harvestTool(ToolType.PICKAXE)
                .setRequiresTool()
                .setLightLevel(value -> lightValue)
                .notSolid());
    }

    @Override
    public BlockRenderType getRenderType(BlockState iBlockState) {
        return BlockRenderType.MODEL;
    }

}


However, the issue is persisting. The chain still has black pixels where the transparent pixels should be. I also tried applying the voxel model but that didn't seem to make a difference. I'm very confused as to what causes Minecraft to allow for transparency.

Could you elaborate on what is missing from my class?

Many thanks :)


EDIT:
I've solved the problem!

Nothing was wrong with my class lol, though the example has been very helpful for adding new functionality!

Turns out I needed to call setRenderLayer from RenderTypeLookup in my client setup method. I had no idea this was a thing and when I first saw it I thought it was for blocks structures specifically. As I said I'm very new to this and I'm glad this is figured out, this is my first mod that I'm playing around with.


All I can say is thank god this forums exists, I find the official documentation for this to be kinda lack-lustre.

Edited by Matt Wild
Link to comment
Share on other sites

23 minutes ago, Matt Wild said:

 - notSolid() to be called in the block properties
 - make the getRenderType method return BlockRenderType.MODEL

Neither of these are correct. The first property says your block should not consider this for culling on all sides. This should not be necessary if you properly handle your voxel shape. The other method determines how your block should render, such as whether to use a model, a TER, or nothing at all. These do not affect the render layer.

26 minutes ago, Matt Wild said:

I've seen people talking about the RenderTypeLookup.setRenderLayer() method inside the client setup.

That's because that's what you need to do. If you look at the parameters, you should see the first one requires a block of some type. The second needs either a function or a RenderType. If you go into the RenderType class, you should find a bunch of static methods which will return RenderTypes. You should be able to determine which one you should use for this.

Link to comment
Share on other sites

Hey, thanks for the heads up ^^

I was very confused at first because I thought that the content of the class was the dependant factor for the texture rendering correctly. As for the confusion with the parameters, I realised I could grab the block from the registry. (none of this I've done before so I'm glad it's cleared up)

Link to comment
Share on other sites

  • 5 weeks later...
10 hours ago, MasterQuentus said:

how did you fix it

try {
	RenderTypeLookup.setRenderLayer(RegistryHandler.SOL_LANTERN.get(), RenderType.getCutout());
} catch (java.lang.NoClassDefFoundError e) {
	
}

I put this code into my setup method within the main class. To my understanding, you parse in the block and RenderType to set how the client will render it. The catch statement is just a cheap way to stop a server from crashing if it were to use this mod xD

Apologies for posting on this old thread again, but the guys clearly new here with 1 post, might as well try to help him out. :)

Edited by Matt Wild
Link to comment
Share on other sites

4 hours ago, Matt Wild said:

I put this code into my setup method within the main class.

No! Bad modder!
Put client side code in a client side event subscriber!

Do not hide exceptions.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.

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



×
×
  • Create New...

Important Information

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