diff --git a/commander/build.gradle b/commander/build.gradle new file mode 100644 index 0000000..a9ac8b6 --- /dev/null +++ b/commander/build.gradle @@ -0,0 +1,7 @@ +group 'mc' +version '1.0-SNAPSHOT' + +dependencies { + /* Core */ + compile_excludeCopy project(':core') +} diff --git a/commander/src/main/java/mc/commander/CommandExecutor.java b/commander/src/main/java/mc/commander/CommandExecutor.java new file mode 100644 index 0000000..2c1c0a7 --- /dev/null +++ b/commander/src/main/java/mc/commander/CommandExecutor.java @@ -0,0 +1,11 @@ +/* + * DmitriyMX + * 2018-05-22 + */ +package mc.commander; + +import mc.core.player.Player; + +public interface CommandExecutor { + void execute(Player sender, String command, String... args); +} diff --git a/commander/src/main/java/mc/commander/Commander.java b/commander/src/main/java/mc/commander/Commander.java new file mode 100644 index 0000000..03ef8a1 --- /dev/null +++ b/commander/src/main/java/mc/commander/Commander.java @@ -0,0 +1,44 @@ +/* + * DmitriyMX + * 2018-05-22 + */ +package mc.commander; + +import lombok.extern.slf4j.Slf4j; +import mc.core.chat.ChatStyle; +import mc.core.chat.SimpleChatProcessor; +import mc.core.player.Player; +import org.slf4j.Marker; +import org.slf4j.helpers.BasicMarkerFactory; + +import java.util.Collections; +import java.util.Map; + +@Slf4j +public class Commander extends SimpleChatProcessor { + private static final Marker COMMAND_MARKER = new BasicMarkerFactory().getMarker("Command"); + private static final String UNKNOW_COMMAND_MSG = ChatStyle.RED + "Unknown command \"" + ChatStyle.WHITE + "%s" + ChatStyle.RED + "\""; + private Map commands = Collections.emptyMap(); + + @Override + public void process(Player player, String message) { + if (message.startsWith("/")) { + log.info(COMMAND_MARKER, "<{}> {}", player.getName(), message); + + int idx = message.indexOf(' '); + if (idx == -1) { + idx = message.length(); + } + + String command = message.substring(1, idx).toLowerCase(); + if (commands.containsKey(command)) { + String[] args = message.substring(idx).split(" "); + commands.get(command).execute(player, command, args); + } else { + player.getChannel().sendChatMessage(String.format(UNKNOW_COMMAND_MSG, command)); + } + } else { + super.process(player, message); + } + } +} diff --git a/settings.gradle b/settings.gradle index 8636be1..2588cb2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,3 +4,4 @@ include('core') // Core include('proto125') // Protocol 1.2.5 include('proto125_netty') // Protocol 1.2.5 (Netty impl.) include('flat_world') +include('commander')