Matt Wild Posted October 29, 2020 Posted October 29, 2020 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) Quote
Draco18s Posted October 30, 2020 Posted October 30, 2020 https://forums.minecraftforge.net/search/?q=transparent block&type=forums_topic&updated_after=any&sortby=relevancy&search_and_or=and Quote 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.
TheGreyGhost Posted October 30, 2020 Posted October 30, 2020 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 Quote
Matt Wild Posted October 30, 2020 Author Posted October 30, 2020 (edited) 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 October 30, 2020 by Matt Wild Quote
ChampionAsh5357 Posted October 30, 2020 Posted October 30, 2020 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. Quote
Matt Wild Posted October 30, 2020 Author Posted October 30, 2020 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) Quote
ChampionAsh5357 Posted November 29, 2020 Posted November 29, 2020 26 minutes ago, MasterQuentus said: how did you fix it Don't necro an old thread. Create your own topic with your own question and source so that users may help. Quote
Matt Wild Posted November 29, 2020 Author Posted November 29, 2020 (edited) 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 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 November 29, 2020 by Matt Wild Quote
Draco18s Posted November 29, 2020 Posted November 29, 2020 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. Quote 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.
Danebi Posted November 29, 2020 Posted November 29, 2020 4 hours ago, Matt Wild said: I put this code into my setup method within the main class. NO. Put it in the client setup. Quote
Matt Wild Posted November 29, 2020 Author Posted November 29, 2020 13 minutes ago, Draco18s said: No! Bad modder! Put client side code in a client side event subscriber! Do not hide exceptions. teehee Quote
Recommended Posts
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.