From 51d82d0b9b2ac41a43eb8c0b9676be9f53e5e5be Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 21 Mar 2020 21:19:00 -0700 Subject: [PATCH] Only track snow for loaded greenhouses. Load chunks async. https://github.com/BentoBoxWorld/Greenhouses/issues/47 --- pom.xml | 2 +- .../greenhouses/listeners/SnowTracker.java | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 4dc5b83..f2cc458 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ 2.0.2 1.14.4-R0.1-SNAPSHOT - 1.7.0 + 1.12.0 ${build.version}-SNAPSHOT diff --git a/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java b/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java index b167c49..8fde5bf 100644 --- a/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java +++ b/src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java @@ -19,6 +19,7 @@ import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitTask; +import world.bentobox.bentobox.util.Util; import world.bentobox.greenhouses.Greenhouses; import world.bentobox.greenhouses.data.Greenhouse; @@ -56,8 +57,8 @@ public class SnowTracker implements Listener { waterBlocks.add(b); } else { // Not water - if (Math.random() < addon.getSettings().getSnowDensity() - && !b.isLiquid() + if (Math.random() < addon.getSettings().getSnowDensity() + && !b.isLiquid() && b.getRelative(BlockFace.UP).getType().equals(Material.AIR)) { b.getRelative(BlockFace.UP).setType(Material.SNOW); createdSnow = true; @@ -76,7 +77,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; } @@ -86,11 +87,11 @@ public class SnowTracker implements Listener { */ @EventHandler public void onBlockFormEvent(final BlockFormEvent e) { - if (e.getNewState().getType().equals(Material.SNOW) && addon.getManager().getMap().isAboveGreenhouse(e.getBlock().getLocation())) { - e.setCancelled(true); - } + if (e.getNewState().getType().equals(Material.SNOW) && addon.getManager().getMap().isAboveGreenhouse(e.getBlock().getLocation())) { + e.setCancelled(true); + } } - + @EventHandler public void onWeatherChangeEvent(final WeatherChangeEvent e) { if (!addon.getActiveWorlds().contains(e.getWorld())) { @@ -116,12 +117,18 @@ public class SnowTracker implements Listener { private void shakeGlobes(World world) { addon.getManager().getMap().getGreenhouses().stream().filter(g -> g.getBiomeRecipe().getIceCoverage() > 0) + .filter(g -> g.getLocation().getChunk().isLoaded()) .filter(g -> g.getLocation().getWorld().equals(world)) .filter(g -> !g.isBroken()) .filter(g -> g.getRoofHopperLocation() != null) - .filter(g -> g.getRoofHopperLocation().getBlock().getType().equals(Material.HOPPER)) - .filter(g -> ((Hopper)g.getRoofHopperLocation().getBlock().getState()).getInventory().contains(Material.WATER_BUCKET)) - .forEach(this::removeWaterBucketAndShake); + .forEach(g -> { + Util.getChunkAtAsync(g.getRoofHopperLocation()).thenRun(() -> { + if (g.getRoofHopperLocation().getBlock().getType().equals(Material.HOPPER) + && ((Hopper)g.getRoofHopperLocation().getBlock().getState()).getInventory().contains(Material.WATER_BUCKET)) { + removeWaterBucketAndShake(g); + } + }); + }); } private void startSnow(World world) {