ServerPlugin Problem beim coden!

Dieses Thema im Forum "Programmierung" wurde erstellt von rednael500, 17. Mai 2014.

  1. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Liebe Commiunity,

    ich bin relativ neu, was das coden von Plugins angeht und habe deshalb eine Frage.
    Wie mache ich es, dass wenn ich ein Schild auf dem Server habe, auf dem z.B. "Server 1" steht, das Plugin diesen Text und die zugehörige Linie erkennt und den Text dann durch "§2Server 1" ersetzt?

    Ich wäre sehr dankbar, wenn ihr mir helfen könntet :D

    PS: Ich weiß auf alle Fälle mal, dass man einen EventHandler benötigt, aber habe leider keine Ahnung, wie es das weitergeht...

    MfG
    rednael500
     
    #1
  2. ReolatHD
    Offline

    ReolatHD

    Registriert seit:
    22. März 2014
    Beiträge:
    51
    Hi rednael500 ich bin momentan nicht am PC wenn du willst kann Ich es dir später oder morgen Codes.
    Auf jeden Fall benötigst du ein OnSignCreate event. Dan mit if (sign.getline(zahl) == "Server 1" ) abfragen und mit sign.setLine setzen. Wobei Zahl 0=schild Zeile 1 Zahl 1 =Schild zeile2........
    Schreib einfach wenn du noch Hilfe brauchst.
    Lg
    Reolat
     
    #2
  3. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Leider klappt mein Versuch nicht so ganz...

    Also ich habe jetzt schonmal ein bischen rumprobiert, aber folgendes klappt leider nicht:

    Code (Text):
    1.  
    2. package de.minesuite.MineSystem;
    3.  
    4. import org.bukkit.block.Block;
    5. import org.bukkit.block.Sign;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.block.SignChangeEvent;
    9.  
    10. public class JoinSchilder implements Listener {
    11.    
    12.     @EventHandler
    13.     public void onSignCreate(SignChangeEvent e) {
    14.         Block b = e.getBlock();
    15.         Sign s = (Sign) b.getState();
    16.         if(s.getLine(1) == "Warten...") {
    17.             s.setLine(1, "§2Warten...");
    18.         }
    19.     }
    20. }  
    21.  
    Wäre echt nice, wenn ihr mir vielleich sagen könntet, was ich ändern muss :D
     
    #3
  4. ReolatHD
    Offline

    ReolatHD

    Registriert seit:
    22. März 2014
    Beiträge:
    51
    Hallo, zuerst fehlt entweder die Verknüpfung zur Hauptklasse, oder on enable on disable usw fehlt. Außerdem musst du Im onEnable pluginmanager. Registerevents() Machen.
     
    #4
  5. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Also was Du geschrieben hast, ist sicher simpel, aber ich habe leider keine Vorstellungen, was genau Du meinst.
    Bitte helfe mir noch:
    - Wo muss ich das einragen?
    - Muss ich noch was hinzufügen?
    - Wie sollte der Code aussehen?

    Wäre cool, wenn Du mir das sagen könntest :D

    MfG
    rednael500
     
    #5
  6. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du musst daran denken, dass Java bei 0 anfängt zu zählen.

    Also 1. Zeile auf Schild = s.getLine(0);
     
    #6
  7. ReolatHD
    Offline

    ReolatHD

    Registriert seit:
    22. März 2014
    Beiträge:
    51
    Am besten schaust du dir ein paar Folgen auf YouTube an, wie mann plugins entwickelt. Dann probiere es noch einmal. Wenn du dann noch Hilfe brauchst, schreib mir ne pn.
    Lg reolat
     
    #7
  8. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Ja, danke, das habe ich schon beachtet, und in die 2 Zeile (also getLine(1) benutzt) geschrieben.
    Aber leider klappt es noch nicht...

    Wie könnte ich das denn lösen, dass das Schild auch geändert wird, wenn es bereits plaziert ist.
    Also wenn ein Schild auf dem Server hängt und sich der Text durch ein anderes Plugin ändert, soll dieser geänderte Text von diesem Plugin geändert werden.
    (Klingt vieleicht unnötig und dumm, aber ich habe mir was dabei gedacht ;))
     
    #8
  9. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Ahja bin dumm sorry :D

    s.update();

    Du musst das Schild updaten, um den neuen text lesen zu können.
     
    #9
  10. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Das habe ich auch schon gemacht, danke, aber irgendwie passiert nichts...
     
    #10
  11. ReolatHD
    Offline

    ReolatHD

    Registriert seit:
    22. März 2014
    Beiträge:
    51
    Hi rednael500 das Problem ist das du das event und das plugins noch nicht regrestriert hast. Hast du überhaupt eine Plugin.yml gemacht?
    Lg
    Reolat
     
    #11
  12. games6471
    Online

    games6471

    DU vergleichst Strings über einen Referenzvergleich. Dies geht nur, wenn diese Objekte wirklich die Selben sind. Dies trifft auf z.B. auf Strings zu, die im String-Pool der JVM liegen und daher ein und das selbe Objekt sind. Festgelegte Strings im Source-Code als auch Strings, auf denen intern() aufgerufen wurde, werden zu diesem Pool hinzugefügt.

    Um die Gleichheit eines Strings zu überprüfen, verwendet man stets die Methode equals() oder equalsIgnoreCase().
     
    #12
  13. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Hilfe? ;)

    Kurz mal so ne Frage:

    Wenn jemand den Beitrag liest, kann der/die mir, wenn er/sie bescheid weiß, mir ein mögliches Script in diesem beitrag schicken?
    Das wäre cool, weil ich leider noch nichts gefunden habe...

    Wäre super nice! :D

    MfG
    rednael500
     
    #13
  14. Scrayos
    Offline

    Scrayos Verifiziert

    Registriert seit:
    11. Februar 2012
    Beiträge:
    276
    Ort:
    Köln
    Minecraft:
    Scrayos
    Du musst das Event zuletzt noch canceln, da sonst nachdem du deine Sachen ausgeführt hast noch das eigentliche Verhalten bei diesem Event ausgeführt wird. Sprich: Der ursprüngliche Text wird wieder eingesetzt.

    Das machst du ganz einfach via e.setCancelled(true);
     
    #14
  15. rednael500
    Offline

    rednael500

    Registriert seit:
    16. März 2013
    Beiträge:
    7
    Ort:
    Saarbrücken
    Minecraft:
    rednael500
    Vielen Dank für die bisherige Hilfe, aber ich komme trotzdem einfach nicht weiter.
    Ich habe es geschafft, dass wenn ich ein Schild platziere und z.B., wenn ich es so eingestellt habe, in Zeile 2 (also 1) "Warten..." schreibe, dass dann der Text in dieser Zeile entsprechend geändert wird.

    Aber ich brauche eig. folgendes:
    Schilder, die bereits paltziert sind, sollen gefunden und ausgelesen werden. Dauerhaft soll überprüft werden, ob angegebener Text auf dem Schild auftaucht. Wenn dies passiert, soll er duch den anderen angegebenen Text überschrieben werden UND DAS DAUERHAFT!

    Grund dieser Entscheidung:
    Ich verwende das Plugin "TeleportSigns" und bin noch nicht so weit, so etwas selbst zu coden. Dieses liest die MotD des jeweiligen Servers auf und schreibt sie auf das entsprechende Schild (Die Minigames der einzelnen Server verändern die MotD automatisch, sodass sie z.B. zwischen Start, Voting etc. wechselt). Wenn die MotD jedoch farbig ist, stellt das Schild diese Zeile folgendermaßen da (durch TeleportSigns):
    "??Voting". Dies sollte dann eig. "Voting" heißen.
    Das Plugin, was ich deswegen zu coden versuche, soll neben anderen, nützlichen Funktionen eben diesen text, der dann nur schwarz ist erkennen und durch den text überschreiben, den ich festgelegt habe (in dem Fall der gleiche Text in blau.)
    Da, wie schon gesagt, die MotD der Server je nach Spielphase immer ändert, sodass man das inder Lobby mitverfolgen kann, müsste halt dauerhaft geprüft werden und ich weiß einfach nicht, wie man das macht.

    Übrigens: Im Moment wird die Zeile des Schildes gefärbt, wenn ich es wo hin stelle (also nicht automatisch), aber NUR, wenn ich vorher einen Befehl aus dem Plugin eingegeben habe.

    Ich würde mich über einen Code wirklich freuen, den ich dann auch auf Bedürfniss, mit meiner Kentniss, anpassen kann.

    MfG
    rednael500
     
    #15