package com.taiter.ce.Enchantments.Tool; /* * This file is part of Custom Enchantments * Copyright (C) Taiterio 2015 * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.util.ArrayList; import java.util.List; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; import com.taiter.ce.Tools; import com.taiter.ce.Enchantments.CEnchantment; public class Explosive extends CEnchantment { int Radius; boolean LargerRadius; boolean DropItems; public Explosive(Application app) { super(app); configEntries.put("Radius", 3); configEntries.put("LargerRadius", true); configEntries.put("DropItems", true); triggers.add(Trigger.BLOCK_BROKEN); } @Override public void effect(Event e, ItemStack item, int level) { BlockBreakEvent event = (BlockBreakEvent) e; Player player = event.getPlayer(); if (!isUsable(player.getItemInHand().getType().toString(), event.getBlock().getType().toString())) return; List<Location> locations = new ArrayList<Location>(); int locRad = Radius; if (LargerRadius && Tools.random.nextInt(100) < level * 5) locRad += 2; int r = locRad - 1; int start = r / 2; Location sL = event.getBlock().getLocation(); player.getWorld().createExplosion(sL, 0f); // Create a fake explosion sL.setX(sL.getX() - start); sL.setY(sL.getY() - start); sL.setZ(sL.getZ() - start); for (int x = 0; x < locRad; x++) for (int y = 0; y < locRad; y++) for (int z = 0; z < locRad; z++) if ((!(x == 0 && y == 0 && z == 0)) && (!(x == r && y == 0 && z == 0)) && (!(x == 0 && y == r && z == 0)) && (!(x == 0 && y == 0 && z == r)) && (!(x == r && y == r && z == 0)) && (!(x == 0 && y == r && z == r)) && (!(x == r && y == 0 && z == r)) && (!(x == r && y == r && z == r))) locations.add(new Location(sL.getWorld(), sL.getX() + x, sL.getY() + y, sL.getZ() + z)); for (Location loc : locations) { String iMat = item.getType().toString(); Block b = loc.getBlock(); String bMat = b.getType().toString(); if (isUsable(iMat, bMat)) if (!loc.getBlock().getDrops(item).isEmpty()) if (Tools.checkWorldGuard(loc, player, "BUILD", false)) if (DropItems) loc.getBlock().breakNaturally(item); else for (ItemStack i : loc.getBlock().getDrops(item)) { player.getInventory().addItem(i); loc.getBlock().setType(Material.AIR); } } } // Checks if the Material of the block (bMat) is intended to be mined by the // item's Material (iMat) private boolean isUsable(String iMat, String bMat) { if ((iMat.endsWith("PICKAXE") && (bMat.contains("ORE") || (!bMat.contains("STAIRS") && bMat.contains("STONE")) || bMat.equals("STAINED_CLAY") || bMat.equals("NETHERRACK"))) || (iMat.endsWith("SPADE") && (bMat.contains("SAND") || bMat.equals("DIRT") || bMat.equals("SNOW_BLOCK") || bMat.equals("SNOW") || bMat.equals("MYCEL") || bMat.equals("CLAY") || bMat.equals("GRAVEL") || bMat.equals("GRASS"))) || (iMat.endsWith("_AXE") && bMat.contains("LOG") || bMat.contains("PLANKS")) || (iMat.endsWith("HOE") && (bMat.equals("CROPS") || bMat.equals("POTATO") || bMat.equals("CARROT")))) return true; return false; } @Override public void initConfigEntries() { Radius = Integer.parseInt(getConfig().getString("Enchantments." + getOriginalName() + ".Radius")); if (Radius % 2 == 0) Radius += 1; LargerRadius = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".LargerRadius")); DropItems = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".DropItems")); } }