Forráskód Böngészése

Merge pull request #8 from RedstoneFuture/refactoring

Refactoring
Daniel 3 éve
szülő
commit
066032973a

+ 13 - 5
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/timer/EndTimer.java

@@ -34,11 +34,19 @@ public class EndTimer extends Timer {
 
     @Override
     public void tick() {
-        if (seconds == 20)
-            broadcast(MessageConfig.getMessage("game_starts_new_in").replace("%seconds%", "" + seconds));
-        else if (seconds == 0)
-            getGame().reset();
-        --seconds;
+
+        switch(seconds) {
+            case 20:
+                broadcast(MessageConfig.getMessage("game_starts_new_in").replace("%seconds%", Integer.toString(seconds)));
+                break;
+            case 0:
+                getGame().reset();
+                break;
+            default:
+                break;
+        }
+
+        seconds--;
     }
 
 }

+ 33 - 37
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/timer/GameTimer.java

@@ -34,43 +34,39 @@ public class GameTimer extends Timer {
 
     @Override
     public void tick() {
-        if (seconds == 7200) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "120"));
-        } else if (seconds == 5400) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "90"));
-        } else if (seconds == 3600) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "60"));
-        } else if (seconds == 1800) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "30"));
-        } else if (seconds == 1200) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "20"));
-        } else if (seconds == 600) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "10"));
-        } else if (seconds == 300) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "5"));
-        } else if (seconds == 180) {
-            broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", "3"));
-        } else if (seconds == 60) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "60"));
-        } else if (seconds == 30) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "30"));
-        } else if (seconds == 10) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "10"));
-        } else if (seconds == 5) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "5"));
-        } else if (seconds == 4) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "4"));
-        } else if (seconds == 3) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "3"));
-        } else if (seconds == 2) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "2"));
-        } else if (seconds == 1) {
-            broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", "1"));
-        } else if (seconds == 0) {
-            getGame().stopGame();
+
+        switch(seconds) {
+            case 7200:
+            case 5400:
+            case 3600:
+            case 1800:
+            case 1200:
+            case 600:
+            case 300:
+            case 180:
+                broadcast(MessageConfig.getMessage("game_ends_in_minutes").replace("%minutes%", Integer.toString(seconds/60)));
+                break;
+            case 60:
+            case 30:
+            case 10:
+            case 5:
+            case 4:
+            case 3:
+            case 2:
+            case 1:
+                broadcast(MessageConfig.getMessage("game_ends_in_seconds").replace("%seconds%", Integer.toString(seconds)));
+                break;
+            case 0:
+                getGame().stopGame();
+                break;
+            default:
+                break;
+        }
+
+        if (seconds % 10 == 0) {
+            getGame().getScoreboardManager().updateInGameScoreboard();
         }
-        if (seconds % 10 == 0)
-            getGame().getScoreboardManager().updateScoreboard();
-        --seconds;
+
+        seconds--;
     }
 }

+ 32 - 39
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/timer/LobbyTimer.java

@@ -25,6 +25,7 @@ import de.butzlabben.missilewars.util.version.VersionUtil;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
 import de.butzlabben.missilewars.wrapper.abstracts.MapChooseProcedure;
 import de.butzlabben.missilewars.wrapper.player.MWPlayer;
+
 import java.util.Map;
 import java.util.Optional;
 
@@ -71,48 +72,40 @@ public class LobbyTimer extends Timer implements Runnable {
             remaining = 90;
             broadcast(MessageConfig.getMessage("not_enough_players"));
         }
