1. Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PlugIn Countdown Fehler

Dieses Thema im Forum "Programmierung" wurde erstellt von MrPyro13, 23. August 2014.


  1. MrPyro13
    Online

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    826
    Geschlecht:
    männlich
    Minecraft:
    MrPyro13
    Hallo,

    kannst mir jemand sagen, was an diesem Code falsch ist?

    Code (Text):
    1.  
    2. package de.mrpyro13.ImpComs;
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandExecutor;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.plugin.Plugin;
    8. public class iCountdown_Command implements CommandExecutor {
    9. @Override
    10. public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args) {
    11. //SCRIPT ANFANG
    12. int countdown;
    13. sender.sendMessage("§aDer Countdown wurde gestartet");
    14. countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask((Plugin) this,new Runnable() {
    15. int x;
    16. int high = 11;
    17. @Override
    18. public void run() {
    19. if(high != 0) {
    20. high--;
    21. sender.sendMessage("§6Countdown läuft noch §b " + high + " §5Sekunden");
    22. } else {
    23. sender.sendMessage("§aCountdown vorbei");
    24. Bukkit.getScheduler().cancelTask(countdown);
    25. }
    26. }
    27. }, 0, 20);
    28. //SCRIPT ENDE
    29. return true;
    30. }
    31. }
    32.  
    Hier wird das countdown angestrichen, man soll die Variable oben (int countdown) final(en)

    Final ich es wird in diesem Abschnitt das countdown angestrichen:
     
  2. Werbung
    Online

    Werbung

  3. games6471
    Online

    games6471

    Ein kleiner Hinweis. Du kannst nicht einfach ein CommandExecutor zu Plugin casten.
    Code (Text):
    1. Bukkit.getScheduler().scheduleSyncRepeatingTask((Plugin) this,new Runnable()
     
  4. MrPyro13
    Online

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    826
    Geschlecht:
    männlich
    Minecraft:
    MrPyro13
    Schreibe ich aber nur das this, dann wird der scheduleSyncRepeatingTask unterstrichen :/
     
  5. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    Du musst daran denken, deine mainclass da zu uebergeben und keine x-beliebige. Erzeuge eine neue Instanz deiner mainclass im Konstruktor. Diese kannst du dann uebergeben.
     
  6. MrPyro13
    Online

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    826
    Geschlecht:
    männlich
    Minecraft:
    MrPyro13
    Und das ging nochmal wie? :confused:
     
  7. games6471
    Online

    games6471

    Du kannst die Plugininstanz wie folgt über dem Konstruktor übergeben:

    http://wiki.bukkit.org/Plugin_Tutorial#Using_a_separate_CommandExecutor_class

    Code (Text):
    1. public class MyPluginCommandExecutor implements CommandExecutor {
    2.     private final MyPlugin plugin;
    3.  
    4.     public MyPluginCommandExecutor(MyPlugin plugin) {
    5.         this.plugin = plugin; // Store the plugin in situations where you need it.
    6.     }
    Und bei der Erstellung einer Instanz (new ...) dieser Klasse die Hauptklasse übergeben. Das bedeutet new blabla(instance) Also in der Hauptklasse (JavaPlugin) mit this.

    Code (Text):
    1. new MyPluginCommandExecutor(this)
     
  8. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    In der Klasse mit dem Scheduler:

    Code (Text):
    1.  
    2. private <namedermain> inst;
    3.  
    4. public <namederklasse>(<Namedermain> plugin){
    5.     this.inst = plugin;
    6. }
    7.  
    Und dann dem Scheduler "inst" uebergeben.

    In der Mainklasse machste dann:

    Code (Text):
    1.  
    2. new <namederschedulerklasse>(this);
    3.  
    Versuch aber erst, den simn zu verstehen und es dann zu kopieren!:)
     
  9. MrPyro13
    Online

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    826
    Geschlecht:
    männlich
    Minecraft:
    MrPyro13
    Das funktioniert jetzt. Jedoch geht das mit dem countdown nicht

    Code (Text):
    1.  
    2. package de.mrpyro13.ImpComs;
    3.  
    4. import org.bukkit.Bukkit;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandExecutor;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.plugin.Plugin;
    9.  
    10. public class iCountdown_Command implements CommandExecutor {
    11.  
    12.     private Main inst;
    13.  
    14.     public iCountdown_Command(Main plugin){
    15.         this.inst = plugin;
    16.     }
    17.  
    18.     @Override
    19.     public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args) {
    20.         //SCRIPT ANFANG
    21.    
    22.         int countdown;
    23.         sender.sendMessage("§aDer Countdown wurde gestartet");
    24.         countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(inst, new Runnable() {
    25.             int x;
    26.             int high = 11;
    27.             @Override
    28.             public void run() {
    29.                 if(high != 0) {
    30.                     high--;
    31.                     sender.sendMessage("§6Countdown läuft noch §b " + high + " §5Sekunden");
    32.                 } else {
    33.                     sender.sendMessage("§aCountdown vorbei");
    34.                     Bukkit.getScheduler().cancelTask(countdown);
    35.                 }
    36.             }
    37.         }, 0, 20);
    38.    
    39.         //SCRIPT ENDE
    40.         return true;
    41.     }
    42.  
    43. }
    44.  
    Das was ich rot markiert habe, buggt: Ich fahre über den Fehler, als Problemlösung kommt das:
    Dann ist es immernoch rot markiert und es kommt als Problemlösung das:
    Jetzt ist das rot markierte richtig, aber das grün markierte wird rot unterstrichen und möchte das final weg haben.
    Langsam drehe ich durch :(

    @xXSasukeXx und @games6471
    Programmierst ihr auch in extra Klassen oder eher in der Main?
     
  10. games6471
    Online

    games6471

    Einfache Alternative:

    Code (Text):
    1. new BukkitRunnable() {
    2.             int x;
    3.             int high = 11;
    4.  
    5.             @Override
    6.             public void run() {
    7.                 if (high != 0) {
    8.                     high--;
    9.                     sender.sendMessage("§6Countdown läuft noch §b " + high + " §5Sekunden");
    10.                 } else {
    11.                     sender.sendMessage("§aCountdown vorbei");
    12.                     this.cancel();
    13.                 }
    14.             }
    15.         }.runTaskTimer(inst, 0, 20);
    Man sollte seinen Programmcode logisch in verschiedene Klassen unterteilen und nicht alles in eine Klasse stopfen. Das verbessert deutlich die Übersichtlichkeit und viele weitere Dinge.
     
    • Gefällt mir Gefällt mir x 1
  11. TheBlackIPs
    Offline

    TheBlackIPs

    Registriert seit:
    12. März 2014
    Beiträge:
    5
    Wenn du keine weitere Verwendung für sie hast, könntest du die Variablen "countdown" und "x" einfach löschen... Momentan werden sie jedenfalls nicht benutzt.
     
  12. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.064
    Geschlecht:
    männlich
    Du solltest auf jeden Fall extra Klassen benutzen, dafür ist Java da.
     
  13. MrPyro13
    Online

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    826
    Geschlecht:
    männlich
    Minecraft:
    MrPyro13
    Ich nutze auch extra Klassen ^^