Java Code Examples for org.bukkit.Material#PLAYER_HEAD

The following examples show how to use org.bukkit.Material#PLAYER_HEAD . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ItemService.java    From Transport-Pipes with MIT License 6 votes vote down vote up
public ItemStack createHeadItem(String uuid, String textureValue, String textureSignature) {
    WrappedGameProfile wrappedProfile = new WrappedGameProfile(UUID.fromString(uuid), null);
    wrappedProfile.getProperties().put("textures", new WrappedSignedProperty("textures", textureValue, textureSignature));

    ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
    SkullMeta sm = (SkullMeta) skull.getItemMeta();
    sm.setOwningPlayer(Bukkit.getOfflinePlayer(UUID.fromString(uuid)));

    Field profileField;
    try {
        profileField = sm.getClass().getDeclaredField("profile");
        profileField.setAccessible(true);
        profileField.set(sm, wrappedProfile.getHandle());
    } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e1) {
        e1.printStackTrace();
    }

    skull.setItemMeta(sm);
    return skull;
}
 
Example 2
Source File: SlimefunUtils.java    From Slimefun4 with GNU General Public License v3.0 6 votes vote down vote up
/**
 * This method returns an {@link ItemStack} for the given texture.
 * The result will be a Player Head with this texture.
 * 
 * @param texture
 *            The texture for this head (base64 or hash)
 * @return An {@link ItemStack} with this Head texture
 */
public static ItemStack getCustomHead(String texture) {
    if (SlimefunPlugin.instance == null) {
        throw new PrematureCodeException("You cannot instantiate a custom head before Slimefun was loaded.");
    }

    if (SlimefunPlugin.getMinecraftVersion() == MinecraftVersion.UNIT_TEST) {
        // com.mojang.authlib.GameProfile does not exist in a Test Environment
        return new ItemStack(Material.PLAYER_HEAD);
    }

    String base64 = texture;

    if (PatternUtils.ALPHANUMERIC.matcher(texture).matches()) {
        base64 = Base64.getEncoder().encodeToString(("{\"textures\":{\"SKIN\":{\"url\":\"http://textures.minecraft.net/texture/" + texture + "\"}}}").getBytes(StandardCharsets.UTF_8));
    }

    return SkullItem.fromBase64(base64);
}
 
Example 3
Source File: MultiVersionLookup.java    From QualityArmory with GNU General Public License v3.0 5 votes vote down vote up
public static Material getSkull() {
	if (skull == null) {
		try {
			skull = Material.matchMaterial("SKULL_ITEM");
		} catch (Error | Exception e) {
		}
		if (skull == null)
			skull = Material.PLAYER_HEAD;
	}
	return skull;
}
 
Example 4
Source File: SwordOfBeheading.java    From Slimefun4 with GNU General Public License v3.0 5 votes vote down vote up
@Override
public EntityKillHandler getItemHandler() {
    return (e, entity, killer, item) -> {
        Random random = ThreadLocalRandom.current();

        if (e.getEntity() instanceof Zombie) {
            if (random.nextInt(100) < chanceZombie.getValue()) {
                e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD));
            }
        }
        else if (e.getEntity() instanceof WitherSkeleton) {
            if (random.nextInt(100) < chanceWitherSkeleton.getValue()) {
                e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL));
            }
        }
        else if (e.getEntity() instanceof Skeleton) {
            if (random.nextInt(100) < chanceSkeleton.getValue()) {
                e.getDrops().add(new ItemStack(Material.SKELETON_SKULL));
            }
        }
        else if (e.getEntity() instanceof Creeper) {
            if (random.nextInt(100) < chanceCreeper.getValue()) {
                e.getDrops().add(new ItemStack(Material.CREEPER_HEAD));
            }
        }
        else if (e.getEntity() instanceof Player && random.nextInt(100) < chancePlayer.getValue()) {
            ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
            ItemMeta meta = skull.getItemMeta();
            ((SkullMeta) meta).setOwningPlayer((Player) e.getEntity());
            skull.setItemMeta(meta);

            e.getDrops().add(skull);
        }
    };
}
 
