Jump to content

[SOLVED] [1.15.2] Block model culling issue?


IceMetalPunk

Recommended Posts

I'm having some trouble with the model of a new block I've added in a mod I'm developing. The block is basically supposed to look like an upside-down composter in shape, with different textures. It can be filled, which is tied to a tile entity that updates its block state. The F3 menu shows that the block state is updating correctly as it fills, but even at state level=9, it never renders the "scarlet smoke" inside. I've gotten a similar block to work just fine right-side up without transparency, but this one (which uses the "translucent" render layer) isn't rendering the inner contents. (It also looks like there may be some weird rendering along the edge of the open face, but that's more minor.)

 

I basically copied the model for my working right-side-up block, which in turn was slightly modified from the vanilla composter model. I then tried to modify the numbers and such to "flip it" so the open side was at the bottom instead of the top, and that's when things went wrong. I'm not sure if I have culling settings wrong, or if I've miscalculated the numbers for the vertices... I just know I can't get it to render right.

 

Here's the blockstate, model, and texture files: https://www.dropbox.com/s/06vcd8kdd6yi3et/SA_Models.zip?dl=1

 

Can someone help me figure out where I've gone wrong? Rendering/modeling/art has never been my strong suit in any development...

Edited by IceMetalPunk
Solved

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

Hi

 

My guess:

{
    "textures": {
        "particle": "scarlet_alchemy:block/scarlet_smoke_0",
        "inside": "scarlet_alchemy:block/scarlet_smoke_0"
    },
    "elements": [
        {   "from": [ 2, 0, 2 ],
            "to": [ 14, 15, 14 ],
            "faces": {
                "up": { "texture": "#inside", "cullface": "up" }
            }
        }
    ]
}

If you are trying to look at the inside from the bottom of the composter instead of the top, then you should be using "down", not "up".

An "up" face with "cullface:up" is invisible from the bottom.  It's only visible from the top side of the face, which I'm guessing is inside your block.

-TGG

  • Like 1
Link to comment
Share on other sites

On 4/3/2020 at 8:08 PM, TheGreyGhost said:

Hi

 

My guess:


{
    "textures": {
        "particle": "scarlet_alchemy:block/scarlet_smoke_0",
        "inside": "scarlet_alchemy:block/scarlet_smoke_0"
    },
    "elements": [
        {   "from": [ 2, 0, 2 ],
            "to": [ 14, 15, 14 ],
            "faces": {
                "up": { "texture": "#inside", "cullface": "up" }
            }
        }
    ]
}

If you are trying to look at the inside from the bottom of the composter instead of the top, then you should be using "down", not "up".

An "up" face with "cullface:up" is invisible from the bottom.  It's only visible from the top side of the face, which I'm guessing is inside your block.

-TGG

Thank you! I think I'm starting to understand how culling and face definitions work a little better now. I've gotten my block to look nearly perfect. The only issue I'm having now is that when I place this block above a solid block, like grass, the block below culls its top face, which you can see through the transparent parts of my block's texture. This doesn't happen with vanilla transparent blocks, like glass, but I can't figure out what I need to specify to stop that from happening with mine. The vanilla glass blocks don't seem to have any special settings in their models for this, so I thought it must be code related, but I've copied the methods from AbstractGlassBlock that I thought were related to rendering, and it still has this issue.

 

Here's the new models: https://www.dropbox.com/s/zl9x3ok7ipx649q/SA_Models_2.zip?dl=1

 

And here's the code for the ScarletCollectorBlock class:

 

package com.icemetalpunk.scarlet_alchemy.blocks;

import java.util.HashSet;

import com.icemetalpunk.scarlet_alchemy.ScarletAlchemy;
import com.icemetalpunk.scarlet_alchemy.tiles.SATileEntityProvider;
import com.icemetalpunk.scarlet_alchemy.tiles.ScarletCollectorTileEntity;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.state.IntegerProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.registries.IForgeRegistry;

public class ScarletCollectorBlock extends Block implements SABlock, SATileEntityProvider {
	/*
	 * FIXME: Model has broken/weird culling, making the filled smoke invisible
	 * among other issues.
	 */

	protected SABlockAbilities blockAbilities = new SABlockAbilities(this);
	public static TileEntityType<?> teType;
	public static final IntegerProperty SMOKE_LEVEL = IntegerProperty.create("level", 0, 9);

