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

  Em 09/05/2017 em 14:07, -DimaBR disse:

Sim, gostaria de saber como coloco lapis lazulli no eclipse

						Dye d = new Dye();
						d.setColor(DyeColor.BLUE);
						ItemStack i = d.toItemStack();
						i.setAmount(10);
						p.getInventory().addItem(i);
Link para o comentário
Compartilhar em outros sites

Guest iDimaDev
  Em 08/05/2017 em 20:51, kFlash_ disse:

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

  Em 08/05/2017 em 21:21, -DimaBR disse:

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
  Em 08/05/2017 em 22:01, Reityy disse:
@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
  Em 08/05/2017 em 22:56, Reityy disse:

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
  Em 08/05/2017 em 23:20, GabrielSm_ disse:

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

  Em 08/05/2017 em 23:28, -DimaBR disse:

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
  Em 08/05/2017 em 23:33, GabrielSm_ disse:

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

  Em 08/05/2017 em 23:36, -DimaBR disse:

 

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

  Em 09/05/2017 em 00:42, -DimaBR disse:

Não enviou nem se quer o primeiro broadcast? "Bukkit.broadcastMessage("1");" se não,  verifique se você registrou o evento e se seu método esta correto, pois eu testei e funcionou perfeitamente.

Link para o comentário
Compartilhar em outros sites

  Em 09/05/2017 em 00:47, -DimaBR disse:

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
  Em 09/05/2017 em 00:50, GabrielSm_ disse:

 

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

Guest iDimaDev
  Em 09/05/2017 em 13:19, leonardosc disse:

Conseguiu? o que falta? ainda precisa de ajuda?

Sim, gostaria de saber como coloco lapis lazulli no eclipse

Link para o comentário
Compartilhar em outros sites

  Em 09/05/2017 em 14:07, -DimaBR disse:

Sim, gostaria de saber como coloco lapis lazulli no eclipse

 

Tenta

 

ItemStack lapiz = new ItemStack(Material.INK_SACK, 1, (short) 4);

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

  Em 09/05/2017 em 22:36, -DimaBR disse:

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
  Em 09/05/2017 em 23:07, GabrielSm_ disse:

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...