[UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/UUID

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

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Summerfeeling » Mo 12. Jan 2015, 01:46

Twister_21 hat geschrieben:Gibt es den UUIDTypeAdapter auch in BungeeCord? Habe da keinen Import für gefunden.

Nein, sollte dir der Import aber auch sagen.
Der UUIDTypeAdapter ist eine Class von Mojang. Kannst du dir jedoch (wenn du die decompiliert hast) kopieren.
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Twister_21 » Mo 12. Jan 2015, 15:06

So kann man es machen :D
Mit freundlichen Grüßen
Twister21
Benutzeravatar
Twister_21
 
Beiträge: 652
Registriert: Mi 11. Jun 2014, 05:51
Wohnort: Deutschland

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon leNic » Mi 14. Jan 2015, 18:46

Ich verwende die Spigot Version 1485 und bekomme folgenden Fehler:

Code: Alles auswählen
  1. [18:39:51] [Craft Scheduler Thread - 1/WARN]: org.apache.commons.lang.UnhandledException: Plugin geMsg v1.0 generated an exception while executing task 5
  2.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
  3.    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  4.    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  5.    at java.lang.Thread.run(Unknown Source)
  6. Caused by: java.lang.ExceptionInInitializerError
  7.    at de.germanelectronix.gemsg.cmd.MsgCommand$1$1.run(MsgCommand.java:38)
  8.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftTask.run(CraftTask.java:58)
  9.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
  10.    ... 3 more
  11. Caused by: java.lang.IllegalArgumentException
  12.    at org.bukkit.craftbukkit.libs.com.google.gson.internal.$Gson$Preconditions.checkArgument($Gson$Preconditions.java:42)
  13.    at org.bukkit.craftbukkit.libs.com.google.gson.GsonBuilder.registerTypeAdapter(GsonBuilder.java:445)
  14.    at de.germanelectronix.gemsg.UUIDFetcher.<clinit>(UUIDFetcher.java:22)
  15.    ... 6 more


Ich habe den Import vom UUIDTypeAdapter hiermit ausgetauscht, da es den Import nicht gab:
net.minecraft.util.com.mojang.util.UUIDTypeAdapter
Benutzeravatar
leNic
 
Beiträge: 168
Registriert: Fr 6. Jun 2014, 18:23

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Summerfeeling » Mi 14. Jan 2015, 20:09

introlous hat geschrieben:Ich verwende die Spigot Version 1485 und bekomme folgenden Fehler:

Code: Alles auswählen
  1. [18:39:51] [Craft Scheduler Thread - 1/WARN]: org.apache.commons.lang.UnhandledException: Plugin geMsg v1.0 generated an exception while executing task 5
  2.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
  3.    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  4.    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  5.    at java.lang.Thread.run(Unknown Source)
  6. Caused by: java.lang.ExceptionInInitializerError
  7.    at de.germanelectronix.gemsg.cmd.MsgCommand$1$1.run(MsgCommand.java:38)
  8.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftTask.run(CraftTask.java:58)
  9.    at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
  10.    ... 3 more
  11. Caused by: java.lang.IllegalArgumentException
  12.    at org.bukkit.craftbukkit.libs.com.google.gson.internal.$Gson$Preconditions.checkArgument($Gson$Preconditions.java:42)
  13.    at org.bukkit.craftbukkit.libs.com.google.gson.GsonBuilder.registerTypeAdapter(GsonBuilder.java:445)
  14.    at de.germanelectronix.gemsg.UUIDFetcher.<clinit>(UUIDFetcher.java:22)
  15.    ... 6 more


Ich habe den Import vom UUIDTypeAdapter hiermit ausgetauscht, da es den Import nicht gab:
net.minecraft.util.com.mojang.util.UUIDTypeAdapter

Gleicher Fehler in 1649. Habe mir die GSON Sache nun rausprogrammiert.
Hier mal der Code:
Code: Alles auswählen
  1. package de.Summerfeeling.SkyFlame.Handler;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. import java.util.UUID;
  9. import java.util.concurrent.ExecutorService;
  10. import java.util.concurrent.Executors;
  11. import net.minecraft.util.com.google.gson.JsonObject;
  12. import net.minecraft.util.com.google.gson.JsonParser;
  13. import net.minecraft.util.com.mojang.util.UUIDTypeAdapter;
  14. import de.Summerfeeling.SkyFlame.Java8.Consumer;
  15. public class UUIDHandler {
  16.    private static final String UUID_URL = "https://api.mojang.com/users/profiles/minecraft/%s";
  17.    private static final String NAME_URL = "https://api.mojang.com/user/profiles/%s/names";
  18.    private static Map<String, UUID> uuidCache = new HashMap<String, UUID>();
  19.    private static Map<UUID, String> nameCache = new HashMap<UUID, String>();
  20.    
  21.    private static ExecutorService pool = Executors.newCachedThreadPool();
  22.    
  23.    /**
  24.     * Fetches the uuid asynchronously and passes it to the consumer
  25.     *
  26.     * @param name The name
  27.     * @param action Do what you want to do with the uuid her
  28.     */
  29.    public static void getUUID(final String name, final Consumer<UUID> action) {
  30.       pool.execute(new Runnable() {
  31.          public void run() {
  32.             action.accept(getUUID(name));
  33.          }
  34.       });
  35.    }
  36.    
  37.    /**
  38.     * Fetches the uuid synchronously and returns it
  39.     *
  40.     * @param name The name
  41.     * @return The uuid
  42.     */
  43.    public static UUID getUUID(String name) {
  44.       name = name.toLowerCase();
  45.       if (uuidCache.containsKey(name)) {
  46.          return uuidCache.get(name);
  47.       }
  48.       try {
  49.          HttpURLConnection connection = (HttpURLConnection) new URL(String.format(UUID_URL, name)).openConnection();
  50.          connection.setReadTimeout(5000);
  51.          JsonObject json = new JsonParser().parse(new BufferedReader(new InputStreamReader(connection.getInputStream())).readLine()).getAsJsonObject();
  52.          UUID uuid = UUIDTypeAdapter.fromString(json.get("id").getAsString());
  53.          uuidCache.put(name, uuid);
  54.          nameCache.put(uuid, name);
  55.          
  56.          return uuid;
  57.       } catch (Exception e) {
  58.          e.printStackTrace();
  59.       }
  60.       return null;
  61.    }
  62.    
  63.    /**
  64.     * Fetches the name asynchronously and passes it to the consumer
  65.     *
  66.     * @param uuid The uuid
  67.     * @param action Do what you want to do with the name her
  68.     */
  69.    public static void getName(final UUID uuid, final Consumer<String> action) {
  70.       pool.execute(new Runnable() {
  71.          public void run() {
  72.             action.accept(getName(uuid));
  73.          }
  74.       });
  75.    }
  76.    
  77.    /**
  78.     * Fetches the name synchronously and returns it
  79.     *
  80.     * @param uuid The uuid
  81.     * @return The name
  82.     */
  83.    public static String getName(UUID uuid) {
  84.       if (nameCache.containsKey(uuid)) {
  85.          return nameCache.get(uuid);
  86.       }
  87.       try {
  88.          HttpURLConnection connection = (HttpURLConnection) new URL(String.format(NAME_URL, UUIDTypeAdapter.fromUUID(uuid))).openConnection();
  89.          connection.setReadTimeout(5000);
  90.          
  91.          JsonObject json = new JsonParser().parse(new BufferedReader(new InputStreamReader(connection.getInputStream())).readLine()).getAsJsonArray().get(0).getAsJsonObject();
  92.          String name = json.get("name").getAsString();
  93.          uuidCache.put(name, uuid);
  94.          nameCache.put(uuid, name);
  95.          
  96.          return name;
  97.       } catch (Exception e) {
  98.          e.printStackTrace();
  99.       }
  100.       return null;
  101.    }
  102. }
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Twister_21 » Mi 4. Feb 2015, 20:07

Jofkos, kannst du die getName()-Methode ein wenig updaten? Man kann ja jetzt seinen Namen umbennen und das sieht dann so aus:
Code: Alles auswählen
  1. [{"name":"Name1"},{"name":"Name2","changedToAt":1423072263000}]


Man bekommt aber aktuell nur Name1.
Mit freundlichen Grüßen
Twister21
Benutzeravatar
Twister_21
 
Beiträge: 652
Registriert: Mi 11. Jun 2014, 05:51
Wohnort: Deutschland

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Jofkos » Mi 4. Feb 2015, 21:41

Twister_21 hat geschrieben:Jofkos, kannst du die getName()-Methode ein wenig updaten? Man kann ja jetzt seinen Namen umbennen und das sieht dann so aus:
Code: Alles auswählen
  1. [{"name":"Name1"},{"name":"Name2","changedToAt":1423072263000}]


Man bekommt aber aktuell nur Name1.

hihi das mit dem Namenändern hab ich gar nicht mitbekommen xD
klar, mach ich!
Jofkos

...........

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

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon ilouHD » Mi 4. Feb 2015, 21:59

Jofkos hat geschrieben:
Twister_21 hat geschrieben:Jofkos, kannst du die getName()-Methode ein wenig updaten? Man kann ja jetzt seinen Namen umbennen und das sieht dann so aus:
Code: Alles auswählen
  1. [{"name":"Name1"},{"name":"Name2","changedToAt":1423072263000}]


Man bekommt aber aktuell nur Name1.

hihi das mit dem Namenändern hab ich gar nicht mitbekommen xD
klar, mach ich!


Die gibts ja auch erst seit heute :D
Es gibt glaube ich sehr viele, die es noch nicht mit bekommen haben.
Bild
Benutzeravatar
ilouHD
 
Beiträge: 1733
Registriert: Do 9. Jan 2014, 14:49

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Jofkos » Mi 4. Feb 2015, 22:30

Update
Update für die tolle Namensänderung die uns den ganzen UUID Mist beschert hat:
  • FEBRUARY_2015 - Konstante: Februar 2015 in Millisekunden - Dann wurde das Name-Changing eingeführt
  • UUID getUUIDAt(String name, long timestamp) - Gibt die UUID für den angegebenen Namen zum angegebenen Zeitpunkt in Millisekunden zurück (synchron)
  • void getUUIDAt(String name, long timestamp, Consumer<UUID> action) - Gibt die UUID für den angegebenen Namen zum angegebenen Zeitpunkt in Millisekunden über den Consumer zurück (asynchron)

Zudem gibt getName(UUID) nun den neusten Namen zurück.

Danke an @Twister_21, der mich darauf Aufmerksam gemacht hat.
Zuletzt geändert von Jofkos am Do 5. Feb 2015, 07:46, insgesamt 1-mal geändert.
Jofkos

...........

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

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Twister_21 » Mi 4. Feb 2015, 23:21

Du hälst also das gleiche vom neuen Feature, welches ich nie gebrauchen werde. :D Trotzdem danke für das Update.

EDIT: Als ich es jetzt mal getestet habe funktioniert es aber irgendwie nicht. Ich bekomme aus der UUID immer noch den 1. Namen, also den vor der Umbenennung.
Mit freundlichen Grüßen
Twister21
Benutzeravatar
Twister_21
 
Beiträge: 652
Registriert: Mi 11. Jun 2014, 05:51
Wohnort: Deutschland

Re: [UtilKlasse] UUIDFetcher - Asynchron & mit Cache - Name/

Beitragvon Twister_21 » Do 5. Feb 2015, 23:50

#push
Jofkos, hast du denn getestet ob man immer den aktuellsten Namen bekommt? Bei mir (einem Spieler) klappt das nicht, da bekomme ich den Namen, wie er am Anfang hieß.
Mit freundlichen Grüßen
Twister21
Benutzeravatar
Twister_21
 
Beiträge: 652
Registriert: Mi 11. Jun 2014, 05:51
Wohnort: Deutschland

VorherigeNächste

Zurück zu Anleitungen

Wer ist online?

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

cron