From 460e012b626b9b809b71e6ebffbe01db8cb2ef75 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 13 Oct 2019 16:17:20 -0700 Subject: [PATCH] Fixed snowing. BoundingBox coords wrong. https://github.com/BentoBoxWorld/Greenhouses/issues/27 --- .../greenhouses/listeners/SnowTracker.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java b/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java index 32ada45..6ac8e0c 100644 --- a/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java +++ b/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java @@ -39,22 +39,25 @@ public class SnowTracker implements Listener { } - private void getAirBlocks(Greenhouse gh) { + private boolean getAirBlocks(Greenhouse gh) { + boolean createdSnow = false; List waterBlocks = new ArrayList<>(); for (int x = (int)gh.getBoundingBox().getMinX() + 1; x < (int)gh.getBoundingBox().getMaxX(); x++) { - for (int z = (int)gh.getBoundingBox().getMinY() + 1; z < (int)gh.getBoundingBox().getMaxY(); z++) { - for (int y = gh.getCeilingHeight() - 1; y >= gh.getFloorHeight(); y--) { + for (int z = (int)gh.getBoundingBox().getMinZ() + 1; z < (int)gh.getBoundingBox().getMaxZ(); z++) { + for (int y = (int)gh.getBoundingBox().getMaxY() - 2; y >= (int)gh.getBoundingBox().getMinY(); y--) { Block b = gh.getLocation().getWorld().getBlockAt(x, y, z); - if (b.getType().equals(Material.AIR) || b.getType().equals(Material.SNOW)) { + Material type = b.getType(); + if (type.equals(Material.AIR) || type.equals(Material.SNOW)) { b.getWorld().spawnParticle(Particle.SNOWBALL, b.getLocation(), 5); } else { // Add snow - if (b.getType().equals(Material.WATER)) { + if (type.equals(Material.WATER)) { waterBlocks.add(b); } else { // Not water if (Math.random() < addon.getSettings().getSnowDensity() && !b.isLiquid()) { b.getRelative(BlockFace.UP).setType(Material.SNOW); + createdSnow = true; } } @@ -68,6 +71,7 @@ public class SnowTracker implements Listener { if (maxSize > 0) { waterBlocks.stream().limit(maxSize).filter(b -> Math.random() < addon.getSettings().getSnowDensity()).forEach(b -> b.setType(Material.ICE)); } + return createdSnow; } @EventHandler @@ -85,11 +89,12 @@ public class SnowTracker implements Listener { } private void removeWaterBucketAndShake(Greenhouse g) { - Hopper h = ((Hopper)g.getRoofHopperLocation().getBlock().getState()); - h.getInventory().removeItem(new ItemStack(Material.WATER_BUCKET)); - h.getInventory().addItem(new ItemStack(Material.BUCKET)); // Scatter snow - getAirBlocks(g); + if (getAirBlocks(g)) { + Hopper h = ((Hopper)g.getRoofHopperLocation().getBlock().getState()); + h.getInventory().removeItem(new ItemStack(Material.WATER_BUCKET)); + h.getInventory().addItem(new ItemStack(Material.BUCKET)); + } } private void shakeGlobes(World world) {