From 080e6204f43aa988e46c0e5c23fc5f7dfc2426f8 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Sun, 21 Apr 2024 22:05:09 +0200 Subject: [PATCH] Fixes #2 Makes the edit command able to remove placeholders from signs. Editing the sign normally does not remove the placeholder, as there is no way to differentiate between a player intending to remove a placeholder, and a player not intending to remove a placeholder. --- .../command/EditSignCommand.java | 5 +++-- .../command/ViewSignCommand.java | 2 +- .../listener/SignClickListener.java | 17 +++++++++++++++++ .../listener/SignTextListener.java | 11 +++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java b/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java index c926fd6..06418e8 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java +++ b/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java @@ -61,9 +61,10 @@ public class EditSignCommand implements TabExecutor { // Register the line change request SignLineChangeRequest request = new SignLineChangeRequest(player, lineNumber - 1, builder.toString()); - PlaceholderSigns.getInstance().getRequestHandler().addSignChangeRequest(request); + PlaceholderSigns placeholderSigns = PlaceholderSigns.getInstance(); + placeholderSigns.getRequestHandler().addSignChangeRequest(request); - PlaceholderSigns.getInstance().getStringFormatter().displaySuccessMessage(commandSender, + placeholderSigns.getStringFormatter().displaySuccessMessage(commandSender, PlaceholderSignMessage.SUCCESS_CLICK_SIGN_TO_EDIT); return true; } diff --git a/src/main/java/net/knarcraft/placeholdersigns/command/ViewSignCommand.java b/src/main/java/net/knarcraft/placeholdersigns/command/ViewSignCommand.java index 53b215e..d7b0deb 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/command/ViewSignCommand.java +++ b/src/main/java/net/knarcraft/placeholdersigns/command/ViewSignCommand.java @@ -17,7 +17,7 @@ import java.util.List; */ public class ViewSignCommand implements TabExecutor { - boolean raw; + private final boolean raw; /** * Instantiates a new view sign command diff --git a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java index 5d96268..c8d1dc5 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java +++ b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java @@ -6,7 +6,9 @@ import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.util.ColorHelper; import net.knarcraft.placeholdersigns.PlaceholderSigns; import net.knarcraft.placeholdersigns.config.PlaceholderSignMessage; +import net.knarcraft.placeholdersigns.container.PlaceholderSign; import net.knarcraft.placeholdersigns.container.SignLineChangeRequest; +import net.knarcraft.placeholdersigns.handler.PlaceholderSignHandler; import net.knarcraft.placeholdersigns.handler.PlaceholderSignRequestHandler; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; @@ -160,6 +162,14 @@ public class SignClickListener implements Listener { SignSide signSide = sign.getSide(side); String[] lines = signSide.getLines(); + PlaceholderSignHandler signHandler = PlaceholderSigns.getInstance().getSignHandler(); + PlaceholderSign placeholderSign = PlaceholderSigns.getInstance().getSignHandler().getFromLocation(sign.getLocation()); + String oldPlaceholder = null; + if (placeholderSign != null) { + // Remove the old placeholder + oldPlaceholder = placeholderSign.placeholders().get(side).remove(request.line()); + } + lines[request.line()] = request.text(); // Run the sign change event to allow protection plugins to cancel, and allow the sign text listener to trigger @@ -167,6 +177,10 @@ public class SignClickListener implements Listener { player, lines, side); Bukkit.getPluginManager().callEvent(changeEvent); if (changeEvent.isCancelled()) { + if (placeholderSign != null) { + // Restore the old placeholder if the action didn't complete + placeholderSign.placeholders().get(side).put(request.line(), oldPlaceholder); + } return; } @@ -177,6 +191,9 @@ public class SignClickListener implements Listener { } sign.update(); + // Save any placeholder changes + signHandler.save(); + PlaceholderSigns.getInstance().getStringFormatter().displaySuccessMessage(player, PlaceholderSignMessage.SUCCESS_SIGN_CHANGED); } diff --git a/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java b/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java index 0830b21..d5101fc 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java +++ b/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java @@ -40,6 +40,17 @@ public class SignTextListener implements Listener { placeholders.put(i, line); } + updatePlaceholders(placeholders, event); + } + + /** + * Updates placeholders as necessary + * + * @param placeholders

The placeholders parsed from the lines

+ * @param event

The triggered sign change event

+ */ + private void updatePlaceholders(@NotNull Map placeholders, + @NotNull SignChangeEvent event) { Location location = event.getBlock().getLocation(); PlaceholderSignHandler signHandler = PlaceholderSigns.getInstance().getSignHandler(); PlaceholderSign existingSign = signHandler.getFromLocation(location);