NoteBlockAPI Song stoppen?

  • Guten Tag.


    Ich arbeite an einem kleinen Radio System als Test. Hier meine Frage:

    Wie kann ich bei der NoteBlockAPI einen Song für alle Spieler stoppen?

    Mein bisheriger Code:

    Song starten funktioniert auch aber bei Song stoppen läuft der Song trotzdem weiter. Es kommen keine Fehler.

    Ich weiß nicht ganz genau, wie ich ihn stoppe, weil auf der Seite nichts steht dazu.

    Ich habe Spieler aus dem SongUser gelöscht, ich habe den SongUser gelöscht, ich habe den AutoDelete probiert und ich habe versucht, den Song mit playSong zu stoppen.

    Alles ohne Erfolg.

    Vielleicht könnt ihr mir helfen.

    Danke,

    MfG,

    MadeByProxxy

  • Sagen wir mal so, du erstellst dir bei jedem Ausführen des Commands eine neue Instanz des RadioSongPlayer bzw. SongPlayer. Da kann dein Code ja gar nicht funktionieren, denn der neue SongPlayer ist ja dann auch noch nicht gestartet. Deshalb empfehle ich dir den SongPlayer in einer Variable in deiner Command Klasse oder sonst wo zu speichern und dann immer auf ihn zuzugreifen. Das heißt beim Stoppen die Variable wieder auf null setzen und beim Starten eine neue Instanz mit dem gewünschten Song an die Variable binden.

  • Nur eine kleine Anmerkung zu deinem Code:
    Versuch mal, anstatt new File("plugins//Songs//Song.nbs") den Code new File("plugins" + File.separator + "Songs" + File.separator + "Song.nbs") zu nutzen. Der ist variabler auf alle Betriebssystem u. JVMs anwendbar.

    MfG,

    ~ Rincewind

  • Nur eine kleine Anmerkung zu deinem Code:
    Versuch mal, anstatt new File("plugins//Songs//Song.nbs") den Code new File("plugins" + File.separator + "Songs" + File.separator + "Song.nbs") zu nutzen. Der ist variabler auf alle Betriebssystem u. JVMs anwendbar.

    MfG,

    ~ Rincewind

    / kann man auf jedem OS benutzen nur \\ nicht oder //!

    Deshalb könnte man auch einfach / benutzen.

    Auf welcher JVM das leuft ist auch egal weil das als Standart festgelekt ist.

    Das ist auch der grund warum man in java eigentlcih nie auf die JVM achten muss (Esseiden man versucht mit reflection den constant pool zu lesen oder sowas zu machen).


    Hier ist noch ein Beweis vom File Konstruktor:

  • Ich habe mir jetzt nochmal JavaDocs zu java.io durchgelesen und habe keinen Verweis darauf finden können, dass das Character '/' immer benutzt werden kann. https://docs.oracle.com/javase…va/io/File.html#separator

    Dein sogenannter Beweis ist komplett ungültig, da die Implementation (die du hier als Beweis herangezogen hast) nur das Verhalten garantiert, dass durch die JavaDocs (den Vertrag) garantiert ist. Wenn "zufällig" weitere Features oder eine bestimmte Art der Funktionsweise unterstützt wird, ist das kein valides Argument, ganz davon abgesehen, dass wir nicht wissen, welche JDK / JRE du da dekompeliert hast.

    Ich habe dazu einen StackOverflow Beitrag gefunden, der das meiner Meinung nach sehr transparent und eindeutig diskutiert: https://stackoverflow.com/ques…arator-and-slash-in-paths

    Ein Argument, dass ich jetzt selber nicht genannt habe, ist natürlich, dass die Nutzung on File.seperator ungeachtet der syntaktischen Funktionsweise auf jeden Fall der semantisch korrekteste Weg ist.

    ~ Rincewind