Skip to content

Commit

Permalink
Only track snow for loaded greenhouses.
Browse files Browse the repository at this point in the history
Load chunks async.

#47
  • Loading branch information
tastybento committed Mar 22, 2020
1 parent 852d35e commit 51d82d0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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. -->
Expand Down
27 changes: 17 additions & 10 deletions src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
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;

Expand Down Expand Up @@ -56,8 +57,8 @@ private boolean getAirBlocks(Greenhouse gh) {
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;
Expand All @@ -76,7 +77,7 @@ private boolean getAirBlocks(Greenhouse gh) {
if (maxSize > 0) {
waterBlocks.stream().limit(maxSize).filter(b -> Math.random() < addon.getSettings().getSnowDensity()).forEach(b -> b.setType(Material.ICE));
}
*/
*/
return createdSnow;
}

Expand All @@ -86,11 +87,11 @@ private boolean getAirBlocks(Greenhouse gh) {
*/
@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())) {
Expand All @@ -116,12 +117,18 @@ private void removeWaterBucketAndShake(Greenhouse g) {

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) {
Expand Down

0 comments on commit 51d82d0

Please sign in to comment.