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.
This commit is contained in:
parent
e8c93baac4
commit
080e6204f4
src/main/java/net/knarcraft/placeholdersigns
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -40,6 +40,17 @@ public class SignTextListener implements Listener {
|
||||
placeholders.put(i, line);
|
||||
}
|
||||
|
||||
updatePlaceholders(placeholders, event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates placeholders as necessary
|
||||
*
|
||||
* @param placeholders <p>The placeholders parsed from the lines</p>
|
||||
* @param event <p>The triggered sign change event</p>
|
||||
*/
|
||||
private void updatePlaceholders(@NotNull Map<Integer, String> placeholders,
|
||||
@NotNull SignChangeEvent event) {
|
||||
Location location = event.getBlock().getLocation();
|
||||
PlaceholderSignHandler signHandler = PlaceholderSigns.getInstance().getSignHandler();
|
||||
PlaceholderSign existingSign = signHandler.getFromLocation(location);
|
||||
|
Loading…
x
Reference in New Issue
Block a user