Can remove item from chest when clicking on it

Tireyy

New Member
I have a struggle when i try to remove a gold ingot from the chest inventory when a player clicks on it. It doesn't remove the gold when a player clicks on it but it i get the message that i received gold and it got added to the database

Java:
@EventHandler
    public void onInventoryClick(InventoryTransactionEvent event) {
        Player player = event.getTransaction().getSource();

        for (InventoryAction action : event.getTransaction().getActions()) {
            if (action instanceof SlotChangeAction) {
                SlotChangeAction slotAction = (SlotChangeAction) action;
                Item clickedItem = slotAction.getTargetItem();

                if (!clickedItem.isNull() && clickedItem.getId() == Item.GOLD_INGOT && "§650 Gold".equals(clickedItem.getCustomName())) {
                    Inventory inventory = slotAction.getInventory();
                    int slot = slotAction.getSlot();

                    // Annuleer eerst de transactie
                    event.setCancelled(true);

                    // Verwijder item 1 tick later om Nukkit's interne transactieproces niet te verstoren
                    plugin.getServer().getScheduler().scheduleDelayedTask(plugin, new Task() {
                        @Override
                        public void onRun(int currentTick) {
                            inventory.setItem(slot, Item.get(Item.AIR));
                        }
                    }, 1);

                    // Beloning geven
                    if (plugin.getConfig().getBoolean("mysql", false)) {
                        updateGoldInMySQL(player, 50);
                    } else {
                        updateGoldInYML(player, 50);
                    }

                    player.sendMessage("§6You found §650 gold§6 by clicking it!");
                    break;
                }
            }
        }
    }
 

PetteriM1

Moderator
Staff member
Note that slotAction.getInventory() here is the target inventory (cursor). You should be able to get source inventory from
event.getTransaction().getInventories()
 
Top