Only track snow for loaded greenhouses.

Load chunks async.

https://github.com/BentoBoxWorld/Greenhouses/issues/47
This commit is contained in:
tastybento 2020-03-21 21:19:00 -07:00
parent 852d35ea6f
commit 51d82d0b9b
2 changed files with 18 additions and 11 deletions

View File

@ -47,7 +47,7 @@
<powermock.version>2.0.2</powermock.version> <powermock.version>2.0.2</powermock.version>
<!-- More visible way how to change dependency versions --> <!-- More visible way how to change dependency versions -->
<spigot.version>1.14.4-R0.1-SNAPSHOT</spigot.version> <spigot.version>1.14.4-R0.1-SNAPSHOT</spigot.version>
<bentobox.version>1.7.0</bentobox.version> <bentobox.version>1.12.0</bentobox.version>
<!-- Revision variable removes warning about dynamic version --> <!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision> <revision>${build.version}-SNAPSHOT</revision>
<!-- This allows to change between versions and snapshots. --> <!-- This allows to change between versions and snapshots. -->

View File

@ -19,6 +19,7 @@ import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import world.bentobox.bentobox.util.Util;
import world.bentobox.greenhouses.Greenhouses; import world.bentobox.greenhouses.Greenhouses;
import world.bentobox.greenhouses.data.Greenhouse; import world.bentobox.greenhouses.data.Greenhouse;
@ -56,8 +57,8 @@ public class SnowTracker implements Listener {
waterBlocks.add(b); waterBlocks.add(b);
} else { } else {
// Not water // Not water
if (Math.random() < addon.getSettings().getSnowDensity() if (Math.random() < addon.getSettings().getSnowDensity()
&& !b.isLiquid() && !b.isLiquid()
&& b.getRelative(BlockFace.UP).getType().equals(Material.AIR)) { && b.getRelative(BlockFace.UP).getType().equals(Material.AIR)) {
b.getRelative(BlockFace.UP).setType(Material.SNOW); b.getRelative(BlockFace.UP).setType(Material.SNOW);
createdSnow = true; createdSnow = true;
@ -76,7 +77,7 @@ public class SnowTracker implements Listener {
if (maxSize > 0) { if (maxSize > 0) {
waterBlocks.stream().limit(maxSize).filter(b -> Math.random() < addon.getSettings().getSnowDensity()).forEach(b -> b.setType(Material.ICE)); waterBlocks.stream().limit(maxSize).filter(b -> Math.random() < addon.getSettings().getSnowDensity()).forEach(b -> b.setType(Material.ICE));
} }
*/ */
return createdSnow; return createdSnow;
} }
@ -86,11 +87,11 @@ public class SnowTracker implements Listener {
*/ */
@EventHandler @EventHandler
public void onBlockFormEvent(final BlockFormEvent e) { public void onBlockFormEvent(final BlockFormEvent e) {
if (e.getNewState().getType().equals(Material.SNOW) && addon.getManager().getMap().isAboveGreenhouse(e.getBlock().getLocation())) { if (e.getNewState().getType().equals(Material.SNOW) && addon.getManager().getMap().isAboveGreenhouse(e.getBlock().getLocation())) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onWeatherChangeEvent(final WeatherChangeEvent e) { public void onWeatherChangeEvent(final WeatherChangeEvent e) {
if (!addon.getActiveWorlds().contains(e.getWorld())) { if (!addon.getActiveWorlds().contains(e.getWorld())) {
@ -116,12 +117,18 @@ public class SnowTracker implements Listener {
private void shakeGlobes(World world) { private void shakeGlobes(World world) {
addon.getManager().getMap().getGreenhouses().stream().filter(g -> g.getBiomeRecipe().getIceCoverage() > 0) 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.getLocation().getWorld().equals(world))
.filter(g -> !g.isBroken()) .filter(g -> !g.isBroken())
.filter(g -> g.getRoofHopperLocation() != null) .filter(g -> g.getRoofHopperLocation() != null)
.filter(g -> g.getRoofHopperLocation().getBlock().getType().equals(Material.HOPPER)) .forEach(g -> {
.filter(g -> ((Hopper)g.getRoofHopperLocation().getBlock().getState()).getInventory().contains(Material.WATER_BUCKET)) Util.getChunkAtAsync(g.getRoofHopperLocation()).thenRun(() -> {
.forEach(this::removeWaterBucketAndShake); 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) { private void startSnow(World world) {