Hallo lieber jentolon,

Nr. 4) kommt denke ich nicht infrage, da die Weltraum-Verträge es verbieten, Teile dieser in Besitz zu nehmen.

Die anderen Nummern würden wahrscheinlich daran scheitern, da dein Staat wahrscheinlich nur wenige Einwohner hätte und dieser "Staat" nicht von anderen Ländern anerkannt würde oder so.

Hoffentlich konnte ich helfen.

...zur Antwort
Spigot mit HSQLDB verknüpfen?

Hallo liebe Community,

ich habe ein "kleines" Problem. Ich möchte gerne ein Bansystem entwickeln, was den Spielern mit der Permission "pb.ban" ermöglicht, andere Spieler time-/permabann zu geben. Da ich unbedingt eine DB verwenden möchte und nicht mit der config.yml oder so, habe ich die DB in Main verknüpft. Ich habe weiterprogrammiert, und als ich den CommandExecutor für den Befehl hatte, wollte ich es endlich ausprobieren. Wie erwartet hat es Nicht funktioniert. Ich stelle meinen gesamten Quellcode online, in der Hoffnung, die Fehler zu korrigieren.

Hilf doch mit!

Mit freundlichen Grüßen,

Halllomenschen

Teil 1:

Code(Main.class):

package de.sanel.plustubeBan;

import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin;

import de.sanel.plustubeBan.commands.BanCommand;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;

public class Main extends JavaPlugin{

Connection con = null;
public static Main instance;

//Main-Constructor----------------------------------------------------------
    public Main() {
    
    try {
        
        Class.forName("org.hsqldb.jdbcDriver");
        
        
    }catch(ClassNotFoundException e) {
        return;
    }
    
    try {
        con = DriverManager.getConnection("jdbc:hsqldb:file:C:\\Users\\AMD\\eclipse-workspace\\Datenbank; shutdown=true", "root", "root");
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
}
//--------------------------------------------------------------------------
    public static Main getPlugin()
      {
        return instance;
      }
    
    
  private String getPrefix() {
        return "§9PlustubeBan§8> §r";
      }


  
public void onEnable(){
    Bukkit.getConsoleSender().sendMessage(getPrefix() + "§6" + getDescription().getName() + " v" + getDescription().getVersion() + " §awurde aktiviert.");
    
    getCommand("banPlayer").setExecutor(new BanCommand());
     
}

public void onDisable(){
     Bukkit.getConsoleSender().sendMessage(getPrefix() + "§6" + getDescription().getName() + " v" + getDescription().getVersion() + " §awurde deaktiviert.");

}

}

...zum Beitrag

Teil 2:

Code(BanCommand.java):

package de.sanel.plustubeBan.commands;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;


import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.sql.Statement;


public class BanCommand implements CommandExecutor{


	Connection con = null;
	
	
	@Override
	public boolean onCommand(CommandSender sender, Command command, String string, String[] args) {
		
		if(sender instanceof Player) {
			
			Player p = (Player) sender;
			
			if(p.hasPermission("pb.ban")) {
				
				if(args.length == 1) {
					
					String name = args[1];
					
					try {
						
						Statement stmt = con.createStatement();
						String sql = "INSERT INTO BANNEDPLAYERS(PlayerName, BannStatus) VALUES(" + name + ", 1)";
						ResultSet res = stmt.executeQuery(sql);
						res.close();
						stmt.close();
						p.sendMessage("§eDu hast den Spieler " + name + "§e erfolgreich gebannt.");
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}else if(args.length == 2) {
					
					String name = args[1];
					String time = args[2];
					
					int banTime = Integer.valueOf(time);
					
					
					try {
						
						Statement stmt = con.createStatement();
						String sql = "INSERT INTO BANNEDPLAYERS(PlayerName, BannStatus, BannTime) VALUES(" + name + ", 1," + time + ")";
						ResultSet res = stmt.executeQuery(sql);
						res.close();
						stmt.close();
						
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}else {
					p.sendMessage("§cMeinst du §e/ban [Player] [Time]§c?");
				}
				
			}else {
				p.sendMessage("§cDu hast dazu keine Rechte!");
			}
			
		}
		
		
		return false;
	}


}
...zur Antwort
Multithreading mit Bukkit?

Hallo liebe Community,

Ich habe ein Plugin geschrieben, womit 2 Methoden gleichzeitig laufen sollen. Beim Laden des Plugins auf meinen Test-Server kommt nach dem Enabeln eine Fehlermeldung:

[11:00:34 WARN]: Exception in thread "Thread-8"
[11:00:34 WARN]: java.lang.IllegalStateException: Asynchronous scoreboard creation!
[11:00:34 WARN]:    at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14)
[11:00:34 WARN]:    at org.bukkit.craftbukkit.v1_8_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:45)
[11:00:34 WARN]:    at org.bukkit.craftbukkit.v1_8_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:1)
[11:00:34 WARN]:    at de.nurteam.varo.ScoreboardThread.setScore(ScoreboardThread.java:25)
[11:00:34 WARN]:    at de.nurteam.varo.ScoreboardThread.run(ScoreboardThread.java:44)

