Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Plugin] Pętla przechodząca przez ArrayList'e


kubaw208

Rekomendowane odpowiedzi

Opublikowano

Borykam się teraz ze swoją ArrayListą - jak z poprzedniego tematu:

Kontynuuję pytania z innej kategorii, a tamten temat i tak całkowicie zasnął więc postanowiłem tylko dopowiedzieć że jest to w pewnym rodzaju kontynuacja tamtego tematu.

 

Dlaczego kontynuuacja?

Mam problem, ponieważ mając już scoreboard który nie miga, aktualnie używając pętli TYLKO jedna osoba dostaje aktualizowany scoreboard - innym osobą scoreboard stoi w miejscu, i nie jest aktualizowany.

Kod który używam aby przejść przez Arraylistę:
 

Spoiler

Moja ArrayList'a:


public ArrayList<UUID> playersInArena = new ArrayList<UUID>();

Pętla:

Spoiler


for(UUID uuid : plugin.playersInArena)
{
	Player playerUUID = Bukkit.getPlayer(uuid);
	PlayerScoreboard.updateScoreboard(playerUUID);
}

 

 

Nie wiem czy to ma znaczenie, ale do testowania tego używam dwóch graczy - czy jest to za mała ilość graczy żeby pętla była w stanie normalnie przejść przez listę? Osobiście nie sądzę, ale wolałem to dodać 😕 

Opublikowano

Może tylko ten jeden gracz jest w liście playersInArena? Zrób debuga. 

 

for(UUID uuid : plugin.playersInArena)
{
	Player playerUUID = Bukkit.getPlayer(uuid);
	PlayerScoreboard.updateScoreboard(playerUUID);
}

Dlaczego nie użyjesz zmiennej uuid z pętli, tylko robisz dodatkową playerUUID?

sygn.png

Opublikowano

@Venom! tylko, że on nie używa dwóch takich samych zmiennych tylko jedną od trzymania uuid a drugą od obiektu gracza.

 

@topic

Zacznijmy od tego co znajduję się w tej liście plugin.playersInArena?

Opublikowano
17 godzin temu, Dejmi1337 napisał:

@Venom! tylko, że on nie używa dwóch takich samych zmiennych tylko jedną od trzymania uuid a drugą od obiektu gracza.

 

@topic

Zacznijmy od tego co znajduję się w tej liście plugin.playersInArena?

plugin.playerInArena to Arraylist'a w klasie głównej przechowywująca graczy na arenie (po przez ich UUID). Gdy ktoś wejdzie na arenę po przez komendę, dołącza automatycznie na taką listę. Jednak wydaję mi się że wszystko raczej mam dobrze, ponieważ na przykład używając takiej pętli i teleportując mojego gracza "playerUUID" normalnie teleportuje każdego. Tylko w tym scoreboardzie coś świruje i nie aktualizuje każdemu tablicy.

 

EDIT:

Temat dotyka bezpośrednio scoreboard'a też, więc o  to kod który używam aby ustawić oraz update'ować graczowi scoreboard:
 

