Просмотр исходного кода

Refactoring Shield-Listener registration

RedstoneFuture 11 месяцев назад
Родитель
Сommit
4d8578b28c

+ 4 - 22
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/ShieldListener.java

@@ -18,18 +18,14 @@
 
 package de.butzlabben.missilewars.listener;
 
-import de.butzlabben.missilewars.Logger;
-import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.game.Game;
 import lombok.RequiredArgsConstructor;
-import org.bukkit.Bukkit;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Snowball;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.HandlerList;
 import org.bukkit.event.Listener;
 import org.bukkit.event.entity.ProjectileHitEvent;
-import org.bukkit.event.entity.ProjectileLaunchEvent;
 
 /**
  * @author Butzlabben
@@ -40,28 +36,14 @@ public class ShieldListener implements Listener {
 
     private final Player player;
     private final Game game;
-    private Snowball ball;
-
-    public void onThrow(ProjectileLaunchEvent event) {
-        ball = (Snowball) event.getEntity();
-        Bukkit.getPluginManager().registerEvents(this, MissileWars.getInstance());
-
-        Bukkit.getScheduler().runTaskLater(MissileWars.getInstance(), () -> {
-            HandlerList.unregisterAll(this);
-            
-            // Is the snowball-entity dead because of an invalid 'fly_time' of the shield-configuration 
-            // or a projectile hit before.
-            if (!ball.isDead()) game.spawnShield(player, ball);
-            
-        }, game.getArena().getShieldConfiguration().getFlyTime());
-    }
-
+    private final Snowball snowball;
+    
     @EventHandler
     public void onHit(ProjectileHitEvent event) {
-        if (!event.getEntity().equals(ball)) return;
+        if (!event.getEntity().equals(snowball)) return;
 
         HandlerList.unregisterAll(this);
-        game.spawnShield(player, ball);
+        game.spawnShield(player, snowball);
     }
     
 }

+ 13 - 2
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/game/GameListener.java

@@ -19,6 +19,7 @@
 package de.butzlabben.missilewars.listener.game;
 
 import de.butzlabben.missilewars.Logger;
+import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.configuration.Messages;
 import de.butzlabben.missilewars.configuration.arena.FallProtectionConfiguration;
 import de.butzlabben.missilewars.event.PlayerArenaJoinEvent;
@@ -42,6 +43,7 @@ import org.bukkit.entity.Projectile;
 import org.bukkit.entity.Snowball;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.EventPriority;
+import org.bukkit.event.HandlerList;
 import org.bukkit.event.block.Action;
 import org.bukkit.event.entity.*;
 import org.bukkit.event.inventory.InventoryClickEvent;
@@ -127,8 +129,17 @@ public class GameListener extends GameBoundListener {
         if (!(snowball.getShooter() instanceof Player)) return;
 
         Player shooter = (Player) snowball.getShooter();
-        ShieldListener shieldListener = new ShieldListener(shooter, getGame());
-        shieldListener.onThrow(event);
+        ShieldListener shieldListener = new ShieldListener(shooter, getGame(), snowball);
+        Bukkit.getPluginManager().registerEvents(shieldListener, MissileWars.getInstance());
+
+        Bukkit.getScheduler().runTaskLater(MissileWars.getInstance(), () -> {
+            HandlerList.unregisterAll(shieldListener);
+            
+            // Is the snowball-entity dead because of an invalid 'fly_time' of the shield-configuration 
+            // or a projectile hit before.
+            if (!snowball.isDead()) getGame().spawnShield(shooter, snowball);
+            
+        }, getGame().getArena().getShieldConfiguration().getFlyTime());
     }
 
     @EventHandler