Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit e3c54b9

Browse files
committed
Event Rework
1 parent 243fedf commit e3c54b9

File tree

4 files changed

+84
-18
lines changed

4 files changed

+84
-18
lines changed

README.md

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -220,24 +220,40 @@ class SettingsGUI: UndefinedMenu("Settings") {
220220
```
221221

222222
## Events
223-
When using this api for events you **won't** need to register any events or even extend the Listener Class. The only thing you will need to do to make events work is create a method with the `@EventHandler` and the event type as the first parameter. (See below)
224223

224+
> [!CAUTION]
225+
> KOTLIN ONLY
226+
227+
When using this API you won't need to do and registering of event or even extending the `Listener` class. Even creating custom events is easier.
228+
229+
### Listening
230+
Listening to an event is straight forward and easy. You need to create a method called `event<EventType>`. (See below)
225231

226-
### Kotlin
227232

228233
```kotlin
229-
@EventHandler
230-
fun onJoin(e: PlayerJoinEvent){
231-
//Code
234+
event<PlayerJoinEvent> {
235+
//Player Join
232236
}
233237
```
234238

235-
### Java
239+
To be able to unregister the listener you can very easily put `.unregister` at the end. (See below)
240+
241+
```kotlin
242+
event<PlayerJoinEvent> {
243+
//Player Join
244+
}.unregister()
245+
```
246+
247+
### Custom Event
248+
Creating a custom event using this API you extend the `UndefinedEvent` class (See below)
236249

237250
```kotlin
238-
@EventHandler
239-
public void onJoin(PlayerJoinEvent e){
240-
//Code
251+
class AsyncCustomEvent: UndefinedEvent(true) {
252+
//Async event
253+
}
254+
255+
class SyncCustomEvent: UndefinedEvent() {
256+
//Sync event
241257
}
242258
```
243259

src/main/java/com/redmagic/undefinedapi/UndefinedAPI.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.redmagic.undefinedapi
22

33
import com.redmagic.undefinedapi.event.EventManager
4+
import com.redmagic.undefinedapi.event.event
45
import com.redmagic.undefinedapi.menu.MenuManager
56
import com.redmagic.undefinedapi.scheduler.TimeUnit
67
import com.redmagic.undefinedapi.scheduler.delay
78
import com.redmagic.undefinedapi.scheduler.repeatingTask
89
import org.bukkit.Bukkit
10+
import org.bukkit.event.player.PlayerJoinEvent
911
import org.bukkit.plugin.java.JavaPlugin
1012

1113

@@ -14,7 +16,6 @@ class UndefinedAPI(javaPlugin: JavaPlugin) {
1416
init {
1517
plugin = javaPlugin
1618
MenuManager.setup(plugin)
17-
EventManager()
1819
}
1920

2021
companion object{
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.redmagic.undefinedapi.event
2+
3+
import com.redmagic.undefinedapi.UndefinedAPI
4+
import org.bukkit.Bukkit
5+
import org.bukkit.event.Cancellable
6+
import org.bukkit.event.Event
7+
import org.bukkit.event.EventPriority
8+
import org.bukkit.event.HandlerList
9+
import org.bukkit.event.Listener
10+
11+
inline fun <reified T : Event> event(
12+
priority: EventPriority = EventPriority.NORMAL,
13+
ignoreCancelled: Boolean = false,
14+
crossinline callback: T.() -> Unit
15+
): UndefinedListener = UndefinedListener().apply{
16+
UndefinedAPI.plugin.server.pluginManager.registerEvent(
17+
T::class.java,
18+
this,
19+
priority,
20+
{ _, event ->
21+
if (event is T) callback(event)
22+
23+
},
24+
UndefinedAPI.plugin,
25+
ignoreCancelled
26+
)
27+
}
28+
29+
class UndefinedListener: Listener{
30+
fun unregister() = HandlerList.unregisterAll(this)
31+
}
32+
33+
open class UndefinedEvent(async: Boolean = false): Event(async), Cancellable{
34+
35+
private var cancelled = false
36+
37+
override fun isCancelled() = cancelled
38+
override fun setCancelled(cancel: Boolean) {
39+
cancelled = cancel
40+
}
41+
companion object {
42+
val HANDLERS = HandlerList()
43+
44+
@JvmStatic
45+
fun getHandlerList(): HandlerList {
46+
return HANDLERS
47+
}
48+
}
49+
50+
override fun getHandlers(): HandlerList {
51+
return HANDLERS
52+
}
53+
54+
}

src/main/java/com/redmagic/undefinedapi/event/EventManager.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,20 @@ import org.bukkit.event.EventHandler
88
import org.bukkit.event.Listener
99

1010

11+
@Deprecated("Old system didn't work")
1112
class EventManager : Listener {
1213
init {
1314

1415
UndefinedAPI.plugin.findMethods(EventHandler::class.java).forEach{
1516

16-
println("Method Test")
17+
it.setAccessible(true)
1718

1819
val eventHandler = it.getAnnotation(EventHandler::class.java)
1920

2021
val type = it.parameters[0].type as Class<out Event>
2122

22-
println(type)
23-
2423
Bukkit.getPluginManager().registerEvent(type, this, eventHandler.priority, {
25-
_, event ->
26-
run {
27-
println(event.eventName)
28-
it.invoke(event)
29-
}
24+
_, event -> it.invoke(event)
3025
}, UndefinedAPI.plugin, eventHandler.ignoreCancelled)
3126

3227
}

0 commit comments

Comments
 (0)