Skin über Offlinemode (BungeeCord)

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

Skin über Offlinemode (BungeeCord)

Beitragvon TheMeyss » Do 8. Sep 2016, 18:52

Hi Leute!

Das ist mein erster Post hier und ich hoffe ich finde die Lösung...

Ich habe ein Nick-Plugin geschrieben, welches sich u.a. mit dem Internet verbindet und einen neuen Skin downloadet. Das ganze hat auch bisher gut auf jedem Server funktioniert (Online-Mode : true und ohne BungeeCord), aber als ich es dann auf einem BungeeCord-Server probiert hab'(, wo die Server alle im Offline-Modus sein müssen,), hat es nicht funktioniert. Meine Frage wäre: Wie bekomme ich hin, dass sich das Plugin zum Internet verbindet, obwohl er im Offline-Modus ist?

Wäre euch sehr dankbar (wahrscheinlich liegt die Antwort direkt vor meiner Nase, aber egal)
LG TheMeyss
Benutzeravatar
TheMeyss
 
Beiträge: 14
Registriert: Do 8. Sep 2016, 18:35

Re: Skin über Offlinemode (BungeeCord)

Beitragvon lukaszocktttt » Do 8. Sep 2016, 20:12

Ist das Bungeecord auch im Offline Mode oder nicht?
Benutzeravatar
lukaszocktttt
 
Beiträge: 13
Registriert: So 24. Jul 2016, 10:59

Re: Skin über Offlinemode (BungeeCord)

Beitragvon Knadda » Fr 9. Sep 2016, 11:09

Hi

