Wie frage ich eine uuid von Minecraft ab?

  • VB.NET
  • .NET 4.5

Es gibt 66 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Wie frage ich eine uuid von Minecraft ab?

    Guten Morgen,
    Ich versuche eine Abfrage einer UUID zu erstellen (für Minecraft)
    Hab dies auch dem Öfteren immer wider Probiert, funktioniert aber immer noch nicht...

    Hier mein verwendete Code

    VB.NET-Quellcode

    1. Dim uuid As Integer = Convert.ToInt32(New IO.MemoryStream(New WebClient().DownloadString("https://api.mojang.com/users/profiles/minecraft/" + ftb_name.Text)))
    2. ftb_uuid.Text = uuid


    Hier die Fehlermeldung
    Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
    Zusätzliche Informationen: Ungültige Konvertierung von der Zeichenfolge {"id":"2a73cc00e35c4cb5bb50baaae in Typ Integer.

    (ich will die 2a73cc00e35c4cb5bb50baaae in einer TextBox ausgeben lassen)



    (Ich verwende die Mojang API)

    Danke im Vor raus ! ;)
    2a73cc00e35c4cb5bb50baaae ist nunmal kein Integer, sondern ein Text. Ein Integer besteht bekanntlich nur aus den Ziffern von Null bis Neun. Buchstaben haben darin nix verloren. Wenn es nur um die Anzeige geht, überspring die Variable und mach gleich:

    VB.NET-Quellcode

    1. ftb_uuid.Text = New IO.MemoryStream(New WebClient().DownloadString("https://api.mojang.com/users/profiles/minecraft/" + ftb_name.Text))

    btw: Option Strict On nicht wieder vergessen, denn Zeile#2 ist Off
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hey,
    das ist das was zurück kommt:

    Quellcode

    1. // xxxxxxxxxxxxx
    2. // https://api.mojang.com/users/profiles/minecraft/xxxxxxxxx
    3. {
    4. "id": "HIERSTEHTDIEUID",
    5. "name": "xxxxxxxxx"
    6. }

    Das ist JSON. Da brauchst du auch kein MemoryStream sondern einfach einen GET Request mit dem WebClient senden
    und bekomsmt das zurück.
    Dann musst du das JSON Parsen um an die ID zu kommen. Ich empfehle gerne newtonsoft.com/json
    ist sehr einfach in der Handhabe und gibt genügend Snippets auf der Internetseite.
    Kann man auch als NuGet Paket einbinden.

    EDIT//Und btw. HackTool hört sich auch ziemlich böse an. Gibt es nichts anderes was du tun kannst als anderen den Spielspaß zu versauen?
    Grüße , xChRoNiKx
    Deshalb Option Strict On. Der MemoryStream nimmt als 1. Parameter eine Puffergröße und keinen String, der von DownloadString zurückgeliefert wird. Ich habe Deinen Code in Post#2 quasi nur variablenlos gemacht. Ob er inhaltlich Sinn ergibt, habe ich nicht weiter geprüft.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    xChRoNiKx schrieb:

    Ich empfehle gerne newtonsoft.com/json


    Das hier?


    Was muss ich nun machen (hab mit dem noch nie gearbeitet)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerTuner“ ()

    Code hab ich jetzt, der Funktioniert so weit....
    hab jetzt ein Problem, ich weis nicht wie ich das (den String uuid) in einer TextBox ausgeben kann.
    Es soll bei einem Button Click Event passieren..

    VB.NET-Quellcode

    1. Dim mycontent As String
    2. Public uuid As String
    3. Public playername As String
    4. Sub Main(ByVal args As String())
    5. GetRequest("https://api.mojang.com/users/profiles/minecraft/" + playername)
    6. End Sub
    7. Private Async Sub GetRequest(ByVal url As String) As Task
    8. Using client As HttpClient = New HttpClient()
    9. Using response As HttpResponseMessage = Await client.GetAsync("https://api.mojang.com/users/profiles/minecraft/" + playername)
    10. Using content As HttpContent = response.Content
    11. mycontent = Await content.ReadAsStringAsync()
    12. End Using
    13. uuid = mycontent.Split(Chr(34))(3)
    14. End Using
    15. End Using
    16. End Sub


    Diesen Code hab ich ein Modul gepackt
    Die beiden Variablen (uuid & playername) sollen in der WindowsForm dann belegt werden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerTuner“ ()

    DerTuner schrieb:

    ich weis nicht wie ich das (den String uuid) in einer TextBox ausgeben kann.
    Das weist du nicht?
    Einen String gibt man in einer Textbox aus, indem man ihn der Textbox.Text-Property zuweist. MIt dem =-Operator.



    was soll eine Methode GetRequest(), die nichts zurückgibt? (weil "Get" ist englisch, und heisst "Hole".)
    Es muss folgendermassen aussehen:

    VB.NET-Quellcode

    1. Sub Main(ByVal args As String())
    2. Me.txtUUID.Text = GetRequest("https://api.mojang.com/users/profiles/minecraft/" + playername)
    3. End Sub

    Und mach den Async-Kram weg - du verwendest es falsch.
    eins nachm annern.



    DerTuner schrieb:

    Diesen Code hab ich ein Modul gepackt

    Dassis natürlich bisserl ungeschickt - weil in einem Modul gibts keine Textbox.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Naja, ich hab eine Public Variable gemacht.
    Ich weis bloß nicht wie ich den Code ausführen soll ?(
    Bei einem Click Event...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerTuner“ ()

    Na, dann poste doch deine Lösung, wenn diese Modul-Architektur kein Hindernis für dich ist.

    Naja ich vermute, dass dir noch nicht klar ist, dass ich gesagt habe, dass du die GetRequest() - Methode umschreiben musst, dergestalt, dass sie
    1. diesen Async-Kram los ist
    2. einen String zurückgibt.
    Weil - hab ich ja erklärt:
    Einen String gibt man in einer Textbox aus, indem man ihn der Textbox.Text-Property zuweist. MIt dem =-Operator.
    Und für wie letzteres konkret aussehen könnte, habich ja sogar ein Listing eingestellt.

    Poste deinen Code, dann mach ich dir Async/Await dran.

    Du solltest glaube ich bevor du irgendwas anderes machst erstmal dich tief in die Grundlagen einarbeiten.
    Sei mir nicht böse aber du zeigst uns was und sagst was du willst ( soll bei Button Click passieren ) ergo weißt
    du wohl noch nicht mal wie man etwas in das Button Click Ereignis packt.

    Noch weißt du mit Controls umzugehen. Schnapp dir ein Buch und lerne. (das Löffelmann Buch fand ich ziemlich gut, bitte korrigieren wenn es bessere gibt)
    Es bringt dir absolut null wenn wir dir nun deinen Code umschreiben denn den wirst du sicherlich
    nur rein kopieren da wo wir sagen und dich nicht weiter mit beschäftigen.

    Siehe das schöne Posting von @ErfinderDesRades der dir auch genau gesagt hat was du zu tun hast.
    Würdest du Grundlagen beherrschen wäre das kein Problem umzusetzen.

    Es ist absolut null böse gemeint. Und bitte Poste doch deinen Code und keine Screenshots von irgendwelchen
    Debugging Prozessen nur. Da sehen wir nichts.
    Grüße , xChRoNiKx
    Ich hoffe nicht das du den "Zusammengeschusterten" Code als Programm an andere Leute weitergibst oder gar verkaufst.
    Ein Blick auf deine in deinem Profil hinterlegte Website lässt dies vermuten.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Nur weil die jetzt nicht "professionell" ist?

    Es Funktioniert übrigens auch ohne Json im Code

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerTuner“ ()

    @DerTuner es geht hier nicht darum das es nicht professionell ist.
    Wir wollen das du verstehst was du tust. Es bringt ja nichts wenn du das Zeug da zusammen kopierst
    und das ganze veröffentlichst und auf einmal die Leute wegen deinem Programm einen Bluescreen bekommen(ganz dramatisch gesagt).
    Beheben kannst du es dann nicht weil du nicht verstehst was dein Code macht.

    Aus diesem Grund bekommst du hier Hilfestellung und keinen fertigen Code. Die Hilfestellungen hast du bekommen.
    Unzwar auf einem Niveau das man dass mit Grundlagen auch hin bekommt.

    Du hast uns auch noch immer nicht die Lösung gepostet denn das ist das wichtigste hier im Forum
    das es zu Problemstellungen dann auch am Ende eine Lösung gibt die jemand nachvollziehen kann
    mit den Infos die er hier bekommen hat. So hat meine eine schöne ich nenne es mal "Timeline" wo zu sehen
    ist was er wie und wann gemacht hat mit welchen Tipps / Hilfestellungen.

    Und ja dein Code funktioniert auch ohne das du das JSON ordentlich parst.
    Mag evtl. jetzt noch funktionieren aber was machst du wenn die API die ID nicht mehr
    im 3 Index zurück gibt sondern im 10 weil auf einmal Dinge hinzugekommen sind?
    Richtig du musst im Quellcode wieder komisch rum rechnen um den richtigen Index zu bekommen.

    Genau dafür ist z.b. Newtonsoft gut dort kannst du das JSON komplett nehmen und sogar ohne eine fertige Klasse
    auf die einzelnen dinge zugreifen. Und das funktioniert auch dann wenn sich dann die API dort erweitert bzw. auch was
    hinzukommt.

    So nun habe ich mir noch mal Zeit genommen dir das zu erklären. Die letzten male wurde das ganze komplett ignoriert
    ich hoffe da kommt dieses mal etwas anständiges zurück.

    Wir wollen dir hier alle nichts böses. Wir wollen dir nur helfen es wenn dann gleich richtig zu machen und auch so das du
    es verstehst (dafür die Hilfestellungen).

    *Antwort auf gelöschtes Posting entfernt*
    Grüße , xChRoNiKx

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()