import: java.util.Arrays org.bukkit.event.server.TabCompleteEvent effect set completions to %strings% at %string%: trigger: if expression-2 is "": event.setCompletions(Arrays.asList(expressions-1)) else: set {_completions::*} to expressions-1 loop expression-2.length() times: loop {_completions::*}: if {_completions::%loop-index%}.substring(loop-number - 1, loop-number) isn't expression-2.substring(loop-number - 1, loop-number): clear {_completions::%loop-index%} event.setCompletions(Arrays.asList({_completions::*})) expression tabbed command: get: set {_text} to first element out of split event.getBuffer() at " " return "/%{_text}%" if event.getSender() is CONSOLE else {_text} expression tab arg[ument]( |-)%*number%: get: set {_l::*} to split event.getBuffer() at " " clear {_l::1} set {_l::*} to {_l::*} return {_l::%expr 1%} expression buffer: get: return event.getBuffer() #example import: java.io.File expression scripts: get: set {_directory} to new File("plugins/Skript/scripts/") loop ...{_directory}.listFiles(): add loop-value.getName() to {_scripts::*} return {_scripts::*} on TabCompleteEvent: if tabbed command is "/skript" or "/sk": if tab arg 2 isn't set: set completions to "reload", "enable", "disable", "update" and "help" at tab arg 1 else: if tab arg 3 isn't set: if tab arg 1 is "update": set completions to "check", "changes" and "download" at tab arg 2 else if tab arg 1 is "reload": set completions to scripts, "all", "config", "aliases" and "scripts" at tab arg 2 else if tab arg 1 is "enable" or "disable": set completions to "all" and scripts at tab arg 2 else: cancel event