Java-Code zu Reflection konvertieren

  • Huhu Leute,


    ja ich weiß, die meisten von euch mögen kein Java, aber vielleicht hat ja trotzdem jemand eine Idee :D


    Aaaaalso ich programmiere Minecraft-Plugins und nutze dafür die Spigot-API. Leider enthält die nicht immer alle verfügbaren Methoden und Klassen und daher muss man manchmal auf die darunterliegenden "NMS"-Klassen (den original Code des Spiels, den die API nicht zur Verfügung stellt) zurückgreifen.


    Problem: Die Klassennamen bzw die Namen der Packages ändern sich mit jeder Version, z.B.:


    Code
    import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer


    Wenn ein Minecraft-Update released wird, steht da statt "1_16_R3" zum Beispiel "1_17_R0" und das is natürlich... blöd. Daher muss ich teilweise auf Reflection zurückgreifen, und das ist gelinde gesagt scheiße.


    Beispiel:

    Aus diesem hier:

    Code
    private void blabla() {
        EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
        PacketPlayOutEntityStatus statusPacket = new PacketPlayOutEntityStatus(entityPlayer, TOTEM_MAGIC_BYTE);
        entityPlayer.playerConnection.sendPacket(statusPacket);
    }

    wird das hier:

    Das ist "unschön". Normalerweise sollte es ja für IDEs problemlos möglich sein, den originalen Code in Reflections zu verpacken. IntelliJ und Eclipse können das aber meines Wissens nach nicht, und ein passendes Plugin habe ich auch bisweilen nicht gefunden.


    Kennt jemand irgendein Tool/Website/IDE-Plugin mit dem das möglich ist? Was normalerweise 2 Minuten dauert, dauert so nämlich teilweise eine halbe Stunde und das is wirklich blöd :pinch:


    Ich geh stark davon aus dass es sowas noch nicht gibt, wenn doch - ich bin über jede Antwort froh :)


    Schönes Wochenende Schönen Abend :)

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Sorry, leider keine hilfreiche Antwort von mir: Warum zum Teufel macht man so etwas? =O


    Also nicht Du, ich meine CraftBukkit. Warum integriert man den Releasestring in den Namespace?


    Gibt es dafür irgendeinen Grund, den ich nicht verstehe? (Ich bin kein Java-Experte und auch kein MC-Spieler.)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ja, erzählt das mal Mojang/Microsoft ;(


    Ich verstehe den Grund auch nicht :( Die API (nicht von denen, das ist ein Community-Projekt) ist ja „abwärts-/zukunfts“-kompatibel. Es geht um den Minecraft Code an sich. Der ist halt so, warum auch immer :pinch::pinch::pinch::pinch:

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Ja, erzählt das mal Mojang/Microsoft ;(


    Ich verstehe den Grund auch nicht :( Die API (nicht von denen, das ist ein Community-Projekt) ist ja „abwärts-/zukunfts“-kompatibel. Es geht um den Minecraft Code an sich. Der ist halt so, warum auch immer :pinch::pinch::pinch::pinch:

    Kannst du nicht - so ganz blöd gefragt - einfach irgendwie über die API die Version abfragen und diese dann in das import einsetzen?

  • Kannst du nicht - so ganz blöd gefragt - einfach irgendwie über die API die Version abfragen und diese dann in das import einsetzen?

    Ich kompiliere ja eine .jar und die soll natürlich mit allen Versionen funktionieren - also ein „awk“ vor das „mvn package“ zu setzen ist leider keine Lösung :/

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Sollten die Klassen nicht polymorph sein und einem Interface folgen?

    Sind/Tun sie leider nicht. :( Das ist bei Minecraft ein bekanntes Problem. Seit circa 7 Jahren mindestens...

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com