Skip to content

Commit 4aec983

Browse files
committed
Cauldron will fill up with snow
Also, snow will pile up as expected. #83
1 parent c660575 commit 4aec983

File tree

1 file changed

+45
-7
lines changed

1 file changed

+45
-7
lines changed

src/main/java/world/bentobox/greenhouses/listeners/SnowTracker.java

+45-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package world.bentobox.greenhouses.listeners;
22

3-
import java.util.*;
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.Objects;
48

59
import org.bukkit.Bukkit;
610
import org.bukkit.Material;
@@ -9,6 +13,8 @@
913
import org.bukkit.block.Block;
1014
import org.bukkit.block.BlockFace;
1115
import org.bukkit.block.Hopper;
16+
import org.bukkit.block.data.Levelled;
17+
import org.bukkit.block.data.type.Snow;
1218
import org.bukkit.event.EventHandler;
1319
import org.bukkit.event.Listener;
1420
import org.bukkit.event.block.BlockFormEvent;
@@ -67,10 +73,11 @@ private boolean getAirBlocks(Greenhouse gh) {
6773
// Not water
6874
if (Math.random() < addon.getSettings().getSnowDensity()
6975
&& !b.isLiquid()
70-
&& b.getRelative(BlockFace.UP).getType().equals(Material.AIR)) {
71-
placeSnow(b);
76+
&& (b.getRelative(BlockFace.UP).getType().equals(Material.AIR)
77+
|| b.getRelative(BlockFace.UP).getType().equals(Material.SNOW))) {
7278

73-
createdSnow = true;
79+
80+
createdSnow = placeSnow(b);
7481
}
7582
}
7683

@@ -90,13 +97,44 @@ private boolean getAirBlocks(Greenhouse gh) {
9097
return createdSnow;
9198
}
9299

93-
private void placeSnow(Block b) {
100+
private boolean placeSnow(Block b) {
94101
Optional<Material> snowCauldron = Enums.getIfPresent(Material.class, "POWDER_SNOW_CAULDRON");
95-
if (b.getType().equals(Material.CAULDRON) && snowCauldron.isPresent()) {
96-
b.setType(snowCauldron.get());
102+
if (snowCauldron.isPresent()) {
103+
if (b.getType().equals(Material.CAULDRON)) {
104+
b.setType(snowCauldron.get());
105+
return true;
106+
} else if (b.getType().equals(snowCauldron.get())) {
107+
// Fill up the snow cauldron some more
108+
return incrementLevel(b);
109+
}
110+
}
111+
// Pile up snow
112+
if (b.getRelative(BlockFace.UP).getType().equals(Material.SNOW)) {
113+
return incrementLevel(b.getRelative(BlockFace.UP));
97114
} else {
98115
b.getRelative(BlockFace.UP).setType(Material.SNOW);
99116
}
117+
return true;
118+
}
119+
120+
private boolean incrementLevel(Block b) {
121+
if (b.getBlockData() instanceof Levelled data) {
122+
int max = data.getMaximumLevel();
123+
if (data.getLevel() < max) {
124+
data.setLevel(data.getLevel() + 1);
125+
b.setBlockData(data);
126+
return true;
127+
}
128+
}
129+
if (b.getBlockData() instanceof Snow data) {
130+
int max = data.getMaximumLayers();
131+
if (data.getLayers() < max) {
132+
data.setLayers(data.getLayers() + 1);
133+
b.setBlockData(data);
134+
return true;
135+
}
136+
}
137+
return false;
100138
}
101139

102140
/**

0 commit comments

Comments
 (0)