|
You last visited: Today at 04:48
Advertisement
Java Bukkit Plugin #Wo liegt der Fehler?
Discussion on Java Bukkit Plugin #Wo liegt der Fehler? within the Java forum part of the Coders Den category.
09/27/2014, 16:59
|
#1
|
elite*gold: 0
Join Date: Jul 2014
Posts: 18
Received Thanks: 0
|
Java Bukkit Plugin #Wo liegt der Fehler?
Will gar nicht lange drum herumreden sondern nur fragen wo mein Fehler liegt? Habe vor anzufangen und habe mir gleich ein Tut dafür gegeben aber bereits da scheiterts?
PHP Code:
package TestPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class TestPluginClass extends JavaPlugin {
public void onEnable() {
System.out.println("[TestPlugin] Plugin gestartet");
}
public void onDisable() {
System.out.println("[TestPlugin] Plugin gestoppt");
}
public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) {
Player p = (Player)sender;
if (cmd.getName().equalsIgnoreCase("heal")) {
if (p.hasPermission("testplugin.heal")) {
if (args.length == 0) {
p.sendMessage ("Du wurdest geheilt!");
p.setHealth(20.0);
}
}
return true;
}
else {
return false;
}
}
}
|
|
|
09/27/2014, 17:27
|
#2
|
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
|
Hi,
was ist denn die eigentliche Fehlermeldung?
So können wir nur raten.
ps. die Einrückung schaut sehr merkwürdig aus^^
|
|
|
09/27/2014, 17:28
|
#3
|
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
|
Welcher Fehler wird denn ausgespuckt? Mehr Infos bitte =D
|
|
|
09/27/2014, 19:31
|
#4
|
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
|
Ich vermute stark, das onEnable und onDisable problemlos in der Log Datei und im CMD zu sehen sind oder?
Nach meiner Ansicht funktioniert der Command nicht?
Code:
public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) {
Um Commands abzufangen muss man noch die Klasse namens CommandExecutor einbinden. Der Code muss wie folgt erweitert werden:
Code:
public class TestPluginClass extends JavaPlugin implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
PS: Das @Override nicht vergessen, ansonsten noch in der plugin.yml:
Code:
commands:
heal:
usage: /<command>
Hoffe, das war der Fehler. Falls nicht bitte eine genaue Beschreibung was nicht funktioniert!
Grüße
|
|
|
09/27/2014, 20:49
|
#5
|
elite*gold: 0
Join Date: Jul 2014
Posts: 18
Received Thanks: 0
|
Also, der Fehler ist eben das der Befehl nicht funktioniert. Das TestPlugin spuckt in der CMD jedoch aus was es soll. Der Befehl jedoch existiert erst gar nicht, teste jetzt mal das von Schlumpf
Habs immernoch nicht verstanden
|
|
|
09/28/2014, 18:57
|
#6
|
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
|
Quote:
Originally Posted by shouldnt
Also, der Fehler ist eben das der Befehl nicht funktioniert. Das TestPlugin spuckt in der CMD jedoch aus was es soll. Der Befehl jedoch existiert erst gar nicht, teste jetzt mal das von Schlumpf
Habs immernoch nicht verstanden
|
Ah sry, hab noch einen Teil vergessen:
Code:
this.getCommand("heal").setExecutor(new CommandManager()); //Register command to CommandManager class
Ich würde dir empfehlen sowieso eine neue Klasse zu erstellen, wo du seperat alle Commands verwaltest! Ansonsten müsste folgender Code im onEnable() stehen:
Code:
this.getCommand("heal").setExecutor(this);
Meine Empfehlung:
Main class:
Code:
package TestPlugin;
import org.bukkit.plugin.java.JavaPlugin;
public class TestPluginClass extends JavaPlugin {
@Override
public void onEnable() {
System.out.println("[TestPlugin] Plugin gestartet");
CommandManager cm = new CommandManager();
this.getCommand("heal").setExecutor(cm);
this.getCommand("command2").setExecutor(cm);
}
@Override
public void onDisable() {
System.out.println("[TestPlugin] Plugin gestoppt");
}
}
CommandManager class:
Code:
package TestPlugin;
import org.bukkit.entity.Player;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
public class CommandManager implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player p = (Player)sender;
if (!cmd.getName().equalsIgnoreCase("heal")) {
return false;
}
if (!(sender instanceof Player)) {
sender.sendMessage("Command can't be executed from console");
return true;
}
if (!p.hasPermission("testplugin.heal")) {
p.sendMessage("Zu wenig permission");
return true;
}
if (args.length != 0) {
return false;
}
p.sendMessage ("Du wurdest geheilt!");
p.setHealth(20.0);
return true;
}
}
Hoffe jetzt funktioniert es, falls nicht nochmals melden!
Wie immer Bedanken nicht vergessen
|
|
|
09/29/2014, 22:42
|
#7
|
elite*gold: 0
Join Date: Jul 2014
Posts: 18
Received Thanks: 0
|
Test ich jetzt aus, melde mich gleich
#Was ist der Unterschied von Eclipse Luna und ... Juno heissts glaub?
So, anscheinend bin ich einfach zu dämlich, klappt auch so nicht
|
|
|
09/30/2014, 06:57
|
#8
|
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
|
Eclipse ist eine IDE(Entwickler Umgebung), luna ist ein Package für eclipse(eine Art addon) und juna sagt mir nichts
|
|
|
09/30/2014, 14:10
|
#9
|
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
|
Quote:
Originally Posted by shouldnt
Test ich jetzt aus, melde mich gleich
#Was ist der Unterschied von Eclipse Luna und ... Juno heissts glaub?
So, anscheinend bin ich einfach zu dämlich, klappt auch so nicht
|
Also bis jetzt hab ich dir alles ohne zu testen gesendet. Nun hab ich es getestet und es funktioniert, deshalb jetzt nochmals ausführlich, was eventuell falsch war!
Zunächst einmal die Struktur bei mir:
 (Kann leider noch kein Bild einbinden, bitte drauf gehen)
