101 lines
4.4 KiB
Java
101 lines
4.4 KiB
Java
/*
|
|
* Copyright (C) 2025 Minecon724
|
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
|
* in the project root for the full license text.
|
|
*/
|
|
|
|
package eu.m724.tweaks.module.alert;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.meta.BookMeta;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.List;
|
|
|
|
public class AlertCommand implements CommandExecutor {
|
|
private List<String> pending;
|
|
private long when;
|
|
|
|
private final AlertModule manager;
|
|
|
|
public AlertCommand(AlertModule manager) {
|
|
this.manager = manager;
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
|
if (args.length == 0) {
|
|
sender.sendMessage("/emergencyalert manages emergency alerts");
|
|
sender.sendMessage("/emergencyalert cancel - cancels a pending or an active alert");
|
|
sender.sendMessage("/emergencyalert new <content> - creates a new alert with given text");
|
|
sender.sendMessage("/emergencyalert new - creates a new alert with contents of held book");
|
|
} else {
|
|
if (args[0].equals("CONFIRM")) {
|
|
if (pending != null) {
|
|
if (System.currentTimeMillis() - when > 15 * 1000) {
|
|
sender.sendMessage("There was a pending alert, but you took too long to confirm it, please create it again");
|
|
pending = null;
|
|
return true;
|
|
}
|
|
|
|
sender.sendMessage("Alert broadcast");
|
|
manager.start(pending.toArray(String[]::new));
|
|
pending = null;
|
|
} else {
|
|
sender.sendMessage("There is no pending alert to confirm");
|
|
}
|
|
} else if (args[0].equalsIgnoreCase("confirm")) {
|
|
sender.sendMessage("CONFIRM must be in all caps");
|
|
} else if (args[0].equalsIgnoreCase("cancel")) {
|
|
if (AlertModule.current != null) {
|
|
manager.stop();
|
|
sender.sendMessage("Cancelled alert");
|
|
} else if (pending != null) {
|
|
sender.sendMessage("Cancelled pending alert");
|
|
pending = null;
|
|
} else {
|
|
sender.sendMessage("There is no alert to cancel");
|
|
}
|
|
} else if (args[0].equalsIgnoreCase("new")) {
|
|
if (pending != null) {
|
|
sender.sendMessage("Another alert already waiting for confirmation. /emergencyalert cancel?");
|
|
return true;
|
|
}
|
|
|
|
if (args.length == 1) {
|
|
if (sender instanceof Player player) {
|
|
var is = player.getInventory().getItemInMainHand();
|
|
if (is.getType() == Material.WRITTEN_BOOK) {
|
|
player.swingMainHand();
|
|
pending = ((BookMeta) is.getItemMeta()).getPages();
|
|
sender.sendMessage("Used book content as alert text");
|
|
} else {
|
|
sender.sendMessage("You must hold a written book in your hand or pass a command argument to use as alert text");
|
|
}
|
|
} else {
|
|
sender.sendMessage("You must pass some text to alert, or be a player to use a book");
|
|
}
|
|
} else {
|
|
pending = List.of(String.join(" " , args));
|
|
sender.sendMessage("Used command argument as alert text");
|
|
}
|
|
|
|
if (pending != null) {
|
|
when = System.currentTimeMillis();
|
|
if (AlertModule.current != null) {
|
|
sender.sendMessage("Broadcasting a new alert will cancel the currently active one");
|
|
}
|
|
sender.sendMessage("Please confirm broadcast with /emergencyalert CONFIRM within 15 seconds");
|
|
}
|
|
} else {
|
|
sender.sendMessage("Unknown argument \"%s\". Run this command without any arguments to see help.".formatted(args[0]));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|