S0_Dev Postado Março 19, 2020 Denunciar Compartilhar Postado Março 19, 2020 Opa, estou precisando de ajuda estou criando um plugin de /ban por gui a duvida que eu tenho é como que eu faço para quando clicar no item do menu o item não sair mas banir o player eu criei por comando eu so sei fazer por evento ja pesquisei bastante na internet mas não achei nada Resumindo: Eu quero criar um comando que abra um gui com um item (FEITO) Porem ao clicar nesse item quero que não de para tirar o item e faça uma ação que seria p.setBanned(true); O CODIGO: package comandos; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; public class Punir implements CommandExecutor{ @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Player p = (Player) sender; if(cmd.getName().equalsIgnoreCase("banir")) { ItemStack hack = new ItemStack(Material.DIAMOND_AXE, 1); ItemMeta hackmeta = hack.getItemMeta(); Inventory inv = Bukkit.createInventory(null, 6*3, "§c§lBANIMENTOS"); hack.addEnchantment(Enchantment.DURABILITY, 9); hackmeta.setDisplayName("§aUSO DE HACK"); hack.setItemMeta(hackmeta); inv.setItem(9, hack); p.openInventory(inv); } return false; } } Esta bem simples pois e de testes então eu ainda irei criar os argumentos e o trageto PORFAVOR ME AJUDAAAAAAAAAAAAAAAA ? Link para o comentário Compartilhar em outros sites More sharing options...
WizardlyBump17 Postado Março 19, 2020 Denunciar Compartilhar Postado Março 19, 2020 1º: Crie uma classe para o inventário separado 2º: Use o evento InventoryClickEvent e cancele ele (faz suas checagens, obvio) 3º: Registre o evento Link para o comentário Compartilhar em outros sites More sharing options...
S0_Dev Postado Março 19, 2020 Autor Denunciar Compartilhar Postado Março 19, 2020 2 minutos atrás, WizardlyBump17 disse: 1º: Crie uma classe para o inventário separado 2º: Use o evento InventoryClickEvent e cancele ele (faz suas checagens, obvio) 3º: Registre o evento Espera, mas como eu faço para importar esse inventario no comando? Importar no caso fazer para abrir ne? que seria p.openInventory(); Link para o comentário Compartilhar em outros sites More sharing options...
Álison👌 Postado Março 19, 2020 Denunciar Compartilhar Postado Março 19, 2020 (editado) Vá em sua Main e coloque o seguinte: public static HashMap<Player, Player> ban; Agora, no começo da class do seu inventário você precisa colocar isso: public static ItemStack Item; public static ItemMeta Itemmeta; Após você cria o método do inventário: public static void OpenInv(Player p, Player t) { Inventory menugui = Bukkit.createInventory(null, Quantidadedelinhasdoinv * 9, "§aNomeDoInv"); Item = new ItemStack(Material.WOOL, 1, (short) 2); Itemmeta = Item.getItemMeta(); Itemmeta.setDisplayName("§cNomeDoItem"); ArrayList<String> lore = new ArrayList<String>(); lore.add("§aVoce quer banir o player " + t.getName() + "?"); Itemmeta.setLore(lore); Item.setItemMeta(Itemmeta); menugui.setItem(SlotDoItem, Item); p.openInventory(menugui); } ps: o segundo player na função não é necessário, apenas coloquei para que você possa colocar o nome do player a ser banido no item Após criar o método vamos para a seção de comandos, quando o player digitar /ban <target> você faz o seguinte OpenInv(p, target); // abre inventário ban.put(p, target); // coloca o player e o target em hashmap Por fim você faz o evento de click: @EventHandler public void Click(InventoryClickEvent e) { if ((e.getCurrentItem() != null) && (e.getCurrentItem().getItemMeta() != null)) { Inventory inv = e.getInventory(); Player p = (Player) e.getWhoClicked(); if (inv.getTitle().equals("§aNomeDoInv")) { e.setCancelled(true); // cancela o evento de click, fazendo com que o item não vá para sua mão if (e.getCurrentItem().isSimilar(Item)) { Player target = ban.get(p).getPlayer(); // pega o target da hash que salvamos antes target.setBanned(true); // banimos o target ban.remove(p); // removemos o player da hash p.closeInventory(); // fechamos o gui //você fazer mais coisas aqui como enviar mensagens } } } } Importante: esse código foi feito para que tudo esteja na mesma class, com exceção do hash, caso você separe em classes diferentes terá que puxar os métodos de outra class Editado Março 19, 2020 por Álison? Link para o comentário Compartilhar em outros sites More sharing options...
Álison👌 Postado Março 19, 2020 Denunciar Compartilhar Postado Março 19, 2020 Sua dúvida foi marcada como resolvida pela nossa equipe. Caso sua dúvida não tenha sido sanada, crie outro tópico. OBS: Essa mensagem é automática. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados