Ir para conteúdo
  • 0

Ajuda com o inventory e mobspawner?


Guest iDimaBRBanido

Pergunta

Guest iDimaBRBanido

Então, to tentando fazer o seguinte:

 

Ao botar um spawner no chão e clicar com o botão direito vai abrir um menu com os ovos de mobs que custam money, ao clicar neles o mobspawner que ele clicou vai se transformar no tipo de mob que ele comprou, mas não sei como fazer isso no inventory '-'

 

Código: https://pastebin.com/y5mcN3Z8

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

Só usar o InventoryHolder pra guardar o block (ou a localização, vc que sabe)

 

Fiz o código aqui mesmo, pode ter erros de sintaxe...

// Bota esta classe em algum lugar
public class SpawnerBlockHolder implements InventoryHolder {
  private Block spawner;
  
  public SpawnerBlockHolder(Block spawner) {
    this.spawner = spawner;
  }

  public Block getSpawner() { return this.spawner; }  

  @Override
  public Inventory getInventory() { 
    return null; 
  }
}

@EventHandler
public void ClicarSpawn(BlockPlaceEvent e){
    if(e.getBlock().getType().equals(Material.MOB_SPAWNER)){
            SpawnerBlockHolder holder = new SpawnerBlockHolder(e.getBlock());
            Inventory inv = Bukkit.createInventory(holder, 36, "§6Comprar Spawners");
            ArrayList<String> lore1 = new ArrayList<String>();
            lore1.add("§a - MobSpawner de Zumbi");
            lore1.add("§aPreço: §7$7.000");
            lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
            ItemStack mob_1 = ItemsManager.putName(Material.MONSTER_EGG,"§eMobSpawner de Zumbi", (short) 54);
            inv.setItem(1, mob_1);
            Player p = (Player) e.getPlayer();
            p.openInventory(inv);
    }
}
@EventHandler
public void ClickInv(InventoryClickEvent e){
    if(e.getClickedInventory().getName().equalsIgnoreCase("§6Comprar Spawners")){
        SpawnerBlockHolder holder = (SpawnerBlockHolder) e.getClickedInventory().getHolder();
          
        BlockState blockState = holder.getSpawner().getState();
        CreatureSpawner creatureSpawner = (CreatureSpawner) blockState;
        
        if(e.getCurrentItem().getItemMeta().equals("§eMobspawner de Zumbi")){
          creatureSpawner.setSpawnedType(EntityType.ZOMBIE);
          blockState.update();
        }
        // outros tipos
    }
}
Editado por leonardosc
Link para o comentário
Compartilhar em outros sites

Guest iDimaBRBanido
  Em 13/06/2017 em 00:20, StageWeb_ disse:

Se eu não estou enganado você não verificou se ele clicou no mobspawner..

O problema está em como setar o mobspawner no evento do InventoryClickEvent '-'

Link para o comentário
Compartilhar em outros sites

Guest iDimaBRBanido

http://i.imgur.com/6jhGYhI.png

 

Ainda ta isso, imports:

 

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import net.md_5.bungee.api.ChatColor;
 
 
  Em 13/06/2017 em 01:50, leonardosc disse:

Você importou o Block errado, é org.bukkit.block.Block.

 
 
 
  Em 13/06/2017 em 01:50, leonardosc disse:

Você importou o Block errado, é org.bukkit.block.Block.

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

  Em 13/06/2017 em 01:59, iDimaBRBanido disse:

 

http://i.imgur.com/6jhGYhI.png

 

Ainda ta isso, imports:

 

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import net.md_5.bungee.api.ChatColor;

 

Importou errado foi no holder que o leo passou.

Se o import do holder fosse igual ao seu listener nem precisaria de usar cast.

 

 

  Em 13/06/2017 em 00:48, leonardosc disse:

 

Só usar o InventoryHolder pra guardar o block (ou a localização, vc que sabe)

 

Fiz o código aqui mesmo, pode ter erros de sintaxe...

@EventHandler
public void ClickInv(InventoryClickEvent e){
    if(e.getClickedInventory().getName().equalsIgnoreCase("§6Comprar Spawners")){
        SpawnerBlockHolder holder = (SpawnerBlockHolder) e.getClickedInventory().getHolder();
          
        BlockState blockState = holder.getSpawner().getState();
        CreatureSpawner creatureSpawner = (CreatureSpawner) blockState;
        
        if(e.getCurrentItem().getItemMeta().equals("§eMobspawner de Zumbi")){
          creatureSpawner.setSpawnedType(EntityType.ZOMBIE);
          blockState.update();
        }
        // outros tipos
    }
}

