package com.taiter.ce;
/*
* 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.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Damageable;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;
import com.sk89q.worldguard.protection.GlobalRegionManager;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.taiter.ce.CBasic.Trigger;
import com.taiter.ce.CItems.CItem;
import com.taiter.ce.Enchantments.CEnchantment;
import com.taiter.ce.Enchantments.CEnchantment.Application;
import com.taiter.ce.Enchantments.EnchantManager;
public class Tools {
public static String prefix = "CE - ";
public static Random random = new Random();
//ENCHANTMENTS
public static boolean isApplicationCorrect(Application app, Material matToApplyTo) {
String mat = matToApplyTo.toString();
if (app == Application.BOW && mat.equals(Material.BOW.toString()))
return true;
else if (app == Application.BOOTS && mat.endsWith("BOOTS"))
return true;
else if (app == Application.HELMET && mat.endsWith("HELMET"))
return true;
else if (app == Application.ARMOR && (mat.endsWith("HELMET") || mat.endsWith("CHESTPLATE") || mat.endsWith("LEGGINGS") || mat.endsWith("BOOTS")))
return true;
else if (app == Application.TOOL && (mat.endsWith("PICKAXE") || mat.endsWith("SPADE") || mat.endsWith("AXE") || mat.endsWith("HOE")))
return true;
return false;
}
public static CItem getItemByOriginalname(String name) {
for (CItem ci : Main.items)
if (ci.getOriginalName().equals(name))
return ci;
return null;
}
public static CItem getItemByDisplayname(String name) {
for (CItem ci : Main.items)
if (ci.getDisplayName().equals(name))
return ci;
return null;
}
public static Inventory getPreviousInventory(String name) {
if (name.equals(prefix + "Enchantments") || name.equals(prefix + "Items") || name.equals(prefix + "Config"))
return Main.CEMainMenu;
else if (name.equals(prefix + "Enchanting") || name.equals(prefix + "Armor") || name.equals(prefix + "Bow") || name.equals(prefix + "Tool") || name.equals(prefix + "Global")
|| name.equals(prefix + "Helmet") || name.equals(prefix + "Boots") || name.equals(prefix + "Level selection"))
return Main.CEEnchantmentMainMenu;
return null;
}
public static Inventory getNextInventory(String name) {
name = ChatColor.stripColor(name);
if (name.equals("Enchantments"))
return Main.CEEnchantmentMainMenu;
else if (name.equals("Items"))
return Main.CEItemMenu;
else if (name.equals("Runecrafting")) {
Inventory einv = Bukkit.createInventory(null, InventoryType.FURNACE,
ChatColor.LIGHT_PURPLE + "" + ChatColor.MAGIC + "abc" + ChatColor.RESET + ChatColor.DARK_PURPLE + " Runecrafting " + ChatColor.LIGHT_PURPLE + "" + ChatColor.MAGIC + "cba");
return einv;
} else if (name.equals("Global"))
return Main.CEGlobalMenu;
else if (name.equals("Bow"))
return Main.CEBowMenu;
else if (name.equals("Helmet"))
return Main.CEHelmetMenu;
else if (name.equals("Boots"))
return Main.CEBootsMenu;
else if (name.equals("Armor"))
return Main.CEArmorMenu;
else if (name.equals("Tool"))
return Main.CEToolMenu;
return null;
}
public static boolean checkPermission(CBasic cb, Player p) {
String name = "ce.";
if (cb instanceof CItem)
name += "item.";
else
name += "ench.";
if (p.hasPermission(name + "*")) {
return true;
}
if (p.hasPermission(name + cb.getOriginalName())) {
return true;
}
if (p.hasPermission(name + cb.getPermissionName())) {
return true;
}
return false;
}
public static Inventory getEnchantmentMenu(Player p, String name) {
if (!p.isOp() && !p.hasPermission("ce.ench.*")) {
Inventory lInv = getNextInventory(name);
Inventory enchantments = Bukkit.createInventory(null, lInv.getSize(), lInv.getTitle());
enchantments.setContents(lInv.getContents());
for (int i = 0; i < enchantments.getSize() - 2; i++) {
ItemStack checkItem = enchantments.getItem(i);
if (checkItem == null || checkItem.getType().equals(Material.AIR))
continue;
ItemStack item = enchantments.getItem(i);
ItemMeta im = item.getItemMeta();
List<String> lore = new ArrayList<String>();
if (im.hasLore())
lore = im.getLore();
for (CEnchantment ce : EnchantManager.getEnchantments()) {
if (im.getDisplayName().equals(ce.getDisplayName()))
if (!checkPermission(ce, p)) {
lore.add(ChatColor.RED + "You are not permitted to use this");
break;
}
}
im.setLore(lore);
item.setItemMeta(im);
enchantments.setItem(i, item);
}
return enchantments;
}
return getNextInventory(name);
}
public static Inventory getItemMenu(Player p) {
if (!p.isOp() && !p.hasPermission("ce.item.*")) {
Inventory lInv = Main.CEItemMenu;
Inventory items = Bukkit.createInventory(null, lInv.getSize(), lInv.getTitle());
items.setContents(lInv.getContents());
for (int i = 0; i < items.getSize() - 2; i++) {
ItemStack item = items.getItem(i);
if (item == null || item.getType().equals(Material.AIR))
continue;
ItemMeta im = item.getItemMeta();
List<String> lore = new ArrayList<String>();
if (im.hasLore())
lore = im.getLore();
for (CItem ci : Main.items)
if (item.getItemMeta().getDisplayName().equals(ci.getDisplayName())) {
if (!checkPermission(ci, p)) {
lore.add(ChatColor.RED + "You are not permitted to use this");
break;
}
}
im.setLore(lore);
item.setItemMeta(im);
}
return items;
}
return Main.CEItemMenu;
}
public static void generateInventories() {
ItemStack backButton = new ItemStack(Material.NETHER_STAR);
ItemMeta tempMeta = backButton.getItemMeta();
List<String> tempLore = new ArrayList<String>();
tempMeta.setDisplayName(ChatColor.AQUA + "Back");
backButton.setItemMeta(tempMeta);
String itemPrefix = ChatColor.AQUA + "" + ChatColor.BOLD;
// MAIN MENU
Inventory MainMenu = Bukkit.createInventory(null, 9, prefix + "Main Menu");
ItemStack Enchantments = new ItemStack(Material.ENCHANTED_BOOK);
ItemStack Items = new ItemStack(Material.ENDER_PORTAL_FRAME);
ItemStack Runecrafting = new ItemStack(Material.ENCHANTMENT_TABLE);
tempMeta.setDisplayName(itemPrefix + "Enchantments");
tempLore.add(ChatColor.GRAY + "You see a set of magic Runes imprinted");
tempLore.add(ChatColor.GRAY + "on the cover of the book");
tempMeta.setLore(tempLore);
tempLore.clear();
Enchantments.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Items");
tempLore.add(ChatColor.GRAY + "The Portal appears to be");
tempLore.add(ChatColor.GRAY + "a stash of Legendary Items");
tempMeta.setLore(tempLore);
tempLore.clear();
Items.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Runecrafting");
tempLore.add(ChatColor.GRAY + "A forge which allows the transferal");
tempLore.add(ChatColor.GRAY + "of magic runes.");
tempMeta.setLore(tempLore);
tempLore.clear();
Runecrafting.setItemMeta(tempMeta);
tempMeta.setLore(tempLore);
MainMenu.setItem(2, Enchantments);
MainMenu.setItem(4, Items);
if(Main.config.getBoolean("Global.Runecrafting.Enabled"))
MainMenu.setItem(6, Runecrafting);
Main.CEMainMenu = MainMenu;
// MAIN MENU
// ENCHANTMENTS MENU
Inventory EnchantmentMenu = Bukkit.createInventory(null, 9, prefix + "Enchantments");
EnchantmentMenu.setItem(8, backButton);
ItemStack Global = new ItemStack(Material.ENCHANTED_BOOK);
ItemStack Bow = new ItemStack(Material.BOW);
ItemStack Armor = new ItemStack(Material.ANVIL);
ItemStack Tool = new ItemStack(Material.SHEARS);
ItemStack Helmet = new ItemStack(Material.DIAMOND_HELMET);
ItemStack Boots = new ItemStack(Material.DIAMOND_BOOTS);
tempMeta.setDisplayName(itemPrefix + "Global");
Global.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Bow");
Bow.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Armor");
Armor.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Tool");
Tool.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Helmet");
Helmet.setItemMeta(tempMeta);
tempMeta.setDisplayName(itemPrefix + "Boots");
Boots.setItemMeta(tempMeta);
EnchantmentMenu.setItem(1, Global);
EnchantmentMenu.setItem(2, Bow);
EnchantmentMenu.setItem(3, Armor);
EnchantmentMenu.setItem(4, Tool);
EnchantmentMenu.setItem(5, Helmet);
EnchantmentMenu.setItem(6, Boots);
Main.CEEnchantmentMainMenu = EnchantmentMenu;
// ENCHANTMENTS MENU
// SPECIFIC MENUS
Inventory ArmorMenu = Bukkit.createInventory(null, 36, prefix + "Armor");
ArmorMenu.setItem(35, backButton);
int current = 0;
ItemStack tempItem = new ItemStack(Material.ENCHANTED_BOOK);
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == Application.ARMOR) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
ArmorMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
Main.CEArmorMenu = ArmorMenu;
Inventory GlobalMenu = Bukkit.createInventory(null, 36, prefix + "Global");
GlobalMenu.setItem(35, backButton);
current = 0;
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == Application.GLOBAL) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
GlobalMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
Main.CEGlobalMenu = GlobalMenu;
Inventory ToolMenu = Bukkit.createInventory(null, 36, prefix + "Tool");
ToolMenu.setItem(35, backButton);
current = 0;
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == Application.TOOL) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
ToolMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
Main.CEToolMenu = ToolMenu;
Inventory BowMenu = Bukkit.createInventory(null, 36, prefix + "Bow");
BowMenu.setItem(35, backButton);
current = 0;
for (CEnchantment ce : EnchantManager.getEnchantments()) {
if (ce.getApplication() == Application.BOW) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
BowMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
}
Main.CEBowMenu = BowMenu;
Inventory HelmetMenu = Bukkit.createInventory(null, 36, prefix + "Helmet");
HelmetMenu.setItem(35, backButton);
current = 0;
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == Application.HELMET) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
HelmetMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
Main.CEHelmetMenu = HelmetMenu;
Inventory BootsMenu = Bukkit.createInventory(null, 36, prefix + "Boots");
BootsMenu.setItem(35, backButton);
current = 0;
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == Application.BOOTS) {
tempMeta.setDisplayName(ce.getDisplayName());
tempItem.setItemMeta(tempMeta);
BootsMenu.setItem(current, tempItem);
tempLore.clear();
tempMeta.setLore(tempLore);
current++;
}
Main.CEBootsMenu = BootsMenu;
// SPECIFIC MENUS
// ITEM MENU
Inventory ItemMenu = Bukkit.createInventory(null, 36, prefix + "Items");
ItemMenu.setItem(35, backButton);
int currentItemSlot = 0;
for (CItem ci : Main.items) {
ItemStack newItem = new ItemStack(ci.getMaterial());
tempMeta.setDisplayName(ci.getDisplayName());
List<String> temp = ci.getDescription();
if (Main.hasEconomy && ci.getCost() > 0)
temp.add(ChatColor.GRAY + "Cost: " + ChatColor.WHITE + ci.getCost());
tempMeta.setLore(temp);
newItem.setItemMeta(tempMeta);
ItemMenu.setItem(currentItemSlot, newItem);
currentItemSlot++;
}
tempLore.clear();
Main.CEItemMenu = ItemMenu;
// ITEM MENU
}
//CONFIG
public static void convertOldConfig() {
Main.plugin.getConfig().set("Global.Enchantments.CEnchantmentColor",
(Boolean.parseBoolean(Main.config.getString("enchantments.lore.disableItalic")) ? "" : "ITALIC;") + ChatColor.valueOf(Main.config.getString("enchantments.lore.color")));
Main.plugin.getConfig().set("Global.Enchantments.CEnchantmentTable", Boolean.parseBoolean(Main.config.getString("enchantmentTable")));
Main.plugin.getConfig().set("Global.Enchantments.CEnchantingProbability", Integer.parseInt(Main.config.getString("enchantmentTableProbability")));
Main.plugin.getConfig().set("Global.Enchantments.MaximumCustomEnchantments", Integer.parseInt(Main.config.getString("maximumEnchants")));
Main.plugin.getConfig().set("enchantments.requirePermissions", null);
Main.plugin.getConfig().set("enchantmentTable", null);
Main.plugin.getConfig().set("enchantmentTableProbability", null);
Main.plugin.getConfig().set("commandBypass", null);
Main.plugin.getConfig().set("AntiMcMMOrepair", null);
Main.plugin.getConfig().set("restrictEnchantments", null);
Main.plugin.getConfig().set("maximumEnchants", null);
Main.plugin.getConfig().set("enchantments", null);
Main.plugin.getConfig().set("items", null);
Main.plugin.saveConfig();
Main.config = Main.plugin.getConfig();
}
public static void writeConfigEntries(CBasic ce) {
for (String entry : ce.configEntries.keySet()) {
String fullPath = (ce.getType() == "Enchantment" ? "Enchantments" : ce.getType()) + "." + ce.getOriginalName() + "." + entry;
if (!Main.plugin.getConfig().contains(fullPath))
Main.plugin.getConfig().set(fullPath, ce.configEntries.get(entry));
}
Main.plugin.saveConfig();
Main.plugin.reloadConfig();
Main.config = Main.plugin.getConfig();
}
//MISC
public static void resolveLists() {
for (CEnchantment ce : EnchantManager.getEnchantments())
for (Trigger t : ce.getTriggers())
getAppropriateList(t).add(ce);
for (CItem ci : Main.items)
for (Trigger t : ci.getTriggers())
getAppropriateList(t).add(ci);
}
public static boolean checkWorldGuard(Location l, Player p, String fs, boolean sendMessage) {
if (p.isOp())
return true;
if (Main.getWorldGuard() != null) {
GlobalRegionManager grm = Main.getWorldGuard().getGlobalRegionManager();
if (grm == null)
return true;
StateFlag f = null;
for (Flag<?> df : DefaultFlag.flagsList)
if (fs.equalsIgnoreCase(df.getName()))
f = (StateFlag) df;
if (f.equals(DefaultFlag.BUILD)) {
if (!grm.canBuild(p, l)) {
if (sendMessage)
p.sendMessage(ChatColor.RED + "You cannot use this here!");
return false;
}
} else if (!grm.allows(f, l, Main.getWorldGuard().wrapPlayer(p))) {
if (sendMessage)
p.sendMessage(ChatColor.RED + "You cannot use this here!");
return false;
}
}
return true;
}
private static HashSet<CBasic> getAppropriateList(Trigger t) {
if (t == Trigger.BLOCK_BROKEN)
return Main.listener.blockBroken;
else if (t == Trigger.BLOCK_PLACED)
return Main.listener.blockPlaced;
else if (t == Trigger.INTERACT)
return Main.listener.interact;
else if (t == Trigger.INTERACT_ENTITY)
return Main.listener.interactE;
else if (t == Trigger.INTERACT_LEFT)
return Main.listener.interactL;
else if (t == Trigger.INTERACT_RIGHT)
return Main.listener.interactR;
else if (t == Trigger.DEATH)
return Main.listener.death;
else if (t == Trigger.DAMAGE_GIVEN)
return Main.listener.damageGiven;
else if (t == Trigger.DAMAGE_TAKEN)
return Main.listener.damageTaken;
else if (t == Trigger.DAMAGE_NATURE)
return Main.listener.damageNature;
else if (t == Trigger.SHOOT_BOW)
return Main.listener.shootBow;
else if (t == Trigger.PROJECTILE_HIT)
return Main.listener.projectileHit;
else if (t == Trigger.PROJECTILE_THROWN)
return Main.listener.projectileThrow;
else if (t == Trigger.WEAR_ITEM)
return Main.listener.wearItem;
else if (t == Trigger.MOVE)
return Main.listener.move;
return null;
}
public static List<CEnchantment> getEnchantList(Application app) {
List<CEnchantment> list = new ArrayList<CEnchantment>();
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == app)
list.add(ce);
return list;
}
public static HashSet<CEnchantment> getEnchantList(Application app, Player p) {
HashSet<CEnchantment> list = new HashSet<CEnchantment>();
for (CEnchantment ce : EnchantManager.getEnchantments())
if (ce.getApplication() == app)
if(!Boolean.parseBoolean(Main.config.getString("Global.Enchantments.RequirePermissions")) || checkPermission(ce, p))
list.add(ce);
return list;
}
public static Application getApplicationByMaterial(Material material) {
String mat = material.toString();
if (mat.equals(Material.BOW.toString()))
return Application.BOW;
else if (mat.endsWith("BOOTS"))
return Application.BOOTS;
else if (mat.endsWith("HELMET"))
return Application.HELMET;
else if (mat.endsWith("BOOTS") || mat.endsWith("LEGGINGS") || mat.endsWith("CHESTPLATE") || mat.endsWith("HELMET"))
return Application.ARMOR;
else if (mat.endsWith("PICKAXE") || mat.endsWith("SPADE") || mat.endsWith("AXE") || mat.endsWith("HOE"))
return Application.TOOL;
return Application.GLOBAL;
}
public static boolean isApplicable(ItemStack i, CEnchantment ce) {
if ((ce.getApplication() == Application.ARMOR && ce.getApplication() != Application.GLOBAL
&& (i.getType().toString().endsWith("HELMET") || i.getType().toString().endsWith("CHESTPLATE") || i.getType().toString().endsWith("LEGGINGS")
|| i.getType().toString().endsWith("BOOTS")))
|| (ce.getApplication() == Application.TOOL && (i.getType().toString().endsWith("PICKAXE") || i.getType().toString().endsWith("SPADE") || i.getType().toString().endsWith("_AXE")
|| i.getType().toString().endsWith("HOE")))
|| (ce.getApplication() == Application.HELMET && ce.getApplication() != Application.GLOBAL && i.getType().toString().endsWith("HELMET"))
|| (ce.getApplication() == Application.BOOTS && ce.getApplication() != Application.GLOBAL && i.getType().toString().endsWith("BOOTS"))
|| (ce.getApplication() == Application.BOW && i.getType().equals(Material.BOW)) || ce.getApplication() == Application.GLOBAL)
return true;
return false;
}
// Firework
private static Color fireworkColor(int i) {
switch (i) {
default:
case 1:
return Color.SILVER;
case 2:
return Color.AQUA;
case 3:
return Color.BLACK;
case 4:
return Color.BLUE;
case 5:
return Color.FUCHSIA;
case 6:
return Color.GRAY;
case 7:
return Color.GREEN;
case 8:
return Color.LIME;
case 9:
return Color.MAROON;
case 10:
return Color.NAVY;
case 11:
return Color.OLIVE;
case 12:
return Color.ORANGE;
case 13:
return Color.PURPLE;
case 14:
return Color.RED;
case 15:
return Color.YELLOW;
case 16:
return Color.TEAL;
}
}
public static Firework shootFirework(Location loc, Random rand) {
int type = rand.nextInt(5) + 1;
Firework firework = loc.getWorld().spawn(loc, Firework.class);
FireworkMeta meta = firework.getFireworkMeta();
Type ft = null;
switch (type) {
case 1:
ft = Type.BALL;
break;
case 2:
ft = Type.BALL_LARGE;
break;
case 3:
ft = Type.BURST;
break;
case 4:
ft = Type.CREEPER;
break;
case 5:
ft = Type.STAR;
break;
}
FireworkEffect effect = FireworkEffect.builder().flicker(rand.nextBoolean()).withColor(fireworkColor(rand.nextInt(16) + 1)).withFade(fireworkColor(rand.nextInt(16) + 1))
.trail(rand.nextBoolean()).with(ft).trail(rand.nextBoolean()).build();
meta.addEffect(effect);
firework.setFireworkMeta(meta);
return firework;
}
// public static void repeatPotionEffect(final ItemStack i, final Player p, final PotionEffectType type, final int strength, final CItem ci) {
// if(p.hasPotionEffect(type))
// return;
// int slot = 0;
// for(int x = 0; x < p.getInventory().getSize(); x++)
// if(i.equals(p.getInventory().getItem(x)))
// slot = x;
// final int lSlot = slot;
// new BukkitRunnable() {
//
// @Override
// public void run() {
// ItemStack item = p.getInventory().getItem(lSlot);
// if(p != null && !p.isDead() && item != null && !item.getType().equals(Material.AIR) && item.hasItemMeta() && item.getItemMeta().equals(i.getItemMeta()))
// p.addPotionEffect(new PotionEffect(type, Main.repeatDelay+200, strength, true), true);
// else {
// this.cancel();
// }
// }
//
// }.runTaskTimer(Main.plugin, 0l, Main.repeatDelay);
// }
//
// public static void repeatPotionEffect(final ItemStack i, final Player p, final PotionEffectType type, final int strength, final boolean lock, final CEnchantment ce) {
// int slot = -1;
// boolean isArmor = false;
//
// ItemStack[] list = p.getInventory().getContents();
// for(int x = 0; x < list.length; x++)
// if(i.equals(list[x]))
// slot = x;
//
// if(slot == -1) {
// isArmor = true;
// ItemStack[] aList = p.getInventory().getArmorContents();
// for(int x = 0; x < aList.length; x++)
// if(i.equals(aList[x]))
// slot = x;
// }
//
// final int lSlot = slot;
// final boolean lIsArmor = isArmor;
//
// if(lock)
// ce.lockList.add(p);
// new BukkitRunnable() {
//
// @Override
// public void run() {
// ItemStack item = p.getInventory().getItem(lSlot);
// if(lIsArmor)
// item = p.getInventory().getArmorContents()[lSlot];
// if(p != null && !p.isDead() && item != null && !item.getType().equals(Material.AIR) && item.hasItemMeta() && item.getItemMeta().equals(i.getItemMeta()))
// p.addPotionEffect(new PotionEffect(type, Main.repeatDelay+200, strength, true), true);
// else {
// if(lock)
// ce.lockList.remove(p);
// this.cancel();
// }
// }
//
// }.runTaskTimer(Main.plugin, 0l, Main.repeatDelay);
// }
public static void applyBleed(final Player target, final int bleedDuration) {
target.sendMessage(ChatColor.RED + "You are Bleeding!");
target.setMetadata("ce.bleed", new FixedMetadataValue(Main.plugin, null));
new BukkitRunnable() {
int seconds = bleedDuration;
@Override
public void run() {
if (seconds >= 0) {
if (!target.isDead() && target.hasMetadata("ce.bleed")) {
target.damage(1 + (((Damageable) target).getHealth() / 15));
seconds--;
} else {
target.removeMetadata("ce.bleed", Main.plugin);
this.cancel();
}
} else {
target.removeMetadata("ce.bleed", Main.plugin);
target.sendMessage(ChatColor.GREEN + "You have stopped Bleeding!");
this.cancel();
}
}
}.runTaskTimer(Main.plugin, 0l, 20l);
}
// Position
private static String getPlayerDirection(Location loc) {
double rotation = (loc.getYaw() - 90) % 360;
if (rotation < 0) {
rotation += 360.0;
}
if (0 <= rotation && rotation < 22.5) {
return "W";
} else if (22.5 <= rotation && rotation < 67.5) {
return "NW";
} else if (67.5 <= rotation && rotation < 112.5) {
return "N";
} else if (112.5 <= rotation && rotation < 157.5) {
return "NE";
} else if (157.5 <= rotation && rotation < 202.5) {
return "E"; // E
} else if (202.5 <= rotation && rotation < 247.5) {
return "SE";
} else if (247.5 <= rotation && rotation < 292.5) {
return "S";
} else if (292.5 <= rotation && rotation < 337.5) {
return "SW";
} else if (337.5 <= rotation && rotation < 360.0) {
return "W";
} else {
return null;
}
}
public static List<Location> getLinePlayer(Player player, int length) {
List<Location> list = new ArrayList<Location>();
for (int amount = length; amount > 0; amount--) {
list.add(player.getTargetBlock((Set<Material>) null, amount).getLocation());
}
return list;
}
public static List<Location> getCone(Location loc) {
List<Location> locs = new ArrayList<Location>();
String direction = getPlayerDirection(loc);
Location loc1 = loc.clone();
Location loc2 = loc.clone();
Location loc3 = loc.clone();
if (direction.equals("N")) {
loc1.setZ(loc.getZ() - 1);
locs.add(loc1);
loc2.setZ(loc.getZ() - 2);
locs.add(loc2);
loc3.setZ(loc.getZ() - 3);
locs.add(loc3);
Location loc4 = loc2.clone();
Location loc5 = loc2.clone();
Location loc6 = loc3.clone();
Location loc7 = loc3.clone();
Location loc8 = loc3.clone();
Location loc9 = loc3.clone();
loc4.setX(loc2.getX() - 1);
locs.add(loc4);
loc5.setX(loc2.getX() + 1);
locs.add(loc5);
loc6.setX(loc3.getX() + 2);
locs.add(loc6);
loc7.setX(loc3.getX() + 1);
locs.add(loc7);
loc8.setX(loc3.getX() - 1);
locs.add(loc8);
loc9.setX(loc3.getX() - 2);
locs.add(loc9);
} else if (direction.equals("S")) {
loc1.setZ(loc.getZ() + 1);
locs.add(loc1);
loc2.setZ(loc.getZ() + 2);
locs.add(loc2);
loc3.setZ(loc.getZ() + 3);
locs.add(loc3);
Location loc4 = loc2.clone();
Location loc5 = loc2.clone();
Location loc6 = loc3.clone();
Location loc7 = loc3.clone();
Location loc8 = loc3.clone();
Location loc9 = loc3.clone();
loc4.setX(loc2.getX() - 1);
locs.add(loc4);
loc5.setX(loc2.getX() + 1);
locs.add(loc5);
loc6.setX(loc3.getX() + 2);
locs.add(loc6);
loc7.setX(loc3.getX() + 1);
locs.add(loc7);
loc8.setX(loc3.getX() - 1);
locs.add(loc8);
loc9.setX(loc3.getX() - 2);
locs.add(loc9);
} else if (direction.equals("E")) {
loc1.setX(loc.getX() + 1);
locs.add(loc1);
loc2.setX(loc1.getX() + 1);
locs.add(loc2);
loc3.setX(loc2.getX() + 1);
locs.add(loc3);
Location loc4 = loc2.clone();
Location loc5 = loc2.clone();
Location loc6 = loc3.clone();
Location loc7 = loc3.clone();
Location loc8 = loc3.clone();
Location loc9 = loc3.clone();
loc4.setZ(loc2.getZ() - 1);
locs.add(loc4);
loc5.setZ(loc2.getZ() + 1);
locs.add(loc5);
loc6.setZ(loc3.getZ() + 2);
locs.add(loc6);
loc7.setZ(loc3.getZ() + 1);
locs.add(loc7);
loc8.setZ(loc3.getZ() - 1);
locs.add(loc8);
loc9.setZ(loc3.getZ() - 2);
locs.add(loc9);
} else if (direction.equals("W")) {
loc1.setX(loc.getX() - 1);
locs.add(loc1);
loc2.setX(loc1.getX() - 1);
locs.add(loc2);
loc3.setX(loc2.getX() - 1);
locs.add(loc3);
Location loc4 = loc2.clone();
Location loc5 = loc2.clone();
Location loc6 = loc3.clone();
Location loc7 = loc3.clone();
Location loc8 = loc3.clone();
Location loc9 = loc3.clone();
loc4.setZ(loc2.getZ() - 1);
locs.add(loc4);
loc5.setZ(loc2.getZ() + 1);
locs.add(loc5);
loc6.setZ(loc3.getZ() + 2);
locs.add(loc6);
loc7.setZ(loc3.getZ() + 1);
locs.add(loc7);
loc8.setZ(loc3.getZ() - 1);
locs.add(loc8);
loc9.setZ(loc3.getZ() - 2);
locs.add(loc9);
} else if (direction.equals("NW")) {
loc1.setZ(loc.getZ() - 1);
loc1.setX(loc.getX() - 1);
locs.add(loc1);
loc2.setZ(loc.getZ() - 2);
loc2.setX(loc.getX() - 2);
locs.add(loc2);
loc3 = loc1.clone();
loc3.setZ(loc1.getZ() - 1);
locs.add(loc3);
Location loc4 = loc1.clone();
Location loc5 = loc1.clone();
Location loc6 = loc1.clone();
loc4.setZ(loc1.getZ() - 2);
locs.add(loc4);
loc5.setX(loc1.getX() - 1);
locs.add(loc5);
loc6.setX(loc1.getX() - 2);
locs.add(loc6);
} else if (direction.equals("NE")) {
loc1.setZ(loc.getZ() - 1);
loc1.setX(loc.getX() + 1);
locs.add(loc1);
loc2.setZ(loc.getZ() - 2);
loc2.setX(loc.getX() + 2);
locs.add(loc2);
loc3 = loc1.clone();
loc3.setZ(loc1.getZ() - 1);
locs.add(loc3);
Location loc4 = loc1.clone();
Location loc5 = loc1.clone();
Location loc6 = loc1.clone();
loc4.setZ(loc1.getZ() - 2);
locs.add(loc4);
loc5.setX(loc1.getX() + 1);
locs.add(loc5);
loc6.setX(loc1.getX() + 2);
locs.add(loc6);
} else if (direction.equals("SW")) {
loc1.setZ(loc.getZ() + 1);
loc1.setX(loc.getX() - 1);
locs.add(loc1);
loc2.setZ(loc.getZ() + 2);
loc2.setX(loc.getX() - 2);
locs.add(loc2);
loc3 = loc1.clone();
Location loc4 = loc1.clone();
Location loc5 = loc1.clone();
Location loc6 = loc1.clone();
loc3.setZ(loc1.getZ() + 1);
locs.add(loc3);
loc4.setZ(loc1.getZ() + 2);
locs.add(loc4);
loc5.setX(loc1.getX() - 1);
locs.add(loc5);
loc6.setX(loc1.getX() - 2);
locs.add(loc6);
} else if (direction.equals("SE")) {
loc1.setZ(loc.getZ() + 1);
loc1.setX(loc.getX() + 1);
locs.add(loc1);
loc2.setZ(loc.getZ() + 2);
loc2.setX(loc.getX() + 2);
locs.add(loc2);
loc3 = loc1.clone();
loc3.setZ(loc1.getZ() + 1);
locs.add(loc3);
Location loc4 = loc1.clone();
Location loc5 = loc1.clone();
Location loc6 = loc1.clone();
loc4.setZ(loc1.getZ() + 2);
locs.add(loc4);
loc5.setX(loc1.getX() + 1);
locs.add(loc5);
loc6.setX(loc1.getX() + 2);
locs.add(loc6);
}
return locs;
}
}