Jelajahi Sumber

refactoring of item randomizer

RedstoneFuture 3 tahun lalu
induk
melakukan
971a9c8160

+ 71 - 35
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/Randomizer.java → missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/GameRandomizer.java

@@ -34,7 +34,7 @@ import org.bukkit.inventory.meta.ItemMeta;
  * @author Butzlabben
  * @author Butzlabben
  * @since 19.01.2018
  * @since 19.01.2018
  */
  */
-public class Randomizer {
+public class GameRandomizer {
 
 
     private final MissileConfiguration missileConfiguration;
     private final MissileConfiguration missileConfiguration;
     private final Game game;
     private final Game game;
@@ -43,72 +43,108 @@ public class Randomizer {
 
 
     private int totalOccurrenceMissiles = 0;
     private int totalOccurrenceMissiles = 0;
     private int totalOccurrenceDefensive = 0;
     private int totalOccurrenceDefensive = 0;
-    private int count = 1;
+    private int randomizeCounter = 0;
 
 
-    public Randomizer(Game game) {
+    private ItemStack shield;
+    private ItemStack arrow;
+    private ItemStack fireball;
+
+
+    public GameRandomizer(Game game) {
         this.game = game;
         this.game = game;
         missileConfiguration = game.getArena().getMissileConfiguration();
         missileConfiguration = game.getArena().getMissileConfiguration();
+
+        createDefenseItems();
+
+        // get missiles
         for (Missile missile : missileConfiguration.getMissiles()) {
         for (Missile missile : missileConfiguration.getMissiles()) {
+
             Interval interval = new Interval(totalOccurrenceMissiles, totalOccurrenceMissiles + missile.occurrence() - 1);
             Interval interval = new Interval(totalOccurrenceMissiles, totalOccurrenceMissiles + missile.occurrence() - 1);
             missiles.put(interval, missile.getName());
             missiles.put(interval, missile.getName());
             totalOccurrenceMissiles += missile.occurrence();
             totalOccurrenceMissiles += missile.occurrence();
         }
         }
 
 
+        // get shield
         int shieldOccurrence = game.getArena().getShieldConfiguration().getOccurrence();
         int shieldOccurrence = game.getArena().getShieldConfiguration().getOccurrence();
         Interval shield = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + shieldOccurrence - 1);
         Interval shield = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + shieldOccurrence - 1);
         totalOccurrenceDefensive += shieldOccurrence;
         totalOccurrenceDefensive += shieldOccurrence;
         defensive.put(shield, "s");
         defensive.put(shield, "s");
 
 
+        // get arrow
         int arrowOccurrence = game.getArena().getArrowOccurrence();
         int arrowOccurrence = game.getArena().getArrowOccurrence();
         Interval arrow = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
         Interval arrow = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
         totalOccurrenceDefensive += arrowOccurrence;
         totalOccurrenceDefensive += arrowOccurrence;
         defensive.put(arrow, "a");
         defensive.put(arrow, "a");
 
 
+        // get fireball
         Interval fireball = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
         Interval fireball = new Interval(totalOccurrenceDefensive, totalOccurrenceDefensive + arrowOccurrence - 1);
         totalOccurrenceDefensive += arrowOccurrence;
         totalOccurrenceDefensive += arrowOccurrence;
         defensive.put(fireball, "f");
         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(totalOccurrenceDefensive);
-            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());
+    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;
                     }
                     }
-                    is.setItemMeta(im);
-                    return is;
+
                 }
                 }
             }
             }
         } else {
         } else {
-            int random = r.nextInt(totalOccurrenceMissiles);
-            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();
+            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
                     } else
                         Logger.DEBUG.log("There wasn't a missile found, when giving out items");
                         Logger.DEBUG.log("There wasn't a missile found, when giving out items");
-                    ++count;
+                    randomizeCounter++;
                 }
                 }
             }
             }
         }
         }
-        return is;
+        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);
+
     }
     }
+
 }
 }

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

@@ -98,6 +98,12 @@ public class Missile {
         return egg;
         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() {
     public ItemStack getItem() {
         ItemStack is = new ItemStack(VersionUtil.getMonsterEgg(egg));
         ItemStack is = new ItemStack(VersionUtil.getMonsterEgg(egg));
         if (VersionUtil.getVersion() > 10) {
         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;
 package de.butzlabben.missilewars.wrapper.player;
 
 
 import de.butzlabben.missilewars.game.Game;
 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 de.butzlabben.missilewars.wrapper.game.Team;
 import java.util.UUID;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicLong;
@@ -42,7 +42,7 @@ public class MWPlayer implements Runnable {
     private final Game game;
     private final Game game;
     int i = -1;
     int i = -1;
     private Team t;
     private Team t;
-    private Randomizer r;
+    private GameRandomizer r;
     private int period;
     private int period;
 
 
     public MWPlayer(Player player, Game game) {
     public MWPlayer(Player player, Game game) {
@@ -82,8 +82,8 @@ public class MWPlayer implements Runnable {
         i++;
         i++;
         if (i >= period) {
         if (i >= period) {
             if (r == null)
             if (r == null)
-                r = new Randomizer(game);
-            p.getInventory().addItem(r.createItem());
+                r = new GameRandomizer(game);
+            p.getInventory().addItem(r.getRandomItem());
             i = 0;
             i = 0;
         }
         }
         p.setLevel(period - i);
         p.setLevel(period - i);