So sieht es bei mir in Eclipse aus.
Plugin.yml:
Code:
name: Test
main: test.test
version: 0.1
website:
author: Schlumpf
depend:
database: false
description:
commands:
heal:
usage: /<command>
test.java:
Code:
package test;
import org.bukkit.plugin.java.JavaPlugin;
public class test extends JavaPlugin {
@Override
public void onEnable() {
System.out.println("[TestPlugin] Plugin gestartet");
CommandManager cm = new CommandManager();
this.getCommand("heal").setExecutor(cm);
}
@Override
public void onDisable() {
System.out.println("[TestPlugin] Plugin gestoppt");
}
}
CommandManager.java:
Code:
package test;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CommandManager implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("heal")) {
if (!(sender instanceof Player)) {
sender.sendMessage("Command can't be executed from console");
return true;
}
Player p = (Player)sender;
if (!p.hasPermission("testplugin.heal")) {
p.sendMessage("Zu wenig permission");
return true;
}
if (args.length != 0) {
return false;
}
p.sendMessage ("Du wurdest geheilt!");
p.setHealth(20.0);
return true;
}
return false;
}
}
So funktioniert es bei mir 1a... Als Java Build Path hast du ja sicherlich die craftbukkit.jar eingebunden, sonst würde es ja gar nicht funktionieren.
Zum Testen bitte auch nur dieses Plugin anwenden, also keine anderen noch dazu testen.
Hoffe, wenn du das mal 1 zu 1 überträgst funktioniert es.
Solltest du beim Versuch zuvor folgenden Fehler (oder Ähnlich) erhalten haben:
Code:
2014-09-30 14:00:52 [SEVERE] Error occurred while enabling Test v0.1 (Is it up to date?)
java.lang.NullPointerException
at test.test.onEnable(test.java:11)
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:284)
at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:266)
at net.minecraft.server.v1_6_R3.MinecraftServer.l(MinecraftServer.java:315)
at net.minecraft.server.v1_6_R3.MinecraftServer.f(MinecraftServer.java:292)
at net.minecraft.server.v1_6_R3.MinecraftServer.a(MinecraftServer.java:252)
at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.java:152)
at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:393)
at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
lag es daran, das der Command nicht richtig in der plugin.yml eingetragen wurde!
Grüße
|
|
|
09/30/2014, 16:45
|
#10
|
elite*gold: 0
Join Date: Jul 2014
Posts: 18
Received Thanks: 0
|
Teste ich aus, übrigens meinte ich Juno? Oder so ähnlich, suche den genauen Namen heute nochmal.
Die Konsole spuckt mir iwie aus das er die Main nicht finden kann.
Habs übrigens:
|
|
|
09/30/2014, 21:26
|
#11
|
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
|
Quote:
Originally Posted by shouldnt
Teste ich aus, übrigens meinte ich Juno? Oder so ähnlich, suche den genauen Namen heute nochmal.
Die Konsole spuckt mir iwie aus das er die Main nicht finden kann.
Habs übrigens:

