Adds a command for un-waxing a sign
All checks were successful
KnarCraft/PlaceholderSigns/pipeline/head This commit looks good

This commit is contained in:
Kristian Knarvik 2024-04-28 11:22:18 +02:00
parent 66c45e00e2
commit 14f9fa8833
8 changed files with 95 additions and 24 deletions

View File

@ -17,21 +17,23 @@ won't be changed unless the player passes all world protection checks.
## Commands ## Commands
| Command | Arguments | Description | | Command | Arguments | Description |
|--------------|----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |--------------|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| /setSignLine | \<line> \<text> \<text> ... | Sets the text of the sign line (1-4) to the given input. Then right-click the sign to update. | | /setSignLine | \<line> \<text> \<text> ... | Sets the text of the sign line (1-4) to the given input. Then right-click the sign to update. |
| /viewSign | \[raw true/false] \[placeholders true/false] | Allows the player to view the full contents and details of the looked at sign. If "raw" is true, formatting codes are displayed. If placeholders is true, stored placeholders are displayed. | | /viewSign | \[raw true/false] \[placeholders true/false] | Shows the full contents and details of the sign you are currently looking at. If "raw" is true, formatting codes are displayed. If placeholders is true, stored placeholders are displayed. |
| /copySign | | Allows the player to copy the sign they are currently looking at to another sign, including placeholders, formatting codes, dye and waxed state. | | /copySign | | Copies the sign you are currently looking at to another sign, including placeholders, formatting codes, dye and waxed state. |
| /unWaxSign | | Removes the wax from the sign you are currently looking at. |
## Permissions ## Permissions
| Permission | Description | | Permission | Description |
|------------------------------------|---------------------------------------------------------------------------------------------------------------| |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| placeholdersigns.* | Gives all permissions. | | placeholdersigns.* | Gives all permissions. |
| placeholdersigns.edit | Allows unrestricted use of the /setSignLine command. | | placeholdersigns.edit | Allows unrestricted use of the /setSignLine command. |
| placeholdersigns.edit.use | Allows use of the /setSignLine command. | | placeholdersigns.edit.use | Allows use of the /setSignLine command. |
| placeholdersigns.edit.bypass-waxed | Allows use of the /setSignLine command on a waxed sign. | | placeholdersigns.edit.bypass-waxed | Allows use of the /setSignLine command on a waxed sign. |
| placeholdersigns.placeholder | Allows a player to make signs containing placeholders. Without this, placeholders are treated as normal text. | | placeholdersigns.placeholder | Allows a player to make signs containing placeholders. Without this, placeholders are treated as normal text for all commands, and when editing sign text. |
| placeholdersigns.copy | Allows unrestricted use of the /copySign command. | | placeholdersigns.copy | Allows unrestricted use of the /copySign command. |
| placeholdersigns.copy.use | Allows use of the /copySign command. | | placeholdersigns.copy.use | Allows use of the /copySign command. |
| placeholdersigns.copy.bypass-waxed | Allows pasting a sign copied with /copySign onto a waxed sign. | | placeholdersigns.copy.bypass-waxed | Allows pasting a sign copied with /copySign onto a waxed sign. |
| placeholdersigns.unwax | Allows use of the /unWaxSign command |

View File

@ -5,6 +5,7 @@ import net.knarcraft.knarlib.formatting.Translator;
import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.property.ColorConversion;
import net.knarcraft.placeholdersigns.command.CopySignCommand; import net.knarcraft.placeholdersigns.command.CopySignCommand;
import net.knarcraft.placeholdersigns.command.EditSignCommand; import net.knarcraft.placeholdersigns.command.EditSignCommand;
import net.knarcraft.placeholdersigns.command.UnWaxSignCommand;
import net.knarcraft.placeholdersigns.command.ViewSignCommand; import net.knarcraft.placeholdersigns.command.ViewSignCommand;
import net.knarcraft.placeholdersigns.config.PlaceholderSignMessage; import net.knarcraft.placeholdersigns.config.PlaceholderSignMessage;
import net.knarcraft.placeholdersigns.handler.PlaceholderSignHandler; import net.knarcraft.placeholdersigns.handler.PlaceholderSignHandler;
@ -95,6 +96,7 @@ public final class PlaceholderSigns extends JavaPlugin {
registerCommand("setSignLine", new EditSignCommand()); registerCommand("setSignLine", new EditSignCommand());
registerCommand("viewSign", new ViewSignCommand()); registerCommand("viewSign", new ViewSignCommand());
registerCommand("copySign", new CopySignCommand()); registerCommand("copySign", new CopySignCommand());
registerCommand("unWaxSign", new UnWaxSignCommand());
} }
@Override @Override

View File

@ -0,0 +1,52 @@
package net.knarcraft.placeholdersigns.command;
import net.knarcraft.knarlib.formatting.StringFormatter;
import net.knarcraft.placeholdersigns.PlaceholderSigns;
import net.knarcraft.placeholdersigns.config.PlaceholderSignMessage;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* A command for removing the wax on a sign
*/
public class UnWaxSignCommand implements TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] strings) {
StringFormatter stringFormatter = PlaceholderSigns.getInstance().getStringFormatter();
if (!(commandSender instanceof Player player)) {
stringFormatter.displayErrorMessage(commandSender, PlaceholderSignMessage.ERROR_PLAYER_ONLY);
return false;
}
Block targetBlock = player.getTargetBlockExact(7);
if (targetBlock == null || !(targetBlock.getState() instanceof Sign sign)) {
stringFormatter.displayErrorMessage(commandSender, PlaceholderSignMessage.ERROR_NOT_LOOKING_AT_SIGN);
return false;
}
sign.setWaxed(false);
sign.update();
stringFormatter.displaySuccessMessage(commandSender, PlaceholderSignMessage.SUCCESS_SIGN_UN_WAXED);
return true;
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] strings) {
return new ArrayList<>();
}
}

