GyuGya_55 Posted August 31, 2019 Share Posted August 31, 2019 (edited) Solution for the next gen who stumble upon this thread. Solution provided by Simon_kungen: public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos position, ISelectionContext context) { return Block.makeCuboidShape(xMin, yMin, zMin, xMax, yMax, zMax); //all decimals } The boundingbox of my block isn't what I set it. I'm a newby and after 2 days of trying I still couldn't find the problem. I would really appreciate if someone could halp me out a bit. Here is the blocks class. package com.gyugya55.mymod.blocks; import javax.annotation.Nullable; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.Direction; 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.world.IBlockReader; import net.minecraft.world.World; public class Abacus extends Block { public Abacus() { super(Properties.create(Material.WOOD) .sound(SoundType.WOOD) .hardnessAndResistance(0.1f,0.5f) .lightValue(0) ); setRegistryName("abacus"); } @Override public BlockRenderLayer getRenderLayer() { return BlockRenderLayer.CUTOUT_MIPPED; } @Override public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity entity, ItemStack stack) { if (entity != null) { world.setBlockState(pos, state.with(BlockStateProperties.FACING, getFacingFromEntity(pos, entity)), 2); } } public static Direction getFacingFromEntity(BlockPos clickedBlock, LivingEntity entity) { return Direction.getFacingFromVector((float) (entity.posX - clickedBlock.getX()), (float) (entity.posY - clickedBlock.getY()), (float) (entity.posZ - clickedBlock.getZ())); } @Override protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) { builder.add(BlockStateProperties.FACING); } @Override public boolean isNormalCube(BlockState state, IBlockReader reader, BlockPos position) { return false; } public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos position, ISelectionContext context) { return Block.makeCuboidShape( 0D, //x 0D, //y down 7D, //z 16D, //x 10.5D, //y up 9D //z ); } public AxisAlignedBB getBoundingBox() { return new AxisAlignedBB( 0D, 0D, 7D, 16D, 10.5D, 9D ); } } So this is the current bounding box of my object. And this is what im trying to achive. Edited September 1, 2019 by GyuGya_55 Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 31, 2019 Share Posted August 31, 2019 Some images would help understand the problem. Quote 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. Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 31, 2019 Share Posted August 31, 2019 1 hour ago, GyuGya_55 said: The boundingbox of my block isn't what I set it. I'm a newby and after 2 days of trying I still couldn't find the problem. I would really appreciate if someone could halp me out a bit. Minecraft has three different methods for the bounding box that all call getShape. So just override getShape Quote 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 More sharing options...
GyuGya_55 Posted September 1, 2019 Author Share Posted September 1, 2019 (edited) I edited the post with the pictures. My CollisionShape is working ony the BoundingBox not. Edited September 1, 2019 by GyuGya_55 Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted September 1, 2019 Share Posted September 1, 2019 6 minutes ago, GyuGya_55 said: ony the BoundingBox not. getBoundingBox isn't a method in the Block class. Whenever you override a method in a super class put the @Override annotation above the method. It will tell you if you are actually overriding the method. Also... 9 hours ago, Animefan8888 said: Minecraft has three different methods for the bounding box that all call getShape. So just override getShape Quote 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 More sharing options...
GyuGya_55 Posted September 1, 2019 Author Share Posted September 1, 2019 (edited) Quote getBoundingBox isn't a method in the Block class. Whenever you override a method in a super class put the @Override annotation above the method. It will tell you if you are actually overriding the method.Minecraft has three different methods for the bounding box that all call getShape. So just override getShape I tried to do it like this: public static final AxisAlignedBB AABB = new AxisAlignedBB( 0D, //x 0D, //y down 7D, //z 16D, //x 10.5D, //y up 9D //z ); @Override public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos position, ISelectionContext context) { return VoxelShapes.create(AABB); } But now I don't have any hitboxes. Edited September 1, 2019 by GyuGya_55 Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted September 1, 2019 Share Posted September 1, 2019 24 minutes ago, GyuGya_55 said: 7D Im pretty confident its on a 0-1 decimal scale so 7 is pretty big. Quote 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 More sharing options...
Draco18s Posted September 1, 2019 Share Posted September 1, 2019 7 hours ago, Animefan8888 said: Im pretty confident its on a 0-1 decimal scale so 7 is pretty big. When dealing with AABBs? Yes. VoxelShape on the other hand, ranges 0-16. The VoxelShape.create method that takes in an AABB multiplies it all by 16. Quote 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. Link to comment Share on other sites More sharing options...
Simon_kungen Posted September 1, 2019 Share Posted September 1, 2019 Not sure if you figured it out, but here is my solution: I did a more mechanical approach to this. I made four VoxelShape variables due to my block being centred to the side of a block and then I checked which direction the blockstate were and did a switch statement to return the correct orientation: //double x1, double y1, double z1, double x2, double y2, double z2 protected static final VoxelShape SHAPE_WEST = Block.makeCuboidShape(10.0D, 1.0D, 5.0D, 16.0D, 11.0D, 11.0D); protected static final VoxelShape SHAPE_EAST = Block.makeCuboidShape(0.0D, 1.0D, 5.0D, 6.0D, 11.0D, 11.0D); protected static final VoxelShape SHAPE_NORTH = Block.makeCuboidShape(5.0D, 1.0D, 10.0D, 11.0D, 11.0D, 16.0D); protected static final VoxelShape SHAPE_SOUTH = Block.makeCuboidShape(5.0D, 1.0D, 0.0D, 11.0D, 11.0D, 6.0D); @Override public VoxelShape getShape(BlockState state, IBlockReader blockReader, BlockPos pos, ISelectionContext selectionContext) { switch (state.get(HORIZONTAL_FACING)) { case WEST: return SHAPE_WEST; case EAST: return SHAPE_EAST; case SOUTH: return SHAPE_SOUTH; default: case NORTH: return SHAPE_NORTH; } } Because of your block being centred in the middle you only need to make two VoxelShape variables, one is for west and east and the other for north and south. @Override public VoxelShape getShape(BlockState state, IBlockReader blockReader, BlockPos pos, ISelectionContext selectionContext) { switch (state.get(HORIZONTAL_FACING)) { case EAST: case WEST: return SHAPE_WEST_EAST; case NORTH: case SOUTH: return SHAPE_SOUTH_NORTH; } } Quote Link to comment Share on other sites More sharing options...
GyuGya_55 Posted September 1, 2019 Author Share Posted September 1, 2019 Thank you guys very much. I'm so happy now. I was so dumb bcs I did VoxelShape.create instead of Block.makeCuboidShape... Thank Simon_kungen Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.