Example 5
Source File: ExplosiveTool.java    From Slimefun4 with GNU General Public License v3.0 5 votes vote down vote up
protected void breakBlock(Player p, ItemStack item, Block b, int fortune, List<ItemStack> drops) {
    if (b.getType() != Material.AIR && !b.isLiquid() && !MaterialCollections.getAllUnbreakableBlocks().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.BREAK_BLOCK)) {
        SlimefunPlugin.getProtectionManager().logAction(p, b, ProtectableAction.BREAK_BLOCK);

        b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
        SlimefunItem sfItem = BlockStorage.check(b);

        if (sfItem != null && !sfItem.useVanillaBlockBreaking()) {
            SlimefunBlockHandler handler = SlimefunPlugin.getRegistry().getBlockHandlers().get(sfItem.getID());

            if (handler != null && !handler.onBreak(p, b, sfItem, UnregisterReason.PLAYER_BREAK)) {
                drops.add(BlockStorage.retrieve(b));
            }
        }
        else if (b.getType() == Material.PLAYER_HEAD || b.getType().name().endsWith("_SHULKER_BOX")) {
            b.breakNaturally();
        }
        else {
            boolean applyFortune = b.getType().name().endsWith("_ORE") && b.getType() != Material.IRON_ORE && b.getType() != Material.GOLD_ORE;

            for (ItemStack drop : b.getDrops(getItem())) {
                // For some reason this check is necessary with Paper
                if (drop != null && drop.getType() != Material.AIR) {
                    b.getWorld().dropItemNaturally(b.getLocation(), applyFortune ? new CustomItem(drop, fortune) : drop);
                }
            }

            b.setType(Material.AIR);
        }

        damageItem(p, item);
    }
}
 
Example 6
Source File: BlockPhysicsListener.java    From Slimefun4 with GNU General Public License v3.0 5 votes vote down vote up
@EventHandler(ignoreCancelled = true)
public void onLiquidFlow(BlockFromToEvent e) {
    Block block = e.getToBlock();

    if (block.getType() == Material.PLAYER_HEAD || block.getType() == Material.PLAYER_WALL_HEAD || Tag.SAPLINGS.isTagged(block.getType())) {
        String item = BlockStorage.checkID(block);

        if (item != null) {
            e.setCancelled(true);
        }
    }
}
 
Example 7
Source File: SlimefunItemStack.java    From Slimefun4 with GNU General Public License v3.0 5 votes vote down vote up
private static ItemStack getSkull(String id, String texture) {
    if (SlimefunPlugin.getMinecraftVersion() == MinecraftVersion.UNIT_TEST) {
        return new ItemStack(Material.PLAYER_HEAD);
    }

    return SkullItem.fromBase64(getTexture(id, texture));
}
 
Example 8
Source File: AbstractConfigMenu.java    From uSkyBlock with GNU General Public License v3.0 5 votes vote down vote up
protected ItemStack createItem(String item) {
    if (item == null) {
        return null;
    }
    Matcher m = UUID_PATTERN.matcher(item);
    if (m.matches()) {
        ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD, 1);
        Bukkit.getUnsafe().modifyItemStack(itemStack, item);
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName(tr(itemMeta.getDisplayName()));
        itemStack.setItemMeta(itemMeta);
        return itemStack;
    }
    return null;
}
 
Example 9
Source File: MainListener.java    From ArmorStandTools with MIT License 5 votes vote down vote up
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
    Block b = event.getBlock();
    if((b.getType() == Material.PLAYER_HEAD && b.hasMetadata("protected")) || (b.getType() == Material.SIGN && b.hasMetadata("armorStand"))) {
        event.setCancelled(true);
    }
}
 
