diff --git a/src/main/java/world/bentobox/greenhouses/greenhouse/BiomeRecipe.java b/src/main/java/world/bentobox/greenhouses/greenhouse/BiomeRecipe.java index 92ad899..cc2216b 100644 --- a/src/main/java/world/bentobox/greenhouses/greenhouse/BiomeRecipe.java +++ b/src/main/java/world/bentobox/greenhouses/greenhouse/BiomeRecipe.java @@ -38,6 +38,7 @@ import com.google.common.base.Enums; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.util.Util; import world.bentobox.greenhouses.Greenhouses; import world.bentobox.greenhouses.data.Greenhouse; @@ -376,27 +377,37 @@ public class BiomeRecipe implements Comparable { } // Center spawned mob Location spawnLoc = b.getLocation().clone().add(new Vector(0.5, 0, 0.5)); - return getRandomMob() + BentoBox.getInstance().logDebug("Spawning at " + spawnLoc.getBlock().getType() + " " + spawnLoc); + getRandomMob().ifPresent(m -> { + BentoBox.getInstance().logDebug("Mob is " + m.mobType()); + BentoBox.getInstance().logDebug("mobSpawnOn = " + m.mobSpawnOn()); + BentoBox.getInstance().logDebug("Block below is " + b.getRelative(BlockFace.DOWN).getType()); + }); + boolean result = getRandomMob() // Check if the spawn on block matches, if it exists .filter(m -> Optional.of(m.mobSpawnOn()) .map(b.getRelative(BlockFace.DOWN).getType()::equals) .orElse(true)) // If spawn occurs, check if it can fit inside greenhouse .map(m -> { + BentoBox.getInstance().logDebug("Mob is " + m); Entity entity = b.getWorld().spawnEntity(spawnLoc, m.mobType()); preventZombie(entity); return addon .getManager() .getMap() .getGreenhouse(b.getLocation()).map(gh -> { + BentoBox.getInstance().logDebug("Checking boundary"); if (!gh.getInternalBoundingBox().contains(entity.getBoundingBox())) { entity.remove(); + BentoBox.getInstance().logDebug("Removed"); return false; } return true; }).orElse(false); }).orElse(false); - + BentoBox.getInstance().logDebug("Result = " + result); + return result; } /** diff --git a/src/main/java/world/bentobox/greenhouses/managers/EcoSystemManager.java b/src/main/java/world/bentobox/greenhouses/managers/EcoSystemManager.java index 0e17a42..8a4a73b 100644 --- a/src/main/java/world/bentobox/greenhouses/managers/EcoSystemManager.java +++ b/src/main/java/world/bentobox/greenhouses/managers/EcoSystemManager.java @@ -19,6 +19,7 @@ import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.BoundingBox; import org.bukkit.util.NumberConversions; +import world.bentobox.bentobox.BentoBox; import world.bentobox.greenhouses.Greenhouses; import world.bentobox.greenhouses.data.Greenhouse; import world.bentobox.greenhouses.greenhouse.BiomeRecipe; @@ -138,14 +139,17 @@ public class EcoSystemManager { * @return true if mobs were spawned, false if not */ boolean addMobs(Greenhouse gh) { + BentoBox.getInstance().logDebug("Adding mobs"); final BoundingBox bb = gh.getBoundingBox(); if(gh.getLocation() == null || gh.getLocation().getWorld() == null || gh.getWorld() == null || !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMaxX()) >> 4, ((int) bb.getMaxZ()) >> 4) || !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMinX()) >> 4, ((int) bb.getMinZ()) >> 4)){ // Skipping addmobs for unloaded greenhouse + BentoBox.getInstance().logDebug("unloaded gh"); return false; } if (gh.getBiomeRecipe().noMobs()) { + BentoBox.getInstance().logDebug("No mobs in recipe"); return false; } // Check greenhouse chunks are loaded @@ -154,6 +158,7 @@ public class EcoSystemManager { int chunkX = (int)(blockX / 16); int chunkZ = (int)(blockZ / 16); if (!gh.getWorld().isChunkLoaded(chunkX, chunkZ)) { + BentoBox.getInstance().logDebug("Chunks not loaded"); return false; } } @@ -164,19 +169,26 @@ public class EcoSystemManager { .filter(e -> gh.contains(e.getLocation())).count(); // Get the blocks in the greenhouse where spawning could occur List list = new ArrayList<>(getAvailableBlocks(gh, false)); + BentoBox.getInstance().logDebug("Entities = " + sum + " available blocks are " + list.size()); + list.forEach(gb -> BentoBox.getInstance().logDebug(gb.block.getType())); Collections.shuffle(list, new Random(System.currentTimeMillis())); Iterator it = list.iterator(); // Check if the greenhouse is full if (sum >= gh.getBiomeRecipe().getMaxMob()) { + BentoBox.getInstance().logDebug("GH is full"); return false; } while (it.hasNext() && (sum == 0 || gh.getArea() / sum >= gh.getBiomeRecipe().getMobLimit())) { // Spawn something if chance says so if (gh.getBiomeRecipe().spawnMob(it.next().block())) { // Add a mob to the sum in the greenhouse + BentoBox.getInstance().logDebug("Spawned a mob"); sum++; } } + if (sum == 0 ) { + BentoBox.getInstance().logDebug("Nothing spawned"); + } return sum > 0; }