Add reflection utilities

This commit is contained in:
Jakob K
2021-06-28 00:26:16 +02:00
parent 4a14a29c3a
commit 23a5c4c0fd
2 changed files with 13 additions and 4 deletions

View File

@@ -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<CommandListenerWrapper>
commandManager.reflectField<CommandDispatcher<CommandListenerWrapper>>("g")
}
@NMS_General

View File

@@ -0,0 +1,11 @@
package net.axay.kspigot.utils
/**
* Loads the value of the given field for this object.
*/
fun <T> Any.reflectField(field: String): T {
val reflectedField = this::class.java.getDeclaredField(field)
reflectedField.isAccessible = true
@Suppress("UNCHECKED_CAST")
return reflectedField.get(this) as T
}