Java Bukkit Plugin: Wie funktioniert ein zeitlich begrenzte Pause zwischen zwei Teilen im Code?

1 Antwort

Ganz einfach, Minecraft läuft eigentlich in einem Thread (da hat sich zwar schon was geändert, aber das ist nebensächlich), du kannst nicht einfach einen wichtigen Thread komplett pausieren, damit würdest du den ganzen Server pausieren.

Du kannst entweder einen neuen Thread erstellen, einen Timer benutzen oder den Bukkit Scheduler benutzen.

was hälst du für die Beste Methode um dies hier zu verwenden ?

while(irgendwas == true) {
    if(irgendwasanderes == true{
        //Wartezeit
        //irgendeine Berechnung
    }
}
0
@AlphaJet

Wenn es bei Bukkit schon einen extra Scheduler gibt, dann nutze den doch. Wie der verwendet wird, steht in der Dokumentation.

1

Kannst du dich Mal etwas klarer ausdrücken?

0

Probleme mit meinem Minecraft-Plugin?

Wenn ich mein Plugin ausführe, dann scheitert es an diesem Fehler:

[Cores] Task #11 for Cores v1.0 generated an exception
java.util.NoSuchElementException
at java.util.ArrayList$Itr.next(Unknown Source)
at net.exounity.hypertext.game.Countdown$1.run(Countdown.java:63)
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:59)
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:351)
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:866)
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:422)
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:760)
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:663)
at java.lang.Thread.run(Unknown Source)

Der Code der angeblich das Problem macht ist:

