Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/kotlin/dev/znci/rocket/Rocket.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down Expand Up @@ -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
)
}

Expand All @@ -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 {
Expand All @@ -97,5 +159,4 @@ object EventListener : Listener {

return luaTable
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down