-        if (seconds == 120) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "120"));
-            playPling();
-        } else if (seconds == 60) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "60"));
-            playPling();
-        } else if (seconds == 30) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "30"));
-            playPling();
-        } else if (seconds == 10) {
-            checkVote();
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "10"));
-            playPling();
-        } else if (seconds == 5) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "5"));
-            playPling();
-        } else if (seconds == 4) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "4"));
-            playPling();
-        } else if (seconds == 3) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "3"));
-            playPling();
-        } else if (seconds == 2) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "2"));
-            playPling();
-        } else if (seconds == 1) {
-            broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", "1"));
-            playPling();
 
-        } else if (seconds == 0) {
-            int diff = size1 - size2;
-            if (diff >= 2 || diff <= -2) {
-                broadcast(MessageConfig.getMessage("teams_unequal"));
-                seconds = startTime;
+        switch(seconds) {
+            case 120:
+            case 60:
+            case 30:
+            case 5:
+            case 4:
+            case 3:
+            case 2:
+            case 1:
+                broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", Integer.toString(seconds)));
+                playPling();
+                break;
+            case 10:
+                checkVote();
+                broadcast(MessageConfig.getMessage("game_starts_in").replace("%seconds%", Integer.toString(seconds)));
+                playPling();
+                break;
+            case 0:
+                int diff = size1 - size2;
+                if (diff >= 2 || diff <= -2) {
+                    broadcast(MessageConfig.getMessage("teams_unequal"));
+                    seconds = startTime;
+                    return;
+                }
+                broadcast(MessageConfig.getMessage("game_starts"));
+                playPling();
+                getGame().startGame();
                 return;
-            }
-            broadcast(MessageConfig.getMessage("game_starts"));
-            playPling();
-            getGame().startGame();
-            return;
+            default:
+                break;
         }
-        --seconds;
+
+        seconds--;
     }
 
     private void playPling() {

+ 151 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/GameRandomizer.java

@@ -0,0 +1,151 @@
+/*
+ * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
+ * Copyright (c) 2018-2021 Daniel Nägele.
+ *
+ * MissileWars is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MissileWars is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MissileWars.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package de.butzlabben.missilewars.util;
+
+import de.butzlabben.missilewars.Logger;
+import de.butzlabben.missilewars.game.Game;
+import de.butzlabben.missilewars.util.version.VersionUtil;
+import de.butzlabben.missilewars.wrapper.abstracts.arena.MissileConfiguration;
+import de.butzlabben.missilewars.wrapper.missile.Missile;
+import de.butzlabben.missilewars.wrapper.player.Interval;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.HashMap;
+import java.util.Random;
+
+/**
+ * @author Butzlabben
+ * @since 19.01.2018
+ */
+public class GameRandomizer {
+
+    private final MissileConfiguration missileConfiguration;
+    private final Game game;
+    private final HashMap<Interval, String> defensive = new HashMap<>();
+    private final HashMap<Interval, String> missiles = new HashMap<>();
+
+    private int totalOccurrenceMissiles = 0;
+    private int totalOccurrenceDefensive = 0;
+    private int randomizeCounter = 1;
+
+    private ItemStack shield;
+    private ItemStack arrow;
+    private ItemStack fireball;
+
+
+    public GameRandomizer(Game game) {
+        this.game = game;
+        missileConfiguration = game.getArena().getMissileConfiguration();
+
+        createDefenseItems();
+
+        // get missiles
+        for (Missile missile : missileConfiguration.getMissiles()) {
+
+            Interval interval = new Interval(totalOccurrenceMissiles, totalOccurrenceMissiles + missile.occurrence() - 1);
+            missiles.put(interval, missile.getName());
+            totalOccurrenceMissiles += missile.occurrence();
+        }
+
+        // get shield
+        int shieldOccurrence = game.getArena().getShieldConfiguration().getOccurrence();
+        Interval shield = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + shieldOccurrence - 1);
+        totalOccurrenceDefensive += shieldOccurrence;
+        defensive.put(shield, "s");
+
+        // get arrow
+        int arrowOccurrence = game.getArena().getArrowOccurrence();
+        Interval arrow = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
+        totalOccurrenceDefensive += arrowOccurrence;
+        defensive.put(arrow, "a");
+
+        // get fireball
+        Interval fireball = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
+        totalOccurrenceDefensive += arrowOccurrence;
+        defensive.put(fireball, "f");
+    }
+
+    public ItemStack getRandomItem() {
+        Random randomizer = new Random();
+        int random;
+
+        ItemStack itemStack = null;
+
+        // switch between type of "items":
+        // after 2 occurrence items, you get one defensive item
+        if (randomizeCounter == 2) {
+            randomizeCounter = 0;
+            random = randomizer.nextInt(totalOccurrenceDefensive);
+            
+            for (Interval interval : defensive.keySet()) {
+                if (interval.isIn(random)) {
+
+                    switch (defensive.get(interval)) {
+                        case "s": return shield;
+                        case "a": return arrow;
+                        case "f": return fireball;
+                        default: return null;
+                    }
+
+                }
+            }
+        } else {
+            random = randomizer.nextInt(totalOccurrenceMissiles);
+            
+            for (Interval interval : missiles.keySet()) {
+                if (interval.isIn(random)) {
+                    String randomItem = missiles.get(interval);
+                    Missile missile = missileConfiguration.getMissileFromName(randomItem);
+
+                    if (missile != null) {
+                        itemStack = missile.getItem();
+                    } else
+                        Logger.DEBUG.log("There wasn't a missile found, when giving out items");
+                    randomizeCounter++;
+                }
+            }
+        }
+        return itemStack;
+    }
+
+    /**
+     * This method creates the item stacks for the defense random-items.
+     */
+    private void createDefenseItems() {
+
+        // create MW shield
+        shield = new ItemStack(VersionUtil.getSnowball());
+        ItemMeta shieldMeta = shield.getItemMeta();
+        shieldMeta.setDisplayName(game.getArena().getShieldConfiguration().getName());
+        shield.setItemMeta(shieldMeta);
+
+        // create MW arrow
+        arrow = new ItemStack(Material.ARROW, 3);
+
+        // create MW fireball
+        fireball = new ItemStack(VersionUtil.getFireball());
+        ItemMeta fireballMeta = fireball.getItemMeta();
+        fireballMeta.setDisplayName(game.getArena().getFireballConfiguration().getName());
+        fireball.setItemMeta(fireballMeta);
+
+    }
+
+}

+ 0 - 114
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/Randomizer.java

