diff --git a/src/main/java/com/gamingmesh/jobs/Jobs.java b/src/main/java/com/gamingmesh/jobs/Jobs.java index 695b9a3a..41b2238c 100644 --- a/src/main/java/com/gamingmesh/jobs/Jobs.java +++ b/src/main/java/com/gamingmesh/jobs/Jobs.java @@ -23,12 +23,10 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.UUID; import java.util.WeakHashMap; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java index 472848fd..1f116a85 100644 --- a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java @@ -85,7 +85,7 @@ public class GeneralConfigManager { private FireworkEffect fireworkEffect; - public boolean useBlockProtection, enableSchedule, PayForRenaming, PayForEnchantingOnAnvil, PayForEachCraft, SignsEnabled, + public boolean ignoreOreGenerators, useBlockProtection, enableSchedule, PayForRenaming, PayForEnchantingOnAnvil, PayForEachCraft, SignsEnabled, SignsColorizeJobName, ShowToplistInScoreboard, useGlobalTimer, useSilkTouchProtection, UseCustomNames, PreventSlimeSplit, PreventMagmaCubeSplit, PreventHopperFillUps, PreventBrewingStandFillUps, BrowseUseNewLook, payExploringWhenGliding = false, disablePaymentIfMaxLevelReached, disablePaymentIfRiding, @@ -785,28 +785,32 @@ public class GeneralConfigManager { "This can be overridden with jobs.maxbrewingstands.[amount] permission node"); BrewingStandsMaxDefault = c.get("ExploitProtections.BrewingStands.MaxDefaultAvailable", 20); - c.addComment("ExploitProtections.General.PlaceAndBreakProtection", + c.addComment("ExploitProtections.General.PlaceAndBreak.Enabled", "Enable blocks protection, like ore, from exploiting by placing and destroying same block again and again.", "Modify restrictedBlocks.yml for blocks you want to protect"); - useBlockProtection = c.get("ExploitProtections.General.PlaceAndBreakProtection", true); + useBlockProtection = c.get("ExploitProtections.General.PlaceAndBreak.Enabled", c.getC().getBoolean("ExploitProtections.General.PlaceAndBreakProtection", true)); - c.addComment("ExploitProtections.General.KeepDataFor", + c.addComment("ExploitProtections.General.PlaceAndBreak.IgnoreOreGenerators", + "Enabling this we will ignore blocks generated in ore generators, liko stone, coublestone and obsidian. You can still use timer on player placed obsidian block"); + ignoreOreGenerators = c.get("ExploitProtections.General.PlaceAndBreak.IgnoreOreGenerators", true); + + c.addComment("ExploitProtections.General.PlaceAndBreak.KeepDataFor", "For how long in days to keep block protection data in data base", "This will clean block data which ones have -1 as cooldown value", "Data base cleanup will be performed on each server startup", "This cant be more then 14 days"); - BlockProtectionDays = c.get("ExploitProtections.General.KeepDataFor", 14); + BlockProtectionDays = c.get("ExploitProtections.General.PlaceAndBreak.KeepDataFor", c.getC().getInt("ExploitProtections.General.KeepDataFor", 14)); BlockProtectionDays = BlockProtectionDays > 14 ? 14 : BlockProtectionDays; /*c.addComment("ExploitProtections.General.AllowBreakPaymentForOreGenerators", "It allows you to pay for ore generator plugins continuously" + " once you have broken the block in one place."); allowBreakPaymentForOreGenerators = c.get("ExploitProtections.General.AllowBreakPaymentForOreGenerators", false);*/ - c.addComment("ExploitProtections.General.GlobalBlockTimer", "All blocks will be protected X sec after player places it on ground."); - useGlobalTimer = c.get("ExploitProtections.General.GlobalBlockTimer.use", true); - globalblocktimer = c.get("ExploitProtections.General.GlobalBlockTimer.timer", 3); + c.addComment("ExploitProtections.General.PlaceAndBreak.GlobalBlockTimer", "All blocks will be protected X sec after player places it on ground."); + useGlobalTimer = c.get("ExploitProtections.General.PlaceAndBreak.GlobalBlockTimer.Use", c.getC().getBoolean("ExploitProtections.General.GlobalBlockTimer.use", true)); + globalblocktimer = c.get("ExploitProtections.General.PlaceAndBreak.GlobalBlockTimer.Timer", c.getC().getInt("ExploitProtections.General.GlobalBlockTimer.timer", 3)); - c.addComment("ExploitProtections.General.SilkTouchProtection", "Enable silk touch protection.", + c.addComment("ExploitProtections.General.PlaceAndBreak.SilkTouchProtection", "Enable silk touch protection.", "With this enabled players wont get paid for broken blocks from restrictedblocks list with silk touch tool."); - useSilkTouchProtection = c.get("ExploitProtections.General.SilkTouchProtection", false); + useSilkTouchProtection = c.get("ExploitProtections.General.PlaceAndBreak.SilkTouchProtection", c.getC().getBoolean("ExploitProtections.General.SilkTouchProtection", false)); c.addComment("ExploitProtections.General.MonsterDamage.Use", "This section controls how much damage player should do to monster for player to get paid", "This prevents from killing monsters in one hit when they suffer in example fall damage"); diff --git a/src/main/java/com/gamingmesh/jobs/listeners/JobsListener.java b/src/main/java/com/gamingmesh/jobs/listeners/JobsListener.java index 34860fc4..f2ef2c47 100644 --- a/src/main/java/com/gamingmesh/jobs/listeners/JobsListener.java +++ b/src/main/java/com/gamingmesh/jobs/listeners/JobsListener.java @@ -42,6 +42,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.inventory.ClickType; @@ -107,6 +108,18 @@ public class JobsListener implements Listener { return time > 100; } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockFromToEvent(BlockFromToEvent event) { + + if (!Jobs.getGCManager().useBlockProtection) + return; + if (!Jobs.getGCManager().ignoreOreGenerators) + return; + if (!Jobs.getGCManager().canPerformActionInWorld(event.getBlock().getWorld())) + return; + Jobs.getBpManager().remove(event.getToBlock()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onJoin(PlayerJoinEvent event) { if (Jobs.getGCManager().isShowNewVersion() && event.getPlayer().hasPermission("jobs.versioncheck"))