Skip to content

Commit

Permalink
Fix tab completion in 1.13
Browse files Browse the repository at this point in the history
  • Loading branch information
mergu committed Nov 14, 2018
1 parent 96253ff commit a6580f5
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
3 changes: 3 additions & 0 deletions plugin/src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -902,6 +902,9 @@ public void run() {
try {
DenizenCore.loadScripts();

// Synchronize any script commands added while loading scripts.
CommandScriptHelper.syncDenizenCommands();

// Load the saves.yml into memory
reloadSaves();

Expand Down
Expand Up @@ -3,6 +3,7 @@
import net.aufdemrand.denizen.objects.dLocation;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.objects.notable.NotableManager;
import net.aufdemrand.denizen.scripts.containers.core.CommandScriptHelper;
import net.aufdemrand.denizen.scripts.containers.core.VersionScriptContainer;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.ScriptVersionChecker;
Expand Down Expand Up @@ -319,6 +320,7 @@ public void reload(CommandContext args, CommandSender sender) throws CommandExce
DenizenCore.reloadScripts();
denizen.notableManager().reloadNotables();
denizen.reloadSaves();
CommandScriptHelper.syncDenizenCommands();
Messaging.send(sender, "Denizen/saves.yml, Denizen/notables.yml, Denizen/config.yml, Denizen/scripts/..., and Denizen/externals/... reloaded from disk to memory.");
if (ScriptHelper.hadError()) {
Messaging.sendError(sender, "There was an error loading your scripts, check the console for details!");
Expand Down Expand Up @@ -351,6 +353,7 @@ else if (args.getString(1).equalsIgnoreCase("config")) {
}
else if (args.getString(1).equalsIgnoreCase("scripts")) {
DenizenCore.reloadScripts();
CommandScriptHelper.syncDenizenCommands();
Messaging.send(sender, "Denizen/scripts/... reloaded from disk to memory.");
if (ScriptHelper.hadError()) {
Messaging.sendError(sender, "There was an error loading your scripts, check the console for details!");
Expand Down
Expand Up @@ -2,6 +2,8 @@

import com.google.common.base.Predicate;
import net.aufdemrand.denizen.Settings;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.NMSVersion;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.DenizenAliasHelpTopic;
import net.aufdemrand.denizen.utilities.DenizenCommand;
Expand All @@ -17,6 +19,7 @@
import org.bukkit.scheduler.BukkitRunnable;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
Expand Down Expand Up @@ -89,6 +92,24 @@ public void run() {
}
}

/**
* In 1.13+, commands are also sent to players client-side via packets.
* We need to sync them for tab completion to work.
*/
public static void syncDenizenCommands() {
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) {
try {
final Server server = DenizenAPI.getCurrentInstance().getServer();
final Method syncMethod = server.getClass().getDeclaredMethod("syncCommands");
syncMethod.setAccessible(true);
syncMethod.invoke(server);
}
catch (Exception e) {
dB.echoError("Failed to synchronize server commands.");
}
}
}

/**
* Removes all registered {@link DenizenCommand DenizenCommands} from CraftBukkit and restores any
* overridden Commands.
Expand Down

0 comments on commit a6580f5

Please sign in to comment.