From a1eacfad5636bf66a33ce478e88a5db648923ba5 Mon Sep 17 00:00:00 2001 From: xGinko Date: Wed, 27 Sep 2023 11:19:24 +0200 Subject: [PATCH] add config toggle for sneaking --- .../modules/optimizations/OptimizeByBlock.java | 6 +++++- .../modules/optimizations/OptimizeByWorkstation.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java index 8feac95..044c859 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java @@ -31,9 +31,9 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { private final VillagerCache villagerCache; private final HashSet blocks_that_disable = new HashSet<>(4); - private final boolean shouldLog, shouldNotifyPlayer; private final long cooldown; private final double search_radius; + private final boolean onlyWhileSneaking, shouldLog, shouldNotifyPlayer; public OptimizeByBlock() { shouldEnable(); @@ -59,6 +59,8 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { this.search_radius = config.getDouble("optimization-methods.block-optimization.search-radius-in-blocks", 2.0, """ The radius in blocks a villager can be away from the player when he places an optimize block.\s The closest unoptimized villager to the player will be optimized.""") / 2; + this.onlyWhileSneaking = config.getBoolean("optimization-methods.block-optimization.only-when-sneaking", true, + "Only optimize/unoptimize by workstation when player is sneaking during place or break."); this.shouldNotifyPlayer = config.getBoolean("optimization-methods.block-optimization.notify-player", true, "Sends players a message when they successfully optimized or unoptimized a villager."); this.shouldLog = config.getBoolean("optimization-methods.block-optimization.log", false); @@ -86,6 +88,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (!blocks_that_disable.contains(placed.getType())) return; Player player = event.getPlayer(); if (!player.hasPermission(Permissions.Optimize.BLOCK.get())) return; + if (onlyWhileSneaking && !player.isSneaking()) return; final Location blockLoc = placed.getLocation(); WrappedVillager closestOptimizableVillager = null; @@ -140,6 +143,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (!blocks_that_disable.contains(broken.getType())) return; Player player = event.getPlayer(); if (!player.hasPermission(Permissions.Optimize.BLOCK.get())) return; + if (onlyWhileSneaking && !player.isSneaking()) return; final Location blockLoc = broken.getLocation(); WrappedVillager closestOptimizedVillager = null; diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java index 3563a6f..e85a555 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java @@ -28,7 +28,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener private final VillagerCache villagerCache; private final long cooldown; private final double search_radius; - private final boolean shouldLog, shouldNotifyPlayer; + private final boolean onlyWhileSneaking, shouldLog, shouldNotifyPlayer; public OptimizeByWorkstation() { shouldEnable(); @@ -43,6 +43,8 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener this.cooldown = config.getInt("optimization-methods.workstation-optimization.optimize-cooldown-seconds", 600, """ Cooldown in seconds until a villager can be optimized again using a workstation.\s Here for configuration freedom. Recommended to leave as is to not enable any exploitable behavior.""") * 1000L; + this.onlyWhileSneaking = config.getBoolean("optimization-methods.workstation-optimization.only-when-sneaking", true, + "Only optimize/unoptimize by workstation when player is sneaking during place or break"); this.shouldNotifyPlayer = config.getBoolean("optimization-methods.workstation-optimization.notify-player", true, "Sends players a message when they successfully optimized a villager."); this.shouldLog = config.getBoolean("optimization-methods.workstation-optimization.log", false); @@ -71,6 +73,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener if (workstationProfession.equals(Villager.Profession.NONE)) return; Player player = event.getPlayer(); if (!player.hasPermission(Permissions.Optimize.WORKSTATION.get())) return; + if (onlyWhileSneaking && !player.isSneaking()) return; final Location workstationLoc = placed.getLocation(); WrappedVillager closestOptimizableVillager = null; @@ -126,6 +129,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener if (workstationProfession.equals(Villager.Profession.NONE)) return; Player player = event.getPlayer(); if (!player.hasPermission(Permissions.Optimize.WORKSTATION.get())) return; + if (onlyWhileSneaking && !player.isSneaking()) return; final Location workstationLoc = broken.getLocation(); WrappedVillager closestOptimizedVillager = null;