Example 10
Source File: Schematic.java    From ExoticGarden with GNU General Public License v3.0 5 votes vote down vote up
public static Material parseId(short blockId, byte blockData) {
    switch (blockId) {
    case 6:
        if (blockData == 0) return Material.OAK_SAPLING;
        if (blockData == 1) return Material.SPRUCE_SAPLING;
        if (blockData == 2) return Material.BIRCH_SAPLING;
        if (blockData == 3) return Material.JUNGLE_SAPLING;
        if (blockData == 4) return Material.ACACIA_SAPLING;
        if (blockData == 5) return Material.DARK_OAK_SAPLING;
        break;
    case 17:
        if (blockData == 0 || blockData == 4 || blockData == 8 || blockData == 12) return Material.OAK_LOG;
        if (blockData == 1 || blockData == 5 || blockData == 9 || blockData == 13) return Material.SPRUCE_LOG;
        if (blockData == 2 || blockData == 6 || blockData == 10 || blockData == 14) return Material.BIRCH_LOG;
        if (blockData == 3 || blockData == 7 || blockData == 11 || blockData == 15) return Material.JUNGLE_LOG;
        break;
    case 18:
        if (blockData == 0 || blockData == 4 || blockData == 8 || blockData == 12) return Material.OAK_LEAVES;
        if (blockData == 1 || blockData == 5 || blockData == 9 || blockData == 13) return Material.SPRUCE_LEAVES;
        if (blockData == 2 || blockData == 6 || blockData == 10 || blockData == 14) return Material.BIRCH_LEAVES;
        if (blockData == 3 || blockData == 7 || blockData == 11 || blockData == 15) return Material.JUNGLE_LEAVES;
        return Material.OAK_LEAVES;
    case 161:
        if (blockData == 0 || blockData == 4 || blockData == 8 || blockData == 12) return Material.ACACIA_LEAVES;
        if (blockData == 1 || blockData == 5 || blockData == 9 || blockData == 13) return Material.DARK_OAK_LEAVES;
        break;
    case 162:
        if (blockData == 0 || blockData == 4 || blockData == 8 || blockData == 12) return Material.ACACIA_LOG;
        if (blockData == 1 || blockData == 5 || blockData == 9 || blockData == 13) return Material.DARK_OAK_LOG;
        break;
    case 144:
        return Material.PLAYER_HEAD;
    default:
        return null;
    }

    return null;
}
 
Example 11
Source File: TestCargoNodeListener.java    From Slimefun4 with GNU General Public License v3.0 5 votes vote down vote up
@Test
public void testNonCargoNode() {
    Player player = server.addPlayer();
    Location l = new Location(player.getWorld(), 190, 50, 400);
    Block b = l.getBlock();
    Block against = b.getRelative(BlockFace.DOWN);

    ItemStack item = new ItemStack(Material.PLAYER_HEAD);

    BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
    listener.onCargoNodePlace(event);
    Assertions.assertFalse(event.isCancelled());
}
 
Example 12
Source File: SkullUtil.java    From IF with The Unlicense 5 votes vote down vote up
/**
 * Gets a skull from the specified id. The id is the value from the textures.minecraft.net website after the last
 * '/' character.
 *
 * @param id the skull id
 * @return the skull item
 * @since 0.5.0
 */
@NotNull
public static ItemStack getSkull(@NotNull String id) {
    ItemStack item = new ItemStack(Material.PLAYER_HEAD);
    ItemMeta itemMeta = Objects.requireNonNull(item.getItemMeta());
    setSkull(itemMeta, id);
    item.setItemMeta(itemMeta);
    return item;
}
 
Example 13
Source File: NMSHandler.java    From SkyWarsReloaded with GNU General Public License v3.0 4 votes vote down vote up
@Override
public ItemStack getBlankPlayerHead() {
	return new ItemStack(Material.PLAYER_HEAD, 1);
}
 