Kurze Beschreibung des Plugins:

Ich programmiere an einem Varo-Plugin, indem es einen Scoreboard geben soll, wo steht, wie lange man noch Spielen darf. Dieser Scoreboard soll in einer Schleife laufen, um die Spielzeit zu aktualisieren. Gleichzeitig soll noch eine Methode laufen, die reguliert, wie lange man noch spielen darf und wie groß die Border ist usw.

Nun müssen beide Methoden gleichzeitig laufen, da sie voneinander abhängig sind und das Plugin nicht läuft, wenn eine Methode versagt. Hoffentlich habe ich mich verständlich ausgedrückt:).

Hier sind Teile meines Plugins als Code einsehbar:

//Klasse die Scoreboard und Multithreading managed:
import org.bukkit.Bukkit;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;

public class ScoreboardThread extends Thread{

String name;

ScoreboardThread(String s){
    
    this.name = s;


}

public static void setScore() {


    Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
    Objective objective = ((org.bukkit.scoreboard.Scoreboard) board).registerNewObjective("abc", "abc");
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    objective.setDisplayName("§6§lWillkommen bei Ravo!");
    objective.getScore("§e ").setScore(8);
    objective.getScore("§5 ").setScore(6);
    objective.getScore("§bDu gehörst zum Team: #").setScore(5);
    objective.getScore("§4 ").setScore(4);
    objective.getScore("§cUnser TS3-Server: PlusTube.eu ").setScore(3);
    objective.getScore("§3 ").setScore(2);
    objective.getScore("§2Viel Spaß! ").setScore(1);

}

public void run() {
    if(this.name == "t1") {
        
        setScore();
    }
    if(this.name == "t2") {
        Varo.getPlugin().startChecking();
    }
}

}

...zum Beitrag

Klasse die onEnable() und Spielzeit managed:

