1
1
package world .bentobox .magiccobblestonegenerator .listeners ;
2
2
3
3
4
+ import org .bukkit .Bukkit ;
4
5
import org .bukkit .Material ;
6
+ import org .bukkit .Particle ;
7
+ import org .bukkit .Sound ;
8
+ import org .bukkit .SoundCategory ;
5
9
import org .bukkit .block .Block ;
6
10
import org .bukkit .block .BlockFace ;
7
11
import org .bukkit .event .EventHandler ;
10
14
import org .bukkit .event .block .BlockFromToEvent ;
11
15
12
16
17
+ import java .util .Random ;
18
+
13
19
import world .bentobox .magiccobblestonegenerator .StoneGeneratorAddon ;
14
20
15
21
@@ -37,7 +43,7 @@ public MainGeneratorListener(StoneGeneratorAddon addon)
37
43
* It cancels this event only if a custom generator manages to change material.
38
44
* @param event BlockFromToEvent which result will be overwritten.
39
45
*/
40
- @ EventHandler (priority = EventPriority .LOW )
46
+ @ EventHandler (priority = EventPriority .LOW , ignoreCancelled = true )
41
47
public void onBlockFromToEvent (BlockFromToEvent event )
42
48
{
43
49
Block eventSourceBlock = event .getBlock ();
@@ -89,7 +95,14 @@ public void onBlockFromToEvent(BlockFromToEvent event)
89
95
if (this .canGenerateStone (liquid , eventToBlock ))
90
96
{
91
97
// Return from here at any case. Even if could not manage to replace stone.
92
- event .setCancelled (this .addon .getGenerator ().isReplacementGenerated (eventToBlock , true ));
98
+
99
+ if (this .addon .getGenerator ().isReplacementGenerated (eventToBlock , true ))
100
+ {
101
+ // sound when lava transforms to cobble
102
+ this .playEffects (eventToBlock );
103
+ event .setCancelled (true );
104
+ }
105
+
93
106
return ;
94
107
}
95
108
@@ -102,7 +115,12 @@ public void onBlockFromToEvent(BlockFromToEvent event)
102
115
if (liquid .equals (Material .LAVA ) && this .canLavaGenerateCobblestone (eventToBlock , event .getFace ()))
103
116
{
104
117
// Lava is generating cobblestone into eventToBlock place
105
- event .setCancelled (this .addon .getGenerator ().isReplacementGenerated (eventToBlock ));
118
+ if (this .addon .getGenerator ().isReplacementGenerated (eventToBlock , true ))
119
+ {
120
+ // sound when lava transforms to cobble
121
+ this .playEffects (eventToBlock );
122
+ event .setCancelled (true );
123
+ }
106
124
}
107
125
else if (liquid .equals (Material .WATER ))
108
126
{
@@ -112,14 +130,57 @@ else if (liquid.equals(Material.WATER))
112
130
113
131
if (replacedBlock != null )
114
132
{
115
- event .setCancelled (this .addon .getGenerator ().isReplacementGenerated (replacedBlock ));
133
+ // Water flow should not be cancelled even if replacement is generated, as replacement block will
134
+ // never be in the flow block, as it will always be next block.
135
+
136
+ if (this .addon .getGenerator ().isReplacementGenerated (replacedBlock , true ))
137
+ {
138
+ // sound when lava transforms to cobble
139
+ this .playEffects (replacedBlock );
140
+ }
116
141
}
117
142
}
118
143
119
144
// End of process... no generation for you!!
120
145
}
121
146
122
147
148
+ /**
149
+ * This method plays sound effect and adds particles to new block.
150
+ * @param block block placement where particle must be generated.
151
+ */
152
+ private void playEffects (Block block )
153
+ {
154
+ final double blockX = block .getX ();
155
+ final double blockY = block .getY ();
156
+ final double blockZ = block .getZ ();
157
+
158
+ // Run everything in new task
159
+ Bukkit .getServer ().getScheduler ().runTask (this .addon .getPlugin (), () -> {
160
+ // Play sound for spawning block
161
+ block .getWorld ().playSound (block .getLocation (),
162
+ Sound .BLOCK_FIRE_EXTINGUISH ,
163
+ SoundCategory .BLOCKS ,
164
+ 0.5F ,
165
+ 2.6F + (this .random .nextFloat () - this .random .nextFloat ()) * 0.8F );
166
+
167
+ // This spawns 8 large smoke particles.
168
+ for (int counter = 0 ; counter < 8 ; ++counter )
169
+ {
170
+ block .getWorld ().spawnParticle (Particle .SMOKE_LARGE ,
171
+ blockX + Math .random (),
172
+ blockY + 1 + Math .random (),
173
+ blockZ + Math .random (),
174
+ 1 ,
175
+ 0 ,
176
+ 0 ,
177
+ 0 ,
178
+ 0 );
179
+ }
180
+ });
181
+ }
182
+
183
+
123
184
// ---------------------------------------------------------------------
124
185
// Section: Private Methods
125
186
// ---------------------------------------------------------------------
@@ -372,4 +433,9 @@ private boolean isFlowingLavaBlock(Block block)
372
433
* Main addon class.
373
434
*/
374
435
private StoneGeneratorAddon addon ;
436
+
437
+ /**
438
+ * A bit of randomness
439
+ */
440
+ public final Random random = new Random ();
375
441
}
0 commit comments