Example 14
Source File: NMSHandler.java    From SkyWarsReloaded with GNU General Public License v3.0 4 votes vote down vote up
@Override
public boolean headCheck(Block h1) {
	return (h1.getType() == Material.PLAYER_WALL_HEAD || h1.getType() == Material.PLAYER_HEAD || h1.getType() == Material.SKELETON_SKULL);
}
 
Example 15
Source File: SkyBlockMenu.java    From uSkyBlock with GNU General Public License v3.0 4 votes vote down vote up
public Inventory displayPartyPlayerGUI(final Player player, final String pname) {
    List<String> lores = new ArrayList<>();
    String emptyTitle = tr("{0} <{1}>", "", tr("Permissions"));
    String title = tr("{0} <{1}>", pname.substring(0, Math.min(32-emptyTitle.length(), pname.length())), tr("Permissions"));
    Inventory menu = Bukkit.createInventory(new UltimateHolder(player, title, MenuType.DEFAULT), 9, title);
    final ItemStack pHead = new ItemStack(Material.PLAYER_HEAD, 1);
    final SkullMeta meta3 = (SkullMeta) pHead.getItemMeta();
    ItemMeta meta2 = sign.getItemMeta();
    meta2.setDisplayName(tr("\u00a79Player Permissions"));
    addLore(lores, tr("\u00a7eClick here to return to\n\u00a7eyour island group''s info."));
    meta2.setLore(lores);
    sign.setItemMeta(meta2);
    menu.addItem(sign);
    lores.clear();
    meta3.setOwner(pname);
    meta3.setDisplayName(tr("\u00a7e{0}''\u00a79s Permissions", pname));
    addLore(lores, tr("\u00a7eHover over an icon to view\n\u00a7ea permission. Change the\n\u00a7epermission by clicking it."));
    meta3.setLore(lores);
    pHead.setItemMeta(meta3);
    menu.addItem(pHead);
    lores.clear();
    IslandInfo islandInfo = plugin.getIslandInfo(player);
    boolean isLeader = islandInfo.isLeader(player);
    for (PartyPermissionMenuItem menuItem : permissionMenuItems) {
        ItemStack itemStack = menuItem.getIcon();
        meta2 = itemStack.getItemMeta();
        if (islandInfo.hasPerm(pname, menuItem.getPerm())) {
            meta2.setDisplayName("\u00a7a" + menuItem.getTitle());
            lores.add(tr("\u00a7fThis player \u00a7acan"));
            addLore(lores, "\u00a7f", menuItem.getDescription());
            if (isLeader) {
                addLore(lores, "\u00a7f", tr("Click here to remove this permission."));
            }
        } else {
            meta2.setDisplayName("\u00a7c" + menuItem.getTitle());
            lores.add(tr("\u00a7fThis player \u00a7ccannot"));
            addLore(lores, "\u00a7f", menuItem.getDescription());
            if (isLeader) {
                addLore(lores, "\u00a7f", tr("Click here to grant this permission."));
            }
        }
        meta2.setLore(lores);
        itemStack.setItemMeta(meta2);
        menu.addItem(itemStack);
        lores.clear();
    }
    return menu;
}
 
