Ducky Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 Olá, Gostaria de saber como posso verificar se o player ao executar um comando tem x item no inventario e se tiver remover apenas 1 desse item. Link para o comentário Compartilhar em outros sites More sharing options...
smgabriel Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 [...] onCommand[bla..blalbl...]{ if(sender instanceof Player){ // checa se o sender é um player Player p = (Player)sender; if(p.getInventory().contains(Material.ITEM)){ // checa se o player tem o item no inventario ItemStack meuItem; for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.ITEM)){ //verifica se o item é o que você está procurando meuItem = item; break; } } if(meuItem.getAmount() > 1) //verifica se a quantidade do item é maior do que um meuItem.setAmount(meuItem.getAmount()-1); // se sim, remove um item apenas else // se não, remove o item do inventario. p.getInventory().remove(Material.ITEM); } } } Eu não sei se tem algo de errado, fiz pelo navegador mesmo. Link para o comentário Compartilhar em outros sites More sharing options...
MrFlocaum Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 Ta ai sz Player player = (Player) sender;Material itemDesejado = Material.APPLE;if (player.getInventory().contains(itemDesejado)) {ItemStack encontrado = null;for (ItemStack item : player.getInventory()) {if (item.getType().equals(itemDesejado)) {encontrado = item;break;}}if (encontrado.getAmount() > 1) {encontrado.setAmount(encontrado.getAmount() - 1);} else {player.getInventory().remove(itemDesejado);}} else {player.sendMessage("§eVoce nao possui um(a) " + itemDesejado.name() + " no inventario!");} Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 9, 2017 Autor Denunciar Compartilhar Postado Outubro 9, 2017 [...] onCommand[bla..blalbl...]{ if(sender instanceof Player){ // checa se o sender é um player Player p = (Player)sender; if(p.getInventory().contains(Material.ITEM)){ // checa se o player tem o item no inventario ItemStack meuItem; for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.ITEM)){ //verifica se o item é o que você está procurando meuItem = item; break; } } if(meuItem.getAmount() > 1) //verifica se a quantidade do item é maior do que um meuItem.setAmount(meuItem.getAmount()-1); // se sim, remove um item apenas else // se não, remove o item do inventario. p.getInventory().remove(Material.ITEM); } } } Eu não sei se tem algo de errado, fiz pelo navegador mesmo. Uma dúvida.. Eu fiz assim; if(p.getInventory().contains(org.bukkit.Material.CACTUS)) { Como faço para remover apenas 1, utilizando p.getinventory()? Link para o comentário Compartilhar em outros sites More sharing options...
smgabriel Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 Uma dúvida.. Eu fiz assim; if(p.getInventory().contains(org.bukkit.Material.CACTUS)) { Como faço para remover apenas 1, utilizando p.getinventory()? Está certo, pode usar ItemStack para verificar. for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.CACTUS)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } Caso queira remover o item ignorando os itens que estão agrupados, pode usar p.getInventory().remove(Material.CACUS); Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 9, 2017 Autor Denunciar Compartilhar Postado Outubro 9, 2017 Está certo, pode usar ItemStack para verificar. for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.CACTUS)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } Caso queira remover o item ignorando os itens que estão agrupados, pode usar p.getInventory().remove(Material.CACUS); Mas p.getInventory().remove(Material.CACUS); (remove todos) quero que remova apenas 1 Link para o comentário Compartilhar em outros sites More sharing options...
smgabriel Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 (editado) Mas p.getInventory().remove(Material.CACUS); (remove todos) quero que remova apenas 1 ''Caso queira remover o item ignorando os itens que estão agrupados, pode usar p.getInventory().remove(Material.CACUS);'' Se você quer remover um por um, use o código abaixo: for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.CACTUS)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } O que ele faz? Basicamente, percorre todos os itens do inventario, verifica se algum deles é do material Cacus, se for, verifica a quantidade estacada e verifica se é maior que um, se for, remove um, se não, remove o item do inventario. Para entender melhor... public static void toRemove(ItemStack item, int amount, Player p){ if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); } public static void toRemove(Material type, int amount, Player p){ for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(type)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } } // para usar public static void test(){ toRemove(new ItemStack(Material.CACTUS), 1, Bukkit.getPlayer("GB")); toRemove(Material.CACTUS, 1, Bukkit.getPlayer("GB")); } Usando: [...] onCommand[bla..blalbl...]{ if(sender instanceof Player){ // checa se o sender é um player Player p = (Player)sender; toRemove(Material.CACTUS, 1, p); } } } Editado Outubro 9, 2017 por GabrielSm_ 1 Link para o comentário Compartilhar em outros sites More sharing options...
lucakiksd07 Postado Outubro 9, 2017 Denunciar Compartilhar Postado Outubro 9, 2017 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ducky
Olá,
Gostaria de saber como posso verificar se o player ao executar um comando tem x item no inventario e se tiver remover apenas 1 desse item.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados