Ir para conteúdo
  • 0

[Resolvido] [Dúvida] 3 en 1


LuizB

Pergunta

Bem são 3 dúvidas em um tópico :) (Que bosta ahuahuahu)

 

 

Como faço pra dar um item em um slot vazio no inventario do player se n tiver nem um slot vazio n mande uma msgg

 

Segunda -- checar se o inventario do player ta vazio

 

Terceira -- Remover 3 numeros De uma int a cada 5 segundos

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

Para dar um item em um slot vazio ou seja o proximo slot disponivel é 

Iventory inv = p.getInventory();

inv.addItem(ItemStack);

/*
* Isso adiciona um Item no proximo slot vazio.
*
*/

Para chegar se o inventario do player está vazio , eu nunca precisei fazer isto mais tente fazer coisas como :

Iventory inv = p.getInventory();

//Tentativa 1
if (inv.getContents() == null) {
}

//Tentativa 2
if (inv.getContents().leght == 0) {
}

//Tentativa 3
/*
* Seria colocar o inventario em uma hashmap e se o ela estivesse vazia fazeria o que você quizesse
*/

//OBS: Não testei nenhuma das 3 são só suposições.

Para remover 3 numeros de uma int a cada 5 segundos é muito facil...

/* é só usar um loop simples */

public int i = 10

Bukkit.getScheduler.callSyncRepeatingTask(plugin, runnable,

public void run() {

if ( i > 0 ) {
i = i - 3;
} else if (i == 0) {
i = 10;
}

}}0, 5*20 /*<-- Numero de segundos 20 = 1 segundo ou seja 5x20 = 5 Segundos.*/);

/*
* Isso Funciona asim Exemplo eu criei uma int de 10 , especifiquei que a cada 5*20 ticks no servidor.
* ele vai executar um runnable que se a int for maior que 0 diminuir 3 numeros dela se ela for 0 voltar
* para o inicio. isso é bastante simples mais no começo quando se está aprendendo é bem chatinho...
*/

Espero que eu tenha ajudado =D.

 

-Katho

Link para o comentário
Compartilhar em outros sites

Jesus Finalmente Um Tutorial Em BR 

 

 

@EDIT²

 

isso n tem ensinando '-' ( Só A Usar O Scheduler Mais n a fazer o Loop )

 

a Unica Coisa que sei fazer no Scheduler repeatask e delaytask

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

Bem são 3 dúvidas em um tópico :) (Que bosta ahuahuahu)

 

 

Como faço pra dar um item em um slot vazio no inventario do player se n tiver nem um slot vazio n mande uma msgg

 

Segunda -- checar se o inventario do player ta vazio

 

Terceira -- Remover 3 numeros De uma int a cada 5 segundos

1 - Crie um looping for para o inventário do jogador e cheque se não há um item

 

Exemplo:

 

Inventory inv = p.getInventory();
boolean done = false;

// Percorre o inventário do jogador
for (int i = 0; i < inv.getMaxStackSize();i++) {
    // Checa se o item do slot do inventário é nulo ou é ar e da uma maçã se a condição for verdadeira
    if (inv.getItem(i) == null || inv.getItem(i).getType() == Material.AIR) {
        inv.setItem(i, new ItemStack(Material.APPLE));
        // Diz que o jogador recebeu o item
        done = true;
        // Encerra o loop
        break;

    }
}

// Se o jogador não recebeu o item, mande uma mensagem
if (!done) p.sendMessage("Você não pode receber a maçã porque seu inventário está lotado.");

2 - Faça igual ao anterior, crie um looping e cheque os itens

 

Exemplo:

boolean empty = false;

// Percorre o inventário do jogador
for (int i = 0; i < inv.getMaxStackSize();i++) {
    // Checa se o item do slot do inventário não é nulo e não é ar
    if (inv.getItem(i) != null) {
        if ( inv.getItem(i).getType() != Material.AIR) {
            empty = true;
            break;
        }

    }
}

if (empty) p.sendMessage("O seu inventário está vazio");

3 - Crie um BukkitRunnable que se repete a cada 5 segundos

 

 

new BukkitRunnable() {

int i = /* valor */

public void run() {
    if (i > /*valorMinimo*/){
        // Diminui 3
        i-=3;

    } else this.cancel(); // Cancela o timer
}

}.runTaskTimer(/*Seu timer*/);

OBS: FIZ ISSO USANDO LOOPINGS, HÁ OUTROS JEITOS

   OBS: SE VOCÊ FOR USAR UMA CHECAGEM DE ITENS EM ALGUM EVENTO OU ALGO DO TIPO SUGIRO QUE NÃO USE ESSES MÉTODOS COM LOOPINGS 

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

