Archiv verlassen und diese Seite im Standarddesign anzeigen : 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:
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));
}
}
}
}
Johannes_C25
04.05.2012, 20:40
FunGoo
Ein else wendest du in einer if-Abfrage an. Dieser Code wird dann aufgerufen, wenn das hinter if (Das hier meine ich) nicht zutrifft.
Z.b. so:
private int i = 2;
if (i == 3) {
//Hier, was passieren soll, wenn i drei ist.
} else {
//Und wenn i nicht drei ist, wird das ausgeführt.
}
Was du machen könntest: Du könntest abfragen, ob in seinem Inventar schon Diamanten sind, oder du erstellst dir eine ArrayList (wenn dir der begriff nichts sagen sollte -> Google ist dein Freund!), in der du alle Spieler abspeicherst, die den Befehl schon benutzt haben...und halt bei der benutzung abfragst, ob sie es schon benutzt haben.
Achja klar if abfrage, bin ich'n Depp. :facepalm:
Jedenfalls, ArrayList wäre ja viel zu umständlich finde ich, if Abfragen sind da einfacher nur "für mich nicht" =D
Könntest auch eine Timer machen, der es nur alle 24h erlaubt :O
Man kann alles machen. ;)
Nur ich bin ja nicht geübt in Java ich kann halt auch nur manche Grundbasen, beherrsche halt noch nicht viel.
Johannes_C25
05.05.2012, 06:56
FunGoo
Was genau findest du an einer ArrayList so umständlich? Du erstellst die (mit dem Typ String, damit der SpielerNAME reingespeichert wird...), fragst dann als erstes im onPlayerInteract ab, ob er darauf steht mit arraylist.contains(spielername), wenn ja, sagst du ihm das. Wenn er nicht darauf steht (da funktioniert dein else jetzt endlich :)) fürst du deinen Code aus, und schreibst ihn, nachdem er die dias bekommen hat(oder direkt davor, wie du willst...) auf die liste, mit arraylist.add(spielername). Den Spielernamen bekommst du mit player.getName()
Mit Freundlichen Grüßen
Johannes_C25
Ich kenne mich jetzt nicht gerade mit Array List aus, daher scheiter ich sowieso an jeden Versuch die einzubauen, aber ich habs anders gemacht.
Mit einer HashMap, jedoch ist jetzt nur mein Problem, dass nach jedem reload, oder neu start man es wieder einmal benutzen kann:
package me.MinecraftTopic.Redeem;
import java.util.HashMap;
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.inventory.ItemStack;
public class RedeemListener implements Listener {
public static HashMap<Player, Boolean> Check = new HashMap<Player, Boolean>();
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]")){
if (Check.containsKey(Spieler)) {
return;
} else {
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));
Check.put(Spieler, true);
}
}
}
}
}
}
Johannes_C25
05.05.2012, 11:05
FunGoo
1. ArrayList ist eig. sogar leichter als HashMap...
ArrayList<String> Check = new ArrayList<String>();
Check.add(event.getPlayer().getName()); //Fügt einen Spieler hinzu
Check.contains(event.getPlayer().getName()) //Gibt einen boolean zurück, ob er darinnen ist.
Check.remove(event.getPlayer().getName()); //Entfernt den Spieler wieder
Mit dem reload ist das so ein Problem...du müsstest das in einer Datei abspeichern...
Weißt du, wie du einen Ordner erstellst?
Weißt du, wie du eine Datei erstellst?
Weißt du, wie du in eine Datei schreiben kannst?
Weißt du, wie du eine Datei auslesen kannst?
Johannes_C25
Also wenn du mit Datei erstellen eine Config erstellen meinst, dann halbwegs.
Wäre nett wenn du mir ein wenig helfen könntest bei dem Code. =)
Johannes_C25
06.05.2012, 14:51
FunGoo
Ich meinte eig. ne .txt Datei, aber du kannst es eig. auch in einer config abspeichern, wie du willst. Ich hätte jetzt eine .txt Datei gemacht und dort einfach alle Spieler, die den Befehl schon benutzt haben, runter geschrieben, wobei das mit der config natürlich leichter geht...
Weißt du, wie du in die config.yml Datei eine Liste aus Strings machen kannst, und diese wieder abrufen kannst? Wenn ja, kannst du es so machen, und dann dort bei aktivieren alle auslesen und in deine Liste reinschreiben und beim deaktivieren alle reinspeichern...
Ne weiß ich ja eben nicht, deshalb wollte ich ja, dass du mir helfen sollst, bzw. mir den Code schrieben, falls du so nett bist und so weite Kenntnisse hast. :)
Johannes_C25
06.05.2012, 15:04
Wenn du englisch kannst:
http://wiki.bukkit.org/Introduction_to_the_New_Configuration
oder ein Video von DeBukkit (auf Deutsch)
http://www.youtube.com/watch?v=BdRzSOErDqc&feature=relmfu
Da sollte eig. alles erklärt werden... falls nicht, frag einfach nochmal...
Powered by vBulletin® Version 4.1.4 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.