Jump to content

Recommended Posts

Posted

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)

Posted

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.

Posted (edited)
  On 10/30/2020 at 5:39 AM, 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

Expand  

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
Posted
  On 10/30/2020 at 6:38 PM, Matt Wild said:

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

Expand  

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.

  On 10/30/2020 at 6:38 PM, Matt Wild said:

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

Expand  

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.

Posted

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)

  • 5 weeks later...
Posted (edited)
  On 11/29/2020 at 3:55 AM, MasterQuentus said:

how did you fix it

Expand  
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
Posted
  On 11/29/2020 at 2:03 PM, Matt Wild said:

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

Expand  

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.

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

    • When you name a method like that, with no return value, it is a constructor. The constructor must have the same name as the class it constructs, in this case, ModItems. I would strongly advise reading up on some basic Java tutorials, because you will definitely be running into a lot more issues as you go along without the basics. *I should also add that the Forge documentation is a reference, not a tutorial. Even following tutorials, you should know Java basics, otherwise the smallest of mistakes will trip you up as you copy someone elses code.
    • so, I'm starting modding and I'm following the official documantation for forge: https://docs.minecraftforge.net, but in the registries part it is not working as it is in the docs:   public class ModItems { private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, DarkStarvation.MOD_ID); public static final RegistryObject<Item> TEST_ITEM = ITEMS.register("test_item", () -> new Item(new Item.Properties())); public DarkStarvation(FMLJavaModLoadingContext context) { ITEMS.register(context.getModEventBus()); } } in 'public DarkStarvation(...' the DarkStarvation has this error: Invalid method declaration; return type required and the getModEventBus(): Cannot resolve method 'getModEventBus' in 'FMLJavaModLoadingContext' please help, I asked gpt but it is saying that I'm using an old method, but I'm following the latest version of Forge Docs???
    • I merged your second post with the original , there is no need to post a new thread asking for an answer. If someone sees your post and can help, they will reply. If you are seeking a quicker response, you could try asking in the Minecraft Forge diacord.
    • Create a new instance and start with cobblemon - if this works, add the rest of your mods in groups   Maybe another mod is conflicting - like Sodium/Iris or Radical Cobblemon Trainers
    • https://forums.minecraftforge.net/topic/157393-1201-forge-rocket-flame-particle-trail-moves-up-and-crashes-into-the-rocket-during-flight/#comment-584134
  • Topics

×
×
  • Create New...

Important Information

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