aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0085-Add-Location-support-to-tab-completers-vanilla-featu.patch
blob: 3b985f896a6b44866d5f0e883669513b148fcb81 (plain)
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
From 80b20092e304d27660bf79623f9187c93cf28984 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 ee09922..b400ce0 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1153,7 +1153,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..642880e 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 || !((CraftWorld) player.getWorld()).getHandle().paperSpigotConfig.allowBlockLocationTabCompletion) {
+                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 :(
 
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
index 00057a1..c3c374d 100644
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
@@ -390,4 +390,10 @@ public class PaperSpigotWorldConfig
     {
         allChunksAreSlimeChunks = getBoolean( "all-chunks-are-slime-chunks", false );
     }
+
+    public boolean allowBlockLocationTabCompletion;
+    private void allowBlockLocationTabCompletion()
+    {
+        allowBlockLocationTabCompletion = getBoolean( "allow-block-location-tab-completion", true );
+    }
 }
-- 
2.7.1