From 9ae9cdbfd6aff1e406cb25f342929354f5f17602 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 15 Nov 2020 15:02:13 -0800 Subject: [PATCH] Fixes errors when loading greenhouses. --- .../managers/GreenhouseManager.java | 22 ++++++++++++++++--- .../greenhouses/managers/GreenhouseMap.java | 7 ++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseManager.java b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseManager.java index f21cbc7..415a89c 100644 --- a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseManager.java +++ b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseManager.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Set; import org.bukkit.Location; +import org.bukkit.block.Biome; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -47,7 +48,8 @@ public class GreenhouseManager implements Listener { NULL, SUCCESS, FAIL_NO_RECIPE_FOUND, - FAIL_INSUFFICIENT_BLOCKS + FAIL_INSUFFICIENT_BLOCKS, + FAIL_NO_WORLD, FAIL_UNKNOWN_RECIPE } private final Greenhouses addon; @@ -94,12 +96,21 @@ public class GreenhouseManager implements Listener { toBeRemoved.add(g); break; case FAIL_OVERLAPPING: + addon.logError("Greenhouse overlaps with another greenhouse. Skipping..."); + break; case NULL: - addon.logError(result.name()); + addon.logError("Null location of greenhouse. Cannot load. Skipping..."); break; case SUCCESS: activateGreenhouse(g); break; + case FAIL_NO_WORLD: + addon.logError("Database contains greenhouse for a non-loaded world. Skipping..."); + break; + case FAIL_UNKNOWN_RECIPE: + addon.logError("Greenhouse uses a recipe that does not exist in the biomes.yml. Skipping..."); + addon.logError("Greenhouse Id " + g.getUniqueId()); + break; default: break; @@ -178,10 +189,15 @@ public class GreenhouseManager implements Listener { } private void activateGreenhouse(Greenhouse gh) { + Biome ghBiome = gh.getBiomeRecipe().getBiome(); + if (ghBiome == null) { + addon.logError("Biome recipe error - no such biome for " + gh.getBiomeRecipe().getName()); + return; + } for (int x = (int)gh.getBoundingBox().getMinX(); x < gh.getBoundingBox().getMaxX(); x+=4) { for (int z = (int)gh.getBoundingBox().getMinZ(); z < gh.getBoundingBox().getMaxZ(); z+=4) { for (int y = (int)gh.getBoundingBox().getMinY(); y < gh.getBoundingBox().getMaxY(); y+=4) { - gh.getWorld().setBiome(x, y, z, gh.getBiomeRecipe().getBiome()); + gh.getWorld().setBiome(x, y, z, ghBiome); } } } diff --git a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseMap.java b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseMap.java index 2c3bbc2..0b8b2f0 100644 --- a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseMap.java +++ b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseMap.java @@ -33,6 +33,13 @@ public class GreenhouseMap { * @return result {@link GreenhouseResult} */ public GreenhouseResult addGreenhouse(Greenhouse greenhouse) { + // Validation checks + if (greenhouse.getBiomeRecipe() == null) { + return GreenhouseResult.FAIL_UNKNOWN_RECIPE; + } + if (greenhouse.getWorld() == null) { + return GreenhouseResult.FAIL_NO_WORLD; + } if (greenhouse.getLocation() == null) { return GreenhouseResult.NULL; }