Posted July 1, 20196 yr Hi All, I'm trying to create a custom glass block. Here is the basic code: package com.kwpugh.gobber2.blocks; import net.minecraft.block.GlassBlock; public class BlockGobberGlass extends GlassBlock { public BlockGobberGlass(Properties properties) { super(properties); } } I thought that creating a block that extends GlassBlock would give my glass block all of the properties of its parent and above, such as being transparent, which it is not. The sides are black. In Game Result Any thoughts on what I'm doing wrong here? Regards.
July 1, 20196 yr Are you sure that your texture has transparent areas? Could be missing an alpha channel in the PNG.
July 1, 20196 yr Check also what properties are being passed to the vanilla block's constructor. Oh and if you're going to do fuckall custom code, you don't need your own class. Just call new on GlassBlock directly. Edited July 1, 20196 yr by Draco18s 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.
July 1, 20196 yr Author I'm going to add custom methods that allow players to walk through but no mobs. Also, a higher tier of the glass with prohibit spider climbing and be wither proof. I kept my post simple because the basics were not working the way they did in my 1.12.2 code. I found the problem, I was not calling the correct "new BlockGobberGlass" .
July 1, 20196 yr Author Hi, In 1.12.2, I was using AxisAlignedBB for working with collision boxes on my glass. Should I be using VoxelShapes in 1.14.3? If yes, are there any documents on the basics of VoxelShapes? I have been looking through the reference source and I am not really understanding it. Question: I presume that instances of GlassBlock have a solid collision box? I'm trying to make that conditional, depending on the entity type colliding with it? How does one remove the collision box on a block? Thank you in advance. Regards.
July 10, 20196 yr On 7/2/2019 at 1:59 AM, kwpugh said: Should I be using VoxelShapes in 1.14.3? Yes On 7/2/2019 at 1:59 AM, kwpugh said: If yes, are there any documents on the basics of VoxelShapes? You can create them with VoxelShapes.create. On 7/2/2019 at 1:59 AM, kwpugh said: I presume that instances of GlassBlock have a solid collision box? Yes On 7/2/2019 at 1:59 AM, kwpugh said: I'm trying to make that conditional, depending on the entity type colliding with it? You can do it by checking the entity in the context passed into getCollisionShape. On 7/2/2019 at 1:59 AM, kwpugh said: How does one remove the collision box on a block? return VoxelShapes.empty() from getCollisionShape or calling doesNotBlockMovement on the Block.Properties you pass in to your block. About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
July 10, 20196 yr Author Hi, Thanks. I'm trying your suggestions. Question: does getCollisionShape replace the deprecated onEntityCollision?
July 11, 20196 yr 5 hours ago, kwpugh said: does getCollisionShape replace the deprecated onEntityCollision No About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
July 12, 20196 yr Author Hello Again, I am still trying work through this. I found that the LilyPadBlock class still uses the onEntityCollison, so I started to pattern my custom glass block on that. It is not working. I suspect that I am not fully understanding exactly how VoxelShapes work. Here is my current class for a custom glass block. package com.kwpugh.gobber2.blocks; import java.util.List; import javax.annotation.Nullable; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.GlassBlock; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class BlockGobberGlass extends GlassBlock { public BlockGobberGlass(Properties properties) { super(properties); } @SuppressWarnings("deprecation") public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { ISelectionContext context = (ISelectionContext) entityIn; super.onEntityCollision(state, worldIn, pos, entityIn); entityIn.sendMessage(new StringTextComponent("Collision occured")); getShape(state, worldIn, pos, context); } public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { if(context instanceof PlayerEntity) { return VoxelShapes.empty(); } else { return VoxelShapes.fullCube(); } } @OnlyIn(Dist.CLIENT) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag) { super.addInformation(stack, world, tooltip, flag); tooltip.add(new StringTextComponent(TextFormatting.BLUE + "A very sturdy glass block")); tooltip.add(new StringTextComponent(TextFormatting.GREEN + "Drops the block when broken")); } } Please keep in mind that I am pretty new to Java and continue to work my way through a large Udemy course (77+ hours). Big question: I am not quite clear about the relationship between AxisAlignedBB and VoxelShapes. - Which one actually controls the properties of a given block's bounding box. - What is the difference between a block's bounding box and collision box? Is there a difference? - is a return of VoxelShapes.empty() and VoxelShapes.fullCube() intended to have an empty BB and a full BB respectively? - Am I using the selectionContext interface correctly? Thank you in advance for any guidance. Regards. [EDIT] I am also confused by when to use VoxelShape and VoxelShapes. Edited July 12, 20196 yr by kwpugh
July 12, 20196 yr Author Ok, so I actually got it working as I wanted, but it seems like a very contrived way to accomplished it. Feedback to simplify are welcome. package com.kwpugh.gobber2.blocks; import java.util.List; import javax.annotation.Nullable; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.GlassBlock; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public class BlockGobberGlass extends GlassBlock { public BlockGobberGlass(Properties properties) { super(properties); } public static final VoxelShape GLASS_NOT_SOLID_AABB = Block.makeCuboidShape(0.0D, 0.0D, 0.00D, 0.0D, 0.0D, 0.0D); public static final VoxelShape GLASS_SOLID_AABB = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D); public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { if( (context.getEntity() instanceof PlayerEntity) && (context.getEntity().isSneaking()) ) { return GLASS_SOLID_AABB; } if(context.getEntity() instanceof PlayerEntity) { return GLASS_NOT_SOLID_AABB; } else { return GLASS_SOLID_AABB; } } public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { if( (context.getEntity() instanceof PlayerEntity) && (context.getEntity().isSneaking()) ) { return GLASS_SOLID_AABB; } if(context.getEntity() instanceof PlayerEntity) { return GLASS_NOT_SOLID_AABB; } else { return GLASS_SOLID_AABB; } } public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { //entityIn.attackEntityFrom(DamageSource.CACTUS, 1.0F); } @OnlyIn(Dist.CLIENT) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag) { super.addInformation(stack, world, tooltip, flag); tooltip.add(new StringTextComponent(TextFormatting.BLUE + "A very sturdy glass block")); tooltip.add(new StringTextComponent(TextFormatting.GREEN + "Drops the block when broken")); } } My question now is how to conditionally change block properties (ex. if entity is a spider then setBesideClimbableBlock to false).
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.