added lightning fire control
This commit is contained in:
parent
49eeb646ea
commit
71d5d8303d
src/main/java/eu/mhsl/craftattack/spawn/appliances/tooling/lightningFireControl
19
src/main/java/eu/mhsl/craftattack/spawn/appliances/tooling/lightningFireControl/LightningFireControl.java
Normal file
19
src/main/java/eu/mhsl/craftattack/spawn/appliances/tooling/lightningFireControl/LightningFireControl.java
Normal file
@ -0,0 +1,19 @@
|
||||
package eu.mhsl.craftattack.spawn.appliances.tooling.lightningFireControl;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class LightningFireControl extends Appliance {
|
||||
Set<Block> frozenFireBlocks = new HashSet<>();
|
||||
|
||||
@Override
|
||||
protected @NotNull List<Listener> listeners() {
|
||||
return List.of(new LightningFireListener());
|
||||
}
|
||||
}
|
62
src/main/java/eu/mhsl/craftattack/spawn/appliances/tooling/lightningFireControl/LightningFireListener.java
Normal file
62
src/main/java/eu/mhsl/craftattack/spawn/appliances/tooling/lightningFireControl/LightningFireListener.java
Normal file
@ -0,0 +1,62 @@
|
||||
package eu.mhsl.craftattack.spawn.appliances.tooling.lightningFireControl;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.Main;
|
||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockBurnEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockSpreadEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
class LightningFireListener extends ApplianceListener<LightningFireControl> {
|
||||
private final Random rnd = new Random();
|
||||
|
||||
@EventHandler
|
||||
public void onBlockIgnite(BlockIgniteEvent event) {
|
||||
if(!event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING)) return;
|
||||
Block block = event.getBlock();
|
||||
|
||||
this.getAppliance().frozenFireBlocks.add(block);
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Runnable cancel = () -> {
|
||||
LightningFireListener.this.getAppliance().frozenFireBlocks.remove(block);
|
||||
this.cancel();
|
||||
};
|
||||
|
||||
if (block.getType() != Material.FIRE) {
|
||||
cancel.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if (LightningFireListener.this.rnd.nextInt(100) < 30) {
|
||||
block.setType(Material.AIR);
|
||||
cancel.run();
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.instance(), 20L, 20L);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onFireSpread(BlockSpreadEvent event) {
|
||||
Block source = event.getSource();
|
||||
if(!source.getType().equals(Material.FIRE)) return;
|
||||
if(source.equals(event.getBlock())) return;
|
||||
if(!this.getAppliance().frozenFireBlocks.contains(source)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBurned(BlockBurnEvent event) {
|
||||
if(!this.getAppliance().frozenFireBlocks.contains(event.getIgnitingBlock())) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user