Skip to content

Commit fdb7155

Browse files
authored
Add event class tab completes to event command
1 parent 5a34d07 commit fdb7155

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

debuggery-bukkit/src/main/java/io/zachbr/debuggery/commands/EventCommand.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,31 @@
2424
import net.kyori.adventure.text.format.NamedTextColor;
2525
import org.bukkit.entity.Entity;
2626
import org.bukkit.event.Event;
27+
import org.bukkit.event.HandlerList;
2728

29+
import java.lang.invoke.MethodHandle;
30+
import java.lang.invoke.MethodHandles;
31+
import java.lang.reflect.Field;
2832
import java.util.Arrays;
2933
import java.util.List;
34+
import java.util.Locale;
35+
import java.util.Set;
3036

3137
public class EventCommand extends BukkitCommandReflection {
38+
private static final MethodHandle EVENT_TYPES_HANDLE;
3239
private final DebuggeryBukkit plugin;
3340

41+
static {
42+
MethodHandle handle = null;
43+
44+
try {
45+
final Field eventTypesField = HandlerList.class.getDeclaredField("EVENT_TYPES");
46+
eventTypesField.setAccessible(true);
47+
handle = MethodHandles.lookup().unreflectGetter(eventTypesField);
48+
} catch (final ReflectiveOperationException ignored) {}
49+
50+
EVENT_TYPES_HANDLE = handle;
51+
}
3452

3553
public EventCommand(DebuggeryBukkit debuggery) {
3654
super("devent", "debuggery.devent", true, true, Entity.class, debuggery);
@@ -68,8 +86,8 @@ public boolean commandLogic(Audience sender, String[] args) {
6886

6987
@Override
7088
public List<String> tabCompleteLogic(Audience sender, String[] args) {
71-
if (args.length == 0) {
72-
return List.of();
89+
if (args.length == 0 || args.length == 1) {
90+
return knownEventClasses().stream().filter(className -> args.length == 0 || className.toLowerCase(Locale.ROOT).contains(args[0].toLowerCase(Locale.ROOT))).toList();
7391
}
7492
try {
7593
Class<?> event = Class.forName(args[0], true, this.getClass().getClassLoader());
@@ -85,4 +103,16 @@ public List<String> tabCompleteLogic(Audience sender, String[] args) {
85103

86104
return super.tabCompleteLogic(sender, trimmed);
87105
}
106+
107+
private Set<String> knownEventClasses() {
108+
if (EVENT_TYPES_HANDLE == null) {
109+
return Set.of();
110+
}
111+
112+
try {
113+
return (Set<String>) EVENT_TYPES_HANDLE.invokeExact();
114+
} catch (Throwable e) {
115+
return Set.of();
116+
}
117+
}
88118
}

settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
dependencyResolutionManagement {
22
repositories {
3-
maven("https://papermc.io/repo/repository/maven-public/")
3+
maven("https://repo.papermc.io/repository/maven-public/")
44
maven("https://oss.sonatype.org/content/groups/public/")
55
mavenCentral()
66
}

0 commit comments

Comments
 (0)