Example 16
Source File: SkyBlockMenu.java    From uSkyBlock with GNU General Public License v3.0 4 votes vote down vote up
public Inventory displayPartyGUI(final Player player) {
    List<String> lores = new ArrayList<>();
    String title = "\u00a79" + tr("Island Group Members");
    Inventory menu = Bukkit.createInventory(new UltimateHolder(player, title, MenuType.DEFAULT), 18, title);
    IslandInfo islandInfo = plugin.getIslandInfo(player);
    final Set<String> memberList = islandInfo.getMembers();
    final ItemMeta meta2 = sign.getItemMeta();
    meta2.setDisplayName("\u00a7a" + tr("Island Group Members"));
    lores.add(tr("Group Members: \u00a72{0}\u00a77/\u00a7e{1}", islandInfo.getPartySize(), islandInfo.getMaxPartySize()));
    if (islandInfo.getPartySize() < islandInfo.getMaxPartySize()) {
        addLore(lores, tr("\u00a7aMore players can be invited to this island."));
    } else {
        addLore(lores, tr("\u00a7cThis island is full."));
    }
    addLore(lores, tr("\u00a7eHover over a player''s icon to\n\u00a7eview their permissions. The\n\u00a7eleader can change permissions\n\u00a7eby clicking a player''s icon."));
    meta2.setLore(lores);
    sign.setItemMeta(meta2);
    menu.addItem(sign.clone());
    lores.clear();
    for (String temp : memberList) {
        ItemStack headItem = new ItemStack(Material.PLAYER_HEAD, 1);
        SkullMeta meta3 = (SkullMeta) headItem.getItemMeta();
        meta3.setDisplayName(tr("\u00a7e{0}''s\u00a79 Permissions", temp));
        meta3.setOwner(temp);
        boolean isLeader = islandInfo.isLeader(temp);
        if (isLeader) {
            addLore(lores, "\u00a7a\u00a7l", tr("Leader"));
        } else {
            addLore(lores, "\u00a7e\u00a7l", tr("Member"));
        }
        for (PartyPermissionMenuItem perm : permissionMenuItems) {
            if (isLeader || islandInfo.hasPerm(temp, perm.getPerm())) {
                lores.add("\u00a7a" + tr("Can {0}", "\u00a7f" + perm.getShortDescription()));
            } else {
                lores.add("\u00a7c" + tr("Cannot {0}", "\u00a7f" + perm.getShortDescription()));
            }
        }
        if (islandInfo.isLeader(player.getName())) {
            addLore(lores, tr("\u00a7e<Click to change this player''s permissions>"));
        }
        meta3.setLore(lores);
        headItem.setItemMeta(meta3);
        menu.addItem(headItem);
        lores.clear();
    }
    return menu;
}
 
Example 17
Source File: SkyBlockMenu.java    From uSkyBlock with GNU General Public License v3.0 4 votes vote down vote up
private void onClickMainMenu(InventoryClickEvent event, ItemStack currentItem, Player p, int slotIndex) {
    event.setCancelled(true);
    if (slotIndex < 0 || slotIndex > 35) {
        return;
    }
    PlayerInfo playerInfo = plugin.getPlayerInfo(p);
    IslandInfo islandInfo = plugin.getIslandInfo(playerInfo);
    if (currentItem.getType() == Material.JUNGLE_SAPLING) {
        p.closeInventory();
        p.performCommand("island biome");
    } else if (currentItem.getType() == Material.PLAYER_HEAD) {
        p.closeInventory();
        p.performCommand("island party");
    } else if (currentItem.getType() == Material.RED_BED) {
        p.closeInventory();
        p.performCommand("island sethome");
        p.performCommand("island");
    } else if (currentItem.getType() == Material.GRASS) {
        p.closeInventory();
        p.performCommand("island spawn");
    } else if (currentItem.getType() == Material.HOPPER) {
        p.closeInventory();
        p.performCommand("island setwarp");
        p.performCommand("island");
    } else if (currentItem.getType() == Material.WRITABLE_BOOK) {
        p.closeInventory();
        p.performCommand("island log");
    } else if (currentItem.getType() == Material.OAK_DOOR) {
        p.closeInventory();
        p.performCommand("island home");
    } else if (currentItem.getType() == Material.EXPERIENCE_BOTTLE) {
        p.closeInventory();
        p.performCommand("island level");
    } else if (currentItem.getType() == Material.DIAMOND_ORE) {
        p.closeInventory();
        p.performCommand("c");
    } else if (currentItem.getType() == Material.END_STONE || currentItem.getType() == Material.END_PORTAL_FRAME) {
        p.closeInventory();
        p.performCommand("island togglewarp");
        p.performCommand("island");
    } else if (currentItem.getType() == Material.IRON_BARS && islandInfo.isLocked()) {
        p.closeInventory();
        p.performCommand("island unlock");
        p.performCommand("island");
    } else if (currentItem.getType() == Material.IRON_BARS && !islandInfo.isLocked()) {
        p.closeInventory();
        p.performCommand("island lock");
        p.performCommand("island");
    } else if (slotIndex == 17) {
        if (islandInfo.isLeader(p) && plugin.getConfig().getBoolean("island-schemes-enabled", true)) {
            p.closeInventory();
            p.openInventory(createRestartGUI(p));
        } else {
            if (plugin.getConfirmHandler().millisLeft(p, "/is leave") > 0) {
                p.closeInventory();
                p.performCommand("island leave");
            } else {
                p.performCommand("island leave");
                updateLeaveMenuItemTimer(p, event.getInventory(), currentItem);
            }
        }
    } else {
        if (!isExtraMenuAction(p, currentItem)) {
            p.closeInventory();
            p.performCommand("island");
        }
    }
}
 
