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

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;
 
 

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

 
 
 

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

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

 

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.

 

 

 

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

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