Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 04:48

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

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.

Reply
 
Old   #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 senderCommand cmdString cmdLabelString[] 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;
                    }
                }
            } 
shouldnt is offline  
Old 09/27/2014, 17:27   #2
 
Mikesch01's Avatar
 
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^^
Mikesch01 is offline  
Old 09/27/2014, 17:28   #3
 
TeraTroll's Avatar
 
elite*gold: 260
Join Date: Sep 2012
Posts: 206
Received Thanks: 13
Welcher Fehler wird denn ausgespuckt? Mehr Infos bitte =D
TeraTroll is offline  
Old 09/27/2014, 19:31   #4
 
Schlumpf9's Avatar
 
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
Schlumpf9 is offline  
Old 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
shouldnt is offline  
Old 09/28/2014, 18:57   #6
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Quote:
Originally Posted by shouldnt View Post
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
Schlumpf9 is offline  
Old 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
shouldnt is offline  
Old 09/30/2014, 06:57   #8
 
TeraTroll's Avatar
 
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
TeraTroll is offline  
Old 09/30/2014, 14:10   #9
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Quote:
Originally Posted by shouldnt View Post
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:
lag es daran, das der Command nicht richtig in der plugin.yml eingetragen wurde!

Grüße
Schlumpf9 is offline  
Old 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:
shouldnt is offline  
Old 09/30/2014, 21:26   #11
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Quote:
Originally Posted by shouldnt View Post
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:
Code:
main: test.test
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.
Schlumpf9 is offline  
Old 09/30/2014, 21:57   #12
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Quote:
Originally Posted by shouldnt View Post
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
XxharCs is offline  
Old 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...
shouldnt is offline  
Old 10/03/2014, 13:40   #14
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Quote:
Originally Posted by shouldnt View Post
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?
Schlumpf9 is offline  
Old 10/07/2014, 10:41   #15

 
Terreox's Avatar
 
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.
Terreox is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.