Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. /*
  2. * Minecraft Forge
  3. * Copyright (c) 2016.
  4. *
  5. * This library is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation version 2.1
  8. * of the License.
  9. *
  10. * This library is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public
  16. * License along with this library; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  18. */
  19.  
  20. package net.minecraftforge.server.console;
  21.  
  22. import static com.google.common.base.Preconditions.checkNotNull;
  23.  
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.concurrent.ExecutionException;
  27. import java.util.concurrent.Future;
  28.  
  29. import org.apache.logging.log4j.LogManager;
  30. import org.apache.logging.log4j.Logger;
  31. import org.bukkit.event.server.TabCompleteEvent;
  32.  
  33. import net.minecraft.server.dedicated.DedicatedServer;
  34. import org.jline.reader.Candidate;
  35. import org.jline.reader.Completer;
  36. import org.jline.reader.LineReader;
  37. import org.jline.reader.ParsedLine;
  38.  
  39. final class ConsoleCommandCompleter implements Completer {
  40.  
  41. private static final Logger logger = LogManager.getLogger();
  42. private final DedicatedServer server;
  43.  
  44. public ConsoleCommandCompleter(DedicatedServer server) {
  45. this.server = checkNotNull(server, "server");
  46. }
  47.  
  48. @Override
  49. public void complete(LineReader reader, ParsedLine line, List<Candidate> candidates) {
  50. String buffer = line.line();
  51. boolean prefix;
  52. //forge getTabCompletions не принимает нулл.
  53. if (buffer.isEmpty() || buffer.charAt(0) != '/') {
  54. buffer = '/' + buffer;
  55. prefix = false;
  56. } else {
  57. prefix = true;
  58. }
  59. //Craftbukkit start
  60. //Для forge нужен слеш, иначе он не выводит полный список.
  61. final String forge = buffer;
  62. final String bakkit = line.line();
  63. Future<List<String>> tabComplete = this.server.callFromMainThread(() -> this.server.getTabCompletions(this.server, forge, this.server.getPosition(), false));
  64. Future<List<String>> offers = this.server.callFromMainThread(() -> server.server.getCommandMap().tabComplete(server.server.getConsoleSender(), bakkit));
  65.  
  66. List<String> all = new ArrayList<String>();
  67. try {
  68. //Заполняем полный список forgeComplete, когда в buffer не было слеша.
  69. //Пропускаем список, когда в buffer был слеш.
  70. //Иначе список будет через слеш и смешается с complete worldedit.
  71. if (!prefix || buffer.isEmpty()) {
  72. for (String comp : tabComplete.get()) {
  73. boolean hasPrefix = comp.charAt(0) != '/';
  74. all.add(hasPrefix ? comp : comp.substring(1));
  75. }
  76. }
  77. //Заполняем список bukkitComplete, если вернуло не null.
  78. if (offers != null) {
  79. all.addAll(offers.get());
  80. }
  81. } catch (InterruptedException e) {
  82. Thread.currentThread().interrupt();
  83. } catch (ExecutionException e) {
  84. logger.error("Failed to tab complete", e);
  85. }
  86.  
  87. //CallTabCompleteEvent
  88. TabCompleteEvent tabEvent = new TabCompleteEvent(server.server.getConsoleSender(), buffer, all);
  89. server.server.getPluginManager().callEvent(tabEvent);
  90.  
  91. if (!tabEvent.isCancelled()) {
  92. for (String completion : tabEvent.getCompletions()) {
  93. if (!completion.isEmpty()) {
  94. Candidate candidate = new Candidate(completion);
  95. candidates.add(candidate);
  96. }
  97. }
  98. }
  99. //Craftbukkit end
  100. }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement