Ir para conteúdo
  • 0

[DEV] Como continuo ? (GUI)


Solitario

Pergunta

Bom trabalhei em um code que ele cria a gui mostra os kits do essentials permitidos e que não tem perm tudo certinho porem coloquei limite e um item para ir para proxima pagina ... porem como faço para ir a proxima pagina e continuar a lista em vez de repetir ?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

fechei agora a ide ;-; tou saindo, mas é tipo assim

 

cria uma hash<String, Integer> page .. onde voce coloca o nome do jogador e o numero da pagina em que ele está

na hora de abrir o gui, (oncommand, event, etc) voce coloca o nome do jogador na hash com o numero 1(primeira pagina)

 

depois coloca todos os kits em uma ArrayList e faz tipo isso

int kitsPorPagina = 20;

int inicio = (kitsPorPagina * hash.get(p.getName()) - kitsPorPagina;

int fim= (kitsPorPagina * hash.get(p.getName());

for(int i = inicio; i < fim; i++){

    gui.addItem(array.get(i));

}

 

ae quando clicar na pagina seguinte, mete o nome do jogador na hash com o numero atual + 1 hash.put(p.getName(), Integer.valueOf(hash.get(p.getName())+1));

fecha o guie abre ele denovo, ou retira os kits do gui.. depende de como você está usando

e faz o mesmo que falei acima

 

melhor explicação ever

Link para o comentário
Compartilhar em outros sites

Tem várias formas de fazer, uma delas é:

 

Crie uma especie de black list e nela você adiciona os kits que já foram setados no GUI, e quando você estiver adicionando mais kits, verifique se o kit está na lista.

 

Código exemplar:

List<String> blacklist = ...


//para adicionar um kit na blacklist:
blacklist.add("Nome do kit"); 

//pare remover
blacklist.remove("Nome do kit");

//para verificar se o kit esta na black list:

if(!blacklist.contains("Nome do kit")){
  //o kit não está na black list.
}
Link para o comentário
Compartilhar em outros sites

 

Tem várias formas de fazer, uma delas é:

 

Crie uma especie de black list e nela você adiciona os kits que já foram setados no GUI, e quando você estiver adicionando mais kits, verifique se o kit está na lista.

 

Código exemplar:

List<String> blacklist = ...


//para adicionar um kit na blacklist:
blacklist.add("Nome do kit"); 

//pare remover
blacklist.remove("Nome do kit");

//para verificar se o kit esta na black list:

if(!blacklist.contains("Nome do kit")){
  //o kit não está na black list.
}

Mais tipo ... teria que criar uma List pessoal ... e para criar a outra gui teria que ser em outra classe? ou apenas formo um code para ele continuar ao clickar (tipo ele limpa td e coloca todos que não tiverem na blacklist)

Link para o comentário
Compartilhar em outros sites

Mais tipo ... teria que criar uma List pessoal ... e para criar a outra gui teria que ser em outra classe? ou apenas formo um code para ele continuar ao clickar (tipo ele limpa td e coloca todos que não tiverem na blacklist)

Não entendi muito bem, mas daria para tu fazer com hashmap então:

HashMap<Player, List<String>> blacklist = ...
Link para o comentário
Compartilhar em outros sites

 

Não entendi muito bem, mas daria para tu fazer com hashmap então:

HashMap<Player, List<String>> blacklist = ...

creio que teria que usar List + HashMap então por que o nome ta em string .-. ai depois de terminar ele colocar a list na hashmap ... e acho que to fazendo bagunça '-' no meu code ... Me da um exemplo de como poderia usar ?

Usei List<String> no meu pl de mercado e deu super certo.

A list para mercado seria publica ... um de kits tem que gerar para cada jogador saber qual é a blacklist de x jogador, por que se não fica em global e termina que se a pessoa abrir estara na blacklist

Tou pensando +/- um code de continuação assim: (Creio que não tenha como fazer automático '-')

package me.arthurgui.kitmenu.inventarios;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.bukkit.Bukkit;
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;

import com.earth2me.essentials.Kit;
import com.earth2me.essentials.User;

import me.arthurgui.kitmenu.Main;
import me.arthurgui.kitmenu.api.createitem;
public class kitsinv implements Listener{



	public static kitsinv instance = new kitsinv();
	
	public void listingkits(Player p, Inventory myInventory) throws Exception{
		User user = Main.ess.getUser(p.getName());
		int Slot = 10;
		int loop = 0;
		while(!(loop == 54)){
			createitem.createDisplaynolore(Material.getMaterial(101), myInventory, loop, "§7§kiiii");
			loop++;
		}
		for(String kit : Main.KitsExistentes){
			Kit part1 = new Kit(kit, Main.ess);
			if(p.hasPermission("essentials.kits."+ kit)){
				if(part1.getNextUse(user) == 0){
					createitem.createDisplaynolore(Material.STORAGE_MINECART, myInventory, Slot, "§a§l" + kit.toUpperCase() + " - DISPONIVEL");
				}else{
					long tempo = part1.getNextUse(user);
					createitem.createDisplay(Material.MINECART, myInventory, Slot, "§e§l" + kit.toUpperCase() + " - Em espera...", "§eTempo restante:" + tempo);
				}
			}else{
				if(Main.KitsOcultos.contains(kit)){
					if(p.hasPermission("kitmenu.op")){
						createitem.createDisplay(Material.BARRIER, myInventory, Slot, "§c§l" + kit.toUpperCase() + " - Requer subir de rank!", "§cRequer rank " + kit);
					}else{
						Slot--;
					}
				}else{
					createitem.createDisplay(Material.BARRIER, myInventory, Slot, "§c§l" + kit.toUpperCase() + " - Requer subir de rank!", "§cRequer rank " + kit);
				}
			}
			if(Slot == 16){
				Slot = Slot + 2;
			}
			if(Slot == 25){
				Slot = Slot + 2;
			}
			if(Slot == 34){
				Slot = Slot + 2;
			}
			if(Slot == 43){
				createitem.createDisplaynolore(Material.SLIME_BALL, myInventory, 53, "§a§lPROXIMA PAGINA -->");
				break;
			}
			Slot++;
		}
	}
	
	
	@EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
		Player player = (Player) event.getWhoClicked();
		ItemStack clicked = event.getCurrentItem(); 
		Inventory inventory = event.getInventory(); 
		if (clicked !=null && inventory.getTitle().equalsIgnoreCase("§c§lServidor- KITS") && clicked.getType() != Material.AIR) { 
			if(clicked.hasItemMeta()){
				if (clicked.getItemMeta().getDisplayName().equalsIgnoreCase("§a§lPROXIMA PAGINA -->"))  { 
					Inventory myInventory = Bukkit.createInventory(null, 54, "§c§lServidor- KITS");
					try {
						listingkitsnextpage(player,myInventory);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for(String kit : Main.KitsExistentes){
					if (clicked.getItemMeta().getDisplayName().equalsIgnoreCase("§a§l" + kit.toUpperCase() + " - DISPONIVEL"))  { 
						player.closeInventory();
						player.performCommand("kit " + kit);
					}
				}
			}
		event.setCancelled(true);
		}
	}
	


}


Não adicionei a blacklist por que tava dando merda na nextpage

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

Não sei como você está fazendo, mas uma maneira seria:

HashMap<String, List<Inventory>> inventories = new HashMap<>();
// o Map acima irá guardar o nome do jogador e uma lista de inventarios
// essa lista representa as paginas de kits dele

int pagina = 0;

Inventory primeiraPagina = inventories.get(player.getName()).get(pagina);

player.openInventory(primeiraPagina);

// Como fazer para ir pulando ou avançando páginas? Simples:
int paginaAtual = 0; // obtenha isso do titulo do inventario ou de algum outro lugar

// para avançar:
Inventory next = inventories.get(player.getName()).get(paginaAtual + 1);

// para voltar:
Inventory previous = inventories.get(player.getName()).get(paginaAtual - 1);

/* 
Claro, você tem que fazer todas as verificações para não lançar ArrayIndexOutOfBoundsException
Para carregar os inventarios voce obtem todos os kits dele e verifica se o número é maior que o
tamanho do inventario, se sim adiciona mais um inventario na lista que está no Map
*/

Link para o comentário
Compartilhar em outros sites

 

Não sei como você está fazendo, mas uma maneira seria:

HashMap<String, List<Inventory>> inventories = new HashMap<>();
// o Map acima irá guardar o nome do jogador e uma lista de inventarios
// essa lista representa as paginas de kits dele

int pagina = 0;

Inventory primeiraPagina = inventories.get(player.getName()).get(pagina);

player.openInventory(primeiraPagina);

// Como fazer para ir pulando ou avançando páginas? Simples:
int paginaAtual = 0; // obtenha isso do titulo do inventario ou de algum outro lugar

// para avançar:
Inventory next = inventories.get(player.getName()).get(paginaAtual + 1);

// para voltar:
Inventory previous = inventories.get(player.getName()).get(paginaAtual - 1);

/* 
Claro, você tem que fazer todas as verificações para não lançar ArrayIndexOutOfBoundsException
Para carregar os inventarios voce obtem todos os kits dele e verifica se o número é maior que o
tamanho do inventario, se sim adiciona mais um inventario na lista que está no Map
*/

 

fechei agora a ide ;-; tou saindo, mas é tipo assim

 

cria uma hash<String, Integer> page .. onde voce coloca o nome do jogador e o numero da pagina em que ele está

na hora de abrir o gui, (oncommand, event, etc) voce coloca o nome do jogador na hash com o numero 1(primeira pagina)

 

depois coloca todos os kits em uma ArrayList e faz tipo isso

int kitsPorPagina = 20;

int inicio = (kitsPorPagina * hash.get(p.getName()) - kitsPorPagina;

int fim= (kitsPorPagina * hash.get(p.getName());

for(int i = inicio; i < fim; i++){

    gui.addItem(array.get(i));

}

 

ae quando clicar na pagina seguinte, mete o nome do jogador na hash com o numero atual + 1 hash.put(p.getName(), Integer.valueOf(hash.get(p.getName())+1));

fecha o guie abre ele denovo, ou retira os kits do gui.. depende de como você está usando

e faz o mesmo que falei acima

 

melhor explicação ever

e.e tou lascado msm kk, sou novo porem entendi +/- porem acho que ainda não sei aplicar isso deixei meu code acima ^-^ porem bem que gostaria fazer automatico que nem esses codes '-'

 

@Edit: esqueci de perguntar como faço para atualizar as coisas e.e '-' acho que n entendi mt kk

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

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