Bukkit Plugin Scanner

  • Themenstarter Themenstarter LordKnaeckebrot
  • Beginndatum Beginndatum
L

LordKnaeckebrot

Gast
Hallo,

ich habe ein Problem mit meinem Bukkit Plugin!
Ich will ein Plugin schreiben wo einem die Server regeln Abgefragt werden und man muss mit "Ja" oder "Nein" antworten! Bei der falschen antwort soll stehen: ""Falsch! Versuche es später nocheinmal!".

Den Code Poste ich am Ende, nur ich weiß nicht wie ich machen kann das nachdem der Player das Command geschriben hat, dann erstmal nur noch was schreibt was der Server erkennt, und nicht in den Chat kommt!??!!

Ich bin noch ein Anfänger in Java!

Hier der Code:

Java:
package me.lordknaeckebrot.test;

import java.util.Scanner;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class test extends JavaPlugin {


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

	@Override
	public void onEnable() {
		System.out.println("[Heal] Plugin by marks99011!");
		System.out.println("[Heal] Plugin aktiviert!");
		
	}

	public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
		
		boolean erfolg = false;
		
		
		Player p = (Player)sender;
		
		if(cmd.getName().equalsIgnoreCase("gStart")){
			if(args.length == 0){
				p.sendMessage(ChatColor.BLUE + "Wilkommen bei der Anmeldung");
				p.sendMessage(ChatColor.BLUE + "Jetzt wird der Server fragen stellen und sie müssen in einem Satz Antworten!");
				p.sendMessage(ChatColor.BLUE + "Frage 1:");
				p.sendMessage(ChatColor.BLUE + "Darfst du Griefen?");
				
				String hallo = "Ja";
				
				Scanner input=new Scanner(System.in);
				
				String in=input.next();
				
				if (in!=hallo) {
					
					p.sendMessage("Falsch! Versuche es später nocheinmal!");
					
				}
				
				
				
				

				
				
				
			}
			erfolg = false;
		}
		
		
		
		
		
		return erfolg;
	}
	
	
	
	
}
 
Fragen bezüglich Minecraft, Bukkit, Mods u.d Plugins sollte man besser in entsprechenden Fachforen stellen anstatt hier da dort die Wahrscheinlichkeit höher ist das es dort Leute gibt die sich mit den nötigen APIs auskennen.

vote 4 move
 
Hi,
das senden von den Messages passt, dein Ansatz zum überprüfen dagegen ist völlig falsch.

Die Methode onCommand soll true zurückgeben wenn der Command gültig ist (z.b. wenn ein Command nur von einem Spieler eingegeben werden soll und man versucht diesen von der konsole aufzurufen hätte man einen fall wo man false zurückgibt, true gibt man zurück wenn der command ausgeführt wird).

Was du dagegen haben willst ist vermutlich sowas in Richtung spieler gibt "/gStart" ein kriegt dannach die Fragen gestellt, tippt die Antworten ein (die dann am besten nicht normal in den Chat an alle geschrieben werden) und wenn alle passen passiert irgendwas.

System.in ist hier komplett falsch, das ließt eingaben von der Systemeingabe und hat garnichts mit dem Minecraft-Chat zu tun.

Für den Chat benötigst du einen ChatLister, dieser könnte so aussehen (für weiteres zu listenern schau dir tutorials von bukkit an, gibt sehr gute quellen, z.b. das hier: http://wiki.bukkit.org/Plugin_Tutorial)
Java:
public class ChatLogger
    implements Listener
{
    @EventHandler //hier evtl noch priorität einfügen
    public void onPlayerChat( PlayerChatEvent e )
    {
        //chatevent auswerten
    }

}

In der Klasse kriegst du jetzt allerdings alle Chatevents, du willst aber in dem Fall nur die Events von dem Spieler der gerade in der /gstart-phase ist.
Du könntest also jeden Spieler der /gstart eingibt in einer Liste/Set/Map speichern und in der chat-Methode erstmal prüfen ob das Event überhaupt von einem deiner aktiven Spieler kam die gerade Fragen beantworten.
Falls ja besorgst du dir die Antwort auf die Frage bei der der Spieler gerade ist (die du dir entsprechend auch merken musst) und prüfst ob seine Antwort korrekt ist, falls ja bekommt er die nächste frage, falls nein startest du die fragen für ihn neu oder machst irgend etwas anderes mit ihm.
Auf alle Fälle verschluckst du das Event, so dass es nicht weiter an den Server geht und normal im Chat landet. (auf dem event setCancelled(true) aufrufen).

Strings vergleicht man übrigens nicht mit != oder == sondern mit string1.equals(string2).

Plugins die so ein Frage-Antwort spielchen mit dem Spieler machen gibt es aber auch schon in vielen Ausführungen, auch gibt es in entsprechenden Foren einige Leute die teils kostenlos und teils für wenig Geld Plugins auf Anfrage erstellen, ich vermute mal du wirst weniger Zeit benötigen dort jemanden zu finden der dir das Programmiert als alles selbst zu lernen, besonders wenn dir die java-grundlagen fehlen.

Gruß
 

Neue Themen


Zurück
Oben