public void onEnable() {
    instance = this;
    this.recordingTime = new HashMap<>();
    this.invincible = new HashMap<>();
    this.alive = new ArrayList<>();
    
    ScoreboardThread t1 = new ScoreboardThread("t1");
    ScoreboardThread t2 = new ScoreboardThread("t2");
    
    t1.start();
    t2.start();
  }


  public void onDisable() {
    Bukkit.getConsoleSender().sendMessage(getPrefix() + "§6" + getDescription().getName() + " v" + getDescription().getVersion() + " §cwurde deaktiviert.");
  }

  public void startChecking()
  {
    new BukkitRunnable()
    {
	public void run()
      {
        Calendar calendar = Calendar.getInstance();
        String name;
        if ((calendar.get(10) == 19) && (calendar.get(12) == 30) && (calendar.get(13) == 0)) {
          int boardRadius = Varo.this.borderRadius - 60 * (Varo.this.amountVaroPlayers - Varo.this.recordingTime.size());
          Varo.this.loadBorder(boardRadius);


          for (Iterator localIterator = Varo.this.recordingTime.keySet().iterator(); localIterator.hasNext(); ) { name = (String)localIterator.next();
            Varo.this.recordingTime.put(name, Integer.valueOf(Varo.this.recordTime));
          }
        }


        for (String name1 : Varo.this.recordingTime.keySet())
        {
          if (Bukkit.getPlayer(name1) == null)
            continue;
          if (!Bukkit.getPlayer(name1).isOp()) {
          if ((((Integer)Varo.this.recordingTime.get(name1)).intValue() == 15) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 10) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 5) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 4) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 3) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 2))
            Bukkit.broadcastMessage("§e" + name1 + " §3wird in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden gekickt.");
          else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 1)
            Bukkit.broadcastMessage("§e" + name1 + " §3wird in §eeiner §3Sekunde gekickt.");
          else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 0 && (Bukkit.getPlayer(name1).getName() != "Water_Storm")){
            Bukkit.getPlayer(name1).kickPlayer("§4Deine Aufnahmezeit ist aufgebraucht. §cDu wurdest deshalb gekickt.");
            kickZeit = calendar.DAY_OF_MONTH;
          }
          }
          else if (Bukkit.getPlayer(name1).isOp()){
        	  if ((((Integer)Varo.this.recordingTime.get(name1)).intValue() == 15) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 10) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 5) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 4) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 3) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 2)) {
                  Bukkit.broadcastMessage("§e" + name1 + " §3wird in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden gekickt.");
        	  	  Bukkit.getPlayer(name1).sendMessage("§3Deine Runde endet in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden.");}
                else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 1) {
                  Bukkit.getPlayer(name1).sendMessage("§eDeine Runde§3 endet in einer Sekunde.");
                Bukkit.getPlayer(name1).sendMessage("§4Deine Aufnahmezeit ist aufgebraucht. Da du der Owner des Servers bist, kannst du dich noch im Server umschauen");
        	  Bukkit.getPlayer(name1).setGameMode(GameMode.SPECTATOR);
              kickZeit = calendar.DAY_OF_MONTH;
          }}


          if (((Integer)Varo.this.recordingTime.get(name1)).intValue() > 0) {
              Varo.this.recordingTime.put(name1, Integer.valueOf(((Integer)Varo.this.recordingTime.get(name1)).intValue() - 1));
            }


        }


        for (String name1 : Varo.this.invincible.keySet())
        {
          if (Bukkit.getPlayer(name1) != null)
          {
            if ((((Integer)Varo.this.invincible.get(name1)).intValue() == 3) || (((Integer)Varo.this.invincible.get(name1)).intValue() == 2)) {
              Bukkit.broadcastMessage("§e" + name1 + " §3ist in §e" + Varo.this.invincible.get(name1) + " §3Sekunden angreifbar");
            } else if (((Integer)Varo.this.invincible.get(name1)).intValue() == 1) {
              Bukkit.broadcastMessage("§e" + name1 + " §3ist in §eeiner §3Sekunde angreifbar");
            } else if (((Integer)Varo.this.invincible.get(name1)).intValue() == 0) {
              Bukkit.getPlayer(name1).sendMessage("§cDu bist nun verwundbar");
              Varo.this.invincible.remove(name1);
              continue;
            }


            if (((Integer)Varo.this.invincible.get(name1)).intValue() > 0)
              Varo.this.invincible.put(name1, Integer.valueOf(((Integer)Varo.this.invincible.get(name1)).intValue() - 1));
          }
          else {
            Varo.this.invincible.remove(name1);
          }
        }
      }
    }
    .runTaskTimer(this, 0L, 20L);
  }


  public void loadBorder(int boardRadius)
  {
    WorldBorder border = Bukkit.getWorld(this.worldName).getWorldBorder();
    border.setCenter(Bukkit.getWorld(this.worldName).getSpawnLocation());
    border.setSize(boardRadius);
    border.setDamageAmount(5.0D);
  }
}

Etwas unübersichtlich aber nur der obere Teil ist eigentlich wichtig.

Das Scoreboard hat noch keine Schleife, die die Spielzeit aktualisiert.

Ich frage mich, warum das nicht funktioniert, bin aber noch Anfänger und mache natürlich Fehler.

Könnt ihr mir weiterhelfen? Ist eine lange Frage aber ich möchte euch keine Info vorenthalten:)

MfG, Halllomenschen

...zur Antwort

Wenn du die ganz hohen meinst dann bist du am arsch, weil du den boden berührst und die Elektronen mit ihren 5000Volt durch deinen Körper strömen und dabei sämtliche organe zum Versagen bringen wenn du nicht voher einen Herzstillstand erleidest.

LG Hallomenschen

P.S: Mach sowas lieber nicht

...zur Antwort