Add reflection utilities
This commit is contained in:
@@ -8,6 +8,7 @@ import net.axay.kspigot.annotations.NMS_1_17
|
|||||||
import net.axay.kspigot.annotations.NMS_General
|
import net.axay.kspigot.annotations.NMS_General
|
||||||
import net.axay.kspigot.extensions.onlinePlayers
|
import net.axay.kspigot.extensions.onlinePlayers
|
||||||
import net.axay.kspigot.extensions.server
|
import net.axay.kspigot.extensions.server
|
||||||
|
import net.axay.kspigot.utils.reflectField
|
||||||
import net.minecraft.commands.CommandListenerWrapper
|
import net.minecraft.commands.CommandListenerWrapper
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.CraftServer
|
import org.bukkit.craftbukkit.v1_17_R1.CraftServer
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer
|
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer
|
||||||
@@ -39,10 +40,7 @@ object BrigardierSupport {
|
|||||||
@NMS_1_17
|
@NMS_1_17
|
||||||
val commandDispatcher by lazy {
|
val commandDispatcher by lazy {
|
||||||
// g = the command dispatcher
|
// g = the command dispatcher
|
||||||
val dispatcherField = net.minecraft.commands.CommandDispatcher::class.java.getDeclaredField("g")
|
commandManager.reflectField<CommandDispatcher<CommandListenerWrapper>>("g")
|
||||||
dispatcherField.isAccessible = true
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
dispatcherField.get(commandManager) as CommandDispatcher<CommandListenerWrapper>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NMS_General
|
@NMS_General
|
||||||
|
@@ -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
|
||||||
|
}
|
Reference in New Issue
Block a user