package net.knarcraft.placeholdersigns.command; import net.knarcraft.knarlib.formatting.StringFormatter; import net.knarcraft.placeholdersigns.PlaceholderSigns; import net.knarcraft.placeholdersigns.config.PlaceholderSignMessage; import net.knarcraft.placeholdersigns.container.SignLineChangeRequest; 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 setting a sign's text to anything longer than normally possible */ public class EditSignCommand implements TabExecutor { private static final List lineNumbers; static { lineNumbers = new ArrayList<>(); for (int i = 1; i < 5; i++) { lineNumbers.add(String.valueOf(i)); } } @Override public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { PlaceholderSigns placeholderSigns = PlaceholderSigns.getInstance(); StringFormatter stringFormatter = placeholderSigns.getStringFormatter(); if (!(commandSender instanceof Player player)) { stringFormatter.displayErrorMessage(commandSender, PlaceholderSignMessage.ERROR_PLAYER_ONLY); return false; } if (args.length < 1) { return false; } // Parse the specified line number int lineNumber; try { lineNumber = Integer.parseInt(args[0]); if (lineNumber < 0 || lineNumber > 4) { return false; } } catch (NumberFormatException exception) { return false; } // Make sure no argument is treated as an empty string String start; if (args.length > 1) { start = args[1]; } else { start = ""; } // Get all arguments as a space-separated string StringBuilder builder = new StringBuilder(start); for (int i = 2; i < args.length; i++) { builder.append(" ").append(args[i]); } // Register the line change request SignLineChangeRequest request = new SignLineChangeRequest(player, lineNumber - 1, builder.toString()); placeholderSigns.getRequestHandler().addSignChangeRequest(request); stringFormatter.displaySuccessMessage(commandSender, PlaceholderSignMessage.SUCCESS_CLICK_SIGN_TO_EDIT); return true; } @Nullable @Override public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { if (args.length == 1) { return lineNumbers; } else { return new ArrayList<>(); } } }