Jump to content

Recommended Posts

Posted

I'm a developer by trade but just recently picked up Java/Minecraft Modding, so I'm still relatively new to this.

 

I'm trying to replicate the Dark Glass block from the Extra Utilities mod. I have the block rendering in the game, however, when placed, all adjacent blocks are missing their textures and show a gap in the world. This can be fixed by adding

.notSolid()

to the properties of the block, but at that point, the block lets light through. My desired effect is to have a translucent block (think stained glass but darker) that you can see through, but that doesn't let light through. 

Here's my code for the Block's class:

public class DarkGlassBlock extends Block {
    public DarkGlassBlock() {
        super(Properties.create(Material.GLASS)
                .hardnessAndResistance(1.0f, 50.0f)
                .sound(SoundType.GLASS)
                .harvestLevel(1)
                .harvestTool(ToolType.PICKAXE));
    }
}

And code to set the Render Layer to Translucent (in my FMLClientSetupEvent method):

RenderTypeLookup.setRenderLayer(RegistryHandler.DARK_GLASS_BLOCK.get(), RenderType.getTranslucent());

I also attached a screenshot that better demonstrates the issue.

 

Thanks in advance!

Side note -- Does anybody know of any updated tutorials for mod development? A lot of resources that seem great appear to be outdated for 1.16 development. 

Screenshot 2020-11-27 210516.png

Posted

You can override certain methods to disable light passthrough. Specifically, setting Block#propagatesSkylightDown to false will disable light passing through the block iirc.

  On 11/28/2020 at 2:18 AM, DonutPixel said:

Does anybody know of any updated tutorials for mod development? A lot of resources that seem great appear to be outdated for 1.16 development. 

Expand  

None that I would recommend. You can still use old tutorials like those of McJty with a little bit of care, but most of them should still be relevant. You can read this to get a small rundown of some changes:

 

  • Like 1
Posted
  On 11/28/2020 at 2:18 AM, DonutPixel said:

I'm a developer by trade but just recently picked up Java/Minecraft Modding, so I'm still relatively new to this.

 

I'm trying to replicate the Dark Glass block from the Extra Utilities mod. I have the block rendering in the game, however, when placed, all adjacent blocks are missing their textures and show a gap in the world. This can be fixed by adding

.notSolid()

to the properties of the block, but at that point, the block lets light through. My desired effect is to have a translucent block (think stained glass but darker) that you can see through, but that doesn't let light through. 

 

 

Side note -- Does anybody know of any updated tutorials for mod development? A lot of resources that seem great appear to be outdated for 1.16 development. 

 

Expand  

Howdy

 

That might be tricky depending on what you're trying to achieve; it will make blocks under your glass appear dark?

 

It will probably help to dig through the vanilla code for notSolid and the vanilla calculations for light propagation, with any luck you will find a combination of properties that achieves what you want without messing up rendering effects like ambient occlusion or the rendering culling (the "see through portal" effect you discovered).

 

AbstractGlassBlock is a good place to start, glass already reduces the light passing through it by a certain amount (like water as well, from memory) so that may be a further clue.

 

Re tutorials-

You might find this tutorial project (working examples) useful; it's currently at 1.16.4

https://github.com/TheGreyGhost/MinecraftByExample

http://greyminecraftcoder.blogspot.com/2020/05/minecraft-by-example.html

 

-TGG

 

 

 

 

 

 

 

 

 

  • Like 1
Posted
  On 11/28/2020 at 6:25 AM, ChampionAsh5357 said:

You can override certain methods to disable light passthrough. Specifically, setting Block#propagatesSkylightDown to false will disable light passing through the block iirc.

None that I would recommend. You can still use old tutorials like those of McJty with a little bit of care, but most of them should still be relevant. You can read this to get a small rundown of some changes:

 

Expand  

That guide is fantastic; thanks for the link!

  On 11/28/2020 at 11:40 AM, TheGreyGhost said:

Howdy

 

That might be tricky depending on what you're trying to achieve; it will make blocks under your glass appear dark?

 

It will probably help to dig through the vanilla code for notSolid and the vanilla calculations for light propagation, with any luck you will find a combination of properties that achieves what you want without messing up rendering effects like ambient occlusion or the rendering culling (the "see through portal" effect you discovered).

 

AbstractGlassBlock is a good place to start, glass already reduces the light passing through it by a certain amount (like water as well, from memory) so that may be a further clue.

 

Re tutorials-

