From 5c95c9aed2826794b78af71fcd61169af10724e9 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Tue, 29 Jun 2021 14:40:39 +0200 Subject: [PATCH] left click blocks check --- .../flemmli97/flan/event/BlockInteractEvents.java | 5 +++++ .../main/java/io/github/flemmli97/flan/FlanFabric.java | 2 ++ .../main/java/io/github/flemmli97/flan/FlanForge.java | 1 + .../flan/forgeevent/BlockInteractEventsForge.java | 10 +++++++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/io/github/flemmli97/flan/event/BlockInteractEvents.java b/common/src/main/java/io/github/flemmli97/flan/event/BlockInteractEvents.java index 567ad56..767b677 100644 --- a/common/src/main/java/io/github/flemmli97/flan/event/BlockInteractEvents.java +++ b/common/src/main/java/io/github/flemmli97/flan/event/BlockInteractEvents.java @@ -31,11 +31,16 @@ import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; public class BlockInteractEvents { + public static ActionResult startBreakBlocks(PlayerEntity player, World world, Hand hand, BlockPos pos, Direction direction) { + return breakBlocks(world, player, pos, world.getBlockState(pos), world.getBlockEntity(pos)) ? ActionResult.PASS : ActionResult.FAIL; + } + public static boolean breakBlocks(World world, PlayerEntity p, BlockPos pos, BlockState state, BlockEntity tile) { if (world.isClient || p.isSpectator()) return true; diff --git a/fabric/src/main/java/io/github/flemmli97/flan/FlanFabric.java b/fabric/src/main/java/io/github/flemmli97/flan/FlanFabric.java index 3782ecb..8ce6c37 100644 --- a/fabric/src/main/java/io/github/flemmli97/flan/FlanFabric.java +++ b/fabric/src/main/java/io/github/flemmli97/flan/FlanFabric.java @@ -10,6 +10,7 @@ import io.github.flemmli97.flan.integration.playerability.PlayerAbilityEvents; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.event.player.AttackBlockCallback; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.event.player.UseBlockCallback; @@ -22,6 +23,7 @@ public class FlanFabric implements ModInitializer { @Override public void onInitialize() { PlayerBlockBreakEvents.BEFORE.register(BlockInteractEvents::breakBlocks); + AttackBlockCallback.EVENT.register(BlockInteractEvents::startBreakBlocks); UseBlockCallback.EVENT.register(BlockInteractEvents::useBlocks); UseEntityCallback.EVENT.register(EntityInteractEvents::useAtEntity); AttackEntityCallback.EVENT.register(EntityInteractEvents::attackEntity); diff --git a/forge/src/main/java/io/github/flemmli97/flan/FlanForge.java b/forge/src/main/java/io/github/flemmli97/flan/FlanForge.java index 952e55f..6598b1d 100644 --- a/forge/src/main/java/io/github/flemmli97/flan/FlanForge.java +++ b/forge/src/main/java/io/github/flemmli97/flan/FlanForge.java @@ -20,6 +20,7 @@ public class FlanForge { forge.addListener(WorldEventsForge::pistonCanPush); forge.addListener(WorldEventsForge::preventMobSpawn); forge.addListener(ItemInteractEventsForge::useItem); + forge.addListener(BlockInteractEventsForge::startBreakBlocks); forge.addListener(BlockInteractEventsForge::breakBlocks); forge.addListener(BlockInteractEventsForge::useBlocks); forge.addListener(EntityInteractEventsForge::attackEntity); diff --git a/forge/src/main/java/io/github/flemmli97/flan/forgeevent/BlockInteractEventsForge.java b/forge/src/main/java/io/github/flemmli97/flan/forgeevent/BlockInteractEventsForge.java index a745b84..ff5da17 100644 --- a/forge/src/main/java/io/github/flemmli97/flan/forgeevent/BlockInteractEventsForge.java +++ b/forge/src/main/java/io/github/flemmli97/flan/forgeevent/BlockInteractEventsForge.java @@ -1,6 +1,7 @@ package io.github.flemmli97.flan.forgeevent; import io.github.flemmli97.flan.event.BlockInteractEvents; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.ActionResult; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -8,8 +9,15 @@ import net.minecraftforge.event.world.BlockEvent; public class BlockInteractEventsForge { + public static void startBreakBlocks(PlayerInteractEvent.LeftClickBlock event) { + if (!(event.getWorld() instanceof ServerWorld)) + return; + if (BlockInteractEvents.startBreakBlocks(event.getPlayer(), event.getWorld(), event.getHand(), event.getPos(), event.getFace()) == ActionResult.FAIL) + event.setCanceled(true); + } + public static void breakBlocks(BlockEvent.BreakEvent event) { - if (!(event.getWorld() instanceof World)) + if (!(event.getWorld() instanceof ServerWorld)) return; if (!BlockInteractEvents.breakBlocks((World) event.getWorld(), event.getPlayer(), event.getPos(), event.getState(), event.getWorld().getBlockEntity(event.getPos()))) event.setCanceled(true);