August 15, 20205 yr 5 minutes ago, NorthWestWind said: getCollisionShape just call getShape by default, overriding getShape also overrides getCollisionShape And thats why you need to override getShape and leave getCollisionShape as it is Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
August 15, 20205 yr Nevermind, i just made some tests, you can just override getCollisionShape without all that onEntityCollision stuff(even if it somehow worked). Still we are at the starting point again, by returning the full block collision shape in case your condition is not verified, the block pushes you back, and the only way i managed to get that working is still to return a voxel shape which is slightly smaller than the full cube as i showed earlier..why that works? i honestly still have to figure it out 🤔 Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
August 15, 20205 yr I've literally done this before. https://github.com/Draco18s/ReasonableRealism/blob/1.14.4/src/main/java/com/draco18s/industry/block/RailBridgeBlock.java#L71 I'm not overriding a vanilla block to do it, but I've still conditionally given a block a collision volume. 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.
August 15, 20205 yr Author That is just weird because the same thing works for other blocks that are not full cubes such as slabs, carpets, bamboo, stonecutter... Even glass panes work.
August 15, 20205 yr Author I changed the method to: public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return VoxelShapes.empty(); } And the block has no collision at all. That means there should be something wrong with my condition that causes the block switches between the state collidable and not collidable
August 15, 20205 yr Then show your condition code Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
August 16, 20205 yr Author public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { Entity entity = context.getEntity(); if(!(entity instanceof LivingEntity)) return super.getCollisionShape(state, worldIn, pos, context); ItemStack boots = ((LivingEntity) entity).getItemStackFromSlot(EquipmentSlotType.FEET); ResourceLocation registryName = boots.getItem().getRegistryName(); if(registryName == null || !registryName.getPath().equals("item_name")) return super.getCollisionShape(state, worldIn, pos, context); return VoxelShapes.empty(); } This is the inverted one. public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { Entity entity = context.getEntity(); if(entity instanceof LivingEntity) { ItemStack boots = ((LivingEntity) entity).getItemStackFromSlot(EquipmentSlotType.FEET); ResourceLocation registryName = boots.getItem().getRegistryName(); if(registryName != null && registryName.getPath().equals("item_name")) { return VoxelShapes.empty(); } } return super.getCollisionShape(state, worldIn, pos, context); } This is the one I made at the very beginning. I don't see the problem though. Edited August 16, 20205 yr by NorthWestWind
August 16, 20205 yr 32 minutes ago, NorthWestWind said: ResourceLocation registryName = boots.getItem().getRegistryName(); if(registryName != null && registryName.getPath().equals("item_name")) { Dude, create a field to hold a reference to your boots. Don't string compare! Also, the registry name will never be null. Trying to register an item with a null registry name throws an error. 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.
August 16, 20205 yr Author Quote Dude, create a field to hold a reference to your boots. Don't string compare! ok I'll change that Quote Also, the registry name will never be null. Trying to register an item with a null registry name throws an error. IntelliJ told me this and I just don't know
August 16, 20205 yr 58 minutes ago, NorthWestWind said: IntelliJ told me this and I just don't know Because the method isn't annotated as @NonNull. And this is because before SetRegistryName is called, it will return null, but once the game's running you can be sure that no registry name will ever be null. This is a case of being unable to tell the compiler that we don't need the check in a way that the compiler will be able to understand. 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.
August 16, 20205 yr Why don't you make a boolean property which if is true you can walk through the block and setting the boolean property to true for the blocks the player is looking at and if the entity (in this case the player) matches the condition i would do it like this it's not even hard to code
August 16, 20205 yr Author So, I created a HashMap to store whether the player can walk through blocks. In LivingUpdateEvent, the map is updated. And then, in the extended block, it reads the states of the player from the map and decides whether to have collision or not, but that still doesn't work
August 16, 20205 yr 9 hours ago, Crazzy4999 said: Why don't you make a boolean property which if is true you can walk through the block and setting the boolean property to true for the blocks the player is looking at and if the entity (in this case the player) matches the condition i would do it like this it's not even hard to code So the player can walk through the block only when actually looking at it? Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
August 16, 20205 yr 6 minutes ago, Beethoven92 said: So the player can walk through the block only when actually looking at it? Yes by what i wrote than now i realised that this Guy wants something else xd
August 16, 20205 yr By the way how about a player tick event and check the conditions and if the player is near the block
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.