• 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 warten lassen bzw nach einer gewissen Zeit etwas durchführen

C

CheeseBurgerKingKong

Guest
Moin Leute,
Ich möchte gerne das mein Event Plugin, zu unterschiedlichen Zeiten Messages ausgibt.
Nur leider funktioniert es nicht so, wie ich es haben möchte.
Ich hoffe ihr könnt mir helfen ;)
z.b:
PHP:
eventSendMessage(" Das Event startet jetzt"); /* Das wird noch ausgefürht */
eventWait(10, " Bla Bla Bla"); /* Die beiden nicht mehr, er überspringt es einfach. */
eventWait(20, "bla bla bla");
/* folge Code wird wieder ausgeführt */
}

/* Die Mehode fürs Warten*/
	public void eventWait(final long sek, final String message){
		Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
			public void run() {
				eventSendMessage(message);
			}
			
		},sek * 20L);
	}
 
C

CheeseBurgerKingKong

Guest
Eigentlich wird durch ein Command /block start das Event aus gelöst werden.
PHP:
else if (args[0].equalsIgnoreCase("start")){
							if(Variables.players.size() > 3){
								if(Variables.questions.size() > 3){
									if(Variables.start == 0){
										Variables.start = 1;
										eventWait(2, "Das Quiz startet jetzt. Viel Spaß");
										
								        for(String question: Variables.questions.keySet()){
								        	eventSendMessage("Hier ist kommt die nächste Frage:");
								        	eventWait(15, question);
								        	eventWait(30, "Die Antwort war richtig");
}
}
}
}

Die Metoden die Aufgerufen werde.
PHP:
public void eventWait(final long sek, final String message){
		Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
			public void run() {
				eventSendMessage(message);
			}
			
		},sek * 20L);
	}
	
	
	public void eventSendMessage(final String message){
		if (message!=null){
			for(Player p : Bukkit.getOnlinePlayers()) {
				if(Variables.players.containsKey(p)){
					p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + message);
				}
			}
		}
	}
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Bekommst Du irgendwelche Fehlermeldungen im Log? Und poste hier bitte ALLE Klassen, die mit dem, was Du machen willst, irgendetwas zu tuen haben. Und dann bitte nicht als PHP-Code, sondern im normalen
Code:
-Tag (und evtl. als [SPOILER]), da man den PHP-Code kaum lesen kann.
 
Zuletzt bearbeitet:
C

CheeseBurgerKingKong

Guest
Code:
public class Main extends JavaPlugin {
	
	public static Logger LOG = Logger.getLogger("Minecraft");
	public static Main INSTANCE;
	
	
	@Override
	public void onDisable() {
	}

	@Override
	public void onEnable() {
		Main.INSTANCE = this;
		this.getServer().getPluginManager().registerEvents(new EventPlayerChatEvent(), this);		
	}

	
	public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args){
		if(sender instanceof Player) {
			Player pl = (Player)sender;	
			if(cmd.getName().equalsIgnoreCase("block")){
				if((args.length >= 1) && (args[0].equalsIgnoreCase("start") || (args[0].equalsIgnoreCase("join"))){

 if(args[0].equalsIgnoreCase("join")){	
							
									if(!(Variables.players.containsKey(pl))){
										Variables.players.put(pl, pl.getName());
										
										pl.sendMessage("Du nimmst jetzt an Event teil");
										return true;
									}
								}
							}

					//start
					else if (args[0].equalsIgnoreCase("start")){
						if(Variables.players.size() > 1){
							if(Variables.questions.size() > 1){
								if(Variables.start == 0){
									Variables.start = 1;
									eventWait(5, "Das Quiz startet jetzt. Viel Spaß");
										
								        for(String question: Variables.questions.keySet()){
								       	eventSendMessage("Hier ist kommt die nächste Frage:");
								       	eventWait(15, question);
								       	if(question != null)
								        		if(Variables.questions.get(question) == 0){
								        			eventWait(15, "Die Antwort war: Richtig");
								        		}else{
								        			eventWait(15, "Die Antwort war: Falsch");	
								        		}
								        	
								        }
								        
								        eventWait(15, "Das Quiz ist jetzt beendet.")
										for(Player p : Bukkit.getOnlinePlayers()) {
											if(Variables.players.containsKey(p)){
												Variables.players.remove(p);
												p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + "Das Spiel ist beendet.");
									
											}
										}
										Variables.questions.clear();
										Variables.start = 0;
										return true;
									}
									pl.sendMessage("Das Event läuft schon.");
									return true;
								}
								pl.sendMessage("Es sind zu wenige Fragen.");
								return true;
							}
							pl.sendMessage("Es sind zu wenige Spieler.");
							return true;
						}
				}
			}
		}
		return false;
	}	
	
	
	public void eventWait(final long sek, final String message){
		Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
			public void run() {
				eventSendMessage(message);
			}
			
		},sek * 20L);
	}
	
	
	public void eventSendMessage(final String message){
		if (message!=null){
			for(Player p : Bukkit.getOnlinePlayers()) {
				if(Variables.players.containsKey(p)){
					p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + message);
				}
			}
		}
	}
	
	
}

Code:
public class Variables {
	
	//Maps
	public static HashMap<String, Integer> questions = new HashMap<String, Integer>();
	public static HashMap<Player, String> players = new HashMap<Player, String>();
	
	
	//Start
	public static int start = 0;

Code:
public class EventPlayerChatEvent implements Listener {
	
	@EventHandler
	public void PlayerCommand(PlayerCommandPreprocessEvent event){
		String message = event.getMessage();
		Player player = event.getPlayer();
		if (message.startsWith("/block start") || message.startsWith("/msg")){
		}else{
			if (message.startsWith("/") && Variables.players.containsKey(player)){
				event.getPlayer().sendMessage("Du darfst keine Befehle verwenden im Event");
				event.setCancelled(true);
			}
		}
	}
}

Ich gab keine Fehlermeldungen. Er hat alles ausfgeführt, nur die eventWait() übersprungen.
 
Zuletzt bearbeitet:

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Wenn Du einen Scheduler startest, wird nicht der Code danach erst ausgeführt, wenn das Delay des Schedulers abgelaufen ist, sondern sofort. Wenn das ganze erst nach Ablauf der Zeit geschehen soll, muss das ganze in den Code der Methode "run()".
 
C

CheeseBurgerKingKong

Guest
Also, wenn ich das richtig verstehe muss der ganze Command Teil in den Run() rein.
Soll sich also das ding immer selbstaufrufen. Denn es soll doch nur die Message später ausgegeben werden. Ich glaube ich verwirr mich gerade selber :(
Ich versuch es einfach mal :D

Edit:
Ich versteh nicht ganz wie es es umsetzten soll, kannst du mir es an einem Beispiel vielleicht zeigen. :)
 
Zuletzt bearbeitet:
Oben