Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Minecraft
You last visited: Today at 18:08

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Frage zum EventHandler

Discussion on Frage zum EventHandler within the Minecraft forum part of the Other Online Games category.

Reply
 
Old   #1
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
Question Frage zum EventHandler

Hallo, ich weiß nicht mehr wie man den ich hoffe und glaube "else" Befehl anwendet. Mein Plugin soll so definiert werden:
In die erste Zeile schreibt man [REDEEMCODE] und da drunter kann man schreiben was man will, dann soll man ein Rechtsklick drauf machen, einen Text erhalten und 2 Diamanten, soweit so gut bin ich ja schon, jedoch kann man das ja so lange drücken, bis man 300 Diamanten hat, von daher wie definiert man dies nochmal? Ich weiß das es mit else war, aber es gibt auch andere Möglichkeiten, wäre nett wenn ihr mir helfen könntet.


Der Code:
Code:
public class RedeemListener implements Listener {	

	@EventHandler (priority = EventPriority.NORMAL)
	public void onPlayerInteract(PlayerInteractEvent event){
		if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
			BlockState Zustand = event.getClickedBlock().getState();
			if(Zustand instanceof Sign){
				Sign Schild = (Sign)Zustand;
				Player Spieler = event.getPlayer();
				if(Schild.getLine(0).equalsIgnoreCase("[REDEEMCODE]")){
					Spieler.sendMessage(ChatColor.GREEN + "Super du hast einen RedeemCode gefunden und eine Belohnung von 2 Diamanten erhalten.");
					Spieler.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
				}
				
				
			}
		}
	}
FunGoo✔ is offline  
Old 05/04/2012, 21:53   #2


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Der else "Befehl" ist nur dafür da falls eine if abfrage nicht klappt, also man fragt z.b :
Quote:
if(Schild.getLine(0).equalsIgnoreCase("[REDEEMCODE]")){
Spieler.sendMessage("Richtiger Text")
}else{
Spieler.sendMessage("Falscher Text")
}
Nun kommt an den Spieler der Text "Richtiger Text" falls [REDEEMCODE] auf dem Schild steht, wenn nicht bekommt der Player den Text "Falscher Text".
False is offline  
Thanks
1 User
Old 05/04/2012, 22:01   #3
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
Okay wäre, aber halt nur doof, wenn auf jedem Schild, dann falscher Text stände.
Jedenfalls danke erstmal für die Hilfe mit else, jedoch liegt es ja so, man bekommt ja trotzdem immer weiter Diamanten, man soll ja nur einmal Diamanten bekommen, von dem Schild.
FunGoo✔ is offline  
Old 05/04/2012, 22:12   #4


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Dafür müsstest du eine Config erstellen und benutzen :

OnEnable :
Code:
final FileConfiguration config = this.getConfig();
		config.addDefault("Player.clicked.Notch","False"); //Kann sein das man kein Default setzen muss ;)
		config.options().copyDefaults(true);
		saveConfig();
Zum laden im Event :
Code:
final FileConfiguration config = this.getConfig();
if(config.getString("Pfad.aktiv") = "False"){
Spieler.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
config.addDefault("Player.clicked." + event.getPlayer() , "True");
}else{
event.getPlayer().sendMessage("Du hast deine Diamanten schon erhalten");
}
saveConfig();
Ja das Ganze ist hier geschrieben daher unordentlich(Könnten Fehler drin sein, musst du schauen) :P
False is offline  
Old 05/04/2012, 22:12   #5
 
Elevenn's Avatar
 
