diff --git a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java index 489a4e6f..f3f2a97d 100644 --- a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java +++ b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java @@ -208,8 +208,8 @@ public Material getPlantSeeds(Material material) { } @Override - public boolean hasGravity(Material scanType) { - return scanType.hasGravity(); + public boolean isSuspiciousBlock(Material material) { + return false; } @Override diff --git a/src/main/java/net/coreprotect/bukkit/BukkitInterface.java b/src/main/java/net/coreprotect/bukkit/BukkitInterface.java index f94e88e2..56941e5f 100644 --- a/src/main/java/net/coreprotect/bukkit/BukkitInterface.java +++ b/src/main/java/net/coreprotect/bukkit/BukkitInterface.java @@ -66,7 +66,7 @@ public interface BukkitInterface { public Material getPlantSeeds(Material material); - public boolean hasGravity(Material scanType); + public boolean isSuspiciousBlock(Material material); public boolean isSign(Material material); diff --git a/src/main/java/net/coreprotect/bukkit/Bukkit_v1_20.java b/src/main/java/net/coreprotect/bukkit/Bukkit_v1_20.java index cff153e8..a8f635ee 100644 --- a/src/main/java/net/coreprotect/bukkit/Bukkit_v1_20.java +++ b/src/main/java/net/coreprotect/bukkit/Bukkit_v1_20.java @@ -112,8 +112,8 @@ public Material getPlantSeeds(Material material) { } @Override - public boolean hasGravity(Material scanType) { - return scanType.hasGravity() || scanType == Material.SUSPICIOUS_GRAVEL || scanType == Material.SUSPICIOUS_SAND; + public boolean isSuspiciousBlock(Material material) { + return material == Material.SUSPICIOUS_GRAVEL || material == Material.SUSPICIOUS_SAND; } @Override diff --git a/src/main/java/net/coreprotect/listener/block/BlockBreakListener.java b/src/main/java/net/coreprotect/listener/block/BlockBreakListener.java index aa6cf32f..b7255ef8 100644 --- a/src/main/java/net/coreprotect/listener/block/BlockBreakListener.java +++ b/src/main/java/net/coreprotect/listener/block/BlockBreakListener.java @@ -125,7 +125,7 @@ protected static void processBlockBreak(Player player, String user, Block block, Block scanBlock = world.getBlockAt(scanLocation); Material scanType = scanBlock.getType(); if (scanMin == 5) { - if (BukkitAdapter.ADAPTER.hasGravity(scanType)) { + if (scanType.hasGravity() || BukkitAdapter.ADAPTER.isSuspiciousBlock(scanType)) { if (Config.getConfig(world).BLOCK_MOVEMENT) { // log the top-most sand/gravel block as being removed int scanY = y + 2; @@ -133,7 +133,7 @@ protected static void processBlockBreak(Player player, String user, Block block, while (!topFound) { Block topBlock = world.getBlockAt(x, scanY, z); Material topMaterial = topBlock.getType(); - if (!BukkitAdapter.ADAPTER.hasGravity(topMaterial)) { + if (!topMaterial.hasGravity() && !BukkitAdapter.ADAPTER.isSuspiciousBlock(topMaterial)) { scanLocation = new Location(world, x, (scanY - 1), z); topFound = true; } @@ -209,7 +209,7 @@ else if (!isAttached(block, scanBlock, scanMin)) { } } else if (scanMin == 5) { - if (BukkitAdapter.ADAPTER.hasGravity(scanType)) { + if (scanType.hasGravity() || BukkitAdapter.ADAPTER.isSuspiciousBlock(scanType)) { log = true; } } diff --git a/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java b/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java index aca6cce3..a9e2b66e 100755 --- a/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java +++ b/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java @@ -751,6 +751,17 @@ else if (event.getHand().equals(EquipmentSlot.OFF_HAND) && offHand != null && Bu } } } + else if (BukkitAdapter.ADAPTER.isSuspiciousBlock(type)) { + BlockState blockState = block.getState(); + Scheduler.scheduleSyncDelayedTask(CoreProtect.getInstance(), () -> { + Material newType = block.getType(); + if (type == newType || (type != Material.SAND && type != Material.GRAVEL)) { + return; + } + + Queue.queueBlockPlace(player.getName(), blockState, newType, blockState, newType, -1, 0, null); + }, block.getLocation(), 100); + } else if (type == Material.DRAGON_EGG) { clickedDragonEgg(player, block); }