Ir para conteúdo
  • 0

[AJUDA] ITENS EM GUI


Guest iDimaDev

Pergunta

Guest iDimaDev

Quero saber como faço abrir um gui e qnd eu botar por exemplo um diamante e fechar o gui ou na hora que eu botar mesmo, mandar uma mensagem, "Upou para rank diamante!" para o player

Editado por iDimaDev
Link para o comentário
Compartilhar em outros sites

28 respostass a esta questão

Posts Recomendados

Guest iDimaDev

Explica direito?

o player vai dar /upar e qnd ele dar esse comando vai abrir um inventory, nesse inventory qnd ele colocar 1 diamante da uma mensagem que ele upou, se for outro minerio manda uma mensagem "item invalido"

Link para o comentário
Compartilhar em outros sites

o player vai dar /upar e qnd ele dar esse comando vai abrir um inventory, nesse inventory qnd ele colocar 1 diamante da uma mensagem que ele upou, se for outro minerio manda uma mensagem "item invalido"

@Override
    public boolean onCommand(CommandSender sender, Command cmd, String lb, String[] args) {
        
        if(cmd.getName().equalsIgnoreCase("upar")){
            Inventory inv = Bukkit.createInventory(null, 3*9, "§cRankUp");
            Player p = (Player)sender;
            
            p.openInventory(inv);
            
            if(inv.getItem(13) == new ItemStack(Material.DIAMOND)){
                
                inv.remove(new ItemStack(Material.DIAMOND));
                // Sistema pra upar de rank aqui
                p.closeInventory();
                p.sendMessage("§aVocê upou!");
            }else{
                if(inv.getItem(13) != null && inv.getItem(13) != new ItemStack(Material.AIR)){
                    p.closeInventory();
                    p.sendMessage("§cItem inválido!");
                }
            }
            
        }
        
        return false;
    }

Obs: Não sei se vai funcionar, não testei, não sou o melhor pra te ajudar nisso, mas acho que tá certo ;-;

Obs2: inv.getItem(13) << Esse 13 é o slot q o diamante tem que ser colocado

Editado por Reityy
Link para o comentário
Compartilhar em outros sites

Guest iDimaDev
@Override
    public boolean onCommand(CommandSender sender, Command cmd, String lb, String[] args) {
        
        if(cmd.getName().equalsIgnoreCase("upar")){
            Inventory inv = Bukkit.createInventory(null, 3*9, "§cRankUp");
            Player p = (Player)sender;
            
            p.openInventory(inv);
            
            if(inv.getItem(13) == new ItemStack(Material.DIAMOND)){
                
                inv.remove(new ItemStack(Material.DIAMOND));
                // Sistema pra upar de rank aqui
                p.closeInventory();
                p.sendMessage("§aVocê upou!");
            }else{
                if(inv.getItem(13) != null && inv.getItem(13) != new ItemStack(Material.AIR)){
                    p.closeInventory();
                    p.sendMessage("§cItem inválido!");
                }
            }
            
        }
        
        return false;
    }

Obs: Não sei se vai funcionar, não testei, não sou o melhor pra te ajudar nisso, mas acho que tá certo ;-;

Obs2: inv.getItem(13) << Esse 13 é o slot q o diamante tem que ser colocado

 

é nao funcionou :p

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

kskssksks ja imaginava ;-; como eu disse, "não sou o melhor pra te ajudar nisso" :v

mas e o unico que tento realmente ajudar.... o resto ta pouco se @%&#036;#~&amp;I isos que vale, vc ajudou :D

Link para o comentário
Compartilhar em outros sites

Na parte do comando, você cria um inventario e abre ele ex:

		if (command.getName().equalsIgnoreCase("up")) {
			if (sender instanceof Player) {
				Inventory inv = Bukkit.createInventory(null, 9, "UP!");
				((Player) sender).openInventory(inv);
			}
		}

Agora, crie o evento chamado InventoryCloseEvent e adicione esse código:

		if (e.getInventory().getTitle().equalsIgnoreCase("UP!")) {
			if (e.getInventory().contains(Material.DIAMOND)) {
				e.getPlayer().sendMessage("Você upou com sucesso!");
				return;
			} else {
				e.getPlayer().sendMessage("Item invalido.");
				return;
			}
		}

Para verificar o item em ''tempo real'', tente fazer essa verificação com os eventos InventoryMoveItemEvent  e InventoryDragEvent(eu recomendo o InventoryMoveItemEvent)

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Na parte do comando, você cria um inventario e abre ele ex:

		if (command.getName().equalsIgnoreCase("up")) {
			if (sender instanceof Player) {
				Inventory inv = Bukkit.createInventory(null, 9, "UP!");
				((Player) sender).openInventory(inv);
			}
		}

Agora, crie o evento chamado InventoryCloseEvent e adicione esse código:

		if (e.getInventory().getTitle().equalsIgnoreCase("UP!")) {
			if (e.getInventory().contains(Material.DIAMOND)) {
				e.getPlayer().sendMessage("Você upou com sucesso!");
				return;
			} else {
				e.getPlayer().sendMessage("Item invalido.");
				return;
			}
		}

