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>
<!-- More visible way how to change dependency versions -->
<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>${build.version}-SNAPSHOT</revision>
<!-- 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.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) {