|
In der plugin.yml steht:
Dieser Pfad muss deiner package Struktur entsprechen! Auf meinem Bild ist die Struktur:
src - test - test.java => ergibt: main: test.test
Wenn du dein package oder deine Klasse umbenannt hast musst du das auch in der plugin.yml kennzeichnen.
|
|
|
09/30/2014, 21:57
|
#12
|
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
|
Quote:
Originally Posted by shouldnt
Teste ich aus, übrigens meinte ich Juno?
|
Eclipse Juno ist jetzt älter und man sollte mittlerweile die Kepler Version verwenden da sie stabiler etc. als Juno ist.
Edit: Weitere Infos zu den verschiedenen Eclipse Versionen bzw. weitere Infos zu Kepler findest auf der Eclipse homepage.
Edit2: Grad draufgekommen das es schon neuere Versionen von Eclipse(Luna) existiert
|
|
|
10/02/2014, 22:32
|
#13
|
elite*gold: 0
Join Date: Jul 2014
Posts: 18
Received Thanks: 0
|
Ich habe es eins zu eins so gemacht wirklich, 4 mal geschaut und auch so eingetragen etc. DIe Strukturierung stimmt eins zu eins und der Build Path ist auch in Ordnung. Kann doch nicht sein...
|
|
|
10/03/2014, 13:40
|
#14
|
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
|
Quote:
Originally Posted by shouldnt
Ich habe es eins zu eins so gemacht wirklich, 4 mal geschaut und auch so eingetragen etc. DIe Strukturierung stimmt eins zu eins und der Build Path ist auch in Ordnung. Kann doch nicht sein...
|
Kannst du mal den ganzen Error hier posten?
|
|
|
10/07/2014, 10:41
|
#15
|
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
|
Zum bisherigen Beitrag muss ich auf jedenfall eine Ergänzung einbringen, die mir etwas im Auge schmerzt:
Die erste Version der CommandManager.java sah folgendermaßen aus:
Code:
public class CommandManager implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player p = (Player)sender;
if (!cmd.getName().equalsIgnoreCase("heal")) {
return false;
}
if (!(sender instanceof Player)) {
sender.sendMessage("Command can't be executed from console");
return true;
}
if (!p.hasPermission("testplugin.heal")) {
p.sendMessage("Zu wenig permission");
return true;
}
if (args.length != 0) {
return false;
}
p.sendMessage ("Du wurdest geheilt!");
p.setHealth(20.0);
return true;
}
}
Der (fatale) Fehler, der hier gemacht wurde, wurde zwar in der nächsten Version verbessert, jedoch nicht drauf hingewiesen.
In der ersten Version wird zuerst die CommandSender Instanz in einen Player gecastet, ohne zu prüfen, ob es sich wirklich um einen Player handelt.
Später wurde dann überprüft, ob der sender ein Player ist oder nicht.
An sich würde die erste Version ohne Probleme funktionieren, ein guter Stil ist das aber nicht wirklich.
Wenn ein Befehl nur für Spieler gedacht ist, so sollte zuerst überprüft werden, ob der sender ein Player ist oder nicht und danach erst gecastet werden, ansonsten könnte die ganze Geschichte zu netten Exceptions führen.
|
|
|
 |
Similar Threads
|
Bukkit Plugin und Java Programmier Tutorials
03/18/2016 - Coding Tutorials - 5 Replies
Hier zu erreichen: http://www.youtube.com/user/razorblurHD
|
Bukkit job Plugin fehler !HILFE!
01/05/2013 - Minecraft - 4 Replies
Leute ich brauche mal wieder eure hilfe x,D
wenn ich auf meinem Server eingebe /jobs browse sagt er immer das es keine jobs gäbe. dies sollte dann an den unten stehenden sachen liegen. hoffe ihr findet es.
Und ja ich habe das jobs pluzgon zum erstenmal drinnen.
Sollte alles richtig sein könntet ihr mir ja vllt einen tipp geben warum es evtl nicht geht.
# Jobs configuration.
#
# Stores information about each job.
#
# NOTE: When having multiple jobs, both jobs will give the income...
|
[Java] Bukkit Plugin -> [args] Problem
08/18/2012 - General Coding - 6 Replies
Naja , ich habe einen Kick-Befehl programmiert , und wenn man ihn dann ausführt , soll eine Broadcast-Message gesendet werden , wo auch der Grund des Kicks steht.
Das Problem ist jetzt: Er nimmt nur 1 Wort als Grund an.
Wie kann ich das erweitern, das ich mehrere Wörter als Grund angeben kann?
http://i.epvpimg.com/tXnth.png
|
Minecraft Bukkit 1657 Java Fehler (Console)
12/12/2011 - Minecraft - 1 Replies
Hallo Member,
Ich habe seit kurzem einen Fehler.
2011-12-12 14:02:56 java.net.SocketException: Socket closed
2011-12-12 14:02:56 at java.net.SocketOutputStream.socketWrite(SocketOutp utStream.java:116)
2011-12-12 14:02:56 at java.net.SocketOutputStream.write(SocketOutputStre am.java:153)
2011-12-12 14:02:56 at java.io.BufferedOutputStream.flushBuffer(BufferedO utputStream.java:82)
2011-12-12 14:02:56 at java.io.BufferedOutputStream.flush(BufferedOutputS tream.java:140)
2011-12-12...
|
All times are GMT +1. The time now is 04:49.
|
|