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

Hier könnt ihr anderen Leuten helfen, indem ihr Anleitungen oder praktische Codesegmente zur Verfügung stellt.

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

Beitragvon IcySkill » Di 10. Nov 2015, 17:14

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!
Mit freundlichen Grüßen

- IcySkill
Benutzeravatar
IcySkill
 
Beiträge: 153
Registriert: Do 12. Feb 2015, 15:23
Wohnort: Baden-Württemberg

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

Beitragvon Jofkos » Do 12. Nov 2015, 18:57

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)
Jofkos

...........

..Bild
Benutzeravatar
Jofkos
 
Beiträge: 1537
Registriert: So 16. Jun 2013, 22:45

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

Beitragvon Sprax2013 » Di 24. Nov 2015, 15:36

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
Benutzeravatar
Sprax2013
 
Beiträge: 4
Registriert: Di 24. Nov 2015, 15:34
Wohnort: 127.0.0.1

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

Beitragvon Twister_21 » Di 24. Nov 2015, 17:45

Ist es etwa ein Hindernis für dich es in Java 7 umzuschreiben? :D
Das sollte eigentlich schnell gehen.
Mit freundlichen Grüßen
Twister21
Benutzeravatar
Twister_21
 
Beiträge: 652
Registriert: Mi 11. Jun 2014, 05:51
Wohnort: Deutschland

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

Beitragvon Sprax2013 » Di 24. Nov 2015, 21:22

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:
Benutzeravatar
Sprax2013
 
Beiträge: 4
Registriert: Di 24. Nov 2015, 15:34
Wohnort: 127.0.0.1

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

Beitragvon IcySkill » Mi 25. Nov 2015, 15:01

"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.
Mit freundlichen Grüßen

- IcySkill
Benutzeravatar
IcySkill
 
Beiträge: 153
Registriert: Do 12. Feb 2015, 15:23
Wohnort: Baden-Württemberg

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

Beitragvon Sprax2013 » Mi 25. Nov 2015, 15:10

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
Benutzeravatar
Sprax2013
 
Beiträge: 4
Registriert: Di 24. Nov 2015, 15:34
Wohnort: 127.0.0.1

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

Beitragvon Jofkos » Mi 25. Nov 2015, 18:27

Das ist einfach eine For (each) Schleife, die alle Spieler (bis auf den zu nickenden Spieler selber) durchgeht und ihnen das Packet sendet.
Jofkos

...........

..Bild
Benutzeravatar
Jofkos
 
Beiträge: 1537
Registriert: So 16. Jun 2013, 22:45

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

Beitragvon Sprax2013 » Mi 25. Nov 2015, 19:34

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)
Benutzeravatar
Sprax2013
 
Beiträge: 4
Registriert: Di 24. Nov 2015, 15:34
Wohnort: 127.0.0.1

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

Beitragvon LetsPeee » Do 10. Dez 2015, 14:50

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 :)
Benutzeravatar
LetsPeee
 
Beiträge: 6
Registriert: Mo 16. Mär 2015, 18:10

VorherigeNächste

Zurück zu Anleitungen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron