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

Scoreboard Teams dla FakePlayer'ów?


IdkMan

Rekomendowane odpowiedzi

Opublikowano

Witam, od dłuższego czasu męczę się z własną tab-listą na serwer. Chciałbym mieć następujący wpis na tab-liście:

​​[nick_gracza] [nazwa_jego_królestwa] [jego_ranga]
     ^                   ^                ^
  prefix               nick            suffix

Siedząc godzinami nad przeróżnymi forami internetowymi, dowiedziałem się następujących rzeczy:

  • Aby zrobić taki długi wpis trzeba użyć prefixów i sufixów teamów ze scoreboarda
  • prefix / sufix, jak i sam nick gracza nie może przekraczać 16 znaków
  • Musze zmienić nazwę gracza na nazwę królestwa, jako prefix dać nick a jako suffix jego rangę
  • bez objective score żaden suffix prefix się nie wyświetli

Problemy są takie:

  • Po zmianie nicku gracza za pomocą setPlayerListName() nie można przypisać graczowi teamu.
  • Próbowałem zmieniać nick za pomocą pakietów: usuwając wpis o graczy z listy i dodając wpis z fake graczem o takim samym uuid co gracz, jednak wtedy także nie można dodać gracza do scoreboard teamu
  • Ogólnie to nie można dodawać playera do teamu, który nie istnieje (nie ma połączenia, a to wynika z kodu bukkita:
     if (playerConnection == null) {throw new IllegalStateException("Cannot set scoreboard yet");
  • Taki sposób bez zmiany nicku gracza w sumie chyba działa, ale nie sprawdzałem dokładnie: ​​

    [nazwa_jego_królestwa] [nick_gracza] [jego_ranga]
            ^                   ^              ^
          prefix               nick         suffix

Mój kod na dodanie wpisu do tablisty danego gracza i dodanie go do teamu wygląda tak:

@SuppressWarnings("deprecation")
	private void createPlayer(String name, String uuid){
		if(name.length()<=16){
			EntityPlayer ep = new EntityPlayer(MinecraftServer.getServer(), MinecraftServer.getServer().getWorldServer(0),  new GameProfile(UUID.fromString(uuid), "§7[Królestwo]   "), new PlayerInteractManager(MinecraftServer.getServer().getWorldServer(0)));
			PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, ep);
			this.sendPacket(packet);
			
			Player p = ep.getBukkitEntity(); //Bukkit.getOfflinePlayer(UUID.fromString(uuid)); <-- to tez nie działa
			p.setScoreboard(board);
			OfflinePlayer q = (OfflinePlayer) p;
			Team team;
			if(board.getTeam(name+"_team")==null){
				team = board.registerNewTeam(name+"_team");
				team.setPrefix(" "+name); team.setSuffix("§7 [Ranga]      ");
			}else{
				team = board.getTeam(name+"_team");
			}
			team.addPlayer(q);
			
			Objective objective;
			if(board.getObjective("lives")==null){
				objective = board.registerNewObjective("lives", "dummy");
				objective.setDisplaySlot(DisplaySlot.PLAYER_LIST);
			}
			Score score = board.getObjective("lives").getScore(q);
			score.setScore(5); //Example
		}
	}

Po krótce wygląda on tak:

  • tworzę fake playera,
  • tworzę pakiet,
  • wysyłam pakiet metodą do wysyłania,
  • tworze bukkit playera z mojego entity playera na 2 sposoby, oba nie działają 
  • scoreboard mam już zrobiony wyżej, dodaję gracza do tego scoreboardu (w tej linicje następuje właśnie błąd "Cannot set scoreboard yet")
  • tworzę team
  • tworzę objetive
  • dodaję score graczowi

Nie jest to kod kopiowany z neta, sam go pisałem, kod jest prototypem testowym, nie należy się nim sugerować, jako że jest to gotowy produkt.

Problem leży w tym, że nie mogę przypisać fake graczowi ani graczowi ze zmianionym nickiem za pomocą setPlayerListName() scoreboard teamów. Innym rozwiązaniem tego problemu byłoby zmienienie nicku gracza na tab-liście w jakiś inny czarodziejski sposób.

Z góry dzięki za pomoc, jestem nowy na MPC, wiec jak coś nie tak napisałem, to mówcie.

Pozdrawiam IdkMan.

Już jest! - iberioncraft.pl

banerMPC.png

 

Opublikowano

Jakoś dziwnie mieszasz. Ty chcesz mieć faktyczne nazwy graczy czy całkowicie customowy tab? Jeśli to pierwsze to bez NMS, po prostu ustawiasz prefix, pakiety nie są potrzebne.

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/util/TagUtils.java#L85

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

 

Jakoś dziwnie mieszasz. Ty chcesz mieć faktyczne nazwy graczy czy całkowicie customowy tab? Jeśli to pierwsze to bez NMS, po prostu ustawiasz prefix, pakiety nie są potrzebne.

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/util/TagUtils.java#L85

Chodzi mi to, żeby zrobić zupełnie customowy tab z pomocą NMS, tylko, że do fake playera, którego dałem na listę za pomocą 

EntityPlayer ep = new EntityPlayer(MinecraftServer.getServer(), MinecraftServer.getServer().getWorldServer(0),  new GameProfile(UUID.fromString(uuid), "§7[Królestwo]   "), new PlayerInteractManager(MinecraftServer.getServer().getWorldServer(0)));
			PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, ep);
			this.sendPacket(packet);

nie można dodawać prefixów i suffixów teamów, ponieważ tego fake playera, w ogólnie nie można dodać do teamu!

Więc, żeby było jasno:

-usuwam wpis z listy o danym graczu

-dodaję fake playera o innej nazwie, ale takim samym uuid na listę za pomocą kodu powyżej

-nie mogę dodać tego fake playera do teamu!

Czyli problem jest prosty: Jak zmienić nick gracza na liście i jednocześnie móc dodać go do teamu?

To dla mnie naprawdę ważne, dzięki MarcinWieczorek za poświęcony czas.

Już jest! - iberioncraft.pl

banerMPC.png

 

Opublikowano

Update: Próbowałem zmienić nick gracza w GameProfile, potem dodać go do teamu i do tej pory kod działa bez zarzutu, mam taki wpis na tab-liście jaki chcialem, jednak serwer ma inny nick danego gracza po zmianie, więc po nadaniu teamu próbuję z powrotem zmienić nick w GameProfile na stary, jednak wtedy wywala gracza z teamu. Jedyną opcją jaką widzę na zrobienie wpisu typu "[nick] [królestwo] [ranga]" jest stworzenie npc, który będzie stał sobie gdzieś pod spawnem i robił za bezużyteczny wpis na liście dla danego gracza. Jednak rezygnuję z tego pomysłu, bo te npcty pewnie będą nie potrzebnie obciążały serwer. Zostanę przy zwykłym wpisie, który bardzo łatwo zrobić bez NMS, czyli "[ranga] [nick] [królestwo], #MarcinWieczorek, jeśli wszystko wydaje się dla Ciebie zawiłe, to spójrz na kolejność tych tagów. Dla 1 pomysłu musiałem zmieniać nazwę gracza na nazwę królestwa i dodać mu team. Dla drugiego sposobu po prostu dodaję team, nic więcej ;)

W każdym razie dzięki za pomoc i udostępniony kod.

Już jest! - iberioncraft.pl

banerMPC.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...