Example 18
Source File: StringEditMenu.java    From uSkyBlock with GNU General Public License v3.0 4 votes vote down vote up
@Override
public boolean onClick(InventoryClickEvent e) {
    if (!(e.getInventory().getHolder() instanceof UltimateHolder) ||
            !stripFormatting(((UltimateHolder) e.getInventory().getHolder()).getTitle()).equals(stripFormatting(getTitle()))) {
        return false;
    }
    Player player = (Player) e.getWhoClicked();
    ItemStack returnItem = e.getInventory().getItem(0);
    String configName = returnItem.getItemMeta().getLore().get(0);
    String path = returnItem.getItemMeta().getLore().get(1);
    int page = getPage(returnItem.getItemMeta().getLore().get(2));
    ItemStack currentItem = e.getCurrentItem();
    boolean isCaps = e.getInventory().getItem(capsIndex).getItemMeta().getDisplayName().equals(tr("Caps On"));
    if (currentItem != null) {
        YmlConfiguration config = FileUtil.getYmlConfiguration(configName);
        String value = config.getString(path);
        if (e.getSlot() == capsIndex) {
            // Toggle caps
            ItemStack capsItem = isCaps ? capsOff.clone() : capsOn.clone();
            ItemMeta meta = capsItem.getItemMeta();
            meta.setLore(Arrays.asList(value));
            capsItem.setItemMeta(meta);
            e.getInventory().setItem(capsIndex, capsItem);
            isCaps = !isCaps;
        } else if (e.getSlot() == backspaceIndex) {
            if (value.length() > 0) {
                value = value.substring(0, value.length() - 1);
                config.set(path, value);
                config.set("dirty", true);
            }
        } else if (e.getSlot() == returnIndex) {
            player.openInventory(parent.createEditMenu(configName, path, page));
            return true;
        } else if (currentItem.getType() == Material.PLAYER_HEAD) {
            String character = stripFormatting(currentItem.getItemMeta().getDisplayName());
            if (character.isEmpty()) {
                character = " ";
            }
            value += isCaps ? character.toUpperCase() : character.toLowerCase();
            config.set(path, value);
            config.set("dirty", true);
        }
        // re-load the ui (refresh)
        player.openInventory(createEditMenuInternal(configName, path, page, isCaps));
    }
    return true;
}
 