Meine Nick-Klasse funktioniert auch mit Bungee.
Probiere sie mal aus und wenn sie nicht funktionieren sollte, stimmt etwas mit deinen Servereinstellungen nicht ;)
Code: Alles auswählen
  1. public class NickUtils {
  2.    private static final HashMap<UUID, GameProfile> NICKED_PLAYERS = Maps.newHashMap();
  3.    private static final Map<String, GameProfile> BY_NAME = Maps.newHashMap();
  4.    private static final Map<UUID, GameProfile> BY_UUID = Maps.newHashMap();
  5.    private static final List<String> NAMES = Lists.newArrayList();
  6.    
  7.     public static void add(final String name) {
  8.         if(name.length() <= 16) {
  9.            NAMES.add(name);
  10.         }
  11.     }
  12.     public static void remove(final String name) {
  13.         if(NAMES.contains(name)) {
  14.             NAMES.remove(name);
  15.         }
  16.     }
  17.     public static String setNick(final Player player, final String name) {
  18.         final GameProfile profile = getProfile(player);
  19.         if (profile != null) {
  20.            if (NICKED_PLAYERS.containsKey(player.getUniqueId()) == false) {
  21.               NICKED_PLAYERS.put(player.getUniqueId(), profile);
  22.            }
  23.             final GameProfile profile2 = getProfile(name, player.getUniqueId());
  24.             if (profile2 != null) {
  25.                 setProfile(player, profile2);
  26.             }
  27.             player.setDisplayName(name);
  28.             player.setPlayerListName(name);
  29.             for(final Player players : Bukkit.getOnlinePlayers()) {
  30.                if (players.equals(player) == false) {
  31.                   players.hidePlayer(player);
  32.                   players.showPlayer(player);
  33.                }
  34.             }
  35.         }
  36.         return name;
  37.     }
  38.     public static String setRandomNick(final Player player) {
  39.         final String nick = NAMES.get(new Random().nextInt(NAMES.size()));
  40.         return setNick(player, nick);
  41.     }
  42.     private static GameProfile getProfile(final Player player) {
  43.         final String version = Bukkit.getServer().getClass().getPackage().getName().substring(23);
  44.         try {
  45.          return (GameProfile) Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftPlayer").getDeclaredMethod("getProfile").invoke(player);
  46.       } catch (final Exception e) {
  47.          e.printStackTrace();
  48.       }
  49.       return null;
  50.    }
  51.    public static String getRealName(final Player player) {
  52.       if (hasNick(player)) {
  53.          return NICKED_PLAYERS.get(player.getUniqueId()).getName();
  54.       }
  55.       return player.getName();
  56.    }
  57.    public static void removeNick(final Player player) {
  58.         if (hasNick(player)) {
  59.            setProfile(player, NICKED_PLAYERS.get(player.getUniqueId()));
  60.            NICKED_PLAYERS.remove(player.getUniqueId());
  61.             player.setDisplayName(player.getName());
  62.             player.setPlayerListName(player.getName());
  63.             for(final Player players : Bukkit.getOnlinePlayers()) {
  64.                if (players.equals(player) == false) {
  65.                   players.hidePlayer(player);
  66.                   players.showPlayer(player);
  67.                }
  68.             }
  69.         }
  70.        
  71.     }
  72.    private static void setProfile(final Player player, final GameProfile profile) {
  73.         final String version = Bukkit.getServer().getClass().getPackage().getName().substring(23);
  74.         try {
  75.            final Class<?> clazz = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftPlayer");
  76.            final Field field = getField(Class.forName("net.minecraft.server."+version+".EntityPlayer"));
  77.            if (field != null) {
  78.               field.set(clazz.getMethod("getHandle").invoke(player), profile);
  79.            }
  80.       } catch (final Exception e) {
  81.          e.printStackTrace();
  82.       }
  83.    }
  84.    private static Field getField(final Class<?> clazz) {
  85.       Field field = null;
  86.       for (final Field f : clazz.getDeclaredFields()) {
  87.          f.setAccessible(true);
  88.          if (f.getType().equals(GameProfile.class)) {
  89.             field = f;
  90.          }
  91.       }
  92.       if (field == null) {
  93.          for (final Field f : clazz.getFields()) {
  94.             f.setAccessible(true);
  95.             if (f.getType().equals(GameProfile.class)) {
  96.                field = f;
  97.             }
  98.          }
  99.       }
  100.       if (clazz.getSuperclass() != null && field == null) {
  101.          field = getField(clazz.getSuperclass());
  102.       }
  103.       return field;
  104.    }
  105.    public static boolean hasNick(final Player player) {
  106.       return NICKED_PLAYERS.containsKey(player.getUniqueId());
  107.    }
  108.    public static GameProfile getProfile(final String name, final UUID realUniqueId) {
  109.       if (BY_NAME.containsKey(name)) {
  110.          return BY_NAME.get(name);
  111.       }
  112.         try {
  113.             final URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
  114.             final InputStream is = url.openStream();
  115.             final BufferedReader br = new BufferedReader(new InputStreamReader(is));
  116.             String line;
  117.             UUID id = null;
  118.             while((line = br.readLine()) != null) {
  119.                 final JsonObject json = (JsonObject) new JsonParser().parse(line);
  120.                 id = UUIDTypeAdapter.fromString(json.get("id").getAsString());
  121.             }
  122.             if (id != null) {
  123.                return getProfile(id, realUniqueId);
  124.             } else {
  125.                final GameProfile profile = new GameProfile(realUniqueId, name);
  126.                BY_NAME.put(name, profile);
  127.                 return profile;
  128.             }
  129.         } catch (final Exception e) {
  130.          e.printStackTrace();
  131.         }
  132.         return null;
  133.     }
  134.    public static GameProfile getProfile(final UUID uuid, final UUID realUniqueId) {
  135.       if (BY_UUID.containsKey(uuid)) {
  136.          return BY_UUID.get(uuid);
  137.       }
  138.         try {
  139.             final URL url1 = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid.toString().replace("-", "")+"?unsigned=false");
  140.             final InputStream is1 = url1.openStream();
  141.             final BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
  142.             String line1;
  143.             String name;
  144.             while((line1 = br1.readLine()) != null) {
  145.                 final JsonObject json = (JsonObject) new JsonParser().parse(line1);
  146.                 name = json.get("name").getAsString();
  147.                 final JsonArray array = json.getAsJsonArray("properties");
  148.                 final JsonElement element = array.get(0);
  149.                 if (element.isJsonObject()) {
  150.                    final JsonObject object = element.getAsJsonObject();
  151.                    final Property property = new Property(object.get("name").getAsString(), object.get("value").getAsString(), object.get("signature").getAsString());
  152.                    final GameProfile profile = new GameProfile(realUniqueId, name);
  153.                    profile.getProperties().put(property.getName(), property);
  154.                    BY_UUID.put(uuid, profile);
  155.                    BY_NAME.put(name, profile);
  156.                    return profile;
  157.                 }
  158.          }
  159.             br1.close();
  160.             is1.close();
  161.         } catch (final Exception e) {
  162.          e.printStackTrace();
  163.         }
  164.         return null;
  165.     }
  166.    public static List<String> getNames() {
  167.       return NAMES;
  168.    }
  169.    public static void removeAll() {
  170.       for (final Player p : Bukkit.getOnlinePlayers()) {
  171.          removeNick(p);
  172.       }
  173.    }
  174.    public static List<Player> getNickedPlayers() {
  175.       final List<Player> players = Lists.newArrayList();
  176.       for (final Entry<UUID, GameProfile> entry : NICKED_PLAYERS.entrySet()) {
  177.          final Player p = Bukkit.getPlayer(entry.getKey());
  178.          if (p != null && p.isOnline()) {
  179.             players.add(p);
  180.          }
  181.       }
  182.       return players;
  183.    }
  184. }


