diff --git a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java index 464b9f5..57c9a12 100644 --- a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java +++ b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java @@ -718,9 +718,9 @@ } } - if (s.startsWith("/")) + if (s.startsWith("/") || s.length() > 1 && s.charAt(0) == '.' && s.charAt(1) != '.') { - this.handleSlashCommand(s); + this.handleSlashCommand(s.substring(1)); } else { diff --git a/src/main/java/org/ultramine/commands/CommandRegistry.java b/src/main/java/org/ultramine/commands/CommandRegistry.java index b81698b..f23b559 100644 --- a/src/main/java/org/ultramine/commands/CommandRegistry.java +++ b/src/main/java/org/ultramine/commands/CommandRegistry.java @@ -3,7 +3,9 @@ import net.minecraft.command.CommandBase; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; + import org.ultramine.commands.syntax.ArgumentsPatternParser; +import org.ultramine.server.util.TranslitTable; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -24,8 +26,10 @@ public IExtendedCommand registerCommand(IExtendedCommand command) { + @SuppressWarnings("unchecked") List aliases = command.getCommandAliases(); commandMap.put(command.getCommandName(), command); + commandMap.put(TranslitTable.translitENRU(command.getCommandName()), command); registeredCommands.add(command); if (aliases != null) @@ -34,7 +38,10 @@ { IExtendedCommand cmd = commandMap.get(alias); if (cmd == null || !cmd.getCommandName().equals(alias)) + { commandMap.put(alias, command); + commandMap.put(TranslitTable.translitENRU(alias), command); + } } } diff --git a/src/main/java/org/ultramine/server/util/TranslitTable.java b/src/main/java/org/ultramine/server/util/TranslitTable.java new file mode 100644 index 0000000..59db16e --- /dev/null +++ b/src/main/java/org/ultramine/server/util/TranslitTable.java @@ -0,0 +1,45 @@ +package org.ultramine.server.util; + +import gnu.trove.map.TCharCharMap; +import gnu.trove.map.hash.TCharCharHashMap; + +public class TranslitTable +{ + private static final String en = "qwertyuiop[]asdfghjkl;'zxcvbnm,./"; + private static final String ru = "йцукенгшщзхъфывапролджэячсмитьбю."; + + private static final TCharCharMap en_ru = new TCharCharHashMap(); + private static final TCharCharMap ru_en = new TCharCharHashMap(); + + static + { + for(int i = 0, s = en.length(); i < s; i++) + { + en_ru.put(en.charAt(i), ru.charAt(i)); + ru_en.put(ru.charAt(i), en.charAt(i)); + } + } + + private static String translit(String src, TCharCharMap table) + { + StringBuilder dst = new StringBuilder(src.length()); + for(int i = 0, s = src.length(); i < s; i++) + { + char c1 = src.charAt(i); + char c2 = table.get(c1); + dst.append(c2 != '\00' ? c2 : c1); + } + + return dst.toString(); + } + + public static String translitENRU(String src) + { + return translit(src, en_ru); + } + + public static String translitRUEN(String src) + { + return translit(src, ru_en); + } +}