Spoiler

	static Team role;
	static Team innocentsLeft;
	static Team timeLeft;
	//TODO detective: alive/not
	//TODO score (money)
	
	public static void setScoreboard(Player p)
	{
		Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
        Objective obj = board.registerNewObjective("ServerName", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("testObjectiveName");
        
        timeLeft = board.registerNewTeam("time");
        role = board.registerNewTeam("role");
        innocentsLeft = board.registerNewTeam("innocenstLeft");
        
        role.addEntry(ChatColor.GREEN+"");
        role.setPrefix("Rola: "+getRole(p));
        
        innocentsLeft.addEntry(ChatColor.GOLD+"");
        innocentsLeft.setPrefix("Żywi: "+ChatColor.GREEN+alivePlayersScore);
        
        timeLeft.addEntry(ChatColor.RED+"");
        timeLeft.setPrefix("Czas: "+ChatColor.GREEN+plugin.gameManager.minutes+":"+plugin.gameManager.seconds);
        
        obj.getScore(ChatColor.RED+"").setScore(4);
        Score score1 = obj.getScore(" ");
        score1.setScore(3);
        obj.getScore(ChatColor.GREEN+"").setScore(2);
        Score score2 = obj.getScore(" ");
        score2.setScore(1);
        obj.getScore(ChatColor.GOLD+"").setScore(0);
        
        p.setScoreboard(board);
 
	}
	
	public static void updateScoreboard(Player p)
	{
		Scoreboard board = p.getScoreboard();
		board.getTeam("time").setPrefix(ChatColor.GREEN+"Czas: "+ChatColor.GOLD+plugin.gameManager.minutes+":"+plugin.gameManager.seconds);
		board.getTeam("space").setPrefix(" ");
		board.getTeam("role").setPrefix(ChatColor.GREEN+"Rola: "+getRole(p));
		board.getTeam("space").setPrefix(" ");
		board.getTeam("innocenstLeft").setPrefix("Żywi: "+ChatColor.GREEN+alivePlayersScore);
	}

 

Mam nadzieję że ktoś wie dlaczego nie aktualizuje mi się ten scoreboard dla każdego, ja nie mam pojęcia 😕 Przypominam że używam metody updateScoreboard(p) w środku pętli, więc teoretycznie powinno dla każdego po kolei zaktualizować to... 😕 

Opublikowano
Dnia 22.10.2020 o 23:17, Dejmi1337 napisał:

@Venom! tylko, że on nie używa dwóch takich samych zmiennych tylko jedną od trzymania uuid a drugą od obiektu gracza.

 

@topic

Zacznijmy od tego co znajduję się w tej liście plugin.playersInArena?

No tak, źle zobaczyłem.

 

Dnia 23.10.2020 o 09:03, kubaw208 napisał:

plugin.playerInArena to Arraylist'a w klasie głównej przechowywująca graczy na arenie (po przez ich UUID). Gdy ktoś wejdzie na arenę po przez komendę, dołącza automatycznie na taką listę. Jednak wydaję mi się że wszystko raczej mam dobrze, ponieważ na przykład używając takiej pętli i teleportując mojego gracza "playerUUID" normalnie teleportuje każdego. Tylko w tym scoreboardzie coś świruje i nie aktualizuje każdemu tablicy.

 

EDIT:

Temat dotyka bezpośrednio scoreboard'a też, więc o  to kod który używam aby ustawić oraz update'ować graczowi scoreboard:
 

  Ukryj treść


	static Team role;
	static Team innocentsLeft;
	static Team timeLeft;
	//TODO detective: alive/not
	//TODO score (money)
	
	public static void setScoreboard(Player p)
	{
		Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
        Objective obj = board.registerNewObjective("ServerName", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("testObjectiveName");
        
        timeLeft = board.registerNewTeam("time");
        role = board.registerNewTeam("role");
        innocentsLeft = board.registerNewTeam("innocenstLeft");
        
        role.addEntry(ChatColor.GREEN+"");
        role.setPrefix("Rola: "+getRole(p));
        
        innocentsLeft.addEntry(ChatColor.GOLD+"");
        innocentsLeft.setPrefix("Żywi: "+ChatColor.GREEN+alivePlayersScore);
        
        timeLeft.addEntry(ChatColor.RED+"");
        timeLeft.setPrefix("Czas: "+ChatColor.GREEN+plugin.gameManager.minutes+":"+plugin.gameManager.seconds);
        
        obj.getScore(ChatColor.RED+"").setScore(4);
        Score score1 = obj.getScore(" ");
        score1.setScore(3);
        obj.getScore(ChatColor.GREEN+"").setScore(2);
        Score score2 = obj.getScore(" ");
        score2.setScore(1);
        obj.getScore(ChatColor.GOLD+"").setScore(0);
        
        p.setScoreboard(board);
 
	}
	
	public static void updateScoreboard(Player p)
	{
		Scoreboard board = p.getScoreboard();
		board.getTeam("time").setPrefix(ChatColor.GREEN+"Czas: "+ChatColor.GOLD+plugin.gameManager.minutes+":"+plugin.gameManager.seconds);
		board.getTeam("space").setPrefix(" ");
		board.getTeam("role").setPrefix(ChatColor.GREEN+"Rola: "+getRole(p));
		board.getTeam("space").setPrefix(" ");
		board.getTeam("innocenstLeft").setPrefix("Żywi: "+ChatColor.GREEN+alivePlayersScore);
	}

 

Mam nadzieję że ktoś wie dlaczego nie aktualizuje mi się ten scoreboard dla każdego, ja nie mam pojęcia 😕 Przypominam że używam metody updateScoreboard(p) w środku pętli, więc teoretycznie powinno dla każdego po kolei zaktualizować to... 😕 

Czy mógłbyś podać cały kod, którego tyczy się temat, a nie fragmenty wyrwane z kontekstu? Pokaż tą komendę o której wspominasz, gdzie dodajesz do listy UUID graczy i resztę powiązanego z tym kodu, a nie tylko wybrane przez Ciebie pojedyncze linijki kodu.

sygn.png

Opublikowano
8 godzin temu, Venom! napisał:

No tak, źle zobaczyłem.

 

Czy mógłbyś podać cały kod, którego tyczy się temat, a nie fragmenty wyrwane z kontekstu? Pokaż tą komendę o której wspominasz, gdzie dodajesz do listy UUID graczy i resztę powiązanego z tym kodu, a nie tylko wybrane przez Ciebie pojedyncze linijki kodu.

Jakiś czas temu rozwiązałem swój problem, a sam problem nie był z listą ani z tym co w niej robię a z scoreboard'em tak jak już mówiłem - chodziło o to że nie tworzyłem scoreboard'ów osobnych dla każdego gracza przez co kod się plątał i tylko jednej osobie aktualizowało go. Więc kod podawany przeze mnie nie był wyrwany z kontekstu - po prostu nie za bardzo zrozumiałeś na czym polega błąd - pewnie źle opisałem co zawodzi.

 

Temat do zamknięcia

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...