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 1ef7ab09b..3787e8baa 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener117.java @@ -31,6 +31,7 @@ import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.core.location.Location; 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 org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -40,6 +41,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockFertilizeEvent; +import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockReceiveGameEvent; import java.util.List; @@ -137,4 +139,44 @@ public class BlockEventListener117 implements Listener { } } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockForm(BlockFormEvent event) { + Block block = event.getBlock(); + Location location = BukkitUtil.adapt(block.getLocation()); + if (location.isPlotRoad()) { + event.setCancelled(true); + return; + } + PlotArea area = location.getPlotArea(); + if (area == null) { + return; + } + Plot plot = area.getOwnedPlot(location); + if (plot == null) { + return; + } + switch (event.getNewState().getType()) { + case COPPER_BLOCK: + case EXPOSED_COPPER: + case WEATHERED_COPPER: + case OXIDIZED_COPPER: + case CUT_COPPER: + case EXPOSED_CUT_COPPER: + case WEATHERED_CUT_COPPER: + case OXIDIZED_CUT_COPPER: + case CUT_COPPER_STAIRS: + case EXPOSED_CUT_COPPER_STAIRS: + case WEATHERED_CUT_COPPER_STAIRS: + case OXIDIZED_CUT_COPPER_STAIRS: + case CUT_COPPER_SLAB: + case EXPOSED_CUT_COPPER_SLAB: + case WEATHERED_CUT_COPPER_SLAB: + case OXIDIZED_CUT_COPPER_SLAB: + if (!plot.getFlag(CopperOxideFlag.class)) { + plot.debug("Copper could not oxide because copper-oxide = false"); + event.setCancelled(true); + } + } + } + } 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 4672fe28e..0fd188d54 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 @@ -35,6 +35,7 @@ import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag; import com.plotsquared.core.plot.flag.implementations.BlockedCmdsFlag; import com.plotsquared.core.plot.flag.implementations.BreakFlag; import com.plotsquared.core.plot.flag.implementations.ChatFlag; +import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; import com.plotsquared.core.plot.flag.implementations.CoralDryFlag; import com.plotsquared.core.plot.flag.implementations.CropGrowFlag; import com.plotsquared.core.plot.flag.implementations.DenyExitFlag; @@ -193,6 +194,7 @@ public final class GlobalFlagContainer extends FlagContainer { this.addFlag(DenyPortalsFlag.DENY_PORTALS_FALSE); this.addFlag(LecternReadBookFlag.LECTERN_READ_BOOK_FALSE); this.addFlag(EntityChangeBlockFlag.ENTITY_CHANGE_BLOCK_FALSE); + this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE); // Enum Flags this.addFlag(WeatherFlag.PLOT_WEATHER_FLAG_OFF); diff --git a/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/CopperOxideFlag.java b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/CopperOxideFlag.java new file mode 100644 index 000000000..4c9dd6128 --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/CopperOxideFlag.java @@ -0,0 +1,46 @@ +/* + * _____ _ _ _____ _ + * | __ \| | | | / ____| | | + * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | + * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | + * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | + * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| + * | | + * |_| + * PlotSquared plot management system for Minecraft + * Copyright (C) 2021 IntellectualSites + * + * 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 CopperOxideFlag extends BooleanFlag { + + public static final CopperOxideFlag COPPER_OXIDE_TRUE = new CopperOxideFlag(true); + public static final CopperOxideFlag COPPER_OXIDE_FALSE = new CopperOxideFlag(false); + + private CopperOxideFlag(boolean value) { + super(value, TranslatableCaption.of("flags.flag_description_copper_oxide")); + } + + @Override + protected CopperOxideFlag flagOf(@NonNull Boolean value) { + return value ? COPPER_OXIDE_TRUE : COPPER_OXIDE_FALSE; + } + +} diff --git a/Core/src/main/resources/lang/messages_en.json b/Core/src/main/resources/lang/messages_en.json index 5cc6251c0..4910dc8e6 100644 --- a/Core/src/main/resources/lang/messages_en.json +++ b/Core/src/main/resources/lang/messages_en.json @@ -575,6 +575,7 @@ "flags.flag_description_redstone": "Set to `false` to disable redstone in the plot.", "flags.flag_description_server_plot": "Set to `true` to turn the plot into a server plot. This is equivalent to setting the server as the plot owner.", "flags.flag_description_snow_form": "Set to `true` to allow snow to form within the plot.", + "flags.flag_description_copper_oxide": "Set to `true` to allow copper to oxide within the plot.", "flags.flag_description_snow_melt": "Set to `true` to allow snow to melt within the plot.", "flags.flag_description_soil_dry": "Set to `true` to allow soil to dry within the plot.", "flags.flag_description_coral_dry": "Set to `true` to allow coral blocks to dry within the plot.",