
Construction paste on left, normal slabs on right.
I've tried many different ways to resolve this, and couldn't figure it out. Anyone who has any ideas is more than welcome to chime in heh :)
I messed around with this for a bit. The closest thing I could find to making the lighting normal was making Block#getUseNeighborBrightness return true. I thought I would share to see if this would help lead you in the right direction. Images are below for reference.
Without Method (Normal)

With Method

@MiningMark48 is correct about the root of the problem. The return value of IBlockProperties#useNeighborBrightness is ultimately determined by Block#useNeighborBrightness.
I explain more about what 'useNeighborBrightness' does here:
https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/minecraft-mods/2576750-chisels-bits-flat-colored-blocks?page=28#c551
It may very well be worth adding a 'useNeighborBrightness' property to your block state, which will yield the result @MiningMark48 posted above. It's up to you, @Direwolf20-MC.
As for why that still doesn't make it look exactly the same in the case of slabs, the reason is due to the difference in ambient occlusion values. IBlockProperties#getAmbientOcclusionLightValue's return value is ultimately determined by Block#isFullCube and the block's Material#blocksMovement, where as IBlockProperties#getLightOpacity's return value is ultimately determined by Block#isOpaqueCube.
You are using the return value of IBlockProperties#getLightOpacity to approximate both light opacity and ambient occlusion (which I think is a good idea). This usually works fine, but can lead to inaccuracies in a few cases:

I'm not sure that such minor inaccuracies in so few cases warrants giving ambient occlusion its own property; the current approximation almost always results in the exactly correct value anyway.
I toyed with overwriting this, but since IBlockProperties#useNeighborBrightness doesn't have access to world/pos I can't figure out the block state i'm mimicing in this method like I do the others. It may not be fixable short of making it always true - which I'm not sure if thats a good idea either :(. It seems to be false way more often than true. Unless I can set that bool randomly in some other method, which i'm hesitant to do.
You don't need world/pos. What you're already doing is calling Block#getLightOpacity in ConstructionBlockEntity#setDespawning to determine how set the ConstructionBlock#BRIGHT bool property, and then returning that value in ConstructionBlock#getLightOpacity (which has world/pos, but you don't use them) and ConstructionBlock#getAmbientOcclusionLightValue (which doesn't have world/pos).
All you need to do is call Block#getUseNeighborBrightness in ConstructionBlockEntity#setDespawning to determine how to set a new ConstructionBlock#NEIGHBOR_BRIGHTNESS bool property, and then return that value in ConstructionBlock#getUseNeighborBrightness.
Ohh gotcha, I hadn't considered using another blockstate. I see how you did it in your PR and that makes sense :).
Thanks @Phylogeny for the pull request, i also added the below commit, which makes them look identical now! WOOT! :)
https://github.com/Direwolf20-MC/BuildingGadgets/commit/b7a9e5a7869ec59886f5e7983998f619152ac224
Sweet! :smiley:
Awesome :D
Yay
And for the rhyme,
sing and chime,
Hooray!
Most helpful comment
@MiningMark48 is correct about the root of the problem. The return value of IBlockProperties#useNeighborBrightness is ultimately determined by
Block#useNeighborBrightness.I explain more about what 'useNeighborBrightness' does here:
https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/minecraft-mods/2576750-chisels-bits-flat-colored-blocks?page=28#c551
It may very well be worth adding a 'useNeighborBrightness' property to your block state, which will yield the result @MiningMark48 posted above. It's up to you, @Direwolf20-MC.
As for why that still doesn't make it look exactly the same in the case of slabs, the reason is due to the difference in ambient occlusion values.
IBlockProperties#getAmbientOcclusionLightValue's return value is ultimately determined byBlock#isFullCubeand the block'sMaterial#blocksMovement, where asIBlockProperties#getLightOpacity's return value is ultimately determined byBlock#isOpaqueCube.You are using the return value of

IBlockProperties#getLightOpacityto approximate both light opacity and ambient occlusion (which I think is a good idea). This usually works fine, but can lead to inaccuracies in a few cases:I'm not sure that such minor inaccuracies in so few cases warrants giving ambient occlusion its own property; the current approximation almost always results in the exactly correct value anyway.