Para verificar o item em ''tempo real'', tente fazer essa verificação com os eventos InventoryMoveItemEvent  e InventoryDragEvent(eu recomendo o InventoryMoveItemEvent)

Sem erros, porem não funcionou ;-;

 

https://pastebin.com/kMxxuDv5meu codigo atual

Link para o comentário
Compartilhar em outros sites

Sem erros, porem não funcionou ;-;

 

https://pastebin.com/kMxxuDv5meu codigo atual

InventoryClickEvent só é ''ativado'' quando o player clica em um inventario, portanto, se o player colocar o item no inventario criado, ele ta clicando no inventario dele, então, não acontecerá nada.

Use InventoryCloseEvent ou use os outros eventos que eu mencionei...

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

InventoryClickEvent só é ''ativado'' quando o player clica em um inventario, portanto, se o player colocar o item no inventario criado, ele ta clicando no inventario dele, então, não acontecerá nada.

Use InventoryCloseEvent ou use os outros eventos que eu mencionei...

Eu n to conseguindo tipo, qnd muda o evento por exemplo para InventoryMoveEvent, n consigo pegar o player, e etc...

 

 @EventHandler
    public void OnFechar3(InventoryMoveItemEvent e){
    if (e.getInventory().getTitle().equalsIgnoreCase("UP!")) {
if (e.getInventory().contains(Material.DIAMOND)) {
}
    }
    }
 
;-;
Link para o comentário
Compartilhar em outros sites

 

Eu n to conseguindo tipo, qnd muda o evento por exemplo para InventoryMoveEvent, n consigo pegar o player, e etc...

 

 @EventHandler
    public void OnFechar3(InventoryMoveItemEvent e){
    if (e.getInventory().getTitle().equalsIgnoreCase("UP!")) {
if (e.getInventory().contains(Material.DIAMOND)) {
}
    }
    }
 
;-;

 

Bem, eu não sabia da existência do InventoryAction no InventoryClickEvent, então eu fiz uma gambiarra, utilizando o evento InventoryClickEvent, tente isso:

		Bukkit.broadcastMessage("1");
		Player p = (Player) e.getWhoClicked();
		if (p.getOpenInventory().getTitle().equalsIgnoreCase("UP!")) {
			Bukkit.broadcastMessage("2");
				if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){
				if (e.getCurrentItem() != null && e.getCurrentItem().getType().equals(Material.DIAMOND)) {
					Bukkit.broadcastMessage("3");
					p.sendMessage("Você upou com sucesso!");
					p.closeInventory();
					return;
				} else {
					Bukkit.broadcastMessage("4");
					p.sendMessage("Item invalido.");
					return;
				}
			}
		}

Introdução rápida: Quando o player usar o SHIFT + Item(o diamante), o item será movido para o inventario e vai fazer essa verificação se é um diamante ou não, se sim, fecha o inventario.

Eu acho que se ele mover o item com o mouse não vai dar mt certo, tente verificar os ENUMs se tem algum com essa função, caso não tenha, use o InventoryDragEvent.

Acabei de observar que o InventoryMoveItemEvent não é utilizável para isso.

Link para o comentário
Compartilhar em outros sites

Eu registrei usando @EventHandler, qual a forma que você registrou o evento?

Tem que registrar na classe principal também(geralmente denominada de Main)

getServer().getPluginManager().registerEvents(this/*classe do evento*/, this/*classe principal*/);
Editado por GabrielSm_
Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

 

Tem que registrar na classe principal também(geralmente denominada de Main)

getServer().getPluginManager().registerEvents(this/*classe do evento*/, this/*classe principal*/);

ah sim, eu registrei desse jeito tbm..

 

Bukkit.getServer().getPluginManager().registerEvents(this, this);

Link para o comentário
Compartilhar em outros sites

Resolvido, vlw <3

 

mais uma duvida, porque minha config fica assim? http://i.imgur.com/If7WB02.png

Usa saveConfig() e reloadConfig()? se sim, talvez seja o motivo, eu lembro que quando eu usei deu muito trabalho...

Se eu não tou enganado, minha solução foi usar uma classe que o @Lüigi! me passou(não lembro qual foi e onde eu achei, tente perguntar a ele, na real, lembro que o nome era mais ou menos simpleconfig).

Se não for isso, tente ver a formatação do seu projeto.

Link para o comentário
Compartilhar em outros sites

Guest iDimaDev

Usa saveConfig() e reloadConfig()? se sim, talvez seja o motivo, eu lembro que quando eu usei deu muito trabalho...

Se eu não tou enganado, minha solução foi usar uma classe que o @Lüigi! me passou(não lembro qual foi e onde eu achei, tente perguntar a ele, na real, lembro que o nome era mais ou menos simpleconfig).

Se não for isso, tente ver a formatação do seu projeto.

Aqui nao funfou ,-,

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...