Ir para conteúdo
  • 0

[Resolvido] [Dúvida] ArrayList resetando do nada...


TequilAxBr

Pergunta

Olá a todos, bom estou criando um plugin, porem estou tendo um problema, minha ArrayList do tipo String onde armazeno Nicks de jogadores, ela está resetando do nada, isso já aconteceu comigo uma vez e tive que abandonar o projeto e não quero abandonar esse...

 

Estou criando a ArrayList desse jeito:

ArrayList<String> participantes = new ArrayList<>(); //Crio a Array

Estou adicionando assim:
participantes.add(p.getName());


 

Não é porquê não estou adicionando os jogadores, sim estou, já imprimi o valor da ArrayList no console e me mostra os nicks corretamente, estou sem saber oque fazer, não estou dando clear na ArrayList, já retirei TODOS SEM EXCEÇÕES  participantes.clear()...

Alguém?

 

Classe onde estou "gerenciando" minha ArrayList

package tequilaxbr.bkiller;

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

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;

import tequilaxbr.bkiller.Utils.Serialize;

public class Maneger{

	public YamlConfiguration d = Main.data.getConfig();
	public FileConfiguration c = Main.getMe().getConfig();
	
	//Arrays e HashMaps
	
	public ArrayList<String> participantes = new ArrayList<>();
	public HashMap<String, Integer> kills = new HashMap<>();
	
	//
	
	public void sendMessage(String path, Player p){
		p.sendMessage(c.getString("Mensagens." + path).replaceAll("&", "§"));
	}
	
	public void setLocation(String name, Player p){
		String local = Serialize.serializeLocation(p.getLocation(), true);
		d.set("Locais." + name, local);
		Main.getMe().data.saveConfig();
		sendMessage("Sets." + name, p);
	}
	
	public void teleporteLocation(String name, Player p){
		Location local = Serialize.deserializeLocation(d.getString("Locais." + name), true);
		p.teleport(local);
		sendMessage("Teleportes." + name, p);
	}
	
	public void teleportAllPlayers(String name){
    	for(String allP : participantes){
    		Player allPp = Bukkit.getServer().getPlayer(allP);
    		teleporteLocation(name, allPp);
    	}
	}
	
	public void addPlayerKiller(Player p){
		participantes.add(p.getName());
		Bukkit.broadcastMessage("" + participantes);
		kills.put(p.getName(), 0);
		teleporteLocation("Spawn", p);
	}
	
	public void removePlayerKiller(Player p){
		participantes.remove(p.getName());
		kills.remove(p.getName());
		teleporteLocation("Saida", p);
	}
	
	public void messagePlayerRemovido(Player p){
		for(String up : c.getStringList("Mensagens.Player-Removido")){
			for(Player all : Bukkit.getOnlinePlayers()){
				all.sendMessage(up.replaceAll("@participantes", "" + participantes.size()).replaceAll("@p", "" + p.getName()).replaceAll("&", "§"));
			}
		}
	}
	
	public void verifyWinner(Player p){
		if(killer == Status.INICIADO){
			if(participantes.size() == 1){
				for(String up : c.getStringList("Mensagens.Winner")){
					for(Player all : Bukkit.getOnlinePlayers()){
						all.sendMessage(up.replaceAll("@vencedor", "" + participantes.get(0)).replaceAll("&", "§"));
					}
				}
				d.set("Killer", participantes.get(0));
				Main.getMe().saveConfig();
				//fecharKiller();
			}
		}
	}
	
	//Enum
	
	public Status killer = Status.FECHADO;
	
	public void abrirKiller(){
		killer = Status.ANUNCIANDO;
		anuncio(c.getInt("Anuncios.Quantidade"));
	}
	
	public void iniciarKiller(){
		killer = Status.INICIADO;
		
		if(participantes.size() < c.getInt("Config.Min-Players")){
	    	for(String msg : c.getStringList("Mensagens.Faltou-Players")){
	    		for(Player all : Bukkit.getOnlinePlayers()){
	    			all.sendMessage(msg.replaceAll("@participantes", "" + participantes.size()).replaceAll("@min", "" + c.getInt("Config.Min-Players")).replaceAll("&", "§"));
	    		}
	    	}
	    	teleportAllPlayers("Saida");
	    //	fecharKiller();
			return;
		}
		
    	for(String msg : c.getStringList("Anuncios.Iniciar")){
    		for(Player all : Bukkit.getOnlinePlayers()){
    			all.sendMessage(msg.replaceAll("&", "§"));
    		}
    	}
    	
	}
	
