From 9d650720f5c5899f18f65f3699a48ad07adc5acf Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Mon, 25 Aug 2014 22:44:23 -0700
Subject: [PATCH] again

---
 .../comandante/creeper/Items/ItemSpawner.java | 60 ++++++++++++-------
 1 file changed, 39 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
index 208a9896..76e08106 100644
--- a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
+++ b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
@@ -32,31 +32,49 @@ public class ItemSpawner extends CreeperEntity {
     @Override
     public void run() {
         incTicks();
-        int numberCurrentlyInRoom = 0;
         if (noTicks >= itemSpawnRule.getSpawnIntervalTicks()) {
-            Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds();
-            for (String i : itemIds) {
-                Item currentItem = gameManager.getEntityManager().getItemEntity(i);
-                ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId());
-                if (currentItemType.equals(spawnItemType)) {
-                    numberCurrentlyInRoom++;
-                }
+            if (itemSpawnRule.getRandomChance().isPresent()) {
+                processRandom();
+            } else {
+                processNormal();
+            }
+        }
+    }
+
+    private void processRandom() {
+        int randomPercentage = itemSpawnRule.getRandomChance().get();
+        int numberOfAttempts = itemSpawnRule.getMaxPerRoom() - countNumberInRoom();
+        for (int i = 0; i < numberOfAttempts; i++) {
+            if (random.nextInt(100) < randomPercentage) {
+                createAndAddItem();
             }
-            while (numberCurrentlyInRoom < itemSpawnRule.getMaxPerRoom()) {
-                if (itemSpawnRule.getRandomChance().isPresent()) {
-                    if (random.nextInt(100) < itemSpawnRule.getRandomChance().get()) {
-                        Item item = spawnItemType.create();
-                        gameManager.getEntityManager().addItem(item);
-                        gameManager.placeItemInRoom(roomId, item.getItemId());
-                        numberCurrentlyInRoom++;
-                    }
-                    continue;
-                }
-                Item item = spawnItemType.create();
-                gameManager.getEntityManager().addItem(item);
-                gameManager.placeItemInRoom(roomId, item.getItemId());
+        }
+    }
+
+    private void processNormal() {
+        int numberToCreate = itemSpawnRule.getMaxPerRoom() - countNumberInRoom();
+        for (int i = 0; i < numberToCreate; i++) {
+            createAndAddItem();
+        }
+    }
+
+    private int countNumberInRoom() {
+        int numberCurrentlyInRoom = 0;
+        Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds();
+        for (String i : itemIds) {
+            Item currentItem = gameManager.getEntityManager().getItemEntity(i);
+            ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId());
+            if (currentItemType.equals(spawnItemType)) {
                 numberCurrentlyInRoom++;
             }
         }
+        return numberCurrentlyInRoom;
     }
+
+    private void createAndAddItem() {
+        Item item = spawnItemType.create();
+        gameManager.getEntityManager().addItem(item);
+        gameManager.placeItemInRoom(roomId, item.getItemId());
+    }
+
 }
-- 
GitLab