Sfoglia il codice sorgente

fix onlyBetweenSpawnPlaceable arena option

RedstoneFuture 3 anni fa
parent
commit
686adf2393

+ 29 - 9
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/GameListener.java

@@ -121,34 +121,54 @@ public class GameListener extends GameBoundListener {
         ItemStack itemStack = e.getItem();
         Game game = getGame();
 
+        // missile spawn with using of a missile spawn egg
         if (VersionUtil.isMonsterEgg(itemStack.getType())) {
             e.setCancelled(true);
-            if (game.getArena().getMissileConfiguration().isOnlyBlockPlaceable() && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
-            if (game.getArena().getMissileConfiguration().isOnlyBlockPlaceable() &&
-                    !isInBetween(player.getLocation().toVector(), getGame().getArena().getPlane1(), getGame().getArena().getPlane2())) {
-                player.sendMessage(MessageConfig.getMessage("missile_place_deny"));
-                return;
+
+            // Can missiles only be spawned if the item interaction was performed on a block (no air)?
+            boolean isOnlyBlockPlaceable = game.getArena().getMissileConfiguration().isOnlyBlockPlaceable();
+            if (isOnlyBlockPlaceable) {
+                if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
+            }
+
+            // Are missiles only allowed to spawn inside the arena, between the two arena spawn points?
+            boolean isOnlyBetweenSpawnPlaceable = game.getArena().getMissileConfiguration().isOnlyBetweenSpawnPlaceable();
+            if (isOnlyBetweenSpawnPlaceable) {
+                if (!isInBetween(player.getLocation().toVector(), getGame().getArena().getPlane1(), getGame().getArena().getPlane2())) {
+                    player.sendMessage(MessageConfig.getMessage("missile_place_deny"));
+                    return;
+                }
             }
-            Missile m = game.getArena().getMissileConfiguration().getMissileFromName(itemStack.getItemMeta().getDisplayName());
-            if (m == null) {
+
+            Missile missile = game.getArena().getMissileConfiguration().getMissileFromName(itemStack.getItemMeta().getDisplayName());
+            if (missile == null) {
                 player.sendMessage(MessageConfig.getMessage("invalid_missile"));
                 return;
             }
             itemStack.setAmount(itemStack.getAmount() - 1);
             player.setItemInHand(itemStack);
-            m.paste(player, MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration()), getGame());
-        } else if (itemStack.getType() == VersionUtil.getFireball()) {
+            missile.paste(player, MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration()), getGame());
+
+            return;
+        }
+
+        // shield spawn with using of a missile spawn egg
+        if (itemStack.getType() == VersionUtil.getFireball()) {
             int amount = e.getItem().getAmount();
             e.getItem().setAmount(amount - 1);
+
             if (amount == 1 && VersionUtil.getVersion() == 8) {
                 player.getInventory().remove(VersionUtil.getFireball());
             }
+
             Fireball fb = player.launchProjectile(Fireball.class);
             fb.setVelocity(player.getLocation().getDirection().multiply(2.5D));
             VersionUtil.playFireball(player, fb.getLocation());
             fb.setYield(3F);
             fb.setIsIncendiary(true);
             fb.setBounce(false);
+
+            return;
         }
     }