From 06bb6856a87e4f01e55ba5296731398c63aaf5ec Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Mon, 11 May 2020 09:48:18 +0100 Subject: [PATCH 1/2] Fix bad getApplicablePlotArea(Location) code - Fixes #2815 alongside 667098268f2ce78e79c9f0dd3c7f27c41e8bf462 --- .../plotsquared/core/plot/world/DefaultPlotAreaManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Core/src/main/java/com/plotsquared/core/plot/world/DefaultPlotAreaManager.java b/Core/src/main/java/com/plotsquared/core/plot/world/DefaultPlotAreaManager.java index c4528bb81..833bf3d4f 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/world/DefaultPlotAreaManager.java +++ b/Core/src/main/java/com/plotsquared/core/plot/world/DefaultPlotAreaManager.java @@ -63,7 +63,11 @@ public class DefaultPlotAreaManager implements PlotAreaManager { case 0: return null; case 1: - return this.plotAreas[0]; + return this.plotAreas[0].getWorldHash() == location.getWorld().hashCode() + && this.plotAreas[0].contains(location) && (!this.plotAreaHasCollision + || location.getWorld().equals(this.plotAreas[0].getWorldName())) ? + this.plotAreas[0] : + null; case 2: case 3: case 4: From 3064ae80d114c1e56ffcf701213de349277474b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Mon, 11 May 2020 11:19:36 +0200 Subject: [PATCH 2/2] Add a keep-inventory flag --- .../bukkit/listener/PlayerEvents.java | 10 +++++ .../core/configuration/Captions.java | 1 + .../core/plot/flag/GlobalFlagContainer.java | 2 + .../implementations/KeepInventoryFlag.java | 45 +++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 Core/src/main/java/com/plotsquared/core/plot/flag/implementations/KeepInventoryFlag.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java index 3f8537463..fb78d7ccd 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java @@ -68,6 +68,7 @@ import com.plotsquared.core.plot.flag.implementations.IceMeltFlag; import com.plotsquared.core.plot.flag.implementations.InstabreakFlag; import com.plotsquared.core.plot.flag.implementations.InvincibleFlag; import com.plotsquared.core.plot.flag.implementations.ItemDropFlag; +import com.plotsquared.core.plot.flag.implementations.KeepInventoryFlag; import com.plotsquared.core.plot.flag.implementations.KelpGrowFlag; import com.plotsquared.core.plot.flag.implementations.LiquidFlowFlag; import com.plotsquared.core.plot.flag.implementations.MiscBreakFlag; @@ -166,6 +167,7 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; @@ -2991,4 +2993,12 @@ public class PlayerEvents extends PlotListener implements Listener { } } + + @EventHandler public void onDeath(final PlayerDeathEvent event) { + final Plot plot = BukkitUtil.getPlayer(event.getEntity()).getCurrentPlot(); + if (plot != null && plot.getFlag(KeepInventoryFlag.class)) { + event.setKeepInventory(true); + } + } + } diff --git a/Core/src/main/java/com/plotsquared/core/configuration/Captions.java b/Core/src/main/java/com/plotsquared/core/configuration/Captions.java index c6dad68d6..bee58ed27 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/Captions.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/Captions.java @@ -667,6 +667,7 @@ public enum Captions implements Caption { FLAG_DESCRIPTION_GUEST_GAMEMODE("Determines the guest gamemode in the plot.", "Flags"), FLAG_DESCRIPTION_BLOCKED_CMDS("A list of commands that are blocked in the plot.", "Flags"), FLAG_DESCRIPTION_KEEP("Prevents the plot from expiring. Can be set to: true, false, the number of milliseconds to keep the plot for or a timestamp (3w 2d 5h).", "Flags"), + FLAG_DESCRIPTION_KEEP_INVENTORY("Prevents players from dropping their items when they die inside of the plot.", "Flags"), // // FLAG_ERROR_BOOLEAN("Flag value must be a boolean (true|false)", false, "Flags"), 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 af618769f..42965ef39 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 @@ -65,6 +65,7 @@ import com.plotsquared.core.plot.flag.implementations.InstabreakFlag; import com.plotsquared.core.plot.flag.implementations.InvincibleFlag; import com.plotsquared.core.plot.flag.implementations.ItemDropFlag; import com.plotsquared.core.plot.flag.implementations.KeepFlag; +import com.plotsquared.core.plot.flag.implementations.KeepInventoryFlag; import com.plotsquared.core.plot.flag.implementations.KelpGrowFlag; import com.plotsquared.core.plot.flag.implementations.LiquidFlowFlag; import com.plotsquared.core.plot.flag.implementations.MiscBreakFlag; @@ -176,6 +177,7 @@ public final class GlobalFlagContainer extends FlagContainer { this.addFlag(ChatFlag.CHAT_FLAG_TRUE); this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE); this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE); + this.addFlag(KeepInventoryFlag.KEEP_INVENTORY_FALSE); // Enum Flags this.addFlag(WeatherFlag.PLOT_WEATHER_FLAG_OFF); diff --git a/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/KeepInventoryFlag.java b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/KeepInventoryFlag.java new file mode 100644 index 000000000..d2fd09c9f --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/plot/flag/implementations/KeepInventoryFlag.java @@ -0,0 +1,45 @@ +/* + * _____ _ _ _____ _ + * | __ \| | | | / ____| | | + * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | + * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | + * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | + * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| + * | | + * |_| + * PlotSquared plot management system for Minecraft + * Copyright (C) 2020 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.Captions; +import com.plotsquared.core.plot.flag.types.BooleanFlag; +import org.jetbrains.annotations.NotNull; + +public class KeepInventoryFlag extends BooleanFlag { + + public static final KeepInventoryFlag KEEP_INVENTORY_TRUE = new KeepInventoryFlag(true); + public static final KeepInventoryFlag KEEP_INVENTORY_FALSE = new KeepInventoryFlag(false); + + private KeepInventoryFlag(final boolean value) { + super(value, Captions.FLAG_DESCRIPTION_KEEP_INVENTORY); + } + + @Override protected KeepInventoryFlag flagOf(@NotNull final Boolean value) { + return value ? KEEP_INVENTORY_TRUE : KEEP_INVENTORY_FALSE; + } + +}