You might find this tutorial project (working examples) useful; it's currently at 1.16.4

https://github.com/TheGreyGhost/MinecraftByExample

http://greyminecraftcoder.blogspot.com/2020/05/minecraft-by-example.html

 

-TGG 

 

 

 

 

 

 

 

 

 

Expand  

I actually found your project a little earlier this morning; great stuff!

 

Posted (edited)

If anyone was curious; I ended up actually finding source code for ExtraUtilities and found that the original developer was manually setting the opacity of the block to 255. That was done in 1.12.2, so the translation is a little different for 1.16.2. Anyways, I'd be mad if I came across this post as solved without an answer, so here's a detailed answer/explanation:

 

To make a block see-through, but not let light through, you must override the getOpacity method and make it return 255. This makes the block "opaque," while still allowing the player to see through.

 

To solve rendering culling issues, you must also override the isSideInvisible method, and make it return true only if the adjacentBlockState matches this block's state. 

 

In code, the following two overrides look like this:

@Override
public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, direction side) {
	// if the adjacentBlock is this block, side should be invisible. else, false
	return adjacentBlockState.isIn(this) ? true : false;
}

@Override
public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) {
	// NOTE: I'm not sure if this really has to be 255, or if there's a lower value at which this blocks all light.
	return 255;
}

Additionally, in the creation of the Block's properties, you should tack .notSolid() onto the list.

Edited by DonutPixel
Posted
  On 11/28/2020 at 4:48 PM, ChampionAsh5357 said:

Code Style 6. OnlyIn is used as a stripper to create the forge universal and server jars from one repository. Using it is more or less declaring that you didn't make sure your logic was only available to a certain physical side. In this case, it is completely unnecessary. 

Expand  

Thank you for the tip; I'll edit my code so as to not mislead other folks. 

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

    • Same issue without voicechat?
    • Start by following the docs to get a workspace setup: https://docs.minecraftforge.net/en/latest/gettingstarted/ Then poke around some of the tutorials, https://www.mcjty.eu/docs/1.20/ used to be the goto, but not sure if there are any updates for regular forge or not, but if you've brushed up on Java, it will be enough to get you started. Poke around the Minecraft and Forge sources to see how things are done. Read the FAQ for information on how to post code/logs when you run into issues. Share as much info on issues you have as possible. Use github to host projects, chances of someone helping are higher when they can actually see all your code and/or build it themselves. And finally, keep it on the forums, don't direct message people with questions, most people do not provide personal support like that. Also keep in mind forums posts are not always immediately answered, if you're looking for a quicker response, you can always try the Minecraft Forge discord server.
    • Hello, I have a Forge Minecraft sever (I host it at g-portal.com) which has always worked fine and I had no problems, but today it doesn't wanna work anymore. Today I started the server and the status said online, but after a few seconds it said this: "Start failed". And then out of nowhere it restarted itself and the same thing happened again and again and now it's in an infinite loop where it just keeps failing and then restarts. Here's the download link for the server logs: https://www.mediafire.com/file/sq30dgoonjevib1/2025-07-06-1.log/file Does anyone know how to fix this? If yes I would really appreciate help. Best wishes, Gabs1107
    • I'm experiencing a critical issue on a dedicated Arch Linux server running the latest Forge for Minecraft 1.20.1. When a player exits a Nether portal (not enters, and not via /tp) or teleports into the End via portal, the server completely freezes for 1–10 minutes. During this time, all commands are unresponsive, and the game world essentially locks up. This is with watchdog disabled. Environment: OS: Arch Linux (latest packages) Java: OpenJDK 17 (up to date) Forge Version: Latest 1.20.1 (tested multiple versions from the past ~3 months) Mods: None (issue occurs on a clean install) Server Type: Proxmox VM with: 4 virtual cores 64 GB RAM (63 GB allocated via -Xmx and -Xms flags) Observed Behavior: Observed Behavior: The server freezes for 1–10 minutes when: Exiting a Nether portal (entering does not trigger the issue) Entering or exiting the End using a portal Teleporting using commands (e.g., /tp) works only for the Nether; teleporting to the End via command also causes a freeze The issue occurs anywhere in the world, not tied to specific coordinates or builds During the freeze: The server becomes completely unresponsive to all commands and player actions No crash reports, no errors, and no warnings are logged CPU usage remains under 50%, and RAM usage stays around 6–14 GB After 1–10 minutes, the server recovers automatically and resumes normal operation
  • Topics

×
×
  • Create New...

Important Information

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