[DEV.Bukkit] InventarioGUI - #4

Bem-vindo!

Ao se registrar conosco, você poderá discutir, compartilhar e enviar mensagens privadas com outros membros da nossa comunidade.

Registrar agora!
  • PROMOÇÃO DE NATAL NO AR

    Novo servidor: CraftLandia Olimpo


Status
Não está aberto para novas respostas.

Paluh

Craftlandiano
VIP
Entrou
Jun 12, 2013
Mensagens
1,786
Pontuação de reação
683
Cubos
0
9iIRJiY.png
Bom,hoje vou ensinar a vocês a como criar um plugin que pode manipular inventários,
Coisas como,
Criar e personalizar um inventario,
Mudar o nome e descrição de itens,
Usar eventos que podem saber de ações no inventário,
Colocar itens no inventário e outras coisas..




Para começarmos,primeiro crie um projeto chamado Tutorial ou como quiser,crie o pacote,e a classe que no caso farei uma chamada "Main" que será a classe principal.
: Base inicial do plugin:
package me.tutorial;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin{

@Override
public void onEnable() {
}

@Override
public void onDisable() {
}
// Vamos criar um comando que irá abrir o inventário!

@Override
public boolean onCommand(CommandSender sender, Command command,

String label, String[] args) {

/*
* O comando só funcionara para jogadores, ou seja,se você tentar usa-lo pelo console ira ocorrer um erro,e para evitar isso
* faremos com que apenas os jogadores possam usar o comando usando o "instanceof".

*/
// Vamos fazer com que somente jogadores possam usar o comando

if(sender instanceof Player){
} else {

// E se não for um jogador que executou o comando, vamos enviar a seguinte.

sender.sendMessage("Voce nao e um jogador!");

}
return false;
}
}​
: A base do plugin já esta pronta,agora vamos ir mais pra frente no comando:
if(sender instanceof Player){
if(label.equalsIgnoreCase("inv")){

Player jogador = (Player) sender;

//Vamos colocar uma permissão

if(jogador.hasPermission("p.inv")){

/*

* A linha abaixo ficará em vermelho, pois ainda não criamos o metodo "abrirInv" que fara com que abra o inventario do jogador.

* Coloque o mouse em cima do erro e clique em "Create method 'abrirInv(Player)'

*/

abrirInv(jogador);

} else {

jogador.sendMessage(ChatColor.RED + "Voce nao tem permissao para este comando!");

}

}

} else {

sender.sendMessage("Voce nao e um jogador!");

}
}
return false;
}
}​
: Feito isso vamos elaborar o metodo para abrir o inventario:
// Deixe em private mesmo, só iremos usar ele nesta classe
private void abrirInv(Player jogador) {

//Vamos chamar a interface Inventory e criar um inventario com a ajuda do Bukkit!

Inventory inv = Bukkit.createInventory(null, 9, "InventarioGUI");

/*

* o 'null' significa que não tem um proprietario o inv.

* o '9' é o numero de slots do inv. Lembrando que esse numero só pode ser multiplos de 9!

* ou seja, pode ser 9, 18, 27, 36, 45, 54, sendo o ultimo numero o limite!

* já o 'InventarioGUI' é o titulo, se você quiser, pode colorir usando o ChatColor

*/



//Vamos agora colocar itens nesse inventário

ItemStack item = new ItemStack(Material.APPLE);

// O ItemStack significa um item no inventário, e como não temos nenhum, usamos o new ItemStack(Material);

// Simplesmente por um item é muito simples, vamos modificar o nome e sua lore usando o ItemMeta

ItemMeta itemMeta = item.getItemMeta();

// ItemMeta são itens que guardam informações

// Mas precisamos pegar essa informação de algum lugar, e pegamos ela do ItemStack usando o item.getItemMeta();

// Agora sim podemos modificar o nome da maçã e suas lores.

itemMeta.setDisplayName(ChatColor.YELLOW + "Maçã do Tuto!");

// Pronto, colocamos um novo nome, vamos por uma lore agora, que é um pouco diferente!

List<String> lore = new ArrayList<String>();

// Importe tanto o list quanto o ArrayList do java.util

// A lore é em formato de lista, com isso não da para simplesmente usar o setLore("A maça é boa");

// Vamos pegar essa lore que é uma lista e adicionar uma frase nela, pois fizemos ela por meio do 'String'

lore.add(ChatColor.GOLD + "A maça é muito boa!");

// Perfeito, agora vamos pegar e adicionar a lore no itemMeta!

itemMeta.setLore(lore);

// Agora sim está completa!

// Modificamos tudo o que queriamos na Meta, mas agora precisamos devolver ela para o item.

item.setItemMeta(itemMeta);

// Agora sim a maçã esta completa!

// Porém, falta um detalhe, precisamos adicionar a maçã no inventário, mas isso é fácil!

inv.setItem(1, item);

// Usando o setItem, podemos determinar o slot que o item deve ficar!

// Vale lembrar que no java, nada começa no 1, e sim do 0.

// No seu teclado, os slots são 1, 2, 3, 4, 5, 6, 7, 8, 9

// Entretanto, caso queria por o item no slot numero 2 do seu teclado, no java esse slot é o 1

// Assim, o primeiro slot é o 0, o segundo é o 1 e assim por diante, até chegar na quantidade de slots definidos

// quando criou o inv.

// Otimo! Está quase tudo pronto! Precisamos agora abrir o inv no jogador alvo. Por isso que la no metodo, entre parenteses

// colocamos Player jogador, é para informar em quem vamos abrir o inv.

jogador.openInventory(inv);

// Agora sim está concluido! Assim que charmarmos o método, o programa irá abrir o inv no player que executou o comando!

}​
: Bom fizemos tudo certo,mas paramos por aqui, o jogador toda vez que abrir o inventário poderá pegar a maçã para ele, e não queremos isso.
Para isso vamos criar uma classe que pode "escutar" os eventos​
package me.Tutorial;
import org.bukkit.Material;

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;
public class TutorialEventos implements Listener{





Main plugin;



// Vou mudar um pouco a maneira de registrar eventos.
public TutorialEventos(Main plugin){

this.plugin = plugin;

}



//Vamos pegar o Evento que lida com o inventario

@EventHandler

public void usarInv(InventoryClickEvent evento){

// Vamos determinar que o jogador é quem clicou no inv.

Player jogador = (Player) evento.getWhoClicked();

// Esse evento não pode ser aplicado em todos os inventários, pode isso vamos especificar!

Inventory inv = evento.getInventory();

// E vamos enviar uma mensagem quando o jogador clicar na maçã, mas primeiro precisamos determinar o item clicado!

ItemStack item = evento.getCurrentItem();



//Pronto, podemos começar informando o inv que ocorre as ações que queremos!

if(inv.getName().equalsIgnoreCase("InventarioGUI")){

// O inv contem mais do que o item que colocamos lá, ele tem ar e nada, e isso importa muito!

// Vamos definir que ser o item for ar, null ou não tiver uma meta, o evento retorna nada.

if(item.getType() == null || item.getType() == Material.AIR || !item.hasItemMeta())

return;

// As || significa 'ou', ou isso, ou aquilo. Procure mais no Google para entender melhor!

// ! significa 'se não', ali, se o item não tiver uma meta, o evento retorna nada.



// Agora, vamos definir os itens a serem clicados para ocorrer certas ações!

// Para isso, vamos usar uma ferramenta nova:

switch (item.getType()) {

// O switch analisa uma chave e seus casos. A chave, nesse exemplo é o material do item. O caso é que tipo de Material

case APPLE:

// case APPLE: ou seja, caso seja um Maça, realiza as ações depois dos :

jogador.sendMessage("Você clicou na maçã!");

jogador.closeInventory();

// é importante por o break, porque ele impede que o restante dos casos sejam lidos.

// Se o primeiro caso for verdadeiro, o break 'fala' para o programa que não precisa ler os outros casos.

break;

// O default é para todos os outros casos não determinados. Vamos simplesmente cancelar o evento quando não se

// encaixa em nenhum outro caso!

default:

evento.setCancelled(true);

break;

}

}

}
}​
: O plugin já esta quase pronto,apenas iremos registrar os eventos na classe principal (Main) e criar a plugin.yml.
@Override
public void onEnable() {

PluginManager manager = this.getServer().getPluginManager();

manager.registerEvents(new TutorialEventos(this), this);

}​
: Veja como ficou a classe Main:
}package me.Tutorial;
import java.util.ArrayList;

