From 3491ff6be31a757d9b733b0cc27ffc66a61c4818 Mon Sep 17 00:00:00 2001 From: RedstoneFuture Date: Sat, 12 Oct 2024 20:48:47 +0200 Subject: [PATCH] Adding "windcharge" flag (1.21.1+) --- .../plotsquared/bukkit/BukkitPlatform.java | 4 ++ .../listener/EntityEventListener1211.java | 58 +++++++++++++++++++ .../core/plot/flag/GlobalFlagContainer.java | 2 + .../flag/implementations/WindChargeFlag.java | 39 +++++++++++++ Core/src/main/resources/lang/messages_en.json | 1 + 5 files changed, 104 insertions(+) create mode 100644 Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener1211.java create mode 100644 Core/src/main/java/com/plotsquared/core/plot/flag/implementations/WindChargeFlag.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index 0ed057e39..3073a3e98 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -33,6 +33,7 @@ import com.plotsquared.bukkit.listener.BlockEventListener; import com.plotsquared.bukkit.listener.BlockEventListener117; import com.plotsquared.bukkit.listener.ChunkListener; import com.plotsquared.bukkit.listener.EntityEventListener; +import com.plotsquared.bukkit.listener.EntityEventListener1211; import com.plotsquared.bukkit.listener.EntitySpawnListener; import com.plotsquared.bukkit.listener.HighFreqBlockEventListener; import com.plotsquared.bukkit.listener.PaperListener; @@ -359,6 +360,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl if (Settings.Enabled_Components.EVENTS) { getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener.class), this); + if ((serverVersion()[1] == 21 && serverVersion()[2] >= 1) || serverVersion()[1] > 21) { + getServer().getPluginManager().registerEvents(injector().getInstance(EntityEventListener1211.class), this); + } if ((serverVersion()[1] == 20 && serverVersion()[2] >= 1) || serverVersion()[1] > 20) { getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener1201.class), this); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener1211.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener1211.java new file mode 100644 index 000000000..c758da6d2 --- /dev/null +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener1211.java @@ -0,0 +1,58 @@ +/* + * 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.bukkit.listener; + +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.WindChargeFlag; +import com.plotsquared.core.util.PlotFlagUtil; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExplodeEvent; + +/** + * For events since 1.21.1 + * @since TODO + */ +public class EntityEventListener1211 implements Listener { + + @EventHandler(ignoreCancelled = true) + public void onWindCharge(EntityExplodeEvent event) { + // TODO Use "ExplosionResult" for this check after building the plugin with 1.21.1+ + Location location = BukkitUtil.adapt(event.getEntity().getLocation()); + PlotArea area = location.getPlotArea(); + if (area == null) { + return; + } + Plot plot = location.getOwnedPlot(); + if (plot == null) { + if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, WindChargeFlag.class, false)) { + event.setCancelled(true); + } + return; + } + if (!plot.getFlag(WindChargeFlag.class)) { + plot.debug("Could not update blocks by wind charge because wind-charge = 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 bff2b0c8b..7b92dadcf 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 @@ -92,6 +92,7 @@ import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag; import com.plotsquared.core.plot.flag.implementations.PriceFlag; import com.plotsquared.core.plot.flag.implementations.ProjectileChangeBlockFlag; import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; +import com.plotsquared.core.plot.flag.implementations.WindChargeFlag; import com.plotsquared.core.plot.flag.implementations.PveFlag; import com.plotsquared.core.plot.flag.implementations.PvpFlag; import com.plotsquared.core.plot.flag.implementations.RedstoneFlag; @@ -207,6 +208,7 @@ public final class GlobalFlagContainer extends FlagContainer { this.addFlag(VillagerInteractFlag.VILLAGER_INTERACT_FALSE); this.addFlag(VineGrowFlag.VINE_GROW_TRUE); this.addFlag(ProjectilesFlag.PROJECTILES_FALSE); + this.addFlag(WindChargeFlag.WIND_CHARGE_FALSE); // Double flags this.addFlag(PriceFlag.PRICE_NOT_BUYABLE); diff --git a/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/WindChargeFlag.java b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/WindChargeFlag.java new file mode 100644 index 000000000..4f3f2cfb2 --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/WindChargeFlag.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 WindChargeFlag extends BooleanFlag { + + public static final WindChargeFlag WIND_CHARGE_TRUE = new WindChargeFlag(true); + public static final WindChargeFlag WIND_CHARGE_FALSE = new WindChargeFlag(false); + + private WindChargeFlag(boolean value) { + super(value, TranslatableCaption.of("flags.flag_description_windcharge")); + } + + @Override + protected WindChargeFlag flagOf(@NonNull Boolean value) { + return value ? WIND_CHARGE_TRUE : WIND_CHARGE_FALSE; + } + +} diff --git a/Core/src/main/resources/lang/messages_en.json b/Core/src/main/resources/lang/messages_en.json index 5ea33d6a6..f11cee5a4 100644 --- a/Core/src/main/resources/lang/messages_en.json +++ b/Core/src/main/resources/lang/messages_en.json @@ -629,6 +629,7 @@ "flags.flag_description_leaf_decay": "Set to `false` to prevent leaves from decaying.", "flags.flag_description_projectiles": "Prevents guests from shooting projectiles on the plot when set to false.", "flags.flag_description_beacon_effect": "Enables beacon effects on the plot.", + "flags.flag_description_windcharge": "Enables Wind-Charge effects on the plot.", "flags.flag_error_boolean": "Flag value must be a boolean (true | false).", "flags.flag_error_enum": "Must be one of: ", "flags.flag_error_integer": "Flag value must be a whole positive number.",