1 - Crie um looping for para o inventário do jogador e cheque se não há um item

 

Exemplo:

 

Inventory inv = p.getInventory();
boolean done = false;

// Percorre o inventário do jogador
for (int i = 0; i < inv.getMaxStackSize();i++) {
    // Checa se o item do slot do inventário é nulo ou é ar e da uma maçã se a condição for verdadeira
    if (inv.getItem(i) == null || inv.getItem(i).getType() == Material.AIR) {
        inv.setItem(i, new ItemStack(Material.APPLE));
        // Diz que o jogador recebeu o item
        done = true;
        // Encerra o loop
        break;

    }
}

// Se o jogador não recebeu o item, mande uma mensagem
if (!done) p.sendMessage("Você não pode receber a maçã porque seu inventário está lotado.");

Pra que esse código todo

 

só usar:

if(inv.firstEmpty() == -1) {
      // Inventário está cheio
} else {
   inv.setItem(inv.firstEmpty(), new ItemStack(Material.APPLE));
}
Editado por Proyx
Link para o comentário
Compartilhar em outros sites

1 - Crie um looping for para o inventário do jogador e cheque se não há um item

 

Exemplo:

 

Inventory inv = p.getInventory();
boolean done = false;

// Percorre o inventário do jogador
for (int i = 0; i < inv.getMaxStackSize();i++) {
    // Checa se o item do slot do inventário é nulo ou é ar e da uma maçã se a condição for verdadeira
    if (inv.getItem(i) == null || inv.getItem(i).getType() == Material.AIR) {
        inv.setItem(i, new ItemStack(Material.APPLE));
        // Diz que o jogador recebeu o item
        done = true;
        // Encerra o loop
        break;

    }
}

// Se o jogador não recebeu o item, mande uma mensagem
if (!done) p.sendMessage("Você não pode receber a maçã porque seu inventário está lotado.");

2 - Faça igual ao anterior, crie um looping e cheque os itens

 

Exemplo:

boolean empty = false;

// Percorre o inventário do jogador
for (int i = 0; i < inv.getMaxStackSize();i++) {
    // Checa se o item do slot do inventário não é nulo e não é ar
    if (inv.getItem(i) != null) {
        if ( inv.getItem(i).getType() != Material.AIR) {
            empty = true;
            break;
        }

    }
}

if (empty) p.sendMessage("O seu inventário está vazio");

3 - Crie um BukkitRunnable que se repete a cada 5 segundos

 

 

new BukkitRunnable() {

int i = /* valor */

public void run() {
    if (i > /*valorMinimo*/){
        // Diminui 3
        i-=3;

    } else this.cancel(); // Cancela o timer
}

}.runTaskTimer(/*Seu timer*/);

OBS: FIZ ISSO USANDO LOOPINGS, HÁ OUTROS JEITOS

   OBS: SE VOCÊ FOR USAR UMA CHECAGEM DE ITENS EM ALGUM EVENTO OU ALGO DO TIPO SUGIRO QUE NÃO USE ESSES MÉTODOS COM LOOPINGS 

Vou Ver Se consigo Entender o Código Do Primeiro Vamos lá 

 

i é igual a 0; se i for menor que todos os Slots. i++ // pq tem que adicionar O Valor pra i ?

Link para o comentário
Compartilhar em outros sites

Guest Mateus Demarchi

Vou Ver Se consigo Entender o Código Do Primeiro Vamos lá 

 

i é igual a 0; se i for menor que todos os Slots. i++ // pq tem que adicionar O Valor pra i ?

A cada i no laço de repetição, i ira receber +1 ou seja slot 0, 1, 3, ....ect

Link para o comentário
Compartilhar em outros sites

A cada i no laço de repetição, i ira receber +1 ou seja slot 0, 1, 3, ....ect

 Ah ta então vai percorrer todo inventario Do player ?. Se Sim Isso que é um Loop ?

Link para o comentário
Compartilhar em outros sites

Guest Mateus Demarchi

Ah ta então vai percorrer todo inventario Do player ?. Se Sim Isso que é um Loop ?

 

Isso, aconselho aprender java, antes de entrar em apis como o Bukkit, pois muitos desistem.

Link para o comentário
Compartilhar em outros sites

usa o que eu falei meu deus .-.

 

pra que os cara gosta de usar codigo gigante

só tava tentando entender o código Man

Isso, aconselho aprender java, antes de entrar em apis como o Bukkit, pois muitos desistem.

Exatamente isso que eu to Fazendo '-'. Eu sempre Procuro Entender o código

Link para o comentário
Compartilhar em outros sites

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