From 23a5c4c0fd43375e3bfbacd684b98f66aba57f65 Mon Sep 17 00:00:00 2001 From: Jakob K Date: Mon, 28 Jun 2021 00:26:16 +0200 Subject: [PATCH] Add reflection utilities --- .../net/axay/kspigot/commands/BrigardierSupport.kt | 6 ++---- .../net/axay/kspigot/utils/ReflectionExtensions.kt | 11 +++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/net/axay/kspigot/utils/ReflectionExtensions.kt diff --git a/src/main/kotlin/net/axay/kspigot/commands/BrigardierSupport.kt b/src/main/kotlin/net/axay/kspigot/commands/BrigardierSupport.kt index de8fe4aa..337d7649 100644 --- a/src/main/kotlin/net/axay/kspigot/commands/BrigardierSupport.kt +++ b/src/main/kotlin/net/axay/kspigot/commands/BrigardierSupport.kt @@ -8,6 +8,7 @@ import net.axay.kspigot.annotations.NMS_1_17 import net.axay.kspigot.annotations.NMS_General import net.axay.kspigot.extensions.onlinePlayers import net.axay.kspigot.extensions.server +import net.axay.kspigot.utils.reflectField import net.minecraft.commands.CommandListenerWrapper import org.bukkit.craftbukkit.v1_17_R1.CraftServer import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer @@ -39,10 +40,7 @@ object BrigardierSupport { @NMS_1_17 val commandDispatcher by lazy { // g = the command dispatcher - val dispatcherField = net.minecraft.commands.CommandDispatcher::class.java.getDeclaredField("g") - dispatcherField.isAccessible = true - @Suppress("UNCHECKED_CAST") - dispatcherField.get(commandManager) as CommandDispatcher + commandManager.reflectField>("g") } @NMS_General diff --git a/src/main/kotlin/net/axay/kspigot/utils/ReflectionExtensions.kt b/src/main/kotlin/net/axay/kspigot/utils/ReflectionExtensions.kt new file mode 100644 index 00000000..18f29a45 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/utils/ReflectionExtensions.kt @@ -0,0 +1,11 @@ +package net.axay.kspigot.utils + +/** + * Loads the value of the given field for this object. + */ +fun Any.reflectField(field: String): T { + val reflectedField = this::class.java.getDeclaredField(field) + reflectedField.isAccessible = true + @Suppress("UNCHECKED_CAST") + return reflectedField.get(this) as T +}