Search in sources :

Example 1 with InventoryType

use of org.bukkit.event.inventory.InventoryType in project Denizen-For-Bukkit by DenizenScript.

the class dInventory method getAttribute.

////////////////////////
//  Attributes
/////////////////////
public String getAttribute(Attribute attribute) {
    if (attribute == null) {
        return null;
    }
    // -->
    if (attribute.startsWith("empty_slots")) {
        int full = new dInventory(inventory).count(null, true);
        return new Element(inventory.getSize() - full).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("can_fit") && attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
        dItem item = dItem.valueOf(attribute.getContext(1));
        if (item == null) {
            return null;
        }
        int attribs = 1;
        int qty = 1;
        InventoryType type = inventory.getType();
        dInventory dummyInv = new dInventory(Bukkit.createInventory(null, type == InventoryType.PLAYER ? InventoryType.CHEST : type, inventory.getTitle()));
        ItemStack[] contents = getStorageContents();
        if (dummyInv.getInventoryType() == InventoryType.CHEST) {
            dummyInv.setSize(contents.length);
        }
        if (contents.length != dummyInv.getSize()) {
            contents = Arrays.copyOf(contents, dummyInv.getSize());
        }
        dummyInv.setContents(contents);
        // -->
        if ((attribute.getAttribute(2).startsWith("quantity") || attribute.getAttribute(2).startsWith("qty")) && attribute.hasContext(2) && aH.matchesInteger(attribute.getContext(2))) {
            qty = attribute.getIntContext(2);
            attribs = 2;
        }
        item.setAmount(qty);
        List<ItemStack> leftovers = dummyInv.addWithLeftovers(0, true, item.getItemStack());
        return new Element(leftovers.isEmpty()).getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("include") && attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
        dItem item = dItem.valueOf(attribute.getContext(1));
        if (item == null) {
            return null;
        }
        int attribs = 1;
        int qty = 1;
        dInventory dummyInv = new dInventory(Bukkit.createInventory(null, inventory.getType(), inventory.getTitle()));
        if (inventory.getType() == InventoryType.CHEST) {
            dummyInv.setSize(inventory.getSize());
        }
        dummyInv.setContents(getContents());
        // -->
        if ((attribute.getAttribute(2).startsWith("quantity") || attribute.getAttribute(2).startsWith("qty")) && attribute.hasContext(2) && aH.matchesInteger(attribute.getContext(2))) {
            qty = attribute.getIntContext(2);
            attribs = 2;
        }
        item.setAmount(qty);
        dummyInv.add(0, item.getItemStack());
        return dummyInv.getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("is_empty")) {
        boolean empty = true;
        for (ItemStack item : getStorageContents()) {
            if (item != null && item.getType() != Material.AIR) {
                empty = false;
                break;
            }
        }
        return new Element(empty).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("is_full")) {
        boolean full = true;
        for (ItemStack item : getStorageContents()) {
            if ((item == null) || (item.getType() == Material.AIR) || (item.getAmount() < item.getMaxStackSize())) {
                full = false;
                break;
            }
        }
        return new Element(full).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("contains.display") && attribute.hasContext(2)) {
        String search_string = attribute.getContext(2);
        boolean strict = false;
        if (CoreUtilities.toLowerCase(search_string).startsWith("strict:") && search_string.length() > 7) {
            strict = true;
            search_string = search_string.substring(7);
        }
        if (search_string.length() == 0) {
            return null;
        }
        int qty = 1;
        int attribs = 2;
        // -->
        if ((attribute.getAttribute(3).startsWith("quantity") || attribute.getAttribute(3).startsWith("qty")) && attribute.hasContext(3) && aH.matchesInteger(attribute.getContext(3))) {
            qty = attribute.getIntContext(3);
            attribs = 3;
        }
        int found_items = 0;
        if (strict) {
            for (ItemStack item : getContents()) {
                if (item != null && item.getType() == Material.WRITTEN_BOOK && ((BookMeta) item.getItemMeta()).getTitle().equalsIgnoreCase(search_string)) {
                    found_items += item.getAmount();
                    if (found_items >= qty) {
                        break;
                    }
                } else if (item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equalsIgnoreCase(search_string)) {
                    found_items += item.getAmount();
                    if (found_items >= qty) {
                        break;
                    }
                }
            }
        } else {
            for (ItemStack item : getContents()) {
                if (item != null && item.getType() == Material.WRITTEN_BOOK && CoreUtilities.toLowerCase(((BookMeta) item.getItemMeta()).getTitle()).contains(CoreUtilities.toLowerCase(search_string))) {
                    found_items += item.getAmount();
                    if (found_items >= qty) {
                        break;
                    }
                } else if (item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && CoreUtilities.toLowerCase(item.getItemMeta().getDisplayName()).contains(CoreUtilities.toLowerCase(search_string))) {
                    found_items += item.getAmount();
                    if (found_items >= qty) {
                        break;
                    }
                }
            }
        }
        return new Element(found_items >= qty).getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("contains.lore") && attribute.hasContext(2)) {
        String search_string = attribute.getContext(2);
        boolean strict = false;
        if (CoreUtilities.toLowerCase(search_string).startsWith("strict:")) {
            strict = true;
            search_string = search_string.substring(7);
        }
        if (search_string.length() == 0) {
            return null;
        }
        dList lore = dList.valueOf(search_string);
        int qty = 1;
        int attribs = 2;
        // -->
        if ((attribute.getAttribute(3).startsWith("quantity") || attribute.getAttribute(3).startsWith("qty")) && attribute.hasContext(3) && aH.matchesInteger(attribute.getContext(3))) {
            qty = attribute.getIntContext(3);
            attribs = 3;
        }
        int found_items = 0;
        if (strict) {
            strict_items: for (ItemStack item : getContents()) {
                if (item != null && item.hasItemMeta() && item.getItemMeta().hasLore()) {
                    List<String> item_lore = item.getItemMeta().getLore();
                    if (lore.size() != item_lore.size()) {
                        continue;
                    }
                    for (int i = 0; i < item_lore.size(); i++) {
                        if (lore.get(i).equalsIgnoreCase(item_lore.get(i))) {
                            if (i == lore.size()) {
                                found_items += item.getAmount();
                                if (found_items >= qty) {
                                    break strict_items;
                                }
                            }
                        } else {
                            continue strict_items;
                        }
                    }
                }
            }
        } else {
            for (ItemStack item : getContents()) {
                if (item != null && item.hasItemMeta() && item.getItemMeta().hasLore()) {
                    List<String> item_lore = item.getItemMeta().getLore();
                    int loreCount = 0;
                    lines: for (String line : lore) {
                        for (String item_line : item_lore) {
                            if (CoreUtilities.toLowerCase(item_line).contains(CoreUtilities.toLowerCase(line))) {
                                loreCount++;
                                continue lines;
                            }
                        }
                    }
                    if (loreCount == lore.size()) {
                        found_items += item.getAmount();
                        if (found_items >= qty) {
                            break;
                        }
                    }
                }
            }
        }
        return new Element(found_items >= qty).getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("contains.material") && attribute.hasContext(2) && dMaterial.matches(attribute.getContext(2))) {
        dMaterial material = dMaterial.valueOf(attribute.getContext(2));
        int qty = 1;
        int attribs = 2;
        // -->
        if ((attribute.getAttribute(3).startsWith("quantity") || attribute.getAttribute(3).startsWith("qty")) && attribute.hasContext(3) && aH.matchesInteger(attribute.getContext(3))) {
            qty = attribute.getIntContext(3);
            attribs = 3;
        }
        int found_items = 0;
        for (ItemStack item : getContents()) {
            if (item != null && item.getType() == material.getMaterial()) {
                found_items += item.getAmount();
                if (found_items >= qty) {
                    break;
                }
            }
        }
        return new Element(found_items >= qty).getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("contains_any") && attribute.hasContext(1)) {
        dList list = dList.valueOf(attribute.getContext(1));
        if (list.isEmpty()) {
            return null;
        }
        int qty = 1;
        int attribs = 1;
        // -->
        if ((attribute.getAttribute(2).startsWith("quantity") || attribute.getAttribute(2).startsWith("qty")) && attribute.hasContext(2) && aH.matchesInteger(attribute.getContext(2))) {
            qty = attribute.getIntContext(2);
            attribs = 2;
        }
        List<dItem> contains = list.filter(dItem.class, attribute.getScriptEntry());
        if (!contains.isEmpty()) {
            for (dItem item : contains) {
                if (containsItem(item, qty)) {
                    return Element.TRUE.getAttribute(attribute.fulfill(attribs));
                }
            }
        }
        return Element.FALSE.getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("contains") && attribute.hasContext(1)) {
        dList list = dList.valueOf(attribute.getContext(1));
        if (list.isEmpty()) {
            return null;
        }
        int qty = 1;
        int attribs = 1;
        // -->
        if ((attribute.getAttribute(2).startsWith("quantity") || attribute.getAttribute(2).startsWith("qty")) && attribute.hasContext(2) && aH.matchesInteger(attribute.getContext(2))) {
            qty = attribute.getIntContext(2);
            attribs = 2;
        }
        // TODO: Fix logic
        List<dItem> contains = list.filter(dItem.class, attribute.getScriptEntry());
        if (!contains.isEmpty()) {
            for (dItem item : contains) {
                if (containsItem(item, qty)) {
                    return Element.TRUE.getAttribute(attribute.fulfill(attribs));
                }
            }
        }
        return Element.FALSE.getAttribute(attribute.fulfill(attribs));
    }
    // -->
    if (attribute.startsWith("first_empty")) {
        return new Element(firstEmpty(0)).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("find.material") && attribute.hasContext(2) && dMaterial.matches(attribute.getContext(2))) {
        dMaterial material = dMaterial.valueOf(attribute.getContext(2));
        if (material == null) {
            return null;
        }
        int slot = -1;
        for (int i = 0; i < inventory.getSize(); i++) {
            if (inventory.getItem(i) != null && inventory.getItem(i).getType() == material.getMaterial()) {
                slot = i + 1;
                break;
            }
        }
        return new Element(slot).getAttribute(attribute.fulfill(2));
    }
    // -->
    if (attribute.startsWith("find_imperfect") && attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
        dItem item = dItem.valueOf(attribute.getContext(1), attribute.getScriptEntry() != null ? ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getPlayer() : null, attribute.getScriptEntry() != null ? ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getNPC() : null);
        item.setAmount(1);
        int slot = -1;
        for (int i = 0; i < inventory.getSize(); i++) {
            if (inventory.getItem(i) != null) {
                dItem compare_to = new dItem(inventory.getItem(i).clone());
                compare_to.setAmount(1);
                if (item.identify().equalsIgnoreCase(compare_to.identify())) {
                    slot = i + 1;
                    break;
                }
            }
        }
        return new Element(slot).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("find") && attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
        dItem item = dItem.valueOf(attribute.getContext(1), attribute.getScriptEntry() != null ? ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getPlayer() : null, attribute.getScriptEntry() != null ? ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getNPC() : null);
        item.setAmount(1);
        int slot = -1;
        for (int i = 0; i < inventory.getSize(); i++) {
            if (inventory.getItem(i) != null) {
                dItem compare_to = new dItem(inventory.getItem(i).clone());
                compare_to.setAmount(1);
                if (item.getFullString().equalsIgnoreCase(compare_to.getFullString())) {
                    slot = i + 1;
                    break;
                }
            }
        }
        return new Element(slot).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("id_type")) {
        return new Element(idType).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("notable_name")) {
        String notname = NotableManager.getSavedId(this);
        if (notname == null) {
            return null;
        }
        return new Element(notname).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("location")) {
        dLocation location = getLocation();
        if (location == null) {
            return null;
        }
        return location.getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("quantity") || attribute.startsWith("qty")) {
        if (attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
            return new Element(count(dItem.valueOf(attribute.getContext(1), ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getPlayer(), ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getNPC()).getItemStack(), false)).getAttribute(attribute.fulfill(1));
        } else {
            return new Element(count(null, false)).getAttribute(attribute.fulfill(1));
        }
    }
    // -->
    if (attribute.startsWith("stacks")) {
        if (attribute.hasContext(1) && dItem.matches(attribute.getContext(1))) {
            return new Element(count(dItem.valueOf(attribute.getContext(1), ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getPlayer(), ((BukkitScriptEntryData) attribute.getScriptEntry().entryData).getNPC()).getItemStack(), true)).getAttribute(attribute.fulfill(1));
        } else {
            return new Element(count(null, true)).getAttribute(attribute.fulfill(1));
        }
    }
    // -->
    if (attribute.startsWith("slot") && attribute.hasContext(1) && aH.matchesInteger(attribute.getContext(1))) {
        int slot = new Element(attribute.getContext(1)).asInt() - 1;
        if (slot < 0) {
            slot = 0;
        } else if (slot > getInventory().getSize() - 1) {
            slot = getInventory().getSize() - 1;
        }
        return new dItem(getInventory().getItem(slot)).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("inventory_type")) {
        return new Element(inventory instanceof HorseInventory ? "HORSE" : getInventory().getType().name()).getAttribute(attribute.fulfill(1));
    }
    // -->
    if (attribute.startsWith("equipment")) {
        dList equipment = getEquipment();
        if (equipment == null) {
            return null;
        }
        return equipment.getAttribute(attribute.fulfill(1));
    }
    if (inventory instanceof CraftingInventory) {
        CraftingInventory craftingInventory = (CraftingInventory) inventory;
        // -->
        if (attribute.startsWith("matrix")) {
            dList recipeList = new dList();
            for (ItemStack item : craftingInventory.getMatrix()) {
                if (item != null) {
                    recipeList.add(new dItem(item).identify());
                } else {
                    recipeList.add(new dItem(Material.AIR).identify());
                }
            }
            return recipeList.getAttribute(attribute.fulfill(1));
        }
        // -->
        if (attribute.startsWith("result")) {
            ItemStack result = craftingInventory.getResult();
            if (result == null) {
                return null;
            }
            return new dItem(result).getAttribute(attribute.fulfill(1));
        }
    }
    // -->
    if (attribute.startsWith("type")) {
        return new Element("Inventory").getAttribute(attribute.fulfill(1));
    }
    // Iterate through this object's properties' attributes
    for (Property property : PropertyParser.getProperties(this)) {
        String returned = property.getAttribute(attribute);
        if (returned != null) {
            return returned;
        }
    }
    return new Element(identify()).getAttribute(attribute);
}
Also used : CraftingInventory(org.bukkit.inventory.CraftingInventory) InventoryType(org.bukkit.event.inventory.InventoryType) BukkitScriptEntryData(net.aufdemrand.denizen.BukkitScriptEntryData) HorseInventory(org.bukkit.inventory.HorseInventory) ItemStack(org.bukkit.inventory.ItemStack) BookMeta(org.bukkit.inventory.meta.BookMeta) Property(net.aufdemrand.denizencore.objects.properties.Property)