Acho melhor verificar se o holder é um SpawnerBlockHolder, vai que ele tem outro plugin que usa um gui com o mesmo nome.

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

  Em 13/06/2017 em 01:59, iDimaBRBanido disse:

http://i.imgur.com/6jhGYhI.png

 

Ainda ta isso, imports:

 

import org.bukkit.Bukkit;

import org.bukkit.Material;

import org.bukkit.block.Block;

import org.bukkit.block.BlockState;

import org.bukkit.block.CreatureSpawner;

import org.bukkit.command.CommandExecutor;

import org.bukkit.command.ConsoleCommandSender;

import org.bukkit.entity.EntityType;

import org.bukkit.entity.Player;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.inventory.InventoryClickEvent;

import org.bukkit.inventory.Inventory;

import org.bukkit.inventory.ItemStack;

import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.ChatColor;

 

Tu importou errado na classe SpawnerBlockHolder

 

  Em 13/06/2017 em 10:13, zAth disse:

Importou errado foi no holder que o leo passou.

Se o import do holder fosse igual ao seu listener nem precisaria de usar cast.

 

 

Acho melhor verificar se o holder é um SpawnerBlockHolder, vai que ele tem outro plugin que usa um gui com o mesmo nome.

 

Do mesmo jeito que ele pode usar o nome em outra GUI ele pode usar o SpawnerBlockHolder. Ele quem decide.

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

Guest iDimaBRBanido
  Em 13/06/2017 em 13:18, leonardosc disse:

 

Tu importou errado na classe SpawnerBlockHolder

 

 

Do mesmo jeito que ele pode usar o nome em outra GUI ele pode usar o SpawnerBlockHolder. Ele quem decide.

Deu erro qnd clica no ovo:

 

https://pastebin.com/B2rvf8jD

 

 

@EventHandler
public void ClickInv(InventoryClickEvent e) {
if (e.getClickedInventory().getName().equalsIgnoreCase("§6Comprar Spawners")) {
SpawnerBlockHolder holder = (SpawnerBlockHolder) e.getClickedInventory().getHolder();
 
BlockState blockState = ((org.bukkit.block.Block) holder.getSpawner()).getState();
CreatureSpawner creatureSpawner = (CreatureSpawner) blockState;
 
if (e.getCurrentItem().getItemMeta().equals("§eMobSpawner de Zumbi")) {
e.setCancelled(true);
e.getWhoClicked().sendMessage("§eSeu spawner virou de Zumbi.");
creatureSpawner.setSpawnedType(EntityType.ZOMBIE);
blockState.update();
}
// outros tipos
}
}
 