@@ -1,114 +0,0 @@
-/*
- * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
- * Copyright (c) 2018-2021 Daniel Nägele.
- *
- * MissileWars is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * MissileWars is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with MissileWars.  If not, see <https://www.gnu.org/licenses/>.
- */
-
-package de.butzlabben.missilewars.util;
-
-import de.butzlabben.missilewars.Logger;
-import de.butzlabben.missilewars.game.Game;
-import de.butzlabben.missilewars.util.version.VersionUtil;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.MissileConfiguration;
-import de.butzlabben.missilewars.wrapper.missile.Missile;
-import de.butzlabben.missilewars.wrapper.player.Interval;
-import java.util.HashMap;
-import java.util.Random;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-/**
- * @author Butzlabben
- * @since 19.01.2018
- */
-public class Randomizer {
-
-    private final MissileConfiguration missileConfiguration;
-    private final Game game;
-    private final HashMap<Interval, String> defensive = new HashMap<>();
-    private final HashMap<Interval, String> missiles = new HashMap<>();
-
-    private int allMissiles = 0;
-    private int allDefensives = 0;
-    private int count = 1;
-
-    public Randomizer(Game game) {
-        this.game = game;
-        missileConfiguration = game.getArena().getMissileConfiguration();
-        for (Missile missile : missileConfiguration.getMissiles()) {
-            Interval i = new Interval(allMissiles, allMissiles + missile.occurrence() - 1);
-            missiles.put(i, missile.getName());
-            allMissiles += missile.occurrence();
-        }
-
-        int shieldOccurrence = game.getArena().getShieldConfiguration().getOccurrence();
-        Interval shield = new Interval(allDefensives, allDefensives + shieldOccurrence - 1);
-        allDefensives += shieldOccurrence;
-        defensive.put(shield, "s");
-
-        int arrowOccurrence = game.getArena().getArrowOccurrence();
-        Interval arrow = new Interval(allDefensives, allDefensives + arrowOccurrence - 1);
-        allDefensives += arrowOccurrence;
-        defensive.put(arrow, "a");
-
-        Interval fireball = new Interval(allDefensives, allDefensives + arrowOccurrence - 1);
-        allDefensives += arrowOccurrence;
-        defensive.put(fireball, "f");
-    }
-
-    public ItemStack createItem() {
-        ItemStack is = null;
-        ItemMeta im;
-        Random r = new Random();
-        if (count == 2) {
-            count = 0;
-            int random = r.nextInt(allDefensives);
-            for (Interval i : defensive.keySet()) {
-                if (i.isIn(random)) {
-                    String to = defensive.get(i);
-                    if (to.equals("s")) {
-                        is = new ItemStack(VersionUtil.getSnowball());
-                        im = is.getItemMeta();
-                        im.setDisplayName(game.getArena().getShieldConfiguration().getName());
-                    } else if (to.equals("a")) {
-                        is = new ItemStack(Material.ARROW, 3);
-                        im = is.getItemMeta();
-                    } else {
-                        is = new ItemStack(VersionUtil.getFireball());
-                        im = is.getItemMeta();
-                        im.setDisplayName(game.getArena().getFireballConfiguration().getName());
-                    }
-                    is.setItemMeta(im);
-                    return is;
-                }
-            }
-        } else {
-            int random = r.nextInt(allMissiles);
-            for (Interval i : missiles.keySet()) {
-                if (i.isIn(random)) {
-                    String to = missiles.get(i);
-                    Missile m = missileConfiguration.getMissileFromName(to);
-                    if (m != null) {
-                        is = m.getItem();
-                    } else
-                        Logger.DEBUG.log("There wasn't a missile found, when giving out items");
-                    ++count;
-                }
-            }
-        }
-        return is;
-    }
-}

+ 6 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/missile/Missile.java

@@ -98,6 +98,12 @@ public class Missile {
         return egg;
     }
 
+    /**
+     * This method provides the missile spawn item based on the
+     * mob spawn item specification in the arena configuration.
+     *
+     * @return ItemStack = the spawn egg with the missile name
+     */
     public ItemStack getItem() {
         ItemStack is = new ItemStack(VersionUtil.getMonsterEgg(egg));
         if (VersionUtil.getVersion() > 10) {

+ 4 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/player/MWPlayer.java

@@ -19,7 +19,7 @@
 package de.butzlabben.missilewars.wrapper.player;
 
 import de.butzlabben.missilewars.game.Game;
-import de.butzlabben.missilewars.util.Randomizer;
+import de.butzlabben.missilewars.util.GameRandomizer;
 import de.butzlabben.missilewars.wrapper.game.Team;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
@@ -42,7 +42,7 @@ public class MWPlayer implements Runnable {
     private final Game game;
     int i = -1;
     private Team t;
-    private Randomizer r;
+    private GameRandomizer r;
     private int period;
 
     public MWPlayer(Player player, Game game) {
@@ -82,8 +82,8 @@ public class MWPlayer implements Runnable {
         i++;
         if (i >= period) {
             if (r == null)
-                r = new Randomizer(game);
-            p.getInventory().addItem(r.createItem());
+                r = new GameRandomizer(game);
+            p.getInventory().addItem(r.getRandomItem());
             i = 0;
         }
         p.setLevel(period - i);