Selaa lähdekoodia

Merge pull request #92 from RedstoneFuture/refactoring/equipment-manager

Refactoring Games.java : Adding EquipmentManager
Daniel 1 vuosi sitten
vanhempi
sitoutus
8a36c1cd05

+ 5 - 78
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Game.java

@@ -30,8 +30,7 @@ import de.butzlabben.missilewars.event.GameStopEvent;
 import de.butzlabben.missilewars.game.enums.GameResult;
 import de.butzlabben.missilewars.game.enums.GameState;
 import de.butzlabben.missilewars.game.enums.MapChooseProcedure;
-import de.butzlabben.missilewars.game.equipment.MissileGameEquipment;
-import de.butzlabben.missilewars.game.equipment.SpecialGameEquipment;
+import de.butzlabben.missilewars.game.equipment.EquipmentManager;
 import de.butzlabben.missilewars.game.misc.MotdManager;
 import de.butzlabben.missilewars.game.misc.ScoreboardManager;
 import de.butzlabben.missilewars.game.missile.Missile;
@@ -55,13 +54,11 @@ import de.butzlabben.missilewars.util.serialization.Serializer;
 import lombok.Getter;
 import lombok.ToString;
 import org.bukkit.*;
-import org.bukkit.enchantments.Enchantment;
 import org.bukkit.entity.Fireball;
 import org.bukkit.entity.Player;
 import org.bukkit.event.HandlerList;
 import org.bukkit.event.player.PlayerTeleportEvent;
 import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
 import org.bukkit.scheduler.BukkitTask;
 import org.bukkit.scoreboard.Scoreboard;
 import org.bukkit.util.Vector;