Example 2 with InventoryType

use of org.bukkit.event.inventory.InventoryType in project MagicPlugin by elBukkit.

the class CraftingController method onInventoryClick.

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    if (!(event.getWhoClicked() instanceof Player))
        return;
    if (event.isCancelled())
        return;
    InventoryType inventoryType = event.getInventory().getType();
    SlotType slotType = event.getSlotType();
    // Check for wand clicks to prevent grinding them to dust, or whatever.
    if (slotType == SlotType.CRAFTING && (inventoryType == InventoryType.CRAFTING || inventoryType == InventoryType.WORKBENCH)) {
        ItemStack cursor = event.getCursor();
        if (Wand.isSpecial(cursor)) {
            event.setCancelled(true);
            return;
        }
    }
}
Also used : Player(org.bukkit.entity.Player) InventoryType(org.bukkit.event.inventory.InventoryType) ItemStack(org.bukkit.inventory.ItemStack) SlotType(org.bukkit.event.inventory.InventoryType.SlotType) EventHandler(org.bukkit.event.EventHandler)

Example 3 with InventoryType

use of org.bukkit.event.inventory.InventoryType in project MagicPlugin by elBukkit.

the class EnchantingController method onInventoryClick.

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    if (event.isCancelled())
        return;
    InventoryType inventoryType = event.getInventory().getType();
    SlotType slotType = event.getSlotType();
    if (enchantingEnabled && inventoryType == InventoryType.ENCHANTING) {
        if (slotType == SlotType.CRAFTING) {
            HumanEntity clicker = event.getWhoClicked();
            Player player = clicker instanceof Player ? (Player) clicker : null;
            if (player == null || !controller.hasPermission(player, "Magic.wand.enchant")) {
                return;
            }
            ItemStack cursor = event.getCursor();
            ItemStack current = event.getCurrentItem();
            // Make wands into an enchantable item when placing
            if (Wand.isWand(cursor)) {
                Wand wand = controller.getWand(cursor);
                if (wand.isModifiable()) {
                    wand.makeEnchantable(true);
                }
            }
            // And turn them back when taking out
            if (Wand.isWand(current)) {
                Wand wand = controller.getWand(current);
                if (wand.isModifiable()) {
                    wand.makeEnchantable(false);
                }
            }
        }
    }
}
Also used : Player(org.bukkit.entity.Player) InventoryType(org.bukkit.event.inventory.InventoryType) HumanEntity(org.bukkit.entity.HumanEntity) Wand(com.elmakers.mine.bukkit.wand.Wand) ItemStack(org.bukkit.inventory.ItemStack) SlotType(org.bukkit.event.inventory.InventoryType.SlotType) EventHandler(org.bukkit.event.EventHandler)