View File

@ -85,8 +85,8 @@ public class ViewSignCommand implements TabExecutor {
/** /**
* Prints the current contents of a sign to a player * Prints the current contents of a sign to a player
* *
* @param sign <p>The sign to print</p> * @param sign <p>The sign to print</p>
* @param player <p>The player to display the contents to</p> * @param player <p>The player to display the contents to</p>
*/ */
private void printSign(@NotNull Sign sign, @NotNull Player player, boolean showRawText, boolean showPlaceholders) { private void printSign(@NotNull Sign sign, @NotNull Player player, boolean showRawText, boolean showPlaceholders) {
Location location = sign.getLocation(); Location location = sign.getLocation();
@ -161,8 +161,10 @@ public class ViewSignCommand implements TabExecutor {
} }
Map<Integer, String> placeholders = placeholderSign.placeholders().get(side); Map<Integer, String> placeholders = placeholderSign.placeholders().get(side);
for (Map.Entry<Integer, String> entry : placeholders.entrySet()) { if (placeholders != null) {
lines[entry.getKey()] = entry.getValue(); for (Map.Entry<Integer, String> entry : placeholders.entrySet()) {
lines[entry.getKey()] = entry.getValue();
}
} }
return getSignText(lines, raw); return getSignText(lines, raw);

View File

@ -62,6 +62,11 @@ public enum PlaceholderSignMessage implements TranslatableMessage {
* The message displayed when a protection plugin cancels the sign change event * The message displayed when a protection plugin cancels the sign change event
*/ */
ERROR_CANCELLED_BY_PROTECTION, ERROR_CANCELLED_BY_PROTECTION,
/**
* The message displayed when a sign has been successfully un-waxed
*/
SUCCESS_SIGN_UN_WAXED,
; ;
@Override @Override

View File

@ -130,11 +130,11 @@ public class SignClickListener implements Listener {
/** /**
* Gets the final lines from a sign side, after inserting placeholders and running a sign change event * Gets the final lines from a sign side, after inserting placeholders and running a sign change event
* *
* @param sign <p>The sign that's changed</p> * @param sign <p>The sign that's changed</p>
* @param signSide <p>The side of the sign to get lines from</p> * @param signSide <p>The side of the sign to get lines from</p>
* @param side <p>The side that's processed</p> * @param side <p>The side that's processed</p>
* @param placeholderSign <p>The placeholder sign corresponding to the sign, if any</p> * @param placeholderSign <p>The placeholder sign corresponding to the sign, if any</p>
* @param player <p>The player attempting to paste the sign</p> * @param player <p>The player attempting to paste the sign</p>
* @return <p>The final lines, or null if the event was cancelled</p> * @return <p>The final lines, or null if the event was cancelled</p>
*/ */
@Nullable @Nullable

View File

@ -18,6 +18,9 @@ commands:
usage: /<command> usage: /<command>
permission: placeholdersigns.copy.use permission: placeholdersigns.copy.use
description: Copies all sign information from one sign to another description: Copies all sign information from one sign to another
unWaxSign:
usage: /<command>
permission: placeholdersigns.unwax
permissions: permissions:
placeholdersigns.*: placeholdersigns.*:
@ -27,6 +30,7 @@ permissions:
- placeholdersigns.placeholder - placeholdersigns.placeholder
- placeholdersigns.view - placeholdersigns.view
- placeholdersigns.copy - placeholdersigns.copy
- placeholdersigns.unwax
default: op default: op
placeholdersigns.edit: placeholdersigns.edit:
description: Allows a player to use the /editSign command without restriction description: Allows a player to use the /editSign command without restriction
@ -57,4 +61,7 @@ permissions:
default: false default: false
placeholdersigns.copy.bypass-waxed: placeholdersigns.copy.bypass-waxed:
description: Allows a player to use the /copySign command and paste onto a waxed sign description: Allows a player to use the /copySign command and paste onto a waxed sign
default: false
placeholdersigns.unwax:
description: Allows a player to remove the wax from a sign
default: false default: false

View File

@ -17,4 +17,5 @@ en:
ERROR_NOT_LOOKING_AT_SIGN: "You are not currently looking at a sign" ERROR_NOT_LOOKING_AT_SIGN: "You are not currently looking at a sign"
SUCCESS_CLICK_SIGN_TO_PASTE: "&7Click the sign you want to paste onto" SUCCESS_CLICK_SIGN_TO_PASTE: "&7Click the sign you want to paste onto"
SUCCESS_SIGN_PASTED: "&7Sign pasted!" SUCCESS_SIGN_PASTED: "&7Sign pasted!"
ERROR_CANCELLED_BY_PROTECTION: "A protection plugin blocked the sign change" ERROR_CANCELLED_BY_PROTECTION: "A protection plugin blocked the sign change"
SUCCESS_SIGN_UN_WAXED: "&7The sign was successfully un-waxed"