Beiträge von ProgrammHelfer

    Er will doch nur einen Server anbieten, in dem Leute eben besser arbeiten können, wenn der Hauptserver z.B. ausfällt oder ihr Probleme damit habt. Ich finde die Idee an sich gut, auch wenn ich mit Floobits arbeite.
    Ob das jetzt vertrauenswürdig ist, ist nun eine andere Frage.


    Warum überhaupt Saros?

    Wenn ich mir im Internet die Leute ansehe, benutzen mehr Leute für Bukkit Plugins Eclipse statt IntellIJ. Soweit ich weiß, existiert für Eclipse kein Floobits (offiziell).

    Das Problem ist, dass du einen String verwendest, aber in der .yml Datei eine Liste benutzt.
    Probier folgendes:

    Code
    1. List<String> configList = this.getConfig().getStringList( "Frage.Fragen" );
    2. configList.add( <String> );
    3. this.getConfig().set( "Frage.Fragen", configList );
    4. this.saveConfig();

    Falls du Fragen zu den einzelnen Codes hast, kannst du sie gerne stellen.



    Ich würde dir ja mal empfehlen GSON anzugucken. Mit JSON ist vieles einfacher :)

    Ich begründe den Dislike damit, dass es dem Ersteller zu seiner eigentlichen Frage nicht weiterhilft, da du der erste bist, der antwortet. Anscheinend beschäftigt er sich neu mit Java/Bukkit.
    Für einen Bukkit-Programmierer wäre es gut, dass er anfangs erstmal YAML etwas aneignet, danach später zu JSON umsteigt.
    Aber ansonsten hast du Recht.

    Ich finde jeder kann programmieren wie er will solange man es versteht.

    Wie du schon danach sagtest, die Klasse ist aus einem YouTube Video kopiert. Trotzdem könntest du den Fehler, den der YouTuber gemacht hat, verbessern und den Code für dich besser darstellen lassen.
    Wenn ich dich in paar Stunden/Tagen fragen würde, was die Variablen bedeuten, würdest du nicht mal die Antwort wissen.


    Nichtsdestotrotz war mir langweilig und habe deswegen eine Klasse ohne die Skulls geschrieben.
    Falls du Fragen zu einzelnen Sachen hast, kannst du sie gerne stellen.


    Kommen irgendwelche Fehlermeldungen?



    Übrigens:

    Das könntest du schöner mit einer For-Schleife verkürzen.


    Was mir spontan auffällt, ist, dass die subID deines Skulls eigentlich nicht stimmt.


    new ItemStack(Material.SKULL);

    Probier mal:

    Code
    1. new ItemStack( Material.SKULL_ITEM, 1, (short) 3 );

    Ansonsten empfehle ich dir, dass du mal mit Debug-Nachrichten arbeitest. Schau mal mithilfe von Bukkit#broadcastMessage oder System#out#println nach, ob überhaupt die Stats in der richtigen Reihenfolge geladen werden.

    An sich finde ich die Idee sehr gut.
    Das Problem an der Sache ist, dass 2-3 deiner Spiele eine Mindestanzahl an Spielern brauchen. Das ist für ein Netzwerk, das gerade mal frisch startet, sehr suboptimal.
    Ich würde mindestens ein Minispiel aufmachen, welches unendlich lang läuft. Arcade ist eine Lösung dafür, jedoch ist das ganze zufallsbasiert und ich glaube nicht, dass Spieler die Spiele spielen werden, die denen kaum Spaß macht.


    Der Grund dafür ist die Anzahl der User, die du anfangs/später haben wirst. Wenn du 20 User hast, die gleichmäßig auf anderen Spielen (Wirtschaftsserver) verteilt sind, dann hast du jedes Mal Probleme, Leute zu finden, die mit dir z.B. ByteWars spielen.


    Was ist, wenn Leute PvP wollen?
    Aus dem Grund haben auch viele Server das Spiel FFA!
    Du bist in FFA uneingeschränkt. Du kannst einen unendlich langen FFA-Server betreten, paar Spieler schlagen, den Server jederzeit verlassen.
    Bei Minispielen, die States haben (LOBBY, INGAME, ETC.), bist du sehr eingeschränkt.


    -> Du musst warten, bis genügend Spieler kommen
    -> Du musst warten, bis das Spiel startet
    -> Du musst warten, bis das Spiel endet
    -> Du hast bestimmte Regeln in dem Spiel, die du befolgen musst


    Da FFA wirklich nicht mehr einzigartig ist, empfehle ich dir, ähnliche Spiele in der Form zu programmieren, z.B. KnockbackFFA.


    Das ist meine subjektive Meinung und ich hoffe, dass ich dir etwas helfen konnte.

    Ich werde mal versuchen, was du geschrieben hast.
    Kannst du mir mal erklären was die ganzen "Zeichen" bedeuten oder mir sagen, nach was ich googlen müsste?
    Ich weiß jetzt schon, dass man mit "$" auf Unterklassen zugreifen kann.

    Ich habe jetzt im Bezug auf Reflection keine Zeichentutorials gefunden.
    Was ich gerade spontan weiß, ist, das @<Zahl> die "Instanzid" ist und $ die Unterklassen sind.


    Was das Dollarzeichen generell bedeutet, kannst du z.B. folgendes lesen:
    http://userpage.fu-berlin.de/~…ht81Ht/java_bezeichner_de


    Enum<?> playerInfoEnum = Enum.valueOf(playerInfoEnumClass, "REMOVE_PLAYER")
    Object playerInfoObject = playerInfoConstructor.newInstance(playerInfoEnum, getCraftPlayerHandle);

    Was ist eigentlich das Ziel? Soll das ein Nick-Plugin werden? Es würde sonst keinen Sinn ergeben, wenn du dasselbe auch bei ADD_PLAYER machst, da du den "EntityPlayer" benutzt. Bei REMOVE_PLAYER würde das gehen, aber bei ADD_PLAYER eigentlich nicht.

    Ich nehme mal an, dass du dein Plugin komplett versionsunabhängig mithilfe von Reflection machen willst, oder?


    Das ist relativ einfach. Du bekommst die Enums mit class#getClasses[Array]#getEnumConstants. Erstelle eine List<Object> und füg alle Enums in die Liste hinzu, sodass du auf alle Enums zugreifen kannst, falls du diese/alle irgendwann benötigst. Falls du ADD_PLAYER & REMOVE_PLAYER haben willst, wäre das der 1. "ADD_PLAYER" und der 5. Eintrag "REMOVE_PLAYER". (Java fängt an von 0 zu zählen, also Zahl - 1)
    Ich habe so gemacht, dass ich 2 Attribute vom Datentyp Enum erstelle und dann die 2 Enums dort speichere, also ADD_PLAYER und REMOVE_PLAYER.


    Richtig nervig wird es, wenn du mit PlayerInfoData arbeiten musst, das ist relativ anstrengend, wünsche dir viel Glück :D


    Ich bin jetzt so weit: http://hastebin.com/futefudugu.xml


    Der Constructor gibt ne NoSuchMethodException aus weil er möchte nur EnumPlayerInfoAction haben aber playerInfoEnumClass gibt ja PacketPlayOutPlayerInfo$EnumPlayerInfoAction zurück. Wie bekomme ich jetzt nur die Subclass, sodass ich die im Constructor angeben kann?

    Da du deine Nachricht eben geändert hast, erkläre ich es dir nochmal, warum ich Letsplaybar einen Dislike gegeben habe. Man greift auf eine innere Klasse nicht mit "." zu, sondern mit "$".
    Außerdem sieht meiner Meinung nach


    Object enum = getClassEnum("vorderteilzeug.PacketPlayOutPlayerInfo.EnumPlayerInfoAction", "ADD_PLAYER");

    richtig hässlich und unübersichtlich aus.