fixed block breaking bug
This commit is contained in:
		| @@ -9,7 +9,7 @@ yarn_mappings=1.21.4+build.1 | |||||||
| loader_version=0.16.9 | loader_version=0.16.9 | ||||||
|  |  | ||||||
| # Mod Properties | # Mod Properties | ||||||
| mod_version=1.21.4.1 | mod_version=1.21.4.2 | ||||||
| maven_group=de.jottyfan.quickiemod | maven_group=de.jottyfan.quickiemod | ||||||
| archives_base_name=quickiemod | archives_base_name=quickiemod | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ import de.jottyfan.quickiemod.feature.ModFeatures; | |||||||
| import de.jottyfan.quickiemod.item.ModItems; | import de.jottyfan.quickiemod.item.ModItems; | ||||||
| import de.jottyfan.quickiemod.itemgroup.ModItemGroup; | import de.jottyfan.quickiemod.itemgroup.ModItemGroup; | ||||||
| import net.fabricmc.api.ModInitializer; | import net.fabricmc.api.ModInitializer; | ||||||
| import net.fabricmc.fabric.api.event.player.AttackBlockCallback; |  | ||||||
| import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; | import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; | ||||||
| import net.fabricmc.fabric.api.loot.v3.LootTableEvents; | import net.fabricmc.fabric.api.loot.v3.LootTableEvents; | ||||||
| import net.fabricmc.fabric.api.registry.CompostingChanceRegistry; | import net.fabricmc.fabric.api.registry.CompostingChanceRegistry; | ||||||
| @@ -22,8 +21,6 @@ import net.minecraft.item.Items; | |||||||
| import net.minecraft.loot.LootPool; | import net.minecraft.loot.LootPool; | ||||||
| import net.minecraft.loot.condition.SurvivesExplosionLootCondition; | import net.minecraft.loot.condition.SurvivesExplosionLootCondition; | ||||||
| import net.minecraft.loot.entry.ItemEntry; | import net.minecraft.loot.entry.ItemEntry; | ||||||
| import net.minecraft.util.ActionResult; |  | ||||||
| import net.minecraft.util.Identifier; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * |  * | ||||||
| @@ -70,12 +67,11 @@ public class Quickiemod implements ModInitializer { | |||||||
| 		ModItemGroup.registerItemGroup(items, blocks); | 		ModItemGroup.registerItemGroup(items, blocks); | ||||||
| 		PlayerBlockBreakEvents.BEFORE.register((world, player, pos, state, blockEntity) -> { | 		PlayerBlockBreakEvents.BEFORE.register((world, player, pos, state, blockEntity) -> { | ||||||
| 			Block oldBlock = state.getBlock(); | 			Block oldBlock = state.getBlock(); | ||||||
| 			new EventBlockBreak().doBreakBlock(world, pos, state, player, oldBlock); | 			if (new EventBlockBreak().doBreakBlock(world, pos, state, player, oldBlock)) { | ||||||
| 			  return false; | 			  return false; | ||||||
|  | 			} else { | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
| 		}); | 		}); | ||||||
| //		PlayerBlockBreakEvents.AFTER.register((world, player, pos, state, blockEntity) -> { |  | ||||||
| //			Block oldBlock = state.getBlock(); |  | ||||||
| //			new EventBlockBreak().doBreakBlock(world, pos, state, player, oldBlock); |  | ||||||
| //		}); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -7,7 +7,6 @@ import de.jottyfan.quickiemod.Quickiemod; | |||||||
| import de.jottyfan.quickiemod.item.HarvestRange; | import de.jottyfan.quickiemod.item.HarvestRange; | ||||||
| import de.jottyfan.quickiemod.item.ModItems; | import de.jottyfan.quickiemod.item.ModItems; | ||||||
| import de.jottyfan.quickiemod.item.ToolRangeable; | import de.jottyfan.quickiemod.item.ToolRangeable; | ||||||
| import de.jottyfan.quickiemod.item.ToolSpeedpowderAxe; |  | ||||||
| import net.minecraft.block.Block; | import net.minecraft.block.Block; | ||||||
| import net.minecraft.block.BlockState; | import net.minecraft.block.BlockState; | ||||||
| import net.minecraft.block.Blocks; | import net.minecraft.block.Blocks; | ||||||
| @@ -29,7 +28,17 @@ public class EventBlockBreak { | |||||||
| 		UPWARDS, ALL; | 		UPWARDS, ALL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public void doBreakBlock(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity, Block oldBlock) { | 	/** | ||||||
|  | 	 * break surrounding block if item is of ToolRangeable | ||||||
|  | 	 * | ||||||
|  | 	 * @param world | ||||||
|  | 	 * @param blockPos | ||||||
|  | 	 * @param blockState | ||||||
|  | 	 * @param playerEntity | ||||||
|  | 	 * @param oldBlock | ||||||
|  | 	 * @return true if this range breaking routine has been used, false otherwise | ||||||
|  | 	 */ | ||||||
|  | 	public boolean doBreakBlock(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity, Block oldBlock) { | ||||||
| 		ItemStack mainHandItemStack = playerEntity.getEquippedStack(EquipmentSlot.MAINHAND); | 		ItemStack mainHandItemStack = playerEntity.getEquippedStack(EquipmentSlot.MAINHAND); | ||||||
| 		if (mainHandItemStack != null) { | 		if (mainHandItemStack != null) { | ||||||
| 			Item item = mainHandItemStack.getItem(); | 			Item item = mainHandItemStack.getItem(); | ||||||
| @@ -47,7 +56,12 @@ public class EventBlockBreak { | |||||||
| 					world.spawnEntity( | 					world.spawnEntity( | ||||||
| 							new ExperienceOrbEntity(world, blockPos.getX(), blockPos.getY(), blockPos.getZ(), handled / 255)); | 							new ExperienceOrbEntity(world, blockPos.getX(), blockPos.getY(), blockPos.getZ(), handled / 255)); | ||||||
| 				} | 				} | ||||||
|  | 				return handled > 0; // this way, a rangeable pickaxe can break a dirt block | ||||||
|  | 			} else { | ||||||
|  | 				return false; | ||||||
| 			} | 			} | ||||||
|  | 		} else { | ||||||
|  | 			return false; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -69,7 +83,7 @@ public class EventBlockBreak { | |||||||
| 		if (tool instanceof Item) { | 		if (tool instanceof Item) { | ||||||
| 			Item toolItem = (Item) tool; // a rangeable tool should always be an item | 			Item toolItem = (Item) tool; // a rangeable tool should always be an item | ||||||
| 			List<String> visitedBlocks = new ArrayList<>(); | 			List<String> visitedBlocks = new ArrayList<>(); | ||||||
| 			if (tool instanceof ToolSpeedpowderAxe) { | 			if (ModItems.TOOL_SPEEDPOWDERAXE.getName().equals(toolItem.getName())) { | ||||||
| 				return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS, | 				return breakBlockRecursive(visitedBlocks, world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS, | ||||||
| 						player, true); | 						player, true); | ||||||
| 			} else if (ModItems.TOOL_SPEEDPOWDERPICKAXE.getName().equals(toolItem.getName())) { | 			} else if (ModItems.TOOL_SPEEDPOWDERPICKAXE.getName().equals(toolItem.getName())) { | ||||||
| @@ -118,7 +132,7 @@ public class EventBlockBreak { | |||||||
| 	private int breakBlockRecursive(List<String> visitedBlocks, World world, List<Block> validBlocks, BlockPos pos, | 	private int breakBlockRecursive(List<String> visitedBlocks, World world, List<Block> validBlocks, BlockPos pos, | ||||||
| 			ToolRangeable tool, HarvestRange range, BlockBreakDirection blockBreakDirection, PlayerEntity player, | 			ToolRangeable tool, HarvestRange range, BlockBreakDirection blockBreakDirection, PlayerEntity player, | ||||||
| 			boolean breakLeaves) { | 			boolean breakLeaves) { | ||||||
| 		boolean ignoreSpawn = visitedBlocks.size() < 1; // with this, the already broken block can be omitted to spawn | //		boolean ignoreSpawn = visitedBlocks.size() < 1; // with this, the already broken block can be omitted to spawn | ||||||
| 		if (visitedBlocks.contains(pos.toString())) { | 		if (visitedBlocks.contains(pos.toString())) { | ||||||
| 			return 0; | 			return 0; | ||||||
| 		} else if (validBlocks == null) { | 		} else if (validBlocks == null) { | ||||||
| @@ -131,9 +145,9 @@ public class EventBlockBreak { | |||||||
| 		if (tool.canBreakNeighbors(blockState)) { | 		if (tool.canBreakNeighbors(blockState)) { | ||||||
| 			Block currentBlock = blockState.getBlock(); | 			Block currentBlock = blockState.getBlock(); | ||||||
| 			if (validBlocks.contains(currentBlock)) { | 			if (validBlocks.contains(currentBlock)) { | ||||||
| 				if (!ignoreSpawn) { | //				if (!ignoreSpawn) { | ||||||
| 					Block.dropStacks(blockState, world, pos); // includes xorbs | 					Block.dropStacks(blockState, world, pos); // includes xorbs | ||||||
| 				} | //				} | ||||||
| 				affected += 1; | 				affected += 1; | ||||||
| 				world.setBlockState(pos, Blocks.AIR.getDefaultState()); | 				world.setBlockState(pos, Blocks.AIR.getDefaultState()); | ||||||
| 				if (range == null || range.getxRange() > 1 || range.getyRange() > 1 || range.getzRange() > 1) { | 				if (range == null || range.getxRange() > 1 || range.getyRange() > 1 || range.getzRange() > 1) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user