MfG Knadda
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: Skin über Offlinemode (BungeeCord)

Beitragvon TheMeyss » Fr 9. Sep 2016, 12:35

lukaszocktttt hat geschrieben:Ist das Bungeecord auch im Offline Mode oder nicht?



Ne, BungeeCord ist im OnlineMode... das ist ja das komische.

Meine erste Idee war es, dass sich der BungeeCord und der Spigot Server irgendwie verbinden und somit die Skandalen austauschen... ich weiß aber nicht OB es geht
Benutzeravatar
TheMeyss
 
Beiträge: 14
Registriert: Do 8. Sep 2016, 18:35

Re: Skin über Offlinemode (BungeeCord)

Beitragvon TheMeyss » Fr 9. Sep 2016, 12:36

Knadda hat geschrieben:Hi

Meine Nick-Klasse funktioniert auch mit Bungee.
Probiere sie mal aus und wenn sie nicht funktionieren sollte, stimmt etwas mit deinen Servereinstellungen nicht ;)
Code: Alles auswählen
  1. public class NickUtils {
  2.    private static final HashMap<UUID, GameProfile> NICKED_PLAYERS = Maps.newHashMap();
  3.    private static final Map<String, GameProfile> BY_NAME = Maps.newHashMap();
  4.    private static final Map<UUID, GameProfile> BY_UUID = Maps.newHashMap();
  5.    private static final List<String> NAMES = Lists.newArrayList();
  6.    
  7.     public static void add(final String name) {
  8.         if(name.length() <= 16) {
  9.            NAMES.add(name);
  10.         }
  11.     }
  12.     public static void remove(final String name) {
  13.         if(NAMES.contains(name)) {
  14.             NAMES.remove(name);
  15.         }
  16.     }
  17.     public static String setNick(final Player player, final String name) {
  18.         final GameProfile profile = getProfile(player);
  19.         if (profile != null) {
  20.            if (NICKED_PLAYERS.containsKey(player.getUniqueId()) == false) {
  21.               NICKED_PLAYERS.put(player.getUniqueId(), profile);
  22.            }
  23.             final GameProfile profile2 = getProfile(name, player.getUniqueId());
  24.             if (profile2 != null) {
  25.                 setProfile(player, profile2);
  26.             }
  27.             player.setDisplayName(name);
  28.             player.setPlayerListName(name);
  29.             for(final Player players : Bukkit.getOnlinePlayers()) {
  30.                if (players.equals(player) == false) {
  31.                   players.hidePlayer(player);
  32.                   players.showPlayer(player);
  33.                }
  34.             }
  35.         }
  36.         return name;
  37.     }
  38.     public static String setRandomNick(final Player player) {
  39.         final String nick = NAMES.get(new Random().nextInt(NAMES.size()));
  40.         return setNick(player, nick);
  41.     }
  42.     private static GameProfile getProfile(final Player player) {
  43.         final String version = Bukkit.getServer().getClass().getPackage().getName().substring(23);
  44.         try {
  45.          return (GameProfile) Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftPlayer").getDeclaredMethod("getProfile").invoke(player);
  46.       } catch (final Exception e) {
  47.          e.printStackTrace();
  48.       }
  49.       return null;
  50.    }
  51.    public static String getRealName(final Player player) {
  52.       if (hasNick(player)) {
  53.          return NICKED_PLAYERS.get(player.getUniqueId()).getName();
  54.       }
  55.       return player.getName();
  56.    }
  57.    public static void removeNick(final Player player) {
  58.         if (hasNick(player)) {
  59.            setProfile(player, NICKED_PLAYERS.get(player.getUniqueId()));
  60.            NICKED_PLAYERS.remove(player.getUniqueId());
  61.             player.setDisplayName(player.getName());
  62.             player.setPlayerListName(player.getName());
  63.             for(final Player players : Bukkit.getOnlinePlayers()) {
  64.                if (players.equals(player) == false) {
  65.                   players.hidePlayer(player);
  66.                   players.showPlayer(player);
  67.                }
  68.             }
  69.         }
  70.        
  71.     }
  72.    private static void setProfile(final Player player, final GameProfile profile) {
  73.         final String version = Bukkit.getServer().getClass().getPackage().getName().substring(23);
  74.         try {
  75.            final Class<?> clazz = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftPlayer");
  76.            final Field field = getField(Class.forName("net.minecraft.server."+version+".EntityPlayer"));
  77.            if (field != null) {
  78.               field.set(clazz.getMethod("getHandle").invoke(player), profile);
  79.            }
  80.       } catch (final Exception e) {
  81.          e.printStackTrace();
  82.       }
  83.    }
  84.    private static Field getField(final Class<?> clazz) {
  85.       Field field = null;
  86.       for (final Field f : clazz.getDeclaredFields()) {
  87.          f.setAccessible(true);
  88.          if (f.getType().equals(GameProfile.class)) {
  89.             field = f;
  90.          }
  91.       }
  92.       if (field == null) {
  93.          for (final Field f : clazz.getFields()) {
  94.             f.setAccessible(true);
  95.             if (f.getType().equals(GameProfile.class)) {
  96.                field = f;
  97.             }
  98.          }
  99.       }
  100.       if (clazz.getSuperclass() != null && field == null) {
  101.          field = getField(clazz.getSuperclass());
  102.       }
  103.       return field;
  104.    }
  105.    public static boolean hasNick(final Player player) {
  106.       return NICKED_PLAYERS.containsKey(player.getUniqueId());
  107.    }
  108.    public static GameProfile getProfile(final String name, final UUID realUniqueId) {
  109.       if (BY_NAME.containsKey(name)) {
  110.          return BY_NAME.get(name);
  111.       }
  112.         try {
  113.             final URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
  114.             final InputStream is = url.openStream();
  115.             final BufferedReader br = new BufferedReader(new InputStreamReader(is));
  116.             String line;
  117.             UUID id = null;
  118.             while((line = br.readLine()) != null) {
  119.                 final JsonObject json = (JsonObject) new JsonParser().parse(line);
  120.                 id = UUIDTypeAdapter.fromString(json.get("id").getAsString());
  121.             }
  122.             if (id != null) {
  123.                return getProfile(id, realUniqueId);
  124.             } else {
  125.                final GameProfile profile = new GameProfile(realUniqueId, name);
  126.                BY_NAME.put(name, profile);
  127.                 return profile;
  128.             }
  129.         } catch (final Exception e) {
  130.          e.printStackTrace();
  131.         }
  132.         return null;
  133.     }
  134.    public static GameProfile getProfile(final UUID uuid, final UUID realUniqueId) {
  135.       if (BY_UUID.containsKey(uuid)) {
  136.          return BY_UUID.get(uuid);
  137.       }
  138.         try {
  139.             final URL url1 = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid.toString().replace("-", "")+"?unsigned=false");
  140.             final InputStream is1 = url1.openStream();
  141.             final BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
  142.             String line1;
  143.             String name;
  144.             while((line1 = br1.readLine()) != null) {
  145.                 final JsonObject json = (JsonObject) new JsonParser().parse(line1);
  146.                 name = json.get("name").getAsString();
  147.                 final JsonArray array = json.getAsJsonArray("properties");
  148.                 final JsonElement element = array.get(0);
  149.                 if (element.isJsonObject()) {
  150.                    final JsonObject object = element.getAsJsonObject();
  151.                    final Property property = new Property(object.get("name").getAsString(), object.get("value").getAsString(), object.get("signature").getAsString());
  152.                    final GameProfile profile = new GameProfile(realUniqueId, name);
  153.                    profile.getProperties().put(property.getName(), property);
  154.                    BY_UUID.put(uuid, profile);
  155.                    BY_NAME.put(name, profile);
  156.                    return profile;
  157.                 }
  158.          }
  159.             br1.close();
  160.             is1.close();
  161.         } catch (final Exception e) {
  162.          e.printStackTrace();
  163.         }
  164.         return null;
  165.     }
  166.    public static List<String> getNames() {
  167.       return NAMES;
  168.    }
  169.    public static void removeAll() {
  170.       for (final Player p : Bukkit.getOnlinePlayers()) {
  171.          removeNick(p);
  172.       }
  173.    }
  174.    public static List<Player> getNickedPlayers() {
  175.       final List<Player> players = Lists.newArrayList();
  176.       for (final Entry<UUID, GameProfile> entry : NICKED_PLAYERS.entrySet()) {
  177.          final Player p = Bukkit.getPlayer(entry.getKey());
  178.          if (p != null && p.isOnline()) {
  179.             players.add(p);
  180.          }
  181.       }
  182.       return players;
  183.    }
  184. }


MfG Knadda



Danke, ich werde es gleich mal probieren. Hoffentlich klappt es!


EDITED

Danke! Hat geklappt (kp wieso). Aber irgendwie hat mir das System von dir nicht so gefallen und deshalb hab ich deine "setProfile"-Methode mit meiner "setNickname"-Methode kobiniert. Das war Perfekt! Danke!



Das Thema wäre somit eigtl. beendet. Nur wenn jemand weiß wieso das Problem bestand, kann er es ja gerne mal schreiben.




LG TheMeyss
Benutzeravatar
TheMeyss
 
Beiträge: 14
Registriert: Do 8. Sep 2016, 18:35


Zurück zu Hilfe und Support

Wer ist online?

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

cron