Example 4 with InventoryType

use of org.bukkit.event.inventory.InventoryType in project Essentials by EssentialsX.

the class EssentialsPlayerListener method onInventoryClickEvent.

@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onInventoryClickEvent(final InventoryClickEvent event) {
    Player refreshPlayer = null;
    final Inventory top = event.getView().getTopInventory();
    final InventoryType type = top.getType();
    final Inventory clickedInventory;
    if (event.getRawSlot() < 0) {
        clickedInventory = null;
    } else {
        clickedInventory = event.getRawSlot() < top.getSize() ? top : event.getView().getBottomInventory();
    }
    if (type == InventoryType.PLAYER) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        final InventoryHolder invHolder = top.getHolder();
        if (invHolder != null && invHolder instanceof HumanEntity) {
            final User invOwner = ess.getUser((Player) invHolder);
            if (user.isInvSee() && (!user.isAuthorized("essentials.invsee.modify") || invOwner.isAuthorized("essentials.invsee.preventmodify") || !invOwner.getBase().isOnline())) {
                event.setCancelled(true);
                refreshPlayer = user.getBase();
            }
        }
    } else if (type == InventoryType.ENDER_CHEST) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        if (user.isEnderSee() && (!user.isAuthorized("essentials.enderchest.modify"))) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (type == InventoryType.WORKBENCH) {
        User user = ess.getUser((Player) event.getWhoClicked());
        if (user.isRecipeSee()) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (type == InventoryType.CHEST && top.getSize() == 9) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        final InventoryHolder invHolder = top.getHolder();
        if (invHolder != null && invHolder instanceof HumanEntity && user.isInvSee()) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER) {
        if (ess.getSettings().isDirectHatAllowed() && event.getClick() == ClickType.LEFT && event.getSlot() == 39 && event.getCursor().getType() != Material.AIR && event.getCursor().getType().getMaxDurability() == 0 && ess.getUser(event.getWhoClicked()).isAuthorized("essentials.hat")) {
            event.setCancelled(true);
            final PlayerInventory inv = (PlayerInventory) clickedInventory;
            final ItemStack head = inv.getHelmet();
            inv.setHelmet(event.getCursor());
            event.setCursor(head);
        }
    }
    if (refreshPlayer != null) {
        final Player player = refreshPlayer;
        ess.scheduleSyncDelayedTask(new Runnable() {

            @Override
            public void run() {
                player.updateInventory();
            }
        }, 1);
    }
}
Also used : Player(org.bukkit.entity.Player) InventoryType(org.bukkit.event.inventory.InventoryType) HumanEntity(org.bukkit.entity.HumanEntity) PlayerInventory(org.bukkit.inventory.PlayerInventory) ItemStack(org.bukkit.inventory.ItemStack) InventoryHolder(org.bukkit.inventory.InventoryHolder) Inventory(org.bukkit.inventory.Inventory) PlayerInventory(org.bukkit.inventory.PlayerInventory) EventHandler(org.bukkit.event.EventHandler)

