/*
* Copyright (C) 2013-2016 Gonçalo Baltazar <me@goncalomb.com>
*
* This file is part of NBTEditor.
*
* NBTEditor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NBTEditor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NBTEditor. If not, see <http://www.gnu.org/licenses/>.
*/
package com.goncalomb.bukkit.customitems.items;
import java.util.ArrayList;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Item;
import org.bukkit.util.Vector;
public final class AntiMatterBomb extends GenericBomb {
private boolean _cleanup;
public AntiMatterBomb() {
super("anti-matter-bomb", ChatColor.GREEN + "Anti-Matter Bomb", Material.ENDER_PEARL);
setLore("§c§k-----§r §c§lCaution! §r§c§k-----");
setDefaultConfig("enabled", false);
setDefaultConfig("fuse", 60);
setDefaultConfig("cleanup", true);
}
@Override
public void applyConfig(ConfigurationSection section) {
super.applyConfig(section);
_cleanup = section.getBoolean("cleanup", true);
}
@Override
public void onExplode(Item item, Location location) {
World world = location.getWorld();
Random rand = new Random();
int radiusSquared = 25;
final ArrayList<FallingBlock> fallingBlocks = new ArrayList<FallingBlock>();
for (int x = -5; x < 5; ++x) {
for (int y = -5; y < 5; ++y) {
for (int z = -5; z < 5; ++z) {
Vector v = new Vector(x, y, z);
if (v.lengthSquared() <= radiusSquared) {
Location loc = location.clone().add(v);
Block block = loc.getBlock();
if (!block.isEmpty() && !block.isLiquid() && block.getType() != Material.BEDROCK) {
Vector vel = location.toVector().subtract(loc.toVector()).normalize();
vel.add(new Vector(rand.nextFloat() - 0.5, 0, rand.nextFloat() - 0.5)).normalize();
vel.multiply(1 + rand.nextFloat());
FallingBlock fallingBlock = world.spawnFallingBlock(loc, block.getTypeId(), block.getData());
fallingBlock.setDropItem(false);
fallingBlock.setVelocity(vel);
fallingBlocks.add(fallingBlock);
block.setType(Material.AIR);
}
}
}
}
}
if (fallingBlocks.size() > 0) {
world.playSound(location, Sound.ENTITY_BAT_TAKEOFF, 5, 0.1f);
if (_cleanup) {
Bukkit.getScheduler().runTaskLater(getPlugin(), new Runnable() {
@Override
public void run() {
for (FallingBlock fallingBlock : fallingBlocks) {
Block b = fallingBlock.getLocation().getBlock();
if (b.getTypeId() == fallingBlock.getBlockId() && b.getData() == fallingBlock.getBlockData()) {
b.setType(Material.AIR);
}
fallingBlock.remove();
}
}
}, 5*20);
}
}
}
}