[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 Twister_21 » Fr 23. Okt 2015, 23:07

Das wurde jetzt vermutlich zum dritten oder vierten mal gefragt.
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 chaoskiller99 » So 8. Nov 2015, 13:12

geht das auch für BungeeCord
Benutzeravatar
chaoskiller99
 
Beiträge: 26
Registriert: Mo 12. Okt 2015, 20:20

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

Beitragvon IcySkill » So 8. Nov 2015, 14:53

BungeeCord verfügt von sich aus nicht über die packets von Bukkit/Spigot. Aber es gibt da glaube ich eine API, die das kann - muss aber nicht sein.
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 IcySkill » So 8. Nov 2015, 20:00

Hey,

ich versuche jetzt zum 2. Mal diese Klasse zum laufen zu bekommen, jedoch will es einfach nicht. Hier mein Code, welcher bis zur Debug-nachricht "91" ausgeführt wird:

Code: Alles auswählen
  1. package de.icyskill.core.manager;
  2. import com.mojang.authlib.GameProfile;
  3. import de.icyskill.core.misc.GameProfileBuilder;
  4. import de.icyskill.core.misc.UUIDFetcher;
  5. import java.lang.reflect.Field;
  6. import java.lang.reflect.Modifier;
  7. import java.util.Arrays;
  8. import java.util.Collection;
  9. import java.util.concurrent.ExecutorService;
  10. import java.util.concurrent.Executors;
  11. import net.minecraft.server.v1_8_R3.EntityPlayer;
  12. import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy;
  13. import net.minecraft.server.v1_8_R3.PacketPlayOutNamedEntitySpawn;
  14. import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo;
  15. import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
  16. import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.PlayerInfoData;
  17. import net.minecraft.server.v1_8_R3.PlayerConnection;
  18. import org.bukkit.Bukkit;
  19. import org.bukkit.ChatColor;
  20. import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
  21. import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage;
  22. import org.bukkit.entity.Player;
  23. public class NickManager {
  24.     private static ExecutorService pool = Executors.newCachedThreadPool();
  25.     private static Field modifiers = getField(Field.class, "modifiers");
  26.     private static Field playerUuidField = getField(PacketPlayOutNamedEntitySpawn.class, "b");
  27.     private static Field actionField = getField(PacketPlayOutPlayerInfo.class, "a");
  28.     private static Field dataField = getField(PacketPlayOutPlayerInfo.class, "b");
  29.     private static Field nameField = getField(GameProfile.class, "name");
  30.     public static void nick(final Player player, final String name) {
  31.         pool.execute(new Runnable() {
  32.             @Override
  33.             public void run() {
  34.                 try {
  35.                     GameProfile prof = GameProfileBuilder.fetch(UUIDFetcher.getUUID(ChatColor.stripColor(name)));
  36.                     System.out.println("42");
  37.                     nameField.set(prof, name);
  38.                     System.out.println("44");
  39.                     EntityPlayer entity = ((CraftPlayer) player).getHandle();
  40.                     System.out.println("46");
  41.                     PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  42.                     System.out.println("48");
  43.                     PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
  44.                     System.out.println("50");
  45.                     setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, removeProfile.new PlayerInfoData(entity.getProfile(), -1, null, null));
  46.                     System.out.println("52");
  47.                     PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  48.                     System.out.println("54");
  49.                     setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, info.new PlayerInfoData(prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString(name)[0]));
  50.                     System.out.println("56");
  51.                     PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
  52.                     System.out.println("58");
  53.                     playerUuidField.set(spawn, prof.getId());
  54.                     System.out.println("60");
  55.                     Collection<? extends Player> players = Bukkit.getOnlinePlayers();
  56.                     System.out.println("62");
  57.                     synchronized(players) {
  58.                         System.out.println("64");
  59.                         for(Player player : players) {
  60.                             System.out.println("66");
  61.                             if(player == player) {
  62.                                 System.out.println("68");
  63.                                 continue;
  64.                             }
  65.                             System.out.println("70");
  66.                             PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  67.                             System.out.println("73");
  68.                             connection.sendPacket(despawn);
  69.                             System.out.println("75");
  70.                             connection.sendPacket(removeProfile);
  71.                             System.out.println("77");
  72.                         }
  73.                     }
  74.                     synchronized(this) {
  75.                         System.out.println("82");
  76.                         wait(50L);
  77.                         System.out.println("84");
  78.                     }
  79.                     synchronized(players) {
  80.                         System.out.println("87");
  81.                         for(Player player : players) {
  82.                             System.out.println("89");
  83.                             if(player == player) {
  84.                                 System.out.println("91");
  85.                                 continue;
  86.                             }
  87.                             System.out.println("93");
  88.                             PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  89.                             System.out.println("95");
  90.                             connection.sendPacket(info);
  91.                             System.out.println("97");
  92.                             connection.sendPacket(spawn);
  93.                             System.out.println("99");
  94.                         }
  95.                     }
  96.                 } catch (Exception e) {
  97.                     e.printStackTrace();
  98.                 }
  99.             }
  100.         });
  101.     }
  102.     private static PacketPlayOutPlayerInfo setInfo(PacketPlayOutPlayerInfo packet, EnumPlayerInfoAction action, PlayerInfoData... data) {
  103.         try {
  104.             actionField.set(packet, action);
  105.             dataField.set(packet, Arrays.asList(data));
  106.         } catch(Exception e) {
  107.             e.printStackTrace();
  108.         }
  109.         return packet;
  110.     }
  111.     private static Field getField(Class<?> clazz, String name) {
  112.         try {
  113.             Field field = clazz.getDeclaredField(name);
  114.             field.setAccessible(true);
  115.             if(Modifier.isFinal(field.getModifiers())) {
  116.                 modifiers.set(field, field.getModifiers() & ~Modifier.FINAL);
  117.             }
  118.             return field;
  119.         } catch(Exception e) {
  120.             e.printStackTrace();
  121.         }
  122.         return null;
  123.     }
  124. }