import java.util.List;
import org.bukkit.Bukkit;

import org.bukkit.ChatColor;

import org.bukkit.Material;

import org.bukkit.command.Command;

import org.bukkit.command.CommandSender;

import org.bukkit.entity.Player;

import org.bukkit.inventory.Inventory;

import org.bukkit.inventory.ItemStack;

import org.bukkit.inventory.meta.ItemMeta;

import org.bukkit.plugin.PluginManager;

import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin{



@Override

public void onEnable() {

PluginManager manager = this.getServer().getPluginManager();

manager.registerEvents(new TutorialEventos(this), this);

}



@Override

public void onDisable() {



}



@Override

public boolean onCommand(CommandSender sender, Command command,

String label, String[] args) {



if(sender instanceof Player){

if(label.equalsIgnoreCase("inv")){

Player jogador = (Player) sender;

if(jogador.hasPermission("p.inv")){

abrirInv(jogador);

} else {

jogador.sendMessage(ChatColor.RED + "Voce nao tem permissao para este comando!");

}

}

} else {

sender.sendMessage("Voce nao e um jogador!");

}

return false;

}
private void abrirInv(Player jogador) {

Inventory inv = Bukkit.createInventory(null, 9, "InventarioGUI");



ItemStack item = new ItemStack(Material.APPLE);

ItemMeta itemMeta = item.getItemMeta();

itemMeta.setDisplayName(ChatColor.YELLOW + "Maçã do Tuto!");

List<String> lore = new ArrayList<String>();

lore.add(ChatColor.GOLD + "A maça é muito boa!");

itemMeta.setLore(lore);

item.setItemMeta(itemMeta);

inv.setItem(1, item);

jogador.openInventory(inv);

}
}​
: Como ficou a classe que "escuta" os eventos:
package me.Tutorial;
import org.bukkit.Material;

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;
public class TutorialEventos implements Listener{





Main plugin;



public TutorialEventos(Main plugin){

this.plugin = plugin;

}



@EventHandler

public void usarInv(InventoryClickEvent evento){

Player jogador = (Player) evento.getWhoClicked();

Inventory inv = evento.getInventory();

ItemStack item = evento.getCurrentItem();



if(inv.getName().equalsIgnoreCase("InventarioGUI")){

if(item.getType() == null || item.getType() == Material.AIR || !item.hasItemMeta())

return;
switch (item.getType()) {

case APPLE:

jogador.sendMessage("Você clicou na maçã!");

jogador.closeInventory();

break;

default:

evento.setCancelled(true);

break;

}

}

}
}​
: Agora vejamos como ele ficou dentro do servidor:
lj6gVsv.png



 
  • Curtir
Reações: C35
LucasExtremeX7 disse:
Parabéns pela iniciativa. É macro, ou java?
Tbm to com essa duvida... mas pelo arroba deve ser macro

Enviado de meu ASUS_T00J usando Tapatalk
 
Boa,vai ajudar muitas pessoas q queren ter servidores like

Enviado de meu GT-S7390L usando Tapatalk
 
Não é JAVA e muito menos Macro
É BukkitAPI ao certo, mas pode entrar um pouco de JAVA também...
 
Parabéns ótimo tutorial


Enviado do meu iPhone usando Tapatalk
 
Status
Não está aberto para novas respostas.

Usuários que estão visualizando este tópico

Voltar
Topo