Example 19
Source File: ProgrammableAndroid.java    From Slimefun4 with GNU General Public License v3.0 4 votes vote down vote up
protected void tick(Block b) {
    if (b.getType() != Material.PLAYER_HEAD) {
        // The Android was destroyed or moved.
        return;
    }

    if ("false".equals(BlockStorage.getLocationInfo(b.getLocation(), "paused"))) {
        BlockMenu menu = BlockStorage.getInventory(b);
        float fuel = Float.parseFloat(BlockStorage.getLocationInfo(b.getLocation(), "fuel"));

        if (fuel < 0.001) {
            consumeFuel(b, menu);
        }
        else {
            String[] script = PatternUtils.DASH.split(BlockStorage.getLocationInfo(b.getLocation(), "script"));

            int index = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "index")) + 1;
            if (index >= script.length) {
                index = 0;
            }

            boolean refresh = true;
            BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuel - 1));
            Instruction instruction = Instruction.valueOf(script[index]);

            if (getAndroidType().isType(instruction.getRequiredType())) {
                BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));

                switch (instruction) {
                case START:
                case WAIT:
                    // Just "waiting" here which means we do nothing
                    break;
                case REPEAT:
                    BlockStorage.addBlockInfo(b, "index", String.valueOf(0));
                    break;
                case CHOP_TREE:
                    refresh = chopTree(b, menu, face);
                    break;
                default:
                    instruction.execute(this, b, menu, face);
                    break;
                }
            }

            if (refresh) {
                BlockStorage.addBlockInfo(b, "index", String.valueOf(index));
            }
        }
    }
}
 
Example 20
Source File: MapScanner.java    From VoxelGamesLibv2 with MIT License 4 votes vote down vote up
/**
 * Searches the map for "markers". Most of the time these are implemented as tile entities (skulls)
 *
 * @param map    the map to scan
 * @param center the center location
 * @param range  the range in where to scan
 */
public void searchForMarkers(@Nonnull Map map, @Nonnull Vector3D center, int range, @Nonnull UUID gameid) {
    World world = Bukkit.getWorld(map.getLoadedName(gameid));
    if (world == null) {
        throw new MapException("Could not find world " + map.getLoadedName(gameid) + "(" + map.getInfo().getDisplayName() + ")" + ". Is it loaded?");
    }

    List<Marker> markers = new ArrayList<>();
    List<ChestMarker> chestMarkers = new ArrayList<>();

    int startX = (int) center.getX();
    int startY = (int) center.getZ();

    int minX = Math.min(startX - range, startX + range);
    int minZ = Math.min(startY - range, startY + range);

    int maxX = Math.max(startX - range, startX + range);
    int maxZ = Math.max(startY - range, startY + range);

    for (int x = minX; x <= maxX; x += 16) {
        for (int z = minZ; z <= maxZ; z += 16) {
            Chunk chunk = world.getChunkAt(x >> 4, z >> 4);
            for (BlockState te : chunk.getTileEntities()) {
                if (te.getType() == Material.PLAYER_HEAD) {
                    Skull skull = (Skull) te;
                    String markerData = getMarkerData(skull);
                    if (markerData == null) continue;
                    MarkerDefinition markerDefinition = mapHandler.createMarkerDefinition(markerData);
                    markers.add(new Marker(new Vector3D(skull.getX(), skull.getY(), skull.getZ()),
                            DirectionUtil.directionToYaw(skull.getRotation()),
                            markerData, markerDefinition));
                } else if (te.getType() == Material.CHEST) {
                    Chest chest = (Chest) te;
                    String name = chest.getBlockInventory().getName();
                    ItemStack[] items = new ItemStack[chest.getBlockInventory()
                            .getStorageContents().length];
                    for (int i = 0; i < items.length; i++) {
                        ItemStack is = chest.getBlockInventory().getItem(i);
                        if (is == null) {
                            items[i] = new ItemStack(Material.AIR);
                        } else {
                            items[i] = is;
                        }
                    }
                    chestMarkers
                            .add(new ChestMarker(new Vector3D(chest.getX(), chest.getY(), chest.getZ()), name,
                                    items));
                }
            }
        }
    }

    map.setMarkers(markers);
    map.setChestMarkers(chestMarkers);
}