Ich hoffe, jemand kann mir helfen bzw. sagen, was ich denn falsch mache.

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

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

Beitragvon PostCrafter » So 8. Nov 2015, 22:25

Weißt du überhaupt was du da machst?!

Code: Alles auswählen
  1.                             if(player == player) {
  2.                                 System.out.println("91");
  3.                                 continue;
  4.                             }


Deine Abfrage ergibt immer true, wenn player nicht player wäre, ist irgendetwas richtig schief gelaufen.

Danach verwendest du continue, was diesen Durchlauf der for-Schleife abbricht und in den nächsten Eintrag weiter springt - der folgende Code der Schleife wird also nie ausgeführt.
TeamSpeak-Server zur freien Nutzung: postcrafter.de
Benutzeravatar
PostCrafter
Administrator
 
Beiträge: 1443
Registriert: Do 6. Jun 2013, 19:16
Wohnort: Ebersberg

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

Beitragvon IcySkill » Mo 9. Nov 2015, 11:23

@Postcrafter
Dieser Code ist 1:1 dieser Code hier aus diesem Thread auf der ersten Seite. Diese Abfrage dient dazu, das nur die anderen Spieler den Spieler als genickt sehen und der Spieler sich selbst als "sich selbst". Das heißt wenn kein anderer Spieler online ist, dann hört der Code dort auf, aber zu meinem Testzeitpunkt war ein zweiter Spieler online, also müsste die Abfrage bei dem Spieler, der genickt werden soll true ergeben und diesen Spieler in der Abfrage überspringen und ersten mit dem nächsten Spieler der online ist weiter machen.
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 Ch4t4r » Mo 9. Nov 2015, 11:33

Nein. Dort steht if(player == p), es werden also zwei unterschiedliche Objekte verglichen. Du machst if (player == player) , vergleichst das Objekt also mit sich selbst was immer true ist. Die schleife läuft also nie durch, wenn es wirklich so da steht.
Benutzeravatar
Ch4t4r
 
Beiträge: 455
Registriert: So 7. Jul 2013, 12:44

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

Beitragvon IcySkill » Mo 9. Nov 2015, 14:17

Eine weitere Frage: Zum unnicken benötige ich ja das GameProfile, das zum nicken erstellt wurde. Dieses muss ich zusammen mit der UUID des genickten Spielers abspeichern, aber wie entferne ich den Genickten namen aus der Tablist? Dazu benötige ich ja eine Entity-ID ... bekomme ich die aus dem GameProfile, das mit der UUID abgespeichert wurde?
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 PostCrafter » Mo 9. Nov 2015, 17:12

Im Zweifelsfall sollte diese doch über Bukkit.getPlayer(uuid).getEntityId() zu bekommen sein, wobei uuid die UUID ist, die du sowieso verwendest um ihr ein GameProfile zuzuweisen.
TeamSpeak-Server zur freien Nutzung: postcrafter.de
Benutzeravatar
PostCrafter
Administrator
 
Beiträge: 1443
Registriert: Do 6. Jun 2013, 19:16
Wohnort: Ebersberg

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

Beitragvon IcySkill » Mo 9. Nov 2015, 17:33

Ich habe da ein neues Problem: Und zwar möchte ich den Spielern den Rang des Spielers in der Tabliste anzeigen lassen. Hierzu wollte ich den PlayerListName des Spielers ändern, was aber ja nicht viel bringt, da er genickt ist und der Rang in der Tablist dann entsprechend nur dem Spieler angezeigt wird. Wie kann ich den Tablist-Namen eines genickten Spielers für alle ändern?

EDIT: Gelöst ... habe mir Teams erstellt und dann den Nicknamen anstatt den Spielernamen hinzugefügt.
Mit freundlichen Grüßen

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

VorherigeNächste

Zurück zu Anleitungen

Wer ist online?

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

cron