JCGEventListener.java 文件源码

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

项目:NucleusFramework 作者:
@EventHandler(priority=EventPriority.NORMAL, ignoreCancelled = true)
private void onInventoryClick(InventoryClickEvent event) {

    HumanEntity entity = event.getWhoClicked();

    if (!(entity instanceof Player))
        return;

    final Player p = (Player)entity;

    Inventory inventory = event.getInventory();
    if (!(inventory instanceof AnvilInventory))
        return;

    final AnvilInventory anvilInventory = (AnvilInventory)inventory;
    InventoryView view = event.getView();
    int rawSlot = event.getRawSlot();

    if (rawSlot != view.convertSlot(rawSlot) || rawSlot != 2)
        return;

    ItemStack resultItem = anvilInventory.getItem(2);
    if (resultItem == null)
        return;

    ItemStack slot1 = anvilInventory.getItem(0);
    ItemStack slot2 = anvilInventory.getItem(1);

    ItemStack slot1Clone = slot1 == null ? null : slot1.clone();
    ItemStack slot2Clone = slot2 == null ? null : slot2.clone();

    // check for rename
    String originalName = slot1 != null
            ? ItemStackUtils.getDisplayName(slot1, DisplayNameOption.OPTIONAL)
            : null;

    String newName = ItemStackUtils.getDisplayName(resultItem, DisplayNameOption.OPTIONAL);

    if (newName != null && !newName.equals(originalName)) {

        AnvilRenameItemEvent renameEvent = new AnvilRenameItemEvent(
                p, anvilInventory, resultItem, newName, originalName);

        Nucleus.getEventManager().callBukkit(this, renameEvent);

        if (renameEvent.isCancelled()) {
            cancelAnvilEvent(p, anvilInventory, slot1Clone, slot2Clone);
            return;
        }

        ItemStackUtils.setDisplayName(resultItem, renameEvent.getNewName());
    }

    if (slot2 == null || slot2.getType() == Material.AIR)
        return;

    if (slot2.getType() == Material.ENCHANTED_BOOK) {

        AnvilEnchantItemEvent enchantEvent = new AnvilEnchantItemEvent(p, anvilInventory);
        Nucleus.getEventManager().callBukkit(this, enchantEvent);

        if (enchantEvent.isCancelled()) {
            cancelAnvilEvent(p, anvilInventory, slot1Clone, slot2Clone);
        }
    }
    else {

        AnvilRepairItemEvent repairEvent = new AnvilRepairItemEvent(p, anvilInventory, resultItem);
        Nucleus.getEventManager().callBukkit(this, repairEvent);

        if (repairEvent.isCancelled()) {
            cancelAnvilEvent(p, anvilInventory, slot1Clone, slot2Clone);
        }
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号