From c394108ba693d7b52baf62bd8222dcd3da521926 Mon Sep 17 00:00:00 2001 From: Jordan Date: Tue, 4 Jul 2023 16:56:28 +0100 Subject: [PATCH] feat: add a sculk sensor flag (#4095) --- .../listener/BlockEventListener117.java | 14 ++++--- .../core/plot/flag/GlobalFlagContainer.java | 2 + .../SculkSensorInteractFlag.java | 39 +++++++++++++++++++ Core/src/main/resources/lang/messages_en.json | 1 + 4 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 Core/src/main/java/com/plotsquared/core/plot/flag/implementations/SculkSensorInteractFlag.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java index 34a69adc7..0909001b4 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java @@ -26,6 +26,7 @@ import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; +import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag; import com.plotsquared.core.util.PlotFlagUtil; import org.bukkit.Material; import org.bukkit.block.Block; @@ -96,12 +97,12 @@ public class BlockEventListener117 implements Listener { area, MiscInteractFlag.class, true - ) || plot != null && !plot.getFlag( - MiscInteractFlag.class)) { + ) || plot != null && (!plot.getFlag(MiscInteractFlag.class) || !plot.getFlag(SculkSensorInteractFlag.class))) { if (plotPlayer != null) { if (plot != null) { if (!plot.isAdded(plotPlayer.getUUID())) { - plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false"); + plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because both " + + "sculk-sensor-interact and misc-interact = false"); event.setCancelled(true); } } @@ -112,13 +113,15 @@ public class BlockEventListener117 implements Listener { if (plot != null) { if (itemThrower == null && (itemThrower = item.getOwner()) == null) { plot.debug( - "A thrown item couldn't trigger sculk sensors because misc-interact = false and the item's owner could not be resolved."); + "A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " + + "misc-interact = false and the item's owner could not be resolved."); event.setCancelled(true); return; } if (!plot.isAdded(itemThrower)) { if (!plot.isAdded(itemThrower)) { - plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false"); + plot.debug("A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " + + "misc-interact = false"); event.setCancelled(true); } } @@ -137,7 +140,6 @@ public class BlockEventListener117 implements Listener { if (area == null) { for (int i = blocks.size() - 1; i >= 0; i--) { Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation()); - blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation()); if (blockLocation.isPlotArea()) { blocks.remove(i); } diff --git a/Core/src/main/java/com/plotsquared/core/plot/flag/GlobalFlagContainer.java b/Core/src/main/java/com/plotsquared/core/plot/flag/GlobalFlagContainer.java index 734c31396..25b12d39d 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/flag/GlobalFlagContainer.java +++ b/Core/src/main/java/com/plotsquared/core/plot/flag/GlobalFlagContainer.java @@ -91,6 +91,7 @@ import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; import com.plotsquared.core.plot.flag.implementations.PveFlag; import com.plotsquared.core.plot.flag.implementations.PvpFlag; import com.plotsquared.core.plot.flag.implementations.RedstoneFlag; +import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag; import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag; import com.plotsquared.core.plot.flag.implementations.SnowFormFlag; import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag; @@ -172,6 +173,7 @@ public final class GlobalFlagContainer extends FlagContainer { this.addFlag(MobBreakFlag.MOB_BREAK_FALSE); this.addFlag(MobPlaceFlag.MOB_PLACE_FALSE); this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE); + this.addFlag(SculkSensorInteractFlag.SCULK_SENSOR_INTERACT_FALSE); this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE); this.addFlag(MycelGrowFlag.MYCEL_GROW_TRUE); this.addFlag(NotifyEnterFlag.NOTIFY_ENTER_FALSE); diff --git a/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/SculkSensorInteractFlag.java b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/SculkSensorInteractFlag.java new file mode 100644 index 000000000..6ac1dafaa --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/SculkSensorInteractFlag.java @@ -0,0 +1,39 @@ +/* + * PlotSquared, a land and world management plugin for Minecraft. + * Copyright (C) IntellectualSites + * Copyright (C) IntellectualSites team and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.plotsquared.core.plot.flag.implementations; + +import com.plotsquared.core.configuration.caption.TranslatableCaption; +import com.plotsquared.core.plot.flag.types.BooleanFlag; +import org.checkerframework.checker.nullness.qual.NonNull; + +public class SculkSensorInteractFlag extends BooleanFlag { + + public static final SculkSensorInteractFlag SCULK_SENSOR_INTERACT_TRUE = new SculkSensorInteractFlag(true); + public static final SculkSensorInteractFlag SCULK_SENSOR_INTERACT_FALSE = new SculkSensorInteractFlag(false); + + private SculkSensorInteractFlag(boolean value) { + super(value, TranslatableCaption.of("flags.flag_description_sculk_sensor_interact")); + } + + @Override + protected SculkSensorInteractFlag flagOf(@NonNull Boolean value) { + return value ? SCULK_SENSOR_INTERACT_TRUE : SCULK_SENSOR_INTERACT_FALSE; + } + +} diff --git a/Core/src/main/resources/lang/messages_en.json b/Core/src/main/resources/lang/messages_en.json index 0cd7b49a1..e863909f1 100644 --- a/Core/src/main/resources/lang/messages_en.json +++ b/Core/src/main/resources/lang/messages_en.json @@ -572,6 +572,7 @@ "flags.flag_description_misc_break": "Set to `true` to allow guests to break miscellaneous items.", "flags.flag_description_misc_cap": "Set to an integer value to limit the amount of miscellaneous entities on the plot.", "flags.flag_description_misc_interact": "Set to `true` to allow guests to interact with miscellaneous items.", + "flags.flag_description_sculk_sensor_interact": "Set to `true` to allow guests to interact with sculk sensors.", "flags.flag_description_misc_place": "Set to `true` to allow guests to place miscellaneous items.", "flags.flag_description_mob_break": "Set to `true` to allow mobs to break blocks within the plot.", "flags.flag_description_mob_cap": "Set to an integer value to limit the amount of mobs on the plot.",