Only track snow for loaded greenhouses.
Load chunks async. https://github.com/BentoBoxWorld/Greenhouses/issues/47
This commit is contained in:
parent
852d35ea6f
commit
51d82d0b9b
2
pom.xml
2
pom.xml
|
@ -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. -->
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue