diff --git a/src/main/kotlin/dev/znci/rocket/Rocket.kt b/src/main/kotlin/dev/znci/rocket/Rocket.kt index 8263348..e2ac822 100644 --- a/src/main/kotlin/dev/znci/rocket/Rocket.kt +++ b/src/main/kotlin/dev/znci/rocket/Rocket.kt @@ -23,7 +23,7 @@ import org.bukkit.plugin.java.JavaPlugin import java.io.File class Rocket : JavaPlugin() { - var defaultLocale: String = "en_GB" + private var defaultLocale: String = "en_GB" override fun onEnable() { // Create the plugin data folder diff --git a/src/main/kotlin/dev/znci/rocket/scripting/events/EventListener.kt b/src/main/kotlin/dev/znci/rocket/scripting/events/EventListener.kt index 28a578f..94350af 100644 --- a/src/main/kotlin/dev/znci/rocket/scripting/events/EventListener.kt +++ b/src/main/kotlin/dev/znci/rocket/scripting/events/EventListener.kt @@ -20,14 +20,17 @@ import dev.znci.rocket.scripting.ScriptManager import org.bukkit.Bukkit import org.bukkit.event.Cancellable import org.bukkit.event.Event +import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.Listener +import org.bukkit.event.block.BlockBreakEvent import org.bukkit.plugin.Plugin import org.luaj.vm2.LuaBoolean import org.luaj.vm2.LuaTable import org.luaj.vm2.LuaValue import org.luaj.vm2.lib.ZeroArgFunction + object EventListener : Listener { private val plugin: Plugin? = Bukkit.getPluginManager().getPlugin("rocket") @@ -68,6 +71,11 @@ object EventListener : Listener { return listOf( org.bukkit.event.player.PlayerJoinEvent::class.java, org.bukkit.event.block.BlockBreakEvent::class.java, + org.bukkit.event.block.BlockPlaceEvent::class.java, + org.bukkit.event.player.PlayerMoveEvent::class.java, + org.bukkit.event.player.PlayerQuitEvent::class.java, + org.bukkit.event.player.PlayerInteractEvent::class.java, + io.papermc.paper.event.player.AsyncChatEvent::class.java ) } @@ -78,14 +86,68 @@ object EventListener : Listener { private fun convertEventToLua(event: Event): LuaTable { val luaTable = LuaTable() - val playerField = event.javaClass.getDeclaredFields().find { it.name == "player" } - playerField?.isAccessible = true - val player = playerField?.get(event) + // Player fields & checking + var player: org.bukkit.entity.Player? = null + + // Check if there is a field for player + val playerField = event.javaClass.declaredFields.find { it.name == "player" } + if (playerField != null) { + playerField.isAccessible = true + val fieldPlayer = playerField.get(event) + if (fieldPlayer is org.bukkit.entity.Player) { + player = fieldPlayer + } + } + + // If there is no field for player, check if there is a method for player + if (player == null) { + val playerProperty = event.javaClass.methods.find { it.name == "getPlayer" } + if (playerProperty != null) { + val playerFromProperty = playerProperty.invoke(event) as? org.bukkit.entity.Player + player = playerFromProperty + } + } - if (player is org.bukkit.entity.Player) { + if (player != null) { luaTable.set("player", PlayerManager.getPlayerOverallTable(player)) } + // Interaction event + if (event is org.bukkit.event.player.PlayerInteractEvent) { + val hand = event.hand + luaTable.set("hand", hand.toString()) + } + + // Quit event + if (event is org.bukkit.event.player.PlayerQuitEvent) { + val quitMessage = event.quitMessage() + luaTable.set("quitMessage", quitMessage.toString()) + + val reason = event.reason + luaTable.set("reason", reason.toString()) + } + + // Move event + val fields = event.javaClass.declaredFields.map { it.name } + if ("from" in fields) { + val fromField = event.javaClass.getDeclaredField("from") + fromField.isAccessible = true + val from = fromField.get(event) + if (from is org.bukkit.Location) { + // TODO: Finish this when mibers creates PR which adds new location class + } + } + + if ("to" in fields) { + val toField = event.javaClass.getDeclaredField("to") + toField.isAccessible = true + val to = toField.get(event) + if (to is org.bukkit.Location) { + // TODO: Finish this when mibers creates PR which adds new location class + } + } + + // Cancellable events if (event is Cancellable) { luaTable.set("cancel", object : ZeroArgFunction() { override fun call(): LuaValue { @@ -97,5 +159,4 @@ object EventListener : Listener { return luaTable } - } \ No newline at end of file diff --git a/src/main/kotlin/dev/znci/rocket/scripting/functions/HTTPClient.kt b/src/main/kotlin/dev/znci/rocket/scripting/functions/HTTPClient.kt index b0b03e7..6cf5372 100644 --- a/src/main/kotlin/dev/znci/rocket/scripting/functions/HTTPClient.kt +++ b/src/main/kotlin/dev/znci/rocket/scripting/functions/HTTPClient.kt @@ -15,8 +15,6 @@ */ package dev.znci.rocket.scripting.functions -import dev.znci.rocket.scripting.PlayerManager -import org.bukkit.Bukkit import org.luaj.vm2.LuaTable import org.luaj.vm2.LuaValue import org.luaj.vm2.lib.OneArgFunction