mirror of
https://github.com/ryandw11/UltraChat.git
synced 2024-12-01 06:33:45 +01:00
Basic Command System
- Implemented a basic command system. - Reimplemented the clear chat command.
This commit is contained in:
parent
b04124e416
commit
b3f259e66a
2
.gitignore
vendored
2
.gitignore
vendored
@ -27,3 +27,5 @@ bin/
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
|
||||
/target
|
@ -1,9 +1,18 @@
|
||||
package me.ryandw11.ultrachat;
|
||||
|
||||
import me.ryandw11.ultrachat.commands.ChatCommand;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* The main class of UltraChat.
|
||||
*/
|
||||
public class UltraChat extends JavaPlugin {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Objects.requireNonNull(getCommand("chat")).setExecutor(new ChatCommand(this));
|
||||
getLogger().info("UltraChat v" + getDescription().getVersion() + " was successfully enabled.");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
package me.ryandw11.ultrachat.commands;
|
||||
|
||||
import me.ryandw11.ultrachat.UltraChat;
|
||||
import me.ryandw11.ultrachat.commands.chat.ClearCommand;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* The main chat command for the plugin.
|
||||
*/
|
||||
public class ChatCommand implements CommandExecutor {
|
||||
private final UltraChat plugin;
|
||||
private final CommandHandler commandHandler;
|
||||
|
||||
public ChatCommand(UltraChat plugin) {
|
||||
this.plugin = plugin;
|
||||
this.commandHandler = new CommandHandler();
|
||||
this.commandHandler.registerCommand(new ClearCommand(), "clear");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String s, @NotNull String[] args) {
|
||||
try {
|
||||
if (args.length != 0)
|
||||
return commandHandler.handleCommand(sender, cmd, s, args);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
// Do nothing as this exception was triggered purposefully.
|
||||
}
|
||||
|
||||
if (sender.hasPermission("ultrachat.command.help")) {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
"&3=============[&2UltraChat&3]============="));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&3Created by: &2Ryandw11"));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
"&3Version: &2" + plugin.getDescription().getVersion()));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
"&3Github wiki:&2 https://github.com/ryandw11/CustomStructures/wiki"));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&3Commands:"));
|
||||
|
||||
for (SubCommand command : commandHandler.getSubCommands()) {
|
||||
if (!sender.hasPermission(command.commandPermission())) continue;
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
command.helpMessage()));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package me.ryandw11.ultrachat.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* An extremely primitive command handler.
|
||||
*/
|
||||
public class CommandHandler {
|
||||
private final Map<List<String>, SubCommand> commandMap;
|
||||
|
||||
public CommandHandler() {
|
||||
commandMap = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a command.
|
||||
*
|
||||
* @param s The command to register.
|
||||
* @param subCommand The sub command.
|
||||
*/
|
||||
public void registerCommand(String s, SubCommand subCommand) {
|
||||
if (commandMap.containsKey(Collections.singletonList(s.toLowerCase())))
|
||||
throw new IllegalArgumentException("Command already exists!");
|
||||
|
||||
commandMap.put(Collections.singletonList(s.toLowerCase()), subCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a command.
|
||||
*
|
||||
* @param subCommand The sub command.
|
||||
* @param args The aliases to register.
|
||||
*/
|
||||
public void registerCommand(SubCommand subCommand, String... args) {
|
||||
List<String> list = new ArrayList<>(Arrays.asList(args));
|
||||
list = list.stream().map(String::toLowerCase).collect(Collectors.toList());
|
||||
if (commandMap.containsKey(list))
|
||||
throw new IllegalArgumentException("Command already exists!");
|
||||
|
||||
commandMap.put(list, subCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a command.
|
||||
*
|
||||
* <p>Throws IllegalArgumentException if sub command does not exist.</p>
|
||||
*
|
||||
* @param sender The command sender.
|
||||
* @param cmd The command.
|
||||
* @param s The string.
|
||||
* @param args The arguments.
|
||||
* @return If the command is valid.
|
||||
*/
|
||||
public boolean handleCommand(CommandSender sender, Command cmd, String s, String[] args) {
|
||||
if (args.length == 0)
|
||||
return false;
|
||||
for (Map.Entry<List<String>, SubCommand> entry : commandMap.entrySet()) {
|
||||
if (entry.getKey().contains(args[0].toLowerCase())) {
|
||||
String[] newArgs = new String[args.length - 1];
|
||||
if (newArgs.length > 0) {
|
||||
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
|
||||
}
|
||||
return entry.getValue().subCommand(sender, cmd, s, newArgs);
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid command");
|
||||
}
|
||||
|
||||
public Collection<SubCommand> getSubCommands() {
|
||||
return commandMap.values();
|
||||
}
|
||||
|
||||
|
||||
}
|
30
src/main/java/me/ryandw11/ultrachat/commands/SubCommand.java
Normal file
30
src/main/java/me/ryandw11/ultrachat/commands/SubCommand.java
Normal file
@ -0,0 +1,30 @@
|
||||
package me.ryandw11.ultrachat.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public interface SubCommand {
|
||||
|
||||
/**
|
||||
* Get the help message for the command.
|
||||
* @return The help message for the command.
|
||||
*/
|
||||
String helpMessage();
|
||||
|
||||
/**
|
||||
* The permission for the command.
|
||||
* @return The permission for the command.
|
||||
*/
|
||||
String commandPermission();
|
||||
|
||||
/**
|
||||
* The sub command.
|
||||
*
|
||||
* @param sender The sender.
|
||||
* @param cmd The command.
|
||||
* @param s The command string.
|
||||
* @param args The arguments. (Does not include the subcommand name. So args.length for `/chat color` is 0.)
|
||||
* @return If the sub-command is valid.
|
||||
*/
|
||||
boolean subCommand(CommandSender sender, Command cmd, String s, String[] args);
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package me.ryandw11.ultrachat.commands.chat;
|
||||
|
||||
import me.ryandw11.ultrachat.commands.SubCommand;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* This is the clear command for UltraChat.
|
||||
* <p>/chat clear</p>
|
||||
* <p>Permission:</p>
|
||||
* <code>
|
||||
* ultrachat.command.clear
|
||||
* </code>
|
||||
*/
|
||||
public class ClearCommand implements SubCommand {
|
||||
@Override
|
||||
public String helpMessage() {
|
||||
return "&2/chat clear &3- &bClear all messages from the chat.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String commandPermission() {
|
||||
return "ultrachat.command.clear";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean subCommand(CommandSender sender, Command cmd, String s, String[] args) {
|
||||
if(!sender.hasPermission(commandPermission())) {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission for this command!");
|
||||
return true;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 100; i++) {
|
||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
||||
player.sendMessage(" ");
|
||||
}
|
||||
}
|
||||
|
||||
Bukkit.getServer().broadcastMessage(String.format("%s%s%s has cleared the chat!",
|
||||
ChatColor.GOLD,
|
||||
sender.getName(),
|
||||
ChatColor.GREEN));
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
name: UltraChat
|
||||
version: 3.0.0
|
||||
main: me.ryandw11.ultrachat
|
||||
main: me.ryandw11.ultrachat.UltraChat
|
||||
author: Ryandw11
|
||||
description: An advanced chat management plugin.
|
||||
depend: [Vault]
|
||||
softdepend: [PlaceholderAPI]
|
||||
api-version: 1.13
|
||||
commands:
|
||||
chat:
|
||||
description: The main command for Ultra Chat.
|
||||
aliases: [uchat, ultrac, ultrachat]
|
Loading…
Reference in New Issue
Block a user