[Tutorial] Como verificar se um player está mexendo no seu menu!

Isto é um pequeno "macete" que eu descobri enquanto estava fazendo GUIs (menus) para os meus plugins.

Você provavelmente irá se perguntar, "mas porque eu não posso verificar usando o nome da GUI? Funciona do mesmo jeito então porque não?", bem, se o nome da sua GUI é dinâmico, você não poderá verificar se é a sua GUI ou não (não se esqueça que, se verificar usando o nome da GUI, você poderá ter conflitos com outros plugins que tem o mesmo nome para a GUI), então essa alternativa irá funcionar para você. ;)

Antes de começar, crie uma classe que implementa a interface InventoryHolder, por exemplo:

package /* yourpackagehere */;

import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;

public class YourCustomHolder implements InventoryHolder {  
    @Override
    public Inventory getInventory() {
        return null;
    }
}

Como é um holder fake, você não precisará retornar nada de útil no getInventory(), então deixe ele assim. :)

Agora nós teremos que mudar algumas pequenas coisas, você provavelmente cria um inventário assim, né?

Inventory inventory = Bukkit.createInventory(null, 9, "Custom Name");

A variável null é o inventory holder, então, o que você irá fazer agora? Fácil! Em vez de usar null como o Inventory Holder, vamos criar o nosso próprio Inventory Holder!

Inventory inventory = Bukkit.createInventory(new YourCustomHolder(), 9, "Custom Name");

Simples assim!

Agora você deve estar se perguntando "okay, mas agora como eu irei verificar se o player está interagindo com a minha GUI no InventoryClickEvent?"

Assim!

    @EventHandler
    public void onInteract(InventoryClickEvent e) {
        if (e.getInventory().getHolder() instanceof YourCustomHolder) {
            // Sim, o player está interagindo com o seu inventário!
        }
    }

E é só isso! Eu só queria compartilhar essa pequeno "macete" que eu descobri enquanto estava tentando criar GUIs. ;)

Se você precisar, você pode adicionar mais informações no seu Inventory Holder, só criar um constructor e guardar as variáveis lá.



Sobre Mim
Olá, eu sou MrPowerGamerBR (Leonardo), tenho 17 anos e bem-vindo(a) ao meu pequeno e simples blog, cheio de coisas (in)úteis que eu fiz!
Parceiros