Example 5 with InventoryType

use of org.bukkit.event.inventory.InventoryType in project Essentials by drtshock.

the class EssentialsPlayerListener method onInventoryClickEvent.

@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onInventoryClickEvent(final InventoryClickEvent event) {
    Player refreshPlayer = null;
    final Inventory top = event.getView().getTopInventory();
    final InventoryType type = top.getType();
    final Inventory clickedInventory;
    if (event.getRawSlot() < 0) {
        clickedInventory = null;
    } else {
        clickedInventory = event.getRawSlot() < top.getSize() ? top : event.getView().getBottomInventory();
    }
    if (type == InventoryType.PLAYER) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        final InventoryHolder invHolder = top.getHolder();
        if (invHolder != null && invHolder instanceof HumanEntity) {
            final User invOwner = ess.getUser((Player) invHolder);
            if (user.isInvSee() && (!user.isAuthorized("essentials.invsee.modify") || invOwner.isAuthorized("essentials.invsee.preventmodify") || !invOwner.getBase().isOnline())) {
                event.setCancelled(true);
                refreshPlayer = user.getBase();
            }
        }
    } else if (type == InventoryType.ENDER_CHEST) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        if (user.isEnderSee() && (!user.isAuthorized("essentials.enderchest.modify"))) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (type == InventoryType.WORKBENCH) {
        User user = ess.getUser((Player) event.getWhoClicked());
        if (user.isRecipeSee()) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (type == InventoryType.CHEST && top.getSize() == 9) {
        final User user = ess.getUser((Player) event.getWhoClicked());
        final InventoryHolder invHolder = top.getHolder();
        if (invHolder != null && invHolder instanceof HumanEntity && user.isInvSee()) {
            event.setCancelled(true);
            refreshPlayer = user.getBase();
        }
    } else if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER) {
        if (ess.getSettings().isDirectHatAllowed() && event.getClick() == ClickType.LEFT && event.getSlot() == 39 && event.getCursor().getType() != Material.AIR && event.getCursor().getType().getMaxDurability() == 0 && ess.getUser(event.getWhoClicked()).isAuthorized("essentials.hat")) {
            event.setCancelled(true);
            final PlayerInventory inv = (PlayerInventory) clickedInventory;
            final ItemStack head = inv.getHelmet();
            inv.setHelmet(event.getCursor());
            event.setCursor(head);
        }
    }
    if (refreshPlayer != null) {
        final Player player = refreshPlayer;
        ess.scheduleSyncDelayedTask(new Runnable() {

            @Override
            public void run() {
                player.updateInventory();
            }
        }, 1);
    }
}
Also used : Player(org.bukkit.entity.Player) InventoryType(org.bukkit.event.inventory.InventoryType) HumanEntity(org.bukkit.entity.HumanEntity) PlayerInventory(org.bukkit.inventory.PlayerInventory) ItemStack(org.bukkit.inventory.ItemStack) InventoryHolder(org.bukkit.inventory.InventoryHolder) Inventory(org.bukkit.inventory.Inventory) PlayerInventory(org.bukkit.inventory.PlayerInventory) EventHandler(org.bukkit.event.EventHandler)

