1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
From 89f0cb0fb82ec84a13ddb088b944ac1d4167bb0f Mon Sep 17 00:00:00 2001
From: DemonWav <demonwav@gmail.com>
Date: Sat, 30 Jan 2016 19:17:19 -0600
Subject: [PATCH] Add Location support to tab completers (vanilla feature
missing in CraftBukkit)
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 4a421ba..ff8770b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1151,7 +1151,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return arraylist;
}
*/
- return server.tabComplete(icommandlistener, s);
+ return server.tabComplete(icommandlistener, s, blockposition); // PaperSpigot - add Location argument
// CraftBukkit end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index a54b3e8..e130052 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -29,6 +29,7 @@ import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
+import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.UnsafeValues;
@@ -1597,21 +1598,38 @@ public final class CraftServer implements Server {
}
public List<String> tabComplete(net.minecraft.server.ICommandListener sender, String message) {
+ return tabComplete(sender, message, null); // PaperSpigot - location tab-completes. Original code here moved below
+ }
+
+ // PaperSpigot start - add BlockPosition support
+ /*
+ this code is copied, except for the noted change, from the original tabComplete(net.minecraft.server.ICommandListener sender, String message) method
+ */
+ public List<String> tabComplete(net.minecraft.server.ICommandListener sender, String message, BlockPosition blockPosition) {
if (!(sender instanceof EntityPlayer)) {
return ImmutableList.of();
}
Player player = ((EntityPlayer) sender).getBukkitEntity();
if (message.startsWith("/")) {
- return tabCompleteCommand(player, message);
+ return tabCompleteCommand(player, message, blockPosition);
} else {
return tabCompleteChat(player, message);
}
}
+ // PaperSpigot end
public List<String> tabCompleteCommand(Player player, String message) {
+ return tabCompleteCommand(player, message, null); // PaperSpigot - location tab-completes. Original code here moved below
+ }
+
+ // PaperSpigot start - add BlockPosition support
+ /*
+ this code is copied, except for the noted change, from the original tabCompleteCommand(Player player, String message) method
+ */
+ public List<String> tabCompleteCommand(Player player, String message, BlockPosition blockPosition) {
// Spigot Start
- if ( (org.spigotmc.SpigotConfig.tabComplete < 0 || message.length() <= org.spigotmc.SpigotConfig.tabComplete) && !message.contains( " " ) )
+ if ( (org.spigotmc.SpigotConfig.tabComplete < 0 || message.length() <= org.spigotmc.SpigotConfig.tabComplete) && !message.contains( " " ) )
{
return ImmutableList.of();
}
@@ -1619,7 +1637,13 @@ public final class CraftServer implements Server {
List<String> completions = null;
try {
- completions = getCommandMap().tabComplete(player, message.substring(1));
+ // send location info if present
+ // completions = getCommandMap().tabComplete(player, message.substring(1));
+ if (blockPosition == null) {
+ completions = getCommandMap().tabComplete(player, message.substring(1));
+ } else {
+ completions = getCommandMap().tabComplete(player, message.substring(1), new Location(player.getWorld(), blockPosition.getX(), blockPosition.getY(), blockPosition.getZ()));
+ }
} catch (CommandException ex) {
player.sendMessage(ChatColor.RED + "An internal error occurred while attempting to tab-complete this command");
getLogger().log(Level.SEVERE, "Exception when " + player.getName() + " attempted to tab complete " + message, ex);
@@ -1627,6 +1651,7 @@ public final class CraftServer implements Server {
return completions == null ? ImmutableList.<String>of() : completions;
}
+ // PaperSpigot end
public List<String> tabCompleteChat(Player player, String message) {
List<String> completions = new ArrayList<String>();
diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
index de788d6..db46eb0 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
@@ -7,6 +7,7 @@ import net.minecraft.server.*;
import org.apache.commons.lang.Validate;
import org.apache.logging.log4j.Level;
+import org.bukkit.Location;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
@@ -46,11 +47,25 @@ public final class VanillaCommandWrapper extends VanillaCommand {
@Override
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
+ return tabComplete(sender, alias, args, null); // PaperSpigot - location tab-completes. Original code moved below
+ }
+
+ // PaperSpigot start - location tab-completes
+ /*
+ this code is copied, except for the noted change, from the original tabComplete(CommandSender sender, String alias, String[] args) method
+ */
+ @Override
+ public List<String> tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException {
Validate.notNull(sender, "Sender cannot be null");
Validate.notNull(args, "Arguments cannot be null");
Validate.notNull(alias, "Alias cannot be null");
- return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
+ if (location == null) { // PaperSpigot use location information if available
+ return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
+ } else {
+ return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()));
+ }
}
+ // PaperSpigot end
public static CommandSender lastSender = null; // Nasty :(
--
1.9.1
|