# Gepardius

Members

34

1. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Okay, I will research it. Thank you for the help and pointers, I really appreciate it.
2. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Aha, found it. Do you by any chance have a saved use case? I understand that you give it the opposite corners, but I don't know how I would get X, Y and Z for each block inside the shape, so that I would pass it into the first below line, BlockPos blockToRemove = new BlockPos(x, y, z); level.setBlock(blockToRemove, Blocks.WATER.defaultBlockState(), 1); instead of looping for each x, y, z as I do now.
3. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Hmmm... I couldn't find the method. I solved it with getDirection() that the player is facing, offsetting x/z and looping. And its working as it should. However, Mojang most definitely has predefined shapes that could be used, since I would love to use a Spiral/and ball shape in the future, but I just can't find it.
4. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Okay I understand. At the moment I am fine with only 1 user, since I'm only just learning and I don't plan on scaling it too big. If I do in the future, I will hopefully be a lot more experienced by then and will know what and why I'm doing things. Now I'm figuring out how to remove from both sides of the selected block equally. (ex. if middle block is 000, to remove 001, 000 and 00-1 etc.)
5. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Thank you with the blockMutable help. Yes you are right, I should reset the coordinates, otherwise z and y are always just going up. I'm resetting the coordinates now: BlockPos blockToRemove = new BlockPos(x, y, z); for(int i = 0; i < nOfBlocks; i++) { for(int ii = 0; ii < nOfBlocks; ii++){ for(int iii = 0; iii < nOfBlocks; iii++){ blockToRemove = new BlockPos(x, y, z); level.removeBlock(blockToRemove, true); // System.out.println(x + " " + y + " " + z); z += 1; } z = z_pos; y += 1; } y = y_pos; x += 1; } And am applying these changes server and client side, so the blocks are instantly removed now (even 50x50x50). However, I'm not using mutableBlock, since I don't quite understand how it works just yet. Is the performance better than what I'm using?
6. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Thank you for taking the time to answer. I must be doing something wrong, but I will not bother you anymore, since it's my lack of Java knowledge and experience that it's the issue. At the moment I have: BlockPos.MutableBlockPos blockMutable = new BlockPos.MutableBlockPos(); BlockPos blockToRemove = new BlockPos(x, y, z); for(int i = 0; i < 3; i++) { for(int ii = 0; ii < 3; ii++){ for(int iii = 0; iii < 3; iii++){ level.removeBlock(blockToRemove, true); blockMutable.move((int)x, (int)y, (int)z); blockToRemove = new BlockPos(x, y, z); z += 1; } y += 1; } x += 1; } Just curious, what would be different/easier with using the "index values"?
7. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

I know Python & VBA, have just started with Java, so the syntax is a bit new to me, but atm I am not struggling with syntax, but with what method to call for certain task... BlockPos.MutableBlockPos how does it work?
8. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

Great thank you! It's just taking slowly taking the time to remove blocks and visibly only 1 is removed. Maybe a dumb question, but is there a way to also refresh the server on click, so that the blocks are instantly removed?
9. ## Destroy / Remove blocks (10x10x10) when the block is clicked with an item.

I have an item which when useOn-ed should remove the block/change it to AIR. I am using the line below: level.removeBlock(positionClicked, false); Once I run the client, the block is briefly removed and then reappears. I've also tried removing the block with: level.destroyBlock(positionClicked, false); level.setBlock(positionClicked, Blocks.AIR.defaultBlockState(), 1); My guess is that I am not registering something correctly/the removed blocks are not applied to the client. My full code: public class TeleportationItem extends Item { public TeleportationItem(Properties pProperties) { super(pProperties); } @Override public InteractionResult useOn(UseOnContext pContext) { Level level = pContext.getLevel(); if (level.isClientSide){ BlockPos blockpos = pContext.getClickedPos(); BlockState blockstate = level.getBlockState(blockpos); BlockPos positionClicked = pContext.getClickedPos(); Player player = pContext.getPlayer(); double x_pos = positionClicked.getX(); double y_pos = positionClicked.getY(); double z_pos = positionClicked.getZ(); double x = positionClicked.getX(); double y = positionClicked.getY(); double z = positionClicked.getZ(); Boolean isLevelClientSide = level.isClientSide(); for(int i = 0; i < 10; i++){ x += 1; for(int ii = 0; ii < 10; ii++){ y += 1; for(int iii = 0; iii < 10; iii++){ BlockPos blockToRemove = new BlockPos(x, y, z); level.removeBlock(blockToRemove, false); z += 1; } } } String text = "clicked block " + " " + x_pos + " " + y_pos + " " + z_pos + " " + blockstate + " " + isLevelClientSide; player.sendMessage(new TextComponent(text), player.getUUID()); return super.useOn(pContext); } return super.useOn(pContext); } } Any help would be greatly appreciated.
×

• #### Activity

×
• Create New...