	/**public void fecharKiller(){
		killer = Status.FECHADO;
		kills.clear();
		participantes.clear();
		teleportAllPlayers("Saida");
	}*/
	
	//Enum
	
	 public void anuncio(final int quantidade){
	     if(quantidade == 0){
		    	for(String msgPrepare : c.getStringList("Anuncios.Anuncio")){
		    		for(Player all : Bukkit.getOnlinePlayers()){
		    			all.sendMessage(msgPrepare.replaceAll("@tempo", "" + c.getInt("Anuncios.Tempo-Entre") * quantidade).replaceAll("&", "§"));
		    		}
		    	}
	      iniciarKiller();
	     }
	     if(killer != Status.ANUNCIANDO){
	      return;
	     }
	    	for(String msgPrepare : c.getStringList("Anuncios.Anuncio")){
	    		for(Player all : Bukkit.getOnlinePlayers()){
	    			all.sendMessage(msgPrepare.replaceAll("@tempo", "" + c.getInt("Anuncios.Tempo-Entre") * quantidade).replaceAll("&", "§"));
	    		}
	    	}
	     Bukkit.getServer().getScheduler().runTaskLater(Main.getMe(), new Runnable(){
	            public void run(){
	                  if(quantidade == 0){
	          	    	for(String msgPrepare : c.getStringList("Anuncios.Anuncio")){
	        	    		for(Player all : Bukkit.getOnlinePlayers()){
	        	    			all.sendMessage(msgPrepare.replaceAll("@tempo", "" + c.getInt("Anuncios.Tempo-Entre") * quantidade).replaceAll("&", "§"));
	        	    		}
	        	    	}
	                        iniciarKiller();
	                  }
	         	     if(killer != Status.ANUNCIANDO){
	         		      return;
	         		     }
	                  anuncio(quantidade - 1);
	            }
	     }, c.getInt("Anuncios.Tempo-Entre") * 20);
	 }
	 
}

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

9 respostass a esta questão

Posts Recomendados

Sim, cria uma instancia a main depois cria metodo pra retornar a instancia e assim pode usar ela nas outra classe.

 Nahhh cria um singleton msm

private static Manager instance;

public static Manager getInstance(){
 if(instance == null){
    instance = new Manager();
  }
   return instance;
}

private Manager(){
 //Construtor e pa

}

 ai vc só faz:

Manager.getInstance().foo();//exemplo pra usar
Link para o comentário
Compartilhar em outros sites

Em que contexto você esta usando a arraylist, você checou se ela por acaso não esta sendo criada novamente? Poste a classe em que você utiliza ela

Pronto, postei a classe.

Poste seu código todo, ué. Assim n da pra ver o erro...

Pronto

Link para o comentário
Compartilhar em outros sites

Bem, estou dando uma olhada no código, você certificou-se de que você não esta criando novas instancias da classe (assim resetando a arraylist)

 

 Vou olhar o código e se eu achar algo eu edito

Link para o comentário
Compartilhar em outros sites

Bem, estou dando uma olhada no código, você certificou-se de que você não esta criando novas instancias da classe (assim resetando a arraylist)

 

 Vou olhar o código e se eu achar algo eu edito

Se for realmente por causa das instancias, sim estou, vou fazer o teste de outro jeito então,

Link para o comentário
Compartilhar em outros sites

Se for realmente por causa das instancias, sim estou, vou fazer o teste de outro jeito então,

Eu recomendaria você usar uma singleton pra essa classe, não vejo necessidade de ter mais de uma instancia nela..

Link para o comentário
Compartilhar em outros sites

Se for realmente por causa das instancias, sim estou, vou fazer o teste de outro jeito então,

 

Eu recomendaria você usar uma singleton pra essa classe, não vejo necessidade de ter mais de uma instancia nela..

 

Sim, cria uma instancia a main depois cria metodo pra retornar a instancia e assim pode usar ela nas outra classe.

Link para o comentário
Compartilhar em outros sites

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