From 2d1d8f1ab6384ef3130c7ca2c7ebdf8d1ddd7ff9 Mon Sep 17 00:00:00 2001 From: evlad Date: Sun, 12 Feb 2023 19:08:46 +0100 Subject: [PATCH] Sync lock: Cancel item frame interaction, add command blacklist (#84) Co-authored-by: William --- .../listener/BukkitEventListener.java | 20 +++++++++++++++++++ .../william278/husksync/config/Settings.java | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java index 637a56ba..55bc4baf 100644 --- a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java +++ b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java @@ -22,20 +22,25 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; public class BukkitEventListener extends EventListener implements BukkitJoinEventListener, BukkitQuitEventListener, BukkitDeathEventListener, Listener { + protected final List blacklistedCommands; public BukkitEventListener(@NotNull BukkitHuskSync huskSync) { super(huskSync); + this.blacklistedCommands = huskSync.getSettings().blacklistedCommandsWhileLocked; Bukkit.getServer().getPluginManager().registerEvents(this, huskSync); } @@ -121,6 +126,11 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven event.setCancelled(cancelPlayerEvent(event.getPlayer().getUniqueId())); } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerInteractEntity(@NotNull PlayerInteractEntityEvent event) { + event.setCancelled(cancelPlayerEvent(event.getPlayer().getUniqueId())); + } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(@NotNull BlockPlaceEvent event) { event.setCancelled(cancelPlayerEvent(event.getPlayer().getUniqueId())); @@ -150,4 +160,14 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven } } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPermissionCommand(@NotNull PlayerCommandPreprocessEvent event) { + String[] commandArgs = event.getMessage().substring(1).split(" "); + String commandLabel = commandArgs[0].toLowerCase(); + + if (blacklistedCommands.contains(commandLabel)) { + event.setCancelled(cancelPlayerEvent(event.getPlayer().getUniqueId())); + } + } + } diff --git a/common/src/main/java/net/william278/husksync/config/Settings.java b/common/src/main/java/net/william278/husksync/config/Settings.java index 75d21a74..7f2c26b7 100644 --- a/common/src/main/java/net/william278/husksync/config/Settings.java +++ b/common/src/main/java/net/william278/husksync/config/Settings.java @@ -5,7 +5,9 @@ import net.william278.annotaml.YamlFile; import net.william278.annotaml.YamlKey; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -120,6 +122,9 @@ public class Settings { @YamlKey("synchronization.features") public Map synchronizationFeatures = SynchronizationFeature.getDefaults(); + @YamlKey("synchronization.blacklisted_commands_while_locked") + public List blacklistedCommandsWhileLocked = new ArrayList<>(); + public boolean getSynchronizationFeature(@NotNull SynchronizationFeature feature) { return synchronizationFeatures.getOrDefault(feature.name().toLowerCase(), feature.enabledByDefault); }