|
You last visited: Today at 14:23
Advertisement
Bukkit Plugin Programmierung: playerCommandPreprocessEvent
Discussion on Bukkit Plugin Programmierung: playerCommandPreprocessEvent within the Minecraft forum part of the Other Online Games category.
08/06/2013, 17:07
|
#1
|
elite*gold: 0
Join Date: Jun 2013
Posts: 111
Received Thanks: 3
|
Bukkit Plugin Programmierung: playerCommandPreprocessEvent
Hallo,
ich habe folgendes Programmiert, und komme nun nicht weiter:
Code:
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
final Player p = e.getPlayer();
if (p.getInventory().getItemInHand().getType() == Material.STICK) {
if (e.getAction() == Action.RIGHT_CLICK_AIR) {
if (p.hasPermission("troll.lightning")) {
World world = p.getWorld();
world.strikeLightning(p.getTargetBlock(null, 1000).getLocation());
}
} else {
if (!p.hasPermission("troll.explosion")) {
p.sendMessage(ChatColor.RED + "Keine Rechte!");
} else {
if (e.getAction() == Action.LEFT_CLICK_AIR) {
World world = p.getWorld();
world.createExplosion(p.getTargetBlock(null, 500).getLocation(), 30F);
}
}
}
}
}
Ich will, das dass Event nur ausgeführt werden darf wenn ein bestimmter Befehl ausgeführt wird. Ich habe gehört das soll mit dem playerCommandPreprocessEvent gehen, ich habe allerdings keine Ahnung wie ich das Anstellen soll.
LG
Dominik
|
|
|
08/06/2013, 17:41
|
#2
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,544
Received Thanks: 1,424
|
Du machst ganznormal einen Befehl. Den ausführenden Spieler speicherst du dann in eine List oder Map. Beim Rechtklick überprüfst du dann ob er da drin steht und entfernst ihn wieder, falls du das willst.
Quote:
Originally Posted by themrdomi
Ich habe gehört das soll mit dem playerCommandPreprocessEvent gehen, ich habe allerdings keine Ahnung wie ich das Anstellen soll.
|
Ich denke da habt ihr aneinander vorbei geredet, das was du willst geht nicht direkt mit CommandPreprocess.
|
|
|
08/06/2013, 17:57
|
#3
|
elite*gold: 0
Join Date: Jun 2013
Posts: 111
Received Thanks: 3
|
Kannst du mir dabei vielleicht noch ein bisschen helfen, denn ich blick da noch nicht ganz durch wie du das meinst
LG
Dominik
|
|
|
08/06/2013, 18:27
|
#4
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,544
Received Thanks: 1,424
|
Ich meine es ganz grob gezeigt so:
Code:
List aktiveSpieler;
onCommand()
{
aktiveSpieler.add(playername);
}
onInteract()
{
if(aktiveSpieler.contains(playername))
}
|
|
|
08/06/2013, 18:47
|
#5
|
elite*gold: 0
Join Date: Jun 2013
Posts: 111
Received Thanks: 3
|
Hmm,
ich komm irgendwie überhaupt nicht zurecht damit
Kannst du mir dabei bitte nochmal weiterhelfen?
Bitte sei nicht so streng, ich bin noch ein ziemlichen Newbie in Sachen Bukkit programmierung / Java.
|
|
|
08/06/2013, 19:40
|
#6
|
elite*gold: 135
Join Date: May 2011
Posts: 1,511
Received Thanks: 255
|
Ganz einfach: Erst Java lernen, dann Bukkit.
Dazu muss man sich aber nicht mit Java wirklich gut auskennen, um das zu verstehen. Es ist einfach:
Du hast eine Liste, die du so erstellst (kannst du beliebig nennen):
Code:
List aktiveSpieler;
. In dieser Liste stehen Spielernamen. Aber, dass der Spieler in die Liste reinkommt, muss man den Spieler hineinsetzen. Dies macht man mit :
Code:
aktiveSpieler.add(/*HierEinenSpielerNamen*/);
Es muss aber mit irgendwas verknüpft werde, dass diese Zeile ausgeführt wird, also z.B. ein Command:
Code:
@Override
public boolean onCommand(CommandSender cs, Command cmd, String commandLabel, String[] args){
Player p = (Player) cs;
if (cmd.getName().equalsIgnoreCase("blitz") ){
aktiveSpieler.add(p.getName());
}
return true;
}
Dann prüfst du einfach bei dem Interact event das ab:
Code:
if (aktiveSpieler.contains(p.getName()){
//Dein Code hier
}
Hoffe ich konnte helfen und habe keine Fehler gemacht, falls ja, bitte korrigieren, habe es nur hier zusammengeschrieben.
|
|
|
08/06/2013, 20:06
|
#7
|
elite*gold: 0
Join Date: Jun 2013
Posts: 111
Received Thanks: 3
|
Hmm, also schonmal vielen dank, aber bei
Quote:
Code:
if (aktiveSpieler.contains(p.getName()){
//Dein Code hier
}
|
Zeigt er an: Syntax error on token(s), misplaced construct(s)
LG
Dominik
|
|
|
08/06/2013, 20:09
|
#8
|
elite*gold: 135
Join Date: May 2011
Posts: 1,511
Received Thanks: 255
|
Hast du das in dein PlayerInteractEvent reingeschrieben? Schreib mal den ganzen Code hier rein
|
|
|
08/06/2013, 20:11
|
#9
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,544
Received Thanks: 1,424
|
Da fehlt eine Klammer zu ... warum siehst du das nicht? (Edit: Die meisten IDEs sagen einem sogar, dass eine Klammer fehlt ohne kryptische Meldungen)
Code:
if (aktiveSpieler.contains(p.getName())) {
//Dein Code hier
}
Quote:
Originally Posted by themrdomi
Bitte sei nicht so streng, ich bin noch ein ziemlichen Newbie in Sachen Bukkit programmierung / Java.
|
Bezieht sich das auf die sehr dünnen Erklärungen?
Es geht mir vorallem darum, das du deinen Kopf einschaltest und selber etwas suchst und rumprobierst. Wenn ich die Lösung schreibe lernst du nicht so viel.
|
|
|
08/06/2013, 20:11
|
#10
|
elite*gold: 0
Join Date: Jun 2013
Posts: 111
Received Thanks: 3
|
Hmm, so siehts bis jetzt aus:
Code:
package me.themrdomi.TrollPlugin;
import java.awt.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class main extends JavaPlugin implements Listener {
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this, this);
System.out.println("TrollPlugin aktiviert!");
}
//Programm
List aktiveSpieler;
@Override
public boolean onCommand(CommandSender cs, Command cmd, String commandLabel, String[] args){
Player p = (Player) cs;
if (cmd.getName().equalsIgnoreCase("blitz") ){
aktiveSpieler.add(p.getName());
}
return true;
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
final Player p = e.getPlayer();
if (p.getInventory().getItemInHand().getType() == Material.STICK) {
if (e.getAction() == Action.RIGHT_CLICK_AIR) {
if (p.hasPermission("troll.lightning")) {
World world = p.getWorld();
world.strikeLightning(p.getTargetBlock(null, 1000).getLocation());
}
} else {
if (!p.hasPermission("troll.explosion")) {
p.sendMessage(ChatColor.RED + "Keine Rechte!");
} else {
if (e.getAction() == Action.LEFT_CLICK_AIR) {
World world = p.getWorld();
world.createExplosion(p.getTargetBlock(null, 500).getLocation(), 30F);
}
}
}
}
}
}
LG
Dominik
|
|
|
08/06/2013, 20:21
|
#11
|
elite*gold: 135
Join Date: May 2011
Posts: 1,511
Received Thanks: 255
|
Bin ich jetzt Blind oder hast du die If-Abfrage (Die von ComputerBaer, habe eine Klammer vergessen) überhaupt nicht eingesetzt
Code:
if (aktiveSpieler.contains(p.getName())) {
//Dein Code hier
}
Falls du es nicht weißt, wo du sie einsetzten sollst, wäre ein Grundkurs in Java + Bukkit sehr angebracht
|
|
|
08/11/2013, 12:31
|
#12
|
elite*gold: 0
Join Date: Nov 2010
Posts: 129
Received Thanks: 3
|
Ausserdem: Verwende nie System.out.println, lieber einen Logger (Wenn du nicht weißt was das ist --> Java Lernen)
Dann: Diese "List" gehört am besten über den onEnable Teil bei welchem eig. @Override fehlt
Und zu guter letzt: Verwende lieber List<String> aktiveSpieler = new ArrayList<String>();
Ist übersichtshalber besser und du kannst durch deine IDE später bei Fehlern besser kontrollieren mit was die List gefüllt sein müsste
|
|
|
|
Similar Threads
|
Bukkit Plugin Programmierung: 2 Befehle
07/14/2013 - Minecraft - 8 Replies
Hallo,
ich habe ein Plugin programmiert, welches einfach einen Text ausgeben soll.
Ich habe zwei Befehle eingebaut, allerdings funktioniert nur der eine. In der plugin.yml ist alles korrekt.
Hier ist der link zu Pastebin: klick
Vielleicht findet ihr ja den Fehler und könnt mir helfen.
LG
Dominik
|
[B] Bukkit-Plugin-Programmierung [S] e-Gold
05/21/2013 - elite*gold Trading - 0 Replies
Hey,
ich mache euch für eGold/PSC/PayPal Bukkit Plugins.
Schreibt mir einfach eine PN mit genauer Pluginbeschreibung + Preisvorschlag.
Oder addet mich bei Skype:
Beyblader22
Gruß,
|
[B] Bukkit Plugin Programmierung [S] PSC
05/20/2013 - Trading - 0 Replies
Hallo liebe Community,
Ich biete mich als Bukkit Plugin Programmierer an. Auch schwere Plugins sind kein Problem.
Preis: Je nach Aufwand zwischen 10-200 €
Referenzen biete ich auf Nachfrage via PM/Skype.
Kontakt:
Skype: stevenst7
via PM.
|
Bukkit Plugin Programmierung ab $5
12/08/2012 - Minecraft Trading - 0 Replies
z.Z. nur im deutschen Minecraftforum
|
Bukkit Plugin Programmierung für 10€
12/07/2012 - Minecraft Trading - 14 Replies
http://www.elitepvpers.com/forum/minecraft-trading /2281632-bukkit-plugin-programmierung-ab-5-a.html
|
All times are GMT +2. The time now is 14:23.
|
|