Seite 20 von 21

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8+

BeitragVerfasst: Di 10. Nov 2015, 17:14
von IcySkill
Hey,

habe da mal wieder ein Problem beim unnicken. Nicken geht einwandfrei, nur das unnicken hat ein kleines Problem verborgen - der Skin und alles wird wieder richtig angezeigt, jedoch kann ich mich nicht bewegen. Hier der Code:

EIDT: GELÖST!

Code: Alles auswählen
  1. public static Map<UUID, GameProfile> nickProfiles = new HashMap<>();
  2.     public static Map<UUID, GameProfile> originalProfiles = new HashMap<>();
  3.     public static Map<UUID, PacketPlayOutPlayerInfo> playerInfo = new HashMap<>();
  4.     public static Map<UUID, String> playerName = new HashMap<>();


Code: Alles auswählen
  1. public static void unnick(final Player player) {
  2.         pool.execute(new Runnable() {
  3.             @Override
  4.             public void run() {
  5.                 try {
  6.                     if(nickProfiles.containsKey(player.getUniqueId())) {
  7.                         EntityPlayer entity = ((CraftPlayer) player).getHandle();
  8.                         GameProfile removeProf = nickProfiles.get(player.getUniqueId());
  9.                         GameProfile prof = originalProfiles.get(player.getUniqueId());
  10.                         nameField.set(prof, player.getName());
  11.                        
  12.                         PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  13.                         PacketPlayOutPlayerInfo removeProfile = setInfo(playerInfo.get(player.getUniqueId()), EnumPlayerInfoAction.REMOVE_PLAYER, playerInfo.get(player.getUniqueId()).new PlayerInfoData(removeProf, -1, null, null));
  14.                        
  15.                         PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  16.                         setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, info.new PlayerInfoData(prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString(player.getName())[0]));
  17.                        
  18.                         PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(((CraftPlayer) player).getHandle());
  19.                        
  20.                         playerUuidField.set(spawn, prof.getId());
  21.                         Collection<? extends Player> players = Bukkit.getOnlinePlayers();
  22.                         synchronized(players) {
  23.                             for(Player p : players) {
  24.                                 PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
  25.                                 connection.sendPacket(despawn);
  26.                                 connection.sendPacket(removeProfile);
  27.                             }
  28.                         }
  29.                         synchronized(this) {
  30.                             wait(50L);
  31.                         }
  32.                         synchronized(players) {
  33.                             for(Player p : players) {
  34.                                 PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
  35.                                 connection.sendPacket(info);
  36.                                 connection.sendPacket(spawn);
  37.                             }
  38.                         }
  39.                         nickProfiles.remove(player.getUniqueId());
  40.                         originalProfiles.remove(player.getUniqueId());
  41.                         playerInfo.remove(player.getUniqueId());
  42.                         playerName.remove(player.getUniqueId());
  43.                     }
  44.                 } catch(Exception ex) {
  45.                     ex.printStackTrace();
  46.                 }
  47.             }
  48.         });
  49.     }


So weit werden alle Packets richtig gesendet meines Erachtens nach.

Vielen Dank im Voraus!

[Update] Spieler Nicken - Name und Skin ändern - 1.8.8

BeitragVerfasst: Do 12. Nov 2015, 18:57
von Jofkos
Geupdatet:
  • Java 8
  • Spigot 1.8.8
  • "kleiner" Logik Fehler: die UUID sollte im GameProfile bzw. Tablist Packet gesetz werden und nicht im Spawn Packet (Respawn, Death, etc)

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Di 24. Nov 2015, 15:36
von Sprax2013
Cooles Tutorial! Aber ist es möglich nochmal die "alte" Version für Java 7 zu bekommen?
Denn der Teil
Code: Alles auswählen
  1.                 Set<PlayerConnection> players = Bukkit.getOnlinePlayers()
  2.                       .stream()
  3.                          .filter(Predicate.isEqual(player).negate())
  4.                          .map(CraftPlayer.class::cast)
  5.                          .map(CraftPlayer::getHandle)
  6.                          .map(p -> p.playerConnection)
  7.                          .collect(Collectors.toSet()
  8.                       );
  9.                 players.forEach(c -> c.sendPacket(despawn));
  10.                 players.forEach(c -> c.sendPacket(removeProfile));

und
Code: Alles auswählen
  1.                 players.forEach(c -> c.sendPacket(info));
  2.                 players.forEach(c -> c.sendPacket(spawn));


Sind ja scheinbar nicht für Java 7 sonder Java 8 gedacht

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Di 24. Nov 2015, 17:45
von Twister_21
Ist es etwa ein Hindernis für dich es in Java 7 umzuschreiben? :D
Das sollte eigentlich schnell gehen.

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Di 24. Nov 2015, 21:22
von Sprax2013
Ist es etwa ein Hindernis für dich es in Java 7 umzuschreiben? :D


Ich würde sagen ja :( Ich habe nur die Java-Grundlagen gelernt. Ich habe vor in Zukunft Java richtig zu lernen aber Aktuell nutze ich es nur für ein paar Spigot Plugins und Zeit habe ich auch nicht

Wenn es also jemand für mich machen würde und die paar Zeilen umschreiben könnte wäre ich sehr Dankbar :mrgreen:

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Mi 25. Nov 2015, 15:01
von IcySkill
"Wer nicht wagt, der nicht gewinnt" ... Du solltest einfach mal googlen was der Code macht und dann überlegen, wie man das in java 7 macht ... ich habe das eben selbst gegoogelt und die Lösungen stehen quasi im Internet wenn man das ein bisschen abändert.

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Mi 25. Nov 2015, 15:10
von Sprax2013
Du solltest einfach mal googlen was der Code macht und dann überlegen, wie man das in java 7 macht


Wie gesagt behersche ich nur die Java Grundlagen. Habe zwar mal gegoogelt aber ich kann den Code nicht "benennen". Somit kommen keine brauchbaren ergebnisse. Weiß jetzt zwar was Set<>, .stream() etc. macht aber umschreiben kann ich es trotzdem nicht

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Mi 25. Nov 2015, 18:27
von Jofkos
Das ist einfach eine For (each) Schleife, die alle Spieler (bis auf den zu nickenden Spieler selber) durchgeht und ihnen das Packet sendet.

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Mi 25. Nov 2015, 19:34
von Sprax2013
Das ist einfach eine For (each) Schleife, die alle Spieler (bis auf den zu nickenden Spieler selber) durchgeht und ihnen das Packet sendet.


Ok gut zu wissen :D Ich hab das jetzt so gelöst:

Code: Alles auswählen
  1. for(Player online : Bukkit.getOnlinePlayers()) {
  2.     if(!(online == player)) {
  3.         sendPacket(online, despawn);
  4.         sendPacket(online, removeProfile);
  5.         synchronized (this) {
  6.             wait(125L);
  7.         }
  8.         sendPacket(online, info);
  9.         sendPacket(online, spawn);
  10.     }
  11. }


Sowiet nichts zu mekern? Es funktioniert zumindest xD
Wie kann ich den Skin auch für den genickten Spieler selbst anzeigen? (Muss kein Code sein)

Re: [Anleitung] Spieler Nicken - Name und Skin ändern - 1.8.

BeitragVerfasst: Do 10. Dez 2015, 14:50
von LetsPeee
Ich mache das ganze inzwischen mit NettyInjections... nun stehe ich aber momentan vor folgendem "Problem" ... Und zwar möchte ich, dass man bei sich selbst (Beispielsweise im Inventar) den Skin des Spielers annimmt, als der man genickt ist... wenn jemand weiß, wie das geht würde ich mich sehr über eine Antwort freuen :)