package nl.sugcube.crystalquest.items;
import nl.sugcube.crystalquest.CrystalQuest;
import nl.sugcube.crystalquest.game.Arena;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* @author SugarCaney
*/
public class Landmine extends ItemExecutor {
private static final Set<Material> PLACEABLE_MATERIALS = new HashSet<>();
static {
Collections.addAll(PLACEABLE_MATERIALS,
Material.LONG_GRASS, Material.STATIONARY_WATER, Material.WATER,
Material.DEAD_BUSH, Material.YELLOW_FLOWER, Material.RED_ROSE,
Material.RAILS, Material.DETECTOR_RAIL, Material.POWERED_RAIL
);
}
public Landmine() {
super(Material.STONE_PLATE);
}
@Override
boolean execute(CrystalQuest plugin, Player player, ItemStack itemStack) {
Arena arena = plugin.getArenaManager().getArena(player.getUniqueId());
Location location = player.getLocation();
// When the player has air at their feet.
if (location.getBlock().getType().equals(Material.AIR)) {
Block block = location.clone().add(0, -1, 0).getBlock();
if (block.getType() == Material.AIR) {
return true;
}
// Place landmine
Bukkit.getScheduler().scheduleSyncDelayedTask(
plugin,
new PlaceLandmine(location.getBlock(), arena, player),
40L
);
arena.getLandmines().put(location.getBlock().getLocation(), player.getUniqueId());
return true;
}
// When it is obstructed.
if (!PLACEABLE_MATERIALS.contains(location.getBlock().getType())) {
return true;
}
Block blockOnTop = location.clone().add(0, 1, 0).getBlock();
if (!blockOnTop.getType().equals(Material.AIR)) {
return true;
}
player.playSound(player.getLocation(), Sound.BLOCK_IRON_TRAPDOOR_CLOSE, 12F, 12F);
// Place landmine.
Bukkit.getScheduler().scheduleSyncDelayedTask(
plugin,
new PlaceLandmine(blockOnTop, arena, player),
40L
);
arena.getLandmines().put(blockOnTop.getLocation(), player.getUniqueId());
return true;
}
}