Linha 71:  if (e.getCurrentItem().getItemMeta().equals("§eMobSpawner de Zumbi")) {
Link para o comentário
Compartilhar em outros sites

  Em 13/06/2017 em 14:22, iDimaBRBanido disse:

 

Deu erro qnd clica no ovo:

 

https://pastebin.com/B2rvf8jD

 

 

@EventHandler
public void ClickInv(InventoryClickEvent e) {
if (e.getClickedInventory().getName().equalsIgnoreCase("§6Comprar Spawners")) {
SpawnerBlockHolder holder = (SpawnerBlockHolder) e.getClickedInventory().getHolder();
 
BlockState blockState = ((org.bukkit.block.Block) holder.getSpawner()).getState();
CreatureSpawner creatureSpawner = (CreatureSpawner) blockState;
 
if (e.getCurrentItem().getItemMeta().equals("§eMobSpawner de Zumbi")) {
e.setCancelled(true);
e.getWhoClicked().sendMessage("§eSeu spawner virou de Zumbi.");
creatureSpawner.setSpawnedType(EntityType.ZOMBIE);
blockState.update();
}
// outros tipos
}
}
 
Linha 71:  if (e.getCurrentItem().getItemMeta().equals("§eMobSpawner de Zumbi")) {

 

tenta

if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eMobSpawner de Zumbi")){
Link para o comentário
Compartilhar em outros sites

Guest iDimaBRBanido
  Em 13/06/2017 em 14:30, zAth disse:

 

tenta

if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eMobSpawner de Zumbi")){

Opa deu certo obrigado ae, ja dou como resolvido vou ver se acho mais bugs no codigo

 

@EDIT

 

Queria saber como eu boto um item com lore

 

Meu codigo ta assim:

 

ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
ItemStack mob_1 = ItemsManager.putName(Material.MONSTER_EGG, "§eMobSpawner de Zumbi", (short) 54);
inv.setItem(1, mob_1);
 
Mas não tem como eu botar (short) 54 se tiver lore :/
Editado por iDimaBRBanido
Link para o comentário
Compartilhar em outros sites

  Em 13/06/2017 em 14:35, iDimaBRBanido disse:

Opa deu certo obrigado ae, ja dou como resolvido vou ver se acho mais bugs no codigo

Se não achar mais bugs, dê melhor resposta ao leo né :kk:

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

Guest iDimaBRBanido
  Em 13/06/2017 em 14:37, zAth disse:

Se não achar mais bugs, dê melhor resposta ao leo né :kk:

Queria saber como eu boto um item com lore
 
Meu codigo ta assim:
 
ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
ItemStack mob_1 = ItemsManager.putName(Material.MONSTER_EGG, "§eMobSpawner de Zumbi", (short) 54);
inv.setItem(1, mob_1);
 
Mas não tem como eu botar (short) 54 se tiver lore :/
 
@resport 
 
Eu ja ia dar melhor resposta no dele Ahuauhahu
Link para o comentário
Compartilhar em outros sites

  Em 13/06/2017 em 14:39, iDimaBRBanido disse:

 

Queria saber como eu boto um item com lore
 
Meu codigo ta assim:
 
ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
ItemStack mob_1 = ItemsManager.putName(Material.MONSTER_EGG, "§eMobSpawner de Zumbi", (short) 54);
inv.setItem(1, mob_1);
 
Mas não tem como eu botar (short) 54 se tiver lore :/
 
@resport 
 
Eu ja ia dar melhor resposta no dele Ahuauhahu

 

não tem porque o seu ItemsManager não tem esse método.. cria ele mesmo

ItemStack mob_1 = new ItemStack(Material.MONSTER_EGG, 1, (short) 54);
ItemMeta mob_1Meta = mob_1.getItemMeta();

ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54

mob_1Meta.setLore(lore1);
mob_1Meta.setDisplayName("§eMobSpawner de Zumbi");

mob_1.setItemMeta(mob_1Meta);

inv.setItem(1, mob_1);

ou então cria o método no ItemsManager


public static ItemStack putNameAndLore(Material material, String name, short data, List<String lore){
    ItemStack itemStack = new ItemStack(material, 1, data);
    ItemMeta itemMeta = itemStack.getItemMeta();

    itemMeta.setLore(lore);
    itemMeta.setDisplayName(name);

    itemStack.setItemMeta(itemMeta);

    return itemStack;
}

e depois só usar

ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
ItemStack mob_1 = ItemsManager.putNameAndLore(Material.MONSTER_EGG, "§eMobSpawner de Zumbi", (short) 54, lore1);
inv.setItem(1, mob_1);
Editado por zAth
Link para o comentário
Compartilhar em outros sites

Guest iDimaBRBanido
  Em 13/06/2017 em 14:43, zAth disse:

 

não tem porque o seu ItemsManager não tem esse método.. cria ele mesmo

ItemStack mob_1 = new ItemStack(Material.MONSTER_EGG, 1, (short) 54);
ItemMeta mob_1Meta = mob_1.getItemMeta();

ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54

mob_1Meta.setLore(lore1);
mob_1Meta.setDisplayName("§eMobSpawner de Zumbi");

mob_1.setItemMeta(mob_1Meta);

inv.setItem(1, mob_1);

ou então cria o método no ItemsManager


public static ItemStack putNameAndLore(Material material, String name, short data, List<String lore){
    ItemStack itemStack = new ItemStack(material, 1, data);
    ItemMeta itemMeta = itemStack.getItemMeta();

    itemMeta.setLore(lore);
    itemMeta.setDisplayName(name);

    itemStack.setItemMeta(itemMeta);

    return itemStack;
}

e depois só usar

ArrayList<String> lore1 = new ArrayList<String>();
lore1.add("§a - MobSpawner de Zumbi");
lore1.add("§aPreço: §7$7.000");
lore1.add("§aCaso clique aqui este MobSpawner irá virar de Zumbi!"); // 383:54
ItemStack mob_1 = ItemsManager.putNameAndLore(Material.MONSTER_EGG, "§eMobSpawner de Zumbi", (short) 54, lore1);
inv.setItem(1, mob_1);

Te adoro seu delicia <3 merece todos resolvidos do mundo mas vo da pro leo AHUahuahu

Link para o comentário
Compartilhar em outros sites

  Em 13/06/2017 em 14:52, iDimaBRBanido disse:

Te adoro seu delicia <3 merece todos resolvidos do mundo mas vo da pro leo AHUahuahu

:kk: :kk:

é ele respondeu ao que está no tópico e respondeu primeiro :/

 

ao menos da curtir

Link para o comentário
Compartilhar em outros sites

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