while (!(Data.teamblue.isEmpty()) && !(Data.teamred.isEmpty())) {
  randomIterator = Data.teamrandom.listIterator(0);

  try {
    while(randomIterator.hasNext()){
      int rand = (int)((Math.random()) * 2 + 1);
      System.out.println(rand);

      if (rand == 1) {
        Data.teamred.add(randomIterator.next());
      }
      else if (rand == 2) {
        Data.teamblue.add(randomIterator.next());
      }
    }
  }
  catch (NullPointerException e) {
  }

Wenn ich jedoch abfrage, was sich in Data.teamrandom befindet, erhalte ich (mit 2 Accounts):

CraftPlayer(name=_hypertext), CraftPlayer(name=cryptox)

Kann mir bitte jemand helfen?

Vielen Dank im Voraus!

...zur Frage

Bukkit Plugin .txt auslesen

Hallo zusammen, ich programmiere gerade an einem Bukkit Plugin für meinen Server. Das Command an dem ich gerade arbeite ist das /warp Command. ICH WEISS, DASS ES PLUGINS GIBT, DIE MAN SICH HERUNTERLADEN KANN UND WO DAS /WARP PLUGIN DRIN IST!! Aber ich programmiere es trotzdem selbst, um meine Java Kenntnisse zu verbessern. Also jetzt zu meinem Problem: ich speichere die Informationen zu den Warps in einer txt. Das speichern ist auch nicht das Problem aber irgendwie lässt sich die txt nicht auslesen. Ich habe keine ahnung, was ich falsch mache. Ich habe gegoogelt und verschiedenes ausprobiert, was ich da gefunden habe aber es funktioniert trotzdem nicht.

Kleine Info zum Code: Der Konstruktor der Klasse Warp braucht String warpname, Location location, UUID creatoruuid

Hier der Code und Danke im voraus für hilfreiche Antworten!

public void initWarps(Plugin plugin) {
    try {
        Scanner s = new Scanner(warpfile);
        while(s.hasNextLine()) {
            System.out.println(s.nextLine());
            String[] rawinfo = s.nextLine().split(";");
            warps.add(new Warp(rawinfo[0], new Location(plugin.getServer().getWorld(rawinfo[1]), Integer.valueOf(rawinfo[2]), Integer.valueOf(rawinfo[3]), Integer.valueOf(rawinfo[4]), Float.valueOf(rawinfo[5]), Float.valueOf(rawinfo[6])), UUID.fromString(rawinfo[7])));
        }
        s.close();
    } catch (FileNotFoundException e) {
        System.err.println("Error at " + e.getLocalizedMessage());
    }
}
...zur Frage

do while + try catch Abfrage in Java zur Eingabenkontrolle erzeugt unendlichen Loop

Also ich will in Java eine Methode schreiben die die Eingabe kontrolliert und dann bei korrekter Eingabe den eingegeben Wert zurückgibt. Mein Quellcode sieht so aus

public static int liesInt(String Ausgabe)
{       
    Scanner eingabe = new Scanner (System.in);
    int eingegeben = 0;
    System.out.println(Ausgabe);
    boolean error = true;
    
    do
    {
        try
        {
            eingegeben = eingabe.nextInt();
            error = false;
        }
        catch(InputMismatchException e)
        {
            System.out.println("Bitte geben Sie nur ganze Zahlen ein!");
            error = true;
        }   
    } while (error == true);
            
    return eingegeben;
}

mein problem ist dass er nach dem der catch greift und den error wert auf true gesetzt ist er nicht wieder zum try springt und nicht erneut nach einer eingabe fragt...

wo ist mein fehler eigentlich müsste er nach dem catch wieder oben anfangen beim try aber das passiert nicht

...zur Frage

Teamspeak gibt Fehler aus wenn ich mit Java Socket schreibe. Was tun?

Guten Tag. Ich bin dabei eine Teamspeak Query API selber zu schreiben. Allerdings ist es so, dass Teamspeak mir einen Fehler ausgibt wenn ich mit einem PrintWriter schreibe und ihn danach schließe. Der Fehler:

18:27:43.034724|ERROR  |             |  |error writing tcp socket Eine bestehende Verbindung wurde softwaregesteuert

                                                      durch den Hostcomputer abgebrochen

Code:

public String writeToConnection(String text) {
    try {
        PrintWriter writer = new PrintWriter(connection.getOutputStream());
    writer.println(text);
    writer.close();

    return getLatestMessage();
} catch (IOException e) {
    return "-1";
}

}

public String getLatestMessage() {
    try {
        DataInputStream inputStream = new DataInputStream(connection.getInputStream());
        Scanner scanner = new Scanner(connection.getInputStream());
        String line = "-1";
        while((line = scanner.next()) != null) {}
        return line;
    } catch (IOException e) {
        return "-1";
    }
}

...zur Frage

Android APP stürzt ab wenn ich etwas in einer Datei lese und dann speichere?

Hallo, ich habe eine meiner ersten Apps mit Java programmiert. Das Problem ist, dass die App abstürzt, wenn ich erst lese was in einer Datei steht und anschliessend die Datei überschreibe.

Code: if(gewonnenodernicht){

                int ausgabe;
                StringBuffer dateiInhalt = new StringBuffer("");
                try {
                    FileInputStream in = openFileInput("score.txt");

                    while( (ausgabe = in.read()) != -1)
                        dateiInhalt.append((char)ausgabe);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                dateiaddieren = Integer.parseInt(dateiInhalt.toString());
                dateiueberschreiben = dateiaddieren + gesAugenzahl;

                String dateiname = "score.txt";
                String score = Integer.toString(dateiueberschreiben);
                FileOutputStream outputStream;


                try {
                    outputStream = openFileOutput(dateiname, Context.MODE_PRIVATE);
                    outputStream.write(score.getBytes());
                    outputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
            Intent Home = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(Home);
        }

Kann mir jemand sagen was der Grund ist und wie ich den Fehler beheben kann? Es funktioniert eigentlich wenn ich es mit AndroidSTudio auf dem Handy laufen lasse. Aber nachdem ich eine .apk erstellt habe nicht mehr.

...zur Frage

Wieso funktioniert dieses Minecraft Plugin nicht?

Hi Leute,

ich habe hier ein Minecraft Plugin, dass Spielernamen aus einer Datenbank auslesen soll (mit dem Command /player wird alles gestartet). Wenn ich aber /player eingebe, kommt sowas wie com.mysql.jdbc.JBDC4ResultSet@23bd1b13.

What did I do wrong???

LG, hier ist der Code:

@Override
public void onEnable() {  
    getCommand("player").setExecutor(this);
    System.out.println("Plugin aktiviert");
}


@Override
public void onDisable() {
    System.out.println("Plugin deaktiviert");
}

@Override
public boolean onCommand(CommandSender sender, Command command, String cmd, String[] args) {

    connect();
    createTable();
    ResultSet rs = getResult("SELECT player FROM player WHERE server = 'defense' and active = 'true'");
    System.out.println("[DefenseLogin] Player: " + rs);
    
    return false;
}

  public static String username = "***";
  public static String password = "***";
  public static String database ="***";
  public static String host = "***";
  public static String port = "3306";
  public static Connection con;
  
  public static void connect()
  {
    if (!isConnected()) {
      try
      {
        con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password);
        Bukkit.getConsoleSender().sendMessage("MySQL Verbindung aufgebaut");
      }
      catch (SQLException e)
      {
        e.printStackTrace();
      }
    }
  }
  
  public static void close()
  {
    if (isConnected()) {
      try
      {
        con.close();
        Bukkit.getConsoleSender().sendMessage("MySQL Verbindung geschlossen");
      }
      catch (SQLException e)
      {
        e.printStackTrace();
      }
    }
  }
  
  public static boolean isConnected()
  {
    return con != null;
  }
  
  public static void createTable()
  {
    if (isConnected()) {
      try
      {
        con.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS player (ID INTEGER NOT NULL, player VARCHAR(20), server VARCHAR(20), active VARCHAR(10), PRIMARY KEY(ID))");
      }
      catch (SQLException e)
      {
        e.printStackTrace();
      }
    }
  }
  
  public static void update(String qry)
  {
    if (isConnected()) {
      try
      {
        con.createStatement().executeUpdate(qry);
      }
      catch (SQLException e)
      {
        e.printStackTrace();
      }
    }
  }
  public static ResultSet getResult(String qry)
  {
    if (isConnected()) {
      try
      {
        return con.createStatement().executeQuery(qry);
      }
      catch (SQLException e)
      {
        e.printStackTrace();
      }
    }
    return null;
  }

}
...zur Frage

Was möchtest Du wissen?