elite*gold: 3
Join Date: Mar 2012
Posts: 1,432
Received Thanks: 266
Als 1. erstellst du eine HashMap
PHP Code:
public static HashMap<StringLocationsignlist = new HashMap<StringLocation>(); 
wenn dann jemand das Schild haut fügst du den Spieler mit der Location des schildes ein:
PHP Code:
PLUGIN.signlist.put(Spieler.getName(), schild.getLocation()); 
Mit dem code überprüfst du dann ob der spieler das schild schon benutzt hat:
PHP Code:
if (PLUGIN.signlist.containsKey(Spieler.getName())){
           return;

Wenn sich das plugin dann deaktiviert beim reload oder was auch immer, kannst du die hashMap in eine config speichern und beim laden wieder einfügen.
(Eigentlich kannst du das auch gleich via config machen.)
Elevenn is offline  
Old 05/04/2012, 22:25   #6
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
@false
Ja das Problem bei mir ist jetzt, dass der Hauptteil des Plugins im RedeemListener ist.
Der andere Teil, also OnEnable im Redeem Verzeichniss.

Ich kann ja mal zeigen wie weit ich momentan bin, doch weiter weiß ich echt nicht mehr :/

Redeem.java:

Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
	

public class Redeem extends JavaPlugin {
	public RedeemListener Listener = new RedeemListener();
	
	
	public void onEnable(){
	Bukkit.getPluginManager().registerEvents(Listener, this);
	final FileConfiguration config = this.getConfig();
	config.addDefault("Player.clicked.Notch","False"); //Kann sein das man kein Default setzen muss ;)
	config.options().copyDefaults(true);
	saveConfig();
	}
 }
RedeemListener:
Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;


public class RedeemListener implements Listener {	


	@EventHandler (priority = EventPriority.NORMAL)
	
	public void onPlayerInteract(PlayerInteractEvent event){
		if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
			BlockState Zustand = event.getClickedBlock().getState();
			if(Zustand instanceof Sign){
				Sign Schild = (Sign)Zustand;
				Player Spieler = event.getPlayer();
				if(Schild.getLine(0).equalsIgnoreCase("[REDEEMCODE]")){
					Spieler.sendMessage(ChatColor.GREEN + "Super du hast einen RedeemCode gefunden und eine Belohnung von 2 Diamanten erhalten.");
					Spieler.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
				}
				
				
			}
		}
	}
FunGoo✔ is offline  
Old 05/04/2012, 22:28   #7


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Quote:
Originally Posted by FunGoo✔ View Post
@false
Ja das Problem bei mir ist jetzt, dass der Hauptteil des Plugins im RedeemListener ist.
Der andere Teil, also OnEnable im Redeem Verzeichniss.

Ich kann ja mal zeigen wie weit ich momentan bin, doch weiter weiß ich echt nicht mehr :/

Redeem.java:

Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
	

public class Redeem extends JavaPlugin {
	public RedeemListener Listener = new RedeemListener();
	
	
	public void onEnable(){
	Bukkit.getPluginManager().registerEvents(Listener, this);
	final FileConfiguration config = this.getConfig();
	config.addDefault("Player.clicked.Notch","False"); //Kann sein das man kein Default setzen muss ;)
	config.options().copyDefaults(true);
	saveConfig();
	}
 }
RedeemListener:
Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;


public class RedeemListener implements Listener {	


	@EventHandler (priority = EventPriority.NORMAL)
	
	public void onPlayerInteract(PlayerInteractEvent event){
		if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
			BlockState Zustand = event.getClickedBlock().getState();
			if(Zustand instanceof Sign){
				Sign Schild = (Sign)Zustand;
				Player Spieler = event.getPlayer();
				if(Schild.getLine(0).equalsIgnoreCase("[REDEEMCODE]")){
					Spieler.sendMessage(ChatColor.GREEN + "Super du hast einen RedeemCode gefunden und eine Belohnung von 2 Diamanten erhalten.");
					Spieler.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
				}
				
				
			}
		}
	}
Dann erstellst du ein public void :
Code:
public void CheckPlayer(Player p){
//Code zum checken der Config
}
Dann musst du es in dein Listener nur noch übergeben also z.b ..CheckPlayer(event.getPlayer());


€:Bin selber erst seit ein Paar Tagen am lernen, weiß grade nicht genau wie man es classen übergebend macht.
False is offline  
Old 05/04/2012, 22:35   #8
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
Ah Okay.
Ich bin ja kein Profi, aber ich bin gerade durcheinander.
Kannst du mir nicht den kompletten Code, wie du ihn verändern würdest schicken?
Bezahle auch E*gold. =D
FunGoo✔ is offline  
Old 05/04/2012, 22:37   #9
 
Elevenn's Avatar
 
elite*gold: 3
Join Date: Mar 2012
Posts: 1,432
Received Thanks: 266
Quote:
Originally Posted by .ƒaℓsє. View Post
Dann erstellst du ein public void :
Code:
public void CheckPlayer(Player p){
//Code zum checken der Config
}
Dann musst du es in dein Listener nur noch übergeben also z.b ..CheckPlayer(event.getPlayer());


€:Bin selber erst seit ein Paar Tagen am lernen, weiß grade nicht genau wie man es classen übergebend macht.
Du setzt ein "static" davor und dann kannst du einfach den klassennamen.CheckPlayer(player) machen
Elevenn is offline  
Thanks
1 User
Old 05/04/2012, 22:48   #10


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Quote:
Originally Posted by FunGoo✔ View Post
Ah Okay.
Ich bin ja kein Profi, aber ich bin gerade durcheinander.
Kannst du mir nicht den kompletten Code, wie du ihn verändern würdest schicken?
Bezahle auch E*gold. =D

Redeem.java:
Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
	

public class Redeem extends JavaPlugin {
	public RedeemListener Listener = new RedeemListener();
	
	
	public void onEnable(){
	Bukkit.getPluginManager().registerEvents(Listener, this);
	final FileConfiguration config = this.getConfig();
	config.addDefault("Player.clicked.Notch","False"); //Kann sein das man kein Default setzen muss ;)
	config.options().copyDefaults(true);
	saveConfig();
	}

static void PlayerCheck(Player p){
final FileConfiguration config = this.getConfig();
if(config.getString("Pfad.aktiv") = "False"){
Spieler.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
config.addDefault("Player.clicked." + p , "True");
}else{
p.sendMessage("Du hast deine Diamanten schon erhalten");
}
saveConfig();
}
 }
RedeemListener:
Code:
package me.MinecraftTopic.Redeem;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;


public class RedeemListener implements Listener {	


	@EventHandler (priority = EventPriority.NORMAL)
	
	public void onPlayerInteract(PlayerInteractEvent event){
		if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
			BlockState Zustand = event.getClickedBlock().getState();
			if(Zustand instanceof Sign){
				Sign Schild = (Sign)Zustand;
				Player Spieler = event.getPlayer();
				if(Schild.getLine(0).equalsIgnoreCase("[REDEEMCODE]")){
					Redeem.PlayerCeck(event.getPlayer());
				}
				
				
			}
		}
	}
Wie gesagt ich schreibe grade alles in epvpers, daher musst du noch Sachen Importieren und eventuell bei manchen Sachen auf die Schreibweise schauen.
Wenn ich jetzt richtig geguckt habe sollte es so gehen.
False is offline  
Old 05/04/2012, 23:00   #11
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
Okay danke erstmal, jedoch this.blabla kann man in einem static nicht ausführen, soweit ich weiß.
Denn ich bekomme einige Fehler NUR in der Redeem.java Datei.
FunGoo✔ is offline  
Old 05/04/2012, 23:02   #12


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Quote:
Originally Posted by FunGoo✔ View Post
Okay danke erstmal, jedoch this.blabla kann man in einem static nicht ausführen, soweit ich weiß.
Denn ich bekomme einige Fehler NUR in der Redeem.java Datei.
Wo steht den da was mit this.?
Wie gesagt bin selber noch ein newbie in der Sache
Lasse einfach mal Elvenn vor
False is offline  
Old 05/04/2012, 23:04   #13
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42
Ja direkt nach dem static:
Code:
		final FileConfiguration config = this.getConfig();
Der ist gerade in Skype offline gegangen keine Ahnung habe ihn ja bereits schon gefragt.

Nur hier:
Code:
		final FileConfiguration config = this.getConfig();
		if(config.getString("Pfad.aktiv") = "False"){
			Player.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
			config.addDefault("Player.clicked." + p , "True");
		}else{
			p.sendMessage("Du hast deine Diamanten schon erhalten");
		}
		saveConfig();
tauchen die 4 Fehler auf. ^^
FunGoo✔ is offline  
Old 05/04/2012, 23:10   #14


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
Quote:
Originally Posted by FunGoo✔ View Post
Ja direkt nach dem static:
Code:
		final FileConfiguration config = this.getConfig();
Der ist gerade in Skype offline gegangen keine Ahnung habe ihn ja bereits schon gefragt.

Nur hier:
Code:
		final FileConfiguration config = this.getConfig();
		if(config.getString("Pfad.aktiv") = "False"){
			Player.getInventory().addItem(new ItemStack(Material.DIAMOND, 2));
			config.addDefault("Player.clicked." + p , "True");
		}else{
			p.sendMessage("Du hast deine Diamanten schon erhalten");
		}
		saveConfig();
tauchen die 4 Fehler auf. ^^
Hmm, lad doch bitte mal dein Projekt hoch.
Dann kann ich mal in eclipse angucken
False is offline  
Old 05/04/2012, 23:12   #15
 
FunGoo✔'s Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 111
Received Thanks: 42

Danke, dass du mir hilfst.
FunGoo✔ is offline  
Reply


Similar Threads Similar Threads
Frage zu Bot machen-Maus Frage-Button Frage
02/16/2012 - AutoIt - 10 Replies
Hallo, Elitepvpers hat echt für alles ein Ort :D Geil. Also...Bin AutoIt anfänger. Ich bin dabei ein Bot für das Online Game Runescape zu machen. Ich hette 2 Fragen(FÜR DEN MOMMENT :) ): Kann ich machen das AutoIt inaktiv die Maus benutzt,also werend der Bot läuft das ich bzw. man im Internet surft oder was anderes macht`?



All times are GMT +2. The time now is 18:11.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.