KeyListener.java 文件源码

java
阅读 23 收藏 0 点赞 0 评论 0

项目:HCFCore 作者:
@EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
public void onPlayerInteract(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    Action action = event.getAction();
    ItemStack stack = event.getItem();

    // Keys can only be used by right clicking blocks.
    if (action != Action.RIGHT_CLICK_BLOCK)
        return;

    Key key = plugin.getKeyManager().getKey(stack);

    // No keys were used in the making of this video.
    if (key == null)
        return;

    Block block = event.getClickedBlock();
    BlockState state = block.getState();
    if (key instanceof EventKey && state instanceof Chest) {
        EventKey eventKey = (EventKey) key;
        EventKey.EventKeyData eventKeyData = eventKey.getData(stack.getItemMeta().getLore());
        EventType eventType = eventKeyData.getEventType();
        List<Inventory> inventories = eventKey.getInventories(eventType);
        int inventoryNumber = eventKeyData.getInventoryNumber();

        if (inventories.size() < inventoryNumber) {
            player.sendMessage(ChatColor.RED + "This key is for " + eventType.getDisplayName() + ChatColor.RED + " loottable " + inventoryNumber + ", whilst there are only " + inventories.size()
                    + " possible. Please inform an admin.");

            return;
        }

        Inventory inventory = inventories.get(inventoryNumber - 1);
        ItemStack[] contents = inventory.getContents();

        Chest chest = (Chest) state;
        InventoryHolder inventoryHolder = chest.getInventory().getHolder();
        if (inventoryHolder instanceof DoubleChestInventory) {
            inventoryHolder = ((DoubleChestInventory) inventoryHolder).getHolder();
        }

        if (contents.length > chest.getInventory().getSize()) {
            player.sendMessage(ChatColor.RED + "This single chest is too small to fit the contents of this key.");
            return;
        }

        Inventory chestInventory = inventoryHolder.getInventory();

        if (!InventoryUtils.isEmpty(chestInventory)) {
            player.sendMessage(ChatColor.RED + "This chest is not empty.");
            return;
        }

        chestInventory.setContents(inventory.getContents());
        decrementHand(player);
        event.setCancelled(true);

        player.openInventory(chestInventory);
        player.sendMessage(ChatColor.YELLOW + "Your " + ChatColor.AQUA + eventType.getDisplayName() + ' ' + eventKey.getDisplayName() + ChatColor.YELLOW + " key has transferred loot "
                + inventoryNumber + ChatColor.YELLOW + " to the chest.");
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号