11package de .kcodeyt .headsdb .util ;
22
33import cn .nukkit .Player ;
4+ import cn .nukkit .Server ;
45import cn .nukkit .event .EventHandler ;
56import cn .nukkit .event .Listener ;
67import cn .nukkit .event .player .PlayerFormRespondedEvent ;
78import cn .nukkit .event .player .PlayerQuitEvent ;
89import cn .nukkit .form .window .FormWindow ;
10+ import cn .nukkit .plugin .PluginManager ;
911import cn .nukkit .scheduler .TaskHandler ;
12+ import de .kcodeyt .headsdb .HeadsDB ;
1013
1114import java .lang .reflect .Field ;
1215import java .util .HashMap ;
1316import java .util .Map ;
17+ import java .util .concurrent .atomic .AtomicBoolean ;
1418
1519public class FormAPI {
1620
@@ -22,6 +26,8 @@ public static void create(Player player, FormWindow formWindow, Runnable onRespo
2226
2327 public static class FormListener implements Listener {
2428
29+ private static final AtomicBoolean INITIATED = new AtomicBoolean (false );
30+
2531 @ EventHandler
2632 public void onForm (PlayerFormRespondedEvent event ) {
2733 this .handle (event .getWindow (), false );
@@ -54,10 +60,21 @@ private static class Handler {
5460 private final TaskHandler taskHandler ;
5561
5662 private Handler (Player player , FormWindow formWindow , Runnable runnable ) {
63+ final Server server = player .getServer ();
5764 this .runnable = runnable ;
65+ this .taskHandler = server .getScheduler ().scheduleDelayedRepeatingTask (null , player ::sendExperience , 3 , 3 );
66+
5867 player .showFormWindow (formWindow );
59- this .taskHandler = player .getServer ().getScheduler ().scheduleDelayedRepeatingTask (null , player ::sendExperience , 3 , 3 );
6068 HANDLERS .put (formWindow , this );
69+ if (!FormListener .INITIATED .get ()) {
70+ FormListener .INITIATED .set (true );
71+ final PluginManager pluginManager = server .getPluginManager ();
72+ pluginManager .registerEvents (new FormListener (),
73+ pluginManager .getPlugins ().values ().stream ().
74+ filter (plugin -> plugin instanceof HeadsDB ).
75+ findAny ().
76+ orElseThrow (RuntimeException ::new ));
77+ }
6178 }
6279
6380 private void handle (boolean isQuit ) {
0 commit comments