	public ScarletCollectorBlock() {
		super(Block.Properties.create(Material.ROCK).hardnessAndResistance(3.5F));
		this.setRegistryName(new ResourceLocation(ScarletAlchemy.MOD_ID, "scarlet_collector"));
		this.setDefaultState(this.stateContainer.getBaseState().with(SMOKE_LEVEL, Integer.valueOf(0)));
	}

	@Override
	protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
		builder.add(SMOKE_LEVEL);
	}

	@Override
	public boolean hasTileEntity(BlockState state) {
		return true;
	}

	@Override
	public TileEntity createTileEntity(final BlockState state, final IBlockReader world) {
		return new ScarletCollectorTileEntity();
	}

	@OnlyIn(Dist.CLIENT)
	public float func_220080_a(BlockState state, IBlockReader worldIn, BlockPos pos) {
		return 1.0F;
	}

	public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) {
		return true;
	}

	public boolean func_229869_c_(BlockState p_229869_1_, IBlockReader p_229869_2_, BlockPos p_229869_3_) {
		return false;
	}

	public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
		return false;
	}

	@Override
	public ActionResultType func_225533_a_(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
			BlockRayTraceResult rayTraceResult) {
		// TOOD: Add right-click functionality?
		return ActionResultType.PASS;
	}

	@Override
	public boolean hasBlockItem() {
		return this.blockAbilities.hasBlockItem();
	}

	@Override
	public BlockItem createBlockItem() {
		return this.blockAbilities.createBlockItem(new Item.Properties().maxStackSize(64));
	}

	@Override
	public void registerItem(IForgeRegistry<Item> reg) {
		this.blockAbilities.registerItem(reg);
	}

	@Override
	public void registerTileEntity(IForgeRegistry<TileEntityType<? extends TileEntity>> reg) {
		HashSet<Block> blockSet = new HashSet<Block>();
		blockSet.add(this);
		teType = (new TileEntityType<ScarletCollectorTileEntity>(() -> new ScarletCollectorTileEntity(), blockSet,
				null)).setRegistryName(this.getRegistryName());
		reg.register(teType);
	}
}

I know some of those methods are missing their mappings; that's how they are in my copy of the AbstractGlassBlock class as well. Not sure why, but it seemed to work for another block of mine (scarlet smoke, a full translucent block), so I copied it over.

 

I wondered if it was related to the material, but I tried using Material.GLASS instead of Material.ROCK and it still culled the top of the block below mine.

 

Any suggestions?

 

EDIT: I also found the isOpaqueCube method, but it seems that method is final and can't be overridden, so I'm not sure if there's something I need to do to work with that or not. I know vanilla glass blocks don't touch that, though, and they work, so... yeah, I'm lost :| 

Edited by IceMetalPunk

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

3 hours ago, IceMetalPunk said:

Any suggestions?

RenderTypeLookup.setRenderLayer and RenderLayer.getCutoutMipped is the one you will want i think.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

3 minutes ago, Animefan8888 said:

RenderTypeLookup.setRenderLayer and RenderLayer.getCutoutMipped is the one you will want i think.

I'm already using the setRenderLayer method, but I'm setting it to the translucent layer. It needs to show the inner contents with an alpha channel (which it now is), so I can't use the cutout layer. I see vanilla stained glass blocks, ice blocks, etc. use the translucent layer as well, so shouldn't that do the job?

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

16 hours ago, TheGreyGhost said:

Hi

Perhaps try the notSolid() property, I think that's how glass does it.


   public static final Block GLASS = register("glass", new GlassBlock(Block.Properties.create(Material.GLASS).hardnessAndResistance(0.3F).sound(SoundType.GLASS).notSolid()));

-TGG

Yes! That was the missing piece, thank you so much! I could have sworn that method was related to movement, not rendering, probably because the field it clears is also cleared in the doesNotBlockMovement method... I guess it's just by default that things which don't block movement aren't considered to be solid renders, either.

Anyway, thanks again, I'm glad this is finally solved :)

