/* * 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.mylib.utils; import java.util.Arrays; import java.util.HashSet; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.Plugin; import org.bukkit.util.Vector; public final class UtilsMc { private static HashSet<Material> NON_SOLID_BLOCKS = new HashSet<Material>(); static { NON_SOLID_BLOCKS.add(Material.AIR); for (Material mat : Material.values()) { if (mat.isBlock() && !mat.isSolid()) { NON_SOLID_BLOCKS.add(mat); } } } private UtilsMc() { } public static String parseColors(String str) { return ChatColor.translateAlternateColorCodes('&', str); } public static int parseTickDuration(String str) { int duration; try { duration = Integer.parseInt(str); } catch (NumberFormatException e) { duration = Utils.parseTimeDuration(str)*20; } if (duration < 0) { return -1; } return duration; } public static Location airLocation(Location loc) { World world = loc.getWorld(); int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); int maxY = world.getMaxHeight(); while (y < maxY && !NON_SOLID_BLOCKS.contains(world.getBlockAt(x, y, z).getType())) { y++; } return new Location(world, x + 0.5, y + 0.2, z + 0.5); } public static Block getTargetBlock(Player player) { return getTargetBlock(player, 50); } public static Block getTargetBlock(Player player, int distance) { List<Block> blocks = player.getLastTwoTargetBlocks(NON_SOLID_BLOCKS, distance); return blocks.get(blocks.size() - 1); } public static ItemStack newWrittenBook(String title, String author) { ItemStack book = new ItemStack(Material.WRITTEN_BOOK); BookMeta meta = (BookMeta) book.getItemMeta(); meta.setTitle(title); meta.setAuthor(author); book.setItemMeta(meta); return book; } public static void broadcastToWorld(World world, String message) { for (Player player : world.getPlayers()) { player.sendMessage(message); } } public static Vector faceToDelta(BlockFace face) { return new Vector(1, 1, 1).add(new Vector(face.getModX(), face.getModY(), face.getModZ())).multiply(0.5); } public static Vector faceToDelta(BlockFace face, double distance) { Vector delta = faceToDelta(face); return new Vector(-0.5, -0.5, -0.5).add(delta).normalize().multiply(distance).add(delta); } public static ItemStack newSingleItemStack(Material material, String name) { return newSingleItemStack(material, name, (String[]) null); } public static ItemStack newSingleItemStack(Material material, String name, String... lore) { return newSingleItemStack(material, name, (lore == null ? null : Arrays.asList(lore))); } public static ItemStack newSingleItemStack(Material material, String name, List<String> lore) { ItemStack item = new ItemStack(material, 1); ItemMeta meta = item.getItemMeta(); meta.setDisplayName(name); meta.setLore(lore); item.setItemMeta(meta); return item; } public static Permission getRootPermission(Plugin plugin) { String permName = plugin.getName().toLowerCase() + ".*"; Permission perm = Bukkit.getPluginManager().getPermission(permName); if (perm == null) { perm = new Permission(permName, PermissionDefault.OP); Bukkit.getPluginManager().addPermission(perm); } return perm; } }