mirror of
https://github.com/BentoBoxWorld/Greenhouses.git
synced 2025-02-01 12:51:31 +01:00
Mostly working. Still WIP.
Animal spawn not working.
This commit is contained in:
parent
fb3d150820
commit
374f549c4f
@ -285,9 +285,9 @@ public class BiomeRecipe implements Comparable<BiomeRecipe> {
|
|||||||
|
|
||||||
private Optional<GreenhousePlant> getRandomPlant() {
|
private Optional<GreenhousePlant> getRandomPlant() {
|
||||||
// Grow a random plant that can grow
|
// Grow a random plant that can grow
|
||||||
Double key = plantTree.ceilingKey(random.nextDouble());
|
double r = random.nextDouble();
|
||||||
|
Double key = plantTree.ceilingKey(r);
|
||||||
return key == null ? Optional.empty() : Optional.ofNullable(plantTree.get(key));
|
return key == null ? Optional.empty() : Optional.ofNullable(plantTree.get(key));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,21 +1,17 @@
|
|||||||
package world.bentobox.greenhouses.listeners;
|
package world.bentobox.greenhouses.listeners;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Hopper;
|
import org.bukkit.block.Hopper;
|
||||||
import org.bukkit.block.data.type.Snow;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.weather.WeatherChangeEvent;
|
import org.bukkit.event.weather.WeatherChangeEvent;
|
||||||
@ -32,7 +28,6 @@ import world.bentobox.greenhouses.data.Greenhouse;
|
|||||||
*/
|
*/
|
||||||
public class SnowTracker implements Listener {
|
public class SnowTracker implements Listener {
|
||||||
private final Greenhouses addon;
|
private final Greenhouses addon;
|
||||||
private final static List<Biome> SNOWBIOMES = Arrays.stream(Biome.values()).filter(b -> b.name().contains("COLD") || b.name().contains("ICE") || b.name().contains("FROZEN")).collect(Collectors.toList());
|
|
||||||
private Map<World, BukkitTask> snowTasks;
|
private Map<World, BukkitTask> snowTasks;
|
||||||
|
|
||||||
public SnowTracker(Greenhouses addon) {
|
public SnowTracker(Greenhouses addon) {
|
||||||
@ -46,16 +41,18 @@ public class SnowTracker implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWeatherChangeEvent(final WeatherChangeEvent e) {
|
public void onWeatherChangeEvent(final WeatherChangeEvent e) {
|
||||||
|
addon.log("DEBUG: weather change");
|
||||||
if (!addon.getActiveWorlds().contains(e.getWorld())) {
|
if (!addon.getActiveWorlds().contains(e.getWorld())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
addon.log("DEBUG: in worlds");
|
||||||
if (e.toWeatherState()) {
|
if (e.toWeatherState()) {
|
||||||
// It's raining
|
// It's raining
|
||||||
//addon.logger(3,"It's raining!");
|
addon.log("It's raining!");
|
||||||
startSnow(e.getWorld());
|
startSnow(e.getWorld());
|
||||||
} else {
|
} else {
|
||||||
// It's stopped raining!
|
// It's stopped raining!
|
||||||
//addon.logger(3,"Stopped raining!");
|
addon.log("Stopped raining!");
|
||||||
stopSnow(e.getWorld());
|
stopSnow(e.getWorld());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,17 +70,17 @@ public class SnowTracker implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void shakeGlobes(World world) {
|
private void shakeGlobes(World world) {
|
||||||
addon.getManager().getMap().getGreenhouses().stream().filter(g -> SNOWBIOMES.contains(g.getBiomeRecipe().getBiome()))
|
addon.getManager().getMap().getGreenhouses().stream().filter(g -> g.getBiomeRecipe().getIceCoverage() > 0)
|
||||||
.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))
|
.filter(g -> g.getRoofHopperLocation().getBlock().getType().equals(Material.HOPPER))
|
||||||
.filter(g -> ((Hopper)g.getRoofHopperLocation().getBlock()).getInventory().contains(Material.WATER_BUCKET))
|
.filter(g -> ((Hopper)g.getRoofHopperLocation().getBlock().getState()).getInventory().contains(Material.WATER_BUCKET))
|
||||||
.forEach(this::removeWaterBucketAndShake);
|
.forEach(this::removeWaterBucketAndShake);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeWaterBucketAndShake(Greenhouse g) {
|
private void removeWaterBucketAndShake(Greenhouse g) {
|
||||||
Hopper h = ((Hopper)g.getRoofHopperLocation().getBlock());
|
Hopper h = ((Hopper)g.getRoofHopperLocation().getBlock().getState());
|
||||||
h.getInventory().removeItem(new ItemStack(Material.WATER_BUCKET));
|
h.getInventory().removeItem(new ItemStack(Material.WATER_BUCKET));
|
||||||
h.getInventory().addItem(new ItemStack(Material.BUCKET));
|
h.getInventory().addItem(new ItemStack(Material.BUCKET));
|
||||||
// Scatter snow
|
// Scatter snow
|
||||||
@ -97,7 +94,7 @@ public class SnowTracker implements Listener {
|
|||||||
for (int z = (int)gh.getFootprint().getMinY() + 1; z < (int)gh.getFootprint().getMaxY(); z++) {
|
for (int z = (int)gh.getFootprint().getMinY() + 1; z < (int)gh.getFootprint().getMaxY(); z++) {
|
||||||
for (int y = gh.getCeilingHeight() - 1; y >= gh.getFloorHeight(); y--) {
|
for (int y = gh.getCeilingHeight() - 1; y >= gh.getFloorHeight(); y--) {
|
||||||
Block b = gh.getLocation().getWorld().getBlockAt(x, y, z);
|
Block b = gh.getLocation().getWorld().getBlockAt(x, y, z);
|
||||||
if (b.getType().equals(Material.AIR)) {
|
if (b.getType().equals(Material.AIR) || b.getType().equals(Material.SNOW)) {
|
||||||
b.getWorld().spawnParticle(Particle.SNOWBALL, b.getLocation(), 5);
|
b.getWorld().spawnParticle(Particle.SNOWBALL, b.getLocation(), 5);
|
||||||
} else {
|
} else {
|
||||||
// Add snow
|
// Add snow
|
||||||
@ -106,7 +103,7 @@ public class SnowTracker implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
// Not water
|
// Not water
|
||||||
if (Math.random() < addon.getSettings().getSnowDensity() && !b.isLiquid()) {
|
if (Math.random() < addon.getSettings().getSnowDensity() && !b.isLiquid()) {
|
||||||
addSnow(b);
|
b.getRelative(BlockFace.UP).setType(Material.SNOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,14 +119,4 @@ public class SnowTracker implements Listener {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSnow(Block b) {
|
|
||||||
Block above = b.getRelative(BlockFace.UP);
|
|
||||||
if (above.getType().equals(Material.SNOW) || above.getType().equals(Material.AIR)) {
|
|
||||||
above.setType(Material.SNOW);
|
|
||||||
Snow snow = (Snow)above;
|
|
||||||
snow.setLayers(Math.min(snow.getMaximumLayers(), snow.getLayers() + 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -7,6 +7,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Hopper;
|
import org.bukkit.block.Hopper;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
@ -92,7 +93,8 @@ public class EcoSystemManager {
|
|||||||
int bonemeal = getBoneMeal(gh);
|
int bonemeal = getBoneMeal(gh);
|
||||||
if (bonemeal > 0) {
|
if (bonemeal > 0) {
|
||||||
// Get a list of all available blocks
|
// Get a list of all available blocks
|
||||||
setBoneMeal(gh, bonemeal - getAvailableBlocks(gh).stream().limit(bonemeal).mapToInt(bl -> gh.getBiomeRecipe().growPlant(bl) ? 1 : 0).sum());
|
int bonemealUsed = getAvailableBlocks(gh).stream().limit(bonemeal).mapToInt(bl -> gh.getBiomeRecipe().growPlant(bl) ? 1 : 0).sum();
|
||||||
|
setBoneMeal(gh, bonemeal - bonemealUsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -112,7 +114,7 @@ public class EcoSystemManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of the highest block inside the greenhouse
|
* Get a list of the lowest level air blocks inside the greenhouse
|
||||||
* @param gh - greenhouse
|
* @param gh - greenhouse
|
||||||
* @return List of blocks
|
* @return List of blocks
|
||||||
*/
|
*/
|
||||||
@ -122,8 +124,8 @@ public class EcoSystemManager {
|
|||||||
for (int z = (int)gh.getFootprint().getMinY() + 1; z < (int)gh.getFootprint().getMaxY(); z++) {
|
for (int z = (int)gh.getFootprint().getMinY() + 1; z < (int)gh.getFootprint().getMaxY(); z++) {
|
||||||
for (int y = gh.getCeilingHeight() - 1; y >= gh.getFloorHeight(); y--) {
|
for (int y = gh.getCeilingHeight() - 1; y >= gh.getFloorHeight(); y--) {
|
||||||
Block b = gh.getLocation().getWorld().getBlockAt(x, y, z);
|
Block b = gh.getLocation().getWorld().getBlockAt(x, y, z);
|
||||||
if (!b.getType().equals(Material.AIR)) {
|
if (!b.getType().equals(Material.AIR) && b.getRelative(BlockFace.UP).getType().equals(Material.AIR)) {
|
||||||
result.add(b);
|
result.add(b.getRelative(BlockFace.UP));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import java.util.Map;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|
||||||
import world.bentobox.bentobox.database.objects.Island;
|
import world.bentobox.bentobox.database.objects.Island;
|
||||||
@ -36,10 +35,7 @@ public class GreenhouseMap {
|
|||||||
if (greenhouse.getLocation() == null) {
|
if (greenhouse.getLocation() == null) {
|
||||||
return GreenhouseResult.NULL;
|
return GreenhouseResult.NULL;
|
||||||
}
|
}
|
||||||
Bukkit.getLogger().info("Adding greenhouse " + greenhouse.getLocation());
|
|
||||||
Bukkit.getLogger().info("Island = " + addon.getIslands().getIslandAt(greenhouse.getLocation()).isPresent());
|
|
||||||
return addon.getIslands().getIslandAt(greenhouse.getLocation()).map(i -> {
|
return addon.getIslands().getIslandAt(greenhouse.getLocation()).map(i -> {
|
||||||
Bukkit.getLogger().info("Island found!");
|
|
||||||
greenhouses.putIfAbsent(i, new ArrayList<>());
|
greenhouses.putIfAbsent(i, new ArrayList<>());
|
||||||
// Check if overlapping
|
// Check if overlapping
|
||||||
if (!isOverlapping(greenhouse)) {
|
if (!isOverlapping(greenhouse)) {
|
||||||
|
@ -58,10 +58,10 @@ biomes:
|
|||||||
contents:
|
contents:
|
||||||
SPRUCE_LOG: 3
|
SPRUCE_LOG: 3
|
||||||
SPRUCE_LEAVES: 3
|
SPRUCE_LEAVES: 3
|
||||||
GRASS: 3
|
GRASS_BLOCK: 3
|
||||||
icecoverage: 10
|
icecoverage: 10
|
||||||
plants:
|
plants:
|
||||||
TALL_GRASS: 10:GRASS
|
TALL_GRASS: 10:GRASS_BLOCK
|
||||||
mobs:
|
mobs:
|
||||||
WOLF: 10:SNOW
|
WOLF: 10:SNOW
|
||||||
moblimit: 9
|
moblimit: 9
|
||||||
@ -73,10 +73,10 @@ biomes:
|
|||||||
contents:
|
contents:
|
||||||
SPRUCE_LOG: 3
|
SPRUCE_LOG: 3
|
||||||
SPRUCE_LEAVES: 3
|
SPRUCE_LEAVES: 3
|
||||||
GRASS: 3
|
GRASS_BLOCK: 3
|
||||||
icecoverage: 10
|
icecoverage: 10
|
||||||
plants:
|
plants:
|
||||||
TALL_GRASS: 10:GRASS
|
TALL_GRASS: 10:GRASS_BLOCK
|
||||||
mobs:
|
mobs:
|
||||||
RABBIT: 10:SNOW
|
RABBIT: 10:SNOW
|
||||||
moblimit: 9
|
moblimit: 9
|
||||||
@ -108,12 +108,12 @@ biomes:
|
|||||||
contents:
|
contents:
|
||||||
OAK_LOG: 3
|
OAK_LOG: 3
|
||||||
OAK_LEAVES: 4
|
OAK_LEAVES: 4
|
||||||
GRASS: 4
|
GRASS_BLOCK: 4
|
||||||
plants:
|
plants:
|
||||||
PINK_TULIP: 2:GRASS
|
PINK_TULIP: 2:GRASS_BLOCK
|
||||||
ORANGE_TULIP: 2:GRASS
|
ORANGE_TULIP: 2:GRASS_BLOCK
|
||||||
SUNFLOWER: 4:GRASS
|
SUNFLOWER: 4:GRASS_BLOCK
|
||||||
TALL_GRASS: 20:GRASS
|
TALL_GRASS: 20:GRASS_BLOCK
|
||||||
NETHER:
|
NETHER:
|
||||||
friendlyname: "&cNether"
|
friendlyname: "&cNether"
|
||||||
biome: NETHER
|
biome: NETHER
|
||||||
@ -134,15 +134,15 @@ biomes:
|
|||||||
icon: VINE
|
icon: VINE
|
||||||
priority: 6
|
priority: 6
|
||||||
contents:
|
contents:
|
||||||
GRASS: 4
|
GRASS_BLOCK: 4
|
||||||
JUNGLE_LOG: 3
|
JUNGLE_LOG: 3
|
||||||
JUNGLE_LEAVES: 4
|
JUNGLE_LEAVES: 4
|
||||||
plants:
|
plants:
|
||||||
DANDELION: 20:GRASS
|
DANDELION: 20:GRASS_BLOCK
|
||||||
MELON: 10:GRASS
|
MELON: 10:GRASS_BLOCK
|
||||||
ROSE_BUSH: 20:GRASS
|
ROSE_BUSH: 20:GRASS_BLOCK
|
||||||
FERN: 20:GRASS
|
FERN: 20:GRASS_BLOCK
|
||||||
TALL_GRASS: 20:GRASS
|
TALL_GRASS: 20:GRASS_BLOCK
|
||||||
MUSHROOM_FIELDS:
|
MUSHROOM_FIELDS:
|
||||||
friendlyname: "Mushroom Fields"
|
friendlyname: "Mushroom Fields"
|
||||||
biome: MUSHROOM_FIELDS
|
biome: MUSHROOM_FIELDS
|
||||||
@ -170,14 +170,14 @@ biomes:
|
|||||||
PLAINS:
|
PLAINS:
|
||||||
friendlyname: "Horse Plains"
|
friendlyname: "Horse Plains"
|
||||||
biome: PLAINS
|
biome: PLAINS
|
||||||
icon: GRASS
|
icon: GRASS_BLOCK
|
||||||
priority: 1
|
priority: 1
|
||||||
contents:
|
contents:
|
||||||
GRASS: 3
|
GRASS_BLOCK: 3
|
||||||
plants:
|
plants:
|
||||||
TALL_GRASS: 10:GRASS
|
TALL_GRASS: 10:GRASS_BLOCK
|
||||||
mobs:
|
mobs:
|
||||||
HORSE: 10:GRASS
|
HORSE: 10:GRASS_BLOCK
|
||||||
moblimit: 9
|
moblimit: 9
|
||||||
RIVER:
|
RIVER:
|
||||||
friendlyname: "Clay river"
|
friendlyname: "Clay river"
|
||||||
@ -201,23 +201,23 @@ biomes:
|
|||||||
contents:
|
contents:
|
||||||
ACACIA_LOG: 3
|
ACACIA_LOG: 3
|
||||||
ACACIA_LEAVES: 4
|
ACACIA_LEAVES: 4
|
||||||
GRASS: 4
|
GRASS_BLOCK: 4
|
||||||
plants:
|
plants:
|
||||||
TALL_GRASS: 10:GRASS
|
TALL_GRASS: 10:GRASS_BLOCK
|
||||||
SWAMP:
|
SWAMP:
|
||||||
friendlyname: "&2Slimy Swamp"
|
friendlyname: "&2Slimy Swamp"
|
||||||
biome: SWAMP
|
biome: SWAMP
|
||||||
icon: LILY_PAD
|
icon: LILY_PAD
|
||||||
priority: 13
|
priority: 13
|
||||||
contents:
|
contents:
|
||||||
GRASS: 4
|
GRASS_BLOCK: 4
|
||||||
OAK_LOG: 3
|
OAK_LOG: 3
|
||||||
OAK_LEAVES: 4
|
OAK_LEAVES: 4
|
||||||
# 50% water coverage required
|
# 50% water coverage required
|
||||||
watercoverage: 50
|
watercoverage: 50
|
||||||
plants:
|
plants:
|
||||||
RED_MUSHROOM: 20:GRASS
|
RED_MUSHROOM: 20:GRASS_BLOCK
|
||||||
BROWN_MUSHROOM: 20:GRASS
|
BROWN_MUSHROOM: 20:GRASS_BLOCK
|
||||||
LILY_PAD: 5:WATER
|
LILY_PAD: 5:WATER
|
||||||
mobs:
|
mobs:
|
||||||
SLIME: 5:WATER
|
SLIME: 5:WATER
|
||||||
|
Loading…
Reference in New Issue
Block a user