Whatever Minecraft needs, it is most likely not yet another tool tier.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Baba  Serege [[+27-73 590 8989]] has experience of 27 years in helping and guiding many people from all over the world. His psychic abilities may help you answer and resolve many unanswered questions. He specialize in helping women and men from all walks of life.. 1) – Bring back lost lover. even if lost for a long time. 2) – My lover is abusing alcohol, partying and cheating on me I urgently need help” 3) – Divorce or court issues. 4) – Is your love falling apart? 5) – Do you want your love to grow stronger? 6) – Is your partner losing interest in you? 7) – Do you want to catch your partner cheating on you? – We help to keep your partner faithful and loyal to you. 9) – We recover love and happiness when relationship breaks down. 10) – Making your partner loves you alone. 11) – We create loyalty and everlasting love between couples. 12) – Get a divorce settlement quickly from your ex-partner. 13) – We create everlasting love between couples. 14) – We help you look for the best suitable partner. 15) – We bring back lost lover even if lost for a long time. 16) – We strengthen bonds in all love relationship and marriages 17) – Are you an herbalist who wants to get more powers? 18) – Buy a house or car of your dream. 19) – Unfinished jobs by other doctors come to me. 20) – I help those seeking employment. 21) – Pensioners free treatment. 22) – Win business tenders and contracts. 23) – Do you need to recover your lost property? 24) – Promotion at work and better pay. 25) – Do you want to be protected from bad spirits and nightmares? 26) – Financial problems. 27) – Why you can’t keep money or lovers? 28) – Why you have a lot of enemies? 29) – Why you are fired regularly on jobs? 30) – Speed up money claim spell, delayed payments, pension and accident funds 31) – I help students pass their exams/interviews. 33) – Removal of bad luck and debts. 34) – Are struggling to sleep because of a spiritual wife or husband. 35- ) Recover stolen property
    • OLXTOTO adalah situs bandar togel online resmi terbesar dan terpercaya di Indonesia. Bergabunglah dengan OLXTOTO dan nikmati pengalaman bermain togel yang aman dan terjamin. Koleksi toto 4D dan togel toto terlengkap di OLXTOTO membuat para member memiliki pilihan taruhan yang lebih banyak. Sebagai situs togel terpercaya, OLXTOTO menjaga keamanan dan kenyamanan para membernya dengan sistem keamanan terbaik dan enkripsi data. Transaksi yang cepat, aman, dan terpercaya merupakan jaminan dari OLXTOTO. Nikmati layanan situs toto terbaik dari OLXTOTO dengan tampilan yang user-friendly dan mudah digunakan. Layanan pelanggan tersedia 24/7 untuk membantu para member. Bergabunglah dengan OLXTOTO sekarang untuk merasakan pengalaman bermain togel yang menyenangkan dan menguntungkan.
    • Baba  Serege [[+27-73 590 8989]] has experience of 27 years in helping and guiding many people from all over the world. His psychic abilities may help you answer and resolve many unanswered questions. He specialize in helping women and men from all walks of life.. 1) – Bring back lost lover. even if lost for a long time. 2) – My lover is abusing alcohol, partying and cheating on me I urgently need help” 3) – Divorce or court issues. 4) – Is your love falling apart? 5) – Do you want your love to grow stronger? 6) – Is your partner losing interest in you? 7) – Do you want to catch your partner cheating on you? – We help to keep your partner faithful and loyal to you. 9) – We recover love and happiness when relationship breaks down. 10) – Making your partner loves you alone. 11) – We create loyalty and everlasting love between couples. 12) – Get a divorce settlement quickly from your ex-partner. 13) – We create everlasting love between couples. 14) – We help you look for the best suitable partner. 15) – We bring back lost lover even if lost for a long time. 16) – We strengthen bonds in all love relationship and marriages 17) – Are you an herbalist who wants to get more powers? 18) – Buy a house or car of your dream. 19) – Unfinished jobs by other doctors come to me. 20) – I help those seeking employment. 21) – Pensioners free treatment. 22) – Win business tenders and contracts. 23) – Do you need to recover your lost property? 24) – Promotion at work and better pay. 25) – Do you want to be protected from bad spirits and nightmares? 26) – Financial problems. 27) – Why you can’t keep money or lovers? 28) – Why you have a lot of enemies? 29) – Why you are fired regularly on jobs? 30) – Speed up money claim spell, delayed payments, pension and accident funds 31) – I help students pass their exams/interviews. 33) – Removal of bad luck and debts. 34) – Are struggling to sleep because of a spiritual wife or husband. 35- ) Recover stolen property
  • Topics

×
×
  • Create New...

Important Information

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