@@ -101,10 +98,7 @@ public class Game {
     private Arena arena;
     private ScoreboardManager scoreboardManager;
     private GameBoundListener listener;
-    private ItemStack customBow;
-    private ItemStack customPickaxe;
-    private MissileGameEquipment missileEquipment;
-    private SpecialGameEquipment specialEquipment;
+    private EquipmentManager equipmentManager;
 
     public Game(Lobby lobby) {
         Logger.BOOT.log("Loading lobby " + lobby.getName());
@@ -177,8 +171,7 @@ public class Game {
         scoreboardManager = new ScoreboardManager(this);
         scoreboardManager.createScoreboard();
 
-        missileEquipment = new MissileGameEquipment(this);
-        specialEquipment = new SpecialGameEquipment(this);
+        equipmentManager = new EquipmentManager(this);
 
         Logger.DEBUG.log("Making game ready");
         ++fights;
@@ -188,7 +181,7 @@ public class Game {
         FightStats.checkTables();
         Logger.DEBUG.log("Fights: " + fights);
 
-        createGameItems();
+        equipmentManager.createGameItems();
     }
 
     private void updateGameListener(GameBoundListener newListener) {
@@ -553,79 +546,13 @@ public class Game {
 
         player.teleport(mwPlayer.getTeam().getSpawn());
 
-        sendGameItems(player, false);
+        equipmentManager.sendGameItems(player, false);
         setPlayerAttributes(player);
 
         playerTasks.put(player.getUniqueId(),
                 Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), mwPlayer, 40, 20));
     }
 
-    /**
-     * This method is used to create the game items for the player kit.
-     */
-    private void createGameItems() {
-
-        // Will it be used ?
-        if (this.getArena().getSpawn().isSendBow() || this.getArena().getRespawn().isSendBow()) {
-
-            ItemStack bow = new ItemStack(Material.BOW);
-            bow.addEnchantment(Enchantment.ARROW_FIRE, 1);
-            bow.addEnchantment(Enchantment.ARROW_DAMAGE, 1);
-            bow.addEnchantment(Enchantment.ARROW_KNOCKBACK, 1);
-            ItemMeta bowMeta = bow.getItemMeta();
-            bowMeta.setUnbreakable(true);
-            bowMeta.addEnchant(Enchantment.DAMAGE_ALL, 6, true);
-            bow.setItemMeta(bowMeta);
-            this.customBow = bow;
-        }
-
-        // Will it be used ?
-        if (this.getArena().getSpawn().isSendPickaxe() || this.getArena().getRespawn().isSendPickaxe()) {
-
-            ItemStack pickaxe = new ItemStack(Material.IRON_PICKAXE);
-            ItemMeta pickaxeMeta = pickaxe.getItemMeta();
-            pickaxeMeta.setUnbreakable(true);
-            pickaxe.setItemMeta(pickaxeMeta);
-            this.customPickaxe = pickaxe;
-        }
-
-    }
-
-    /**
-     * This method gives the player the starter item set, based on the config.yml
-     * configuration for spawn and respawn.
-     *
-     * @param player the target player
-     * @param isRespawn true, if the player should receive it after a respawn
-     */
-    public void sendGameItems(Player player, boolean isRespawn) {
-
-        if (isRespawn) {
-            if (getArena().isKeepInventory()) return;
-
-        } else {
-            // clear inventory
-            player.getInventory().clear();
-        }
-
-        // send armor
-        ItemStack[] armor = getPlayer(player).getTeam().getTeamArmor();
-        player.getInventory().setArmorContents(armor);
-
-        // send kit items
-        if (isRespawn) {
-
-            if (this.getArena().getRespawn().isSendBow()) player.getInventory().addItem(this.customBow);
-            if (this.getArena().getRespawn().isSendPickaxe()) player.getInventory().addItem(this.customPickaxe);
-
-        } else {
-
-            if (this.getArena().getSpawn().isSendBow()) player.getInventory().addItem(this.customBow);
-            if (this.getArena().getSpawn().isSendPickaxe()) player.getInventory().addItem(this.customPickaxe);
-            
-        }
-    }
-
     /**
      * This method sets the player attributes (game mode, level, enchantments, ...).
      *

+ 117 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/equipment/EquipmentManager.java

@@ -0,0 +1,117 @@
+/*
+ * 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.game.equipment;
+
+import de.butzlabben.missilewars.game.Game;
+import lombok.Getter;
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+/**
+ * @author Butzlabben
+ * @since 19.01.2018
+ */
+
+@Getter
+public class EquipmentManager {
+
+    private final Game game;
+
+    private final MissileGameEquipment missileEquipment;
+    private final SpecialGameEquipment specialEquipment;
+    private ItemStack customBow;
+    private ItemStack customPickaxe;
+
+    
+    public EquipmentManager(Game game) {
+        this.game = game;
+
+        missileEquipment = new MissileGameEquipment(game);
+        specialEquipment = new SpecialGameEquipment(game);
+    }
+
+    /**
+     * This method is used to create the game items for the player kit.
+     */
+    public void createGameItems() {
+
+        // Will it be used ?
+        if (game.getArena().getSpawn().isSendBow() || game.getArena().getRespawn().isSendBow()) {
+
+            ItemStack bow = new ItemStack(Material.BOW);
+            bow.addEnchantment(Enchantment.ARROW_FIRE, 1);
+            bow.addEnchantment(Enchantment.ARROW_DAMAGE, 1);
+            bow.addEnchantment(Enchantment.ARROW_KNOCKBACK, 1);
+            ItemMeta bowMeta = bow.getItemMeta();
+            bowMeta.setUnbreakable(true);
+            bowMeta.addEnchant(Enchantment.DAMAGE_ALL, 6, true);
+            bow.setItemMeta(bowMeta);
+            this.customBow = bow;
+        }
+
+        // Will it be used ?
+        if (game.getArena().getSpawn().isSendPickaxe() || game.getArena().getRespawn().isSendPickaxe()) {
+
+            ItemStack pickaxe = new ItemStack(Material.IRON_PICKAXE);
+            ItemMeta pickaxeMeta = pickaxe.getItemMeta();
+            pickaxeMeta.setUnbreakable(true);
+            pickaxe.setItemMeta(pickaxeMeta);
+            this.customPickaxe = pickaxe;
+        }
+
+    }
+
+    /**
+     * This method gives the player the starter item set, based on the config.yml
+     * configuration for spawn and respawn.
+     *
+     * @param player the target player
+     * @param isRespawn true, if the player should receive it after a respawn
+     */
+    public void sendGameItems(Player player, boolean isRespawn) {
+
+        if (isRespawn) {
+            if (game.getArena().isKeepInventory()) return;
+
+        } else {
+            // clear inventory
+            player.getInventory().clear();
+        }
+
+        // send armor
+        ItemStack[] armor = game.getPlayer(player).getTeam().getTeamArmor();
+        player.getInventory().setArmorContents(armor);
+
+        // send kit items
+        if (isRespawn) {
+
+            if (game.getArena().getRespawn().isSendBow()) player.getInventory().addItem(this.customBow);
+            if (game.getArena().getRespawn().isSendPickaxe()) player.getInventory().addItem(this.customPickaxe);
+
+        } else {
+
+            if (game.getArena().getSpawn().isSendBow()) player.getInventory().addItem(this.customBow);
+            if (game.getArena().getSpawn().isSendPickaxe()) player.getInventory().addItem(this.customPickaxe);
+
+        }
+    }
+}

+ 6 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/equipment/PlayerEquipmentRandomizer.java

@@ -37,6 +37,7 @@ public class PlayerEquipmentRandomizer {
     private final MWPlayer mwPlayer;
     private final Game game;
     private final Arena arena;
+    private final EquipmentManager equipmentManager;
 
     private final int maxGameDuration;
     private final Random randomizer;
@@ -51,6 +52,7 @@ public class PlayerEquipmentRandomizer {
         this.mwPlayer = mwPlayer;
         this.game = game;
         this.arena = game.getArena();
+        this.equipmentManager = game.getEquipmentManager();
         randomizer = new Random();
         maxGameDuration = game.getArena().getGameDuration() * 60;
 
@@ -112,15 +114,15 @@ public class PlayerEquipmentRandomizer {
         // after 2 missile items, you get one special item
         if (sendEquipmentCounter >= 2) {
 
-            randomID = randomizer.nextInt(game.getSpecialEquipment().getSpecialEquipmentList().size());
-            item = game.getSpecialEquipment().getSpecialEquipmentList().get(randomID);
+            randomID = randomizer.nextInt(equipmentManager.getSpecialEquipment().getSpecialEquipmentList().size());
+            item = equipmentManager.getSpecialEquipment().getSpecialEquipmentList().get(randomID);
 
             sendEquipmentCounter = 0;
 
         } else {
 
-            randomID = randomizer.nextInt(game.getMissileEquipment().getMissileEquipmentList().size());
-            Missile missile = game.getMissileEquipment().getMissileEquipmentList().get(randomID);
+            randomID = randomizer.nextInt(equipmentManager.getMissileEquipment().getMissileEquipmentList().size());
+            Missile missile = equipmentManager.getMissileEquipment().getMissileEquipmentList().get(randomID);
             item = missile.getItem();
 
         }

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

@@ -183,7 +183,7 @@ public class GameListener extends GameBoundListener {
 
         if (team != null) {
             event.setRespawnLocation(team.getSpawn());
-            getGame().sendGameItems(player, true);
+            getGame().getEquipmentManager().sendGameItems(player, true);
             getGame().setPlayerAttributes(player);
             getGame().getPlayer(player).getRandomGameEquipment().resetPlayerInterval();