Aggregations

InventoryType (org.bukkit.event.inventory.InventoryType)15 Player (org.bukkit.entity.Player)10 ItemStack (org.bukkit.inventory.ItemStack)10 EventHandler (org.bukkit.event.EventHandler)8 HumanEntity (org.bukkit.entity.HumanEntity)6 Inventory (org.bukkit.inventory.Inventory)6 SlotType (org.bukkit.event.inventory.InventoryType.SlotType)4 InventoryHolder (org.bukkit.inventory.InventoryHolder)4 PlayerInventory (org.bukkit.inventory.PlayerInventory)4 ElementTag (com.denizenscript.denizencore.objects.core.ElementTag)3 ScriptTag (com.denizenscript.denizencore.objects.core.ScriptTag)3 Wand (com.elmakers.mine.bukkit.wand.Wand)3 InventoryScriptContainer (com.denizenscript.denizen.scripts.containers.core.InventoryScriptContainer)2 ListTag (com.denizenscript.denizencore.objects.core.ListTag)2 InventoryAction (org.bukkit.event.inventory.InventoryAction)2 CraftingInventory (org.bukkit.inventory.CraftingInventory)2 BookMeta (org.bukkit.inventory.meta.BookMeta)2 ItemMeta (org.bukkit.inventory.meta.ItemMeta)2 ImprovedOfflinePlayer (com.denizenscript.denizen.nms.abstracts.ImprovedOfflinePlayer)1 InventoryTag (com.denizenscript.denizen.objects.InventoryTag)1