diff --git a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java
index 208a989624d08f90783d82ce018e8967b45893dc..76e081066d2ef6fd3b55547df5d6835c1eee11c6 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());
+    }
+
 }