• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Problem mit Vault PlayerSetGroup

Ivory1988

Minecrafter
Registriert
1 April 2013
Beiträge
6
Diamanten
0
Hey Leute ich hab nen kleines Problem bei mir im Plugin und find einfach den sch... Fehler nicht. irgendwo hab ich laut der Log ne NullPointerException.
Vll findet ihr ja den Fehler.

hier ma der Code:
Code:
@EventHandler
	public void Event(PlayerJoinEvent event){
		String name = this.getDescription().getName();
		String prefix = ChatColor.DARK_RED + "[" + name + "] " + ChatColor.AQUA;
		
		Player p = event.getPlayer();
		String pname = p.getName();
		if(mysql.ResultPlayer(pname) == true){
			try{
				ResultSet rs = mysql.Query(pname);
				
			while (rs.next()){
				if (rs.getInt("Typ") == 1){
					String amount = rs.getString("Amount");
					double am = Double.parseDouble(amount);
					econ.depositPlayer(p.getName(), am);
					p.sendMessage(prefix + "Dir wurden " + am + " Dollar gutgeschrieben.");
					mysql.Delete(rs.getString("ID"));
					
				}else{
					double time = System.currentTimeMillis();
					double timevip = Double.parseDouble(rs.getString("Date"));
					
					if (time >= timevip){
						us.playerAddGroup(p, "Vip");
						event.setJoinMessage(prefix + "Willkommen zurück " + ChatColor.GOLD + "[VIP]" + p.getDisplayName());						
					}else{
						us.playerAddGroup(p, "Spieler");
						p.sendMessage(prefix + "Deine VIP Zeit ist nun vorbei.");
						mysql.Delete(rs.getString("ID"));
						
					}
				}
				
			}
			}catch(SQLException e){
				System.err.println(e);
				
			}			
		}
		
	}

und hier ma der Serverlog dazu:
Code:
2013-12-30 01:52:10 [SEVERE] Could not pass event PlayerJoinEvent to Deathrunner v0.1
org.bukkit.event.EventException
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:351)
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
	at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:31)
	at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:464)
	at net.minecraft.server.management.ServerConfigurationManager.func_72377_c(ServerConfigurationManager.java:319)
	at net.minecraft.server.management.ServerConfigurationManager.func_72355_a(ServerConfigurationManager.java:180)
	at net.minecraft.network.NetLoginHandler.completeConnection(NetLoginHandler.java:218)
	at cpw.mods.fml.common.network.FMLNetworkHandler.handleClientConnection(FMLNetworkHandler.java:167)
	at cpw.mods.fml.common.network.FMLNetworkHandler.onConnectionReceivedFromClient(FMLNetworkHandler.java:120)
	at net.minecraft.network.NetLoginHandler.func_72529_d(NetLoginHandler.java:194)
	at net.minecraft.network.NetLoginHandler.func_72532_c(NetLoginHandler.java:81)
	at net.minecraft.server.ServerListenThread.func_71766_a(ServerListenThread.java:57)
	at net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(SourceFile:29)
	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:865)
	at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:732)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:614)
	at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
Caused by: java.lang.NullPointerException
	at me.ivory.deathrunner.Deathrunner.Event(Deathrunner.java:93)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:349)
	... 18 more

Die Zeile die im Log angesprochen wird ist diese hier:
us.playerAddGroup(p, "Vip");
Hoffe ihr findet da den Fehler.
 

Ivory1988

Minecrafter
Registriert
1 April 2013
Beiträge
6
Diamanten
0
na klar:
Code:
.....
import net.milkbowl.vault.permission.Permission;
.....

public class Deathrunner extends JavaPlugin implements Listener{

	public static Economy econ = null; 
	public static Permission us = null;
......
......
......
                @EventHandler
		public void Event(PlayerJoinEvent event){
........

dazwischen ist nur noch onEnable und Disable.
Da ist nur die Mysql benutzerabfrage.

Was mich nur wundert ist, dass die classe Player p funktioniert. Sonst würde ja darüber der Teil mit Amount nicht klappen.

Das PlayeraddGroup bezieht sich auf dieses hier:
Code:
public boolean playerAddGroup(Player player,
                     String group)

Add player to a group. This will add a player to the group on the current World. This may return odd results if the permission system being used on the server does not support world-specific groups, or if the group being added to is a global group.

Parameters:
    player - Player Object
    group - Group name
Returns:
    Success or Failure
Das ist hier zu finden.
 
Zuletzt bearbeitet:
G

games6471

Guest
Also entweder wurde die Variable "us" noch gar nicht beschrieben oder sie wurde aus irgendeinem Grund nochmals mit "null" beschrieben. Denn wenn deine Angaben mit der Zeile stimmen, muss die Variable "us" null sein. Mögliche Gründe für eine NullPointerException (kurz: NPE) sind nämlich:

Ich referenziere mal hier auf den Javadoc-Eintrag:
  • Calling the instance method of a null object.
  • Accessing or modifying the field of a null object.
  • Taking the length of null as if it were an array.
  • Accessing or modifying the slots of null as if it were an array.
  • Throwing null as if it were a Throwable value.

Am besten schaust du dir mal deinen Code an, ob eventuell irgendwo "us" mit "null" beschrieben wurde oder die Variable noch gar nicht beschrieben wurde.

EDIT: Also hat der Fehler nichts Vault zu tun.
 

Ivory1988

Minecrafter
Registriert
1 April 2013
Beiträge
6
Diamanten
0
Es kommt ja nur oben in der initialiesierung vor und dann der Aufruf.
also:

public static Permission us = null;
und:
us.playerAddGroup(p, "Vip");

habs auch ma grad umbenannt und es wird sonst wirklich nirgends aufgerufen.
hier ma der gesammte code:
Code:
package me.ivory.deathrunner;


import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Logger;

import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;

import org.bukkit.ChatColor;
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.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;



public class Deathrunner extends JavaPlugin implements Listener{
	
	public Logger log = Logger.getLogger("Minecraft"); 
	public static Economy econ = null; 
	public static Permission spieler = null;
	
	
	
	public Deathrunner(){
		
	}	
	
	
	public void onEnable(){
		if (!testEconomy()) { 
		      log.info("Disabled because Vault is unavailable or no economy service is installed.");
		      getServer().getPluginManager().disablePlugin(this);
		    }
	    loadConfig();  
	   getServer().getPluginManager().registerEvents(this, this);
	   mysql.db = this.getConfig().getString("database.database");
	   mysql.ip = this.getConfig().getString("database.ip");
	   mysql.user = this.getConfig().getString("database.user");
	   mysql.pw = this.getConfig().getString("database.password");
	   mysql.Connect();
	   
	 }
		
	
	public void onDisable(){
		mysql.close();
    }
	
	
	
		@EventHandler
		public void Event(PlayerJoinEvent event){
			String name = this.getDescription().getName();
			String prefix = ChatColor.DARK_RED + "[" + name + "] " + ChatColor.AQUA;
			
			Player p = event.getPlayer();
			String pname = p.getName();
			if(mysql.ResultPlayer(pname) == true){
				try{
					ResultSet rs = mysql.Query(pname);
					
				while (rs.next()){
					if (rs.getInt("Typ") == 1){
						String amount = rs.getString("Amount");
						double am = Double.parseDouble(amount);
						econ.depositPlayer(p.getName(), am);
						p.sendMessage(prefix + "Dir wurden " + am + " Dollar gutgeschrieben.");
						mysql.Delete(rs.getString("ID"));
						
					}else{
						double time = System.currentTimeMillis();
						double timevip = Double.parseDouble(rs.getString("Date"));
						
						if (time >= timevip){
							spieler.playerAddGroup(p, "Vip");
							event.setJoinMessage(prefix + "Willkommen zurück " + ChatColor.GOLD + "[VIP]" + p.getDisplayName());						
						}else{
							spieler.playerAddGroup(p, "Spieler");
							p.sendMessage(prefix + "Deine VIP Zeit ist nun vorbei.");
							mysql.Delete(rs.getString("ID"));
							
						}
					}
					
				}
				}catch(SQLException e){
					System.err.println(e);
					
				}			
			}
				
		}

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
		String name = this.getDescription().getName();
		String prefix = ChatColor.DARK_RED + "[" + name + "] " + ChatColor.AQUA;
		Player p = null;
		if(sender instanceof Player){
			p = (Player) sender;
		}
		
		
		//Komando repair
		
		
		if(cmd.getName().equalsIgnoreCase("repair")){
			if (p != null){
				if (p.hasPermission("deathrunner.repair")){
					ItemStack item = p.getItemInHand();
					short max = item.getType().getMaxDurability();
					p.getItemInHand().setDurability(max);
					p.sendMessage(prefix + " Dein Item wurde repariert. Viel Spaß damit.");
					return true;	
				}else{
					p.sendMessage(prefix + " Du musst Vip sein um diesen Befehl nutzen zu können.");
					return true;
				}
			}else{
				System.out.println("This command can only use by a player");
				return true;
			}
		
			
			//DRC Info Kommando
			
		}
		
		if(cmd.getName().equalsIgnoreCase("drc")){
			if(p != null){
				
				p.sendMessage(prefix + ":");
				p.sendMessage(ChatColor.AQUA + "Willkommen bei der Deathrunner Community");
				p.sendMessage(ChatColor.AQUA + "########################################");
				p.sendMessage(ChatColor.AQUA + "Tutorials über den Server findest du hier:");
				p.sendMessage(ChatColor.AQUA + "http://tinyurl.com/n2sffs5");
				p.sendMessage(ChatColor.AQUA + "Du willst Vip werden? Dann gehe auf:");
				p.sendMessage(ChatColor.AQUA + "http://deathrunner.de/index.php?page=shop");
				
				
				
			}else{
				System.out.println("This command can only use by a player");
				return true;
			}
			
		}
		
		
		
		
		return false;
		
	}




	void loadConfig(){
		this.getConfig();
		this.getConfig().options().copyDefaults(true);
		this.saveConfig();
	}
	
	private boolean testEconomy() { 
	    if (getServer().getPluginManager().getPlugin("Vault") == null) { return false; }
	    RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
	    return (econ = rsp.getProvider()) != null;
	  }
	
}
und die mysql.java:
Code:
package me.ivory.deathrunner;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class mysql {

	
	
	static String ip = "";
	static String user = "";
	static String pw = "";
	static String db = "";
	static java.sql.Statement stmt;
	public static Connection con;
	
	
	public static void Connect(){
		
		try{
			
			con = DriverManager.getConnection("jdbc:mysql://" + ip + "/" + db, user, pw);
			System.out.println("Mysql connectet");
			
		}catch(SQLException ex){
			System.err.println(ex);
		}
		
	}
	
	public static void close(){
		
		try{
			
			if(con != null){
				con.close();
				
			}
			
		}catch(Exception ex){
			System.err.println(ex);
			
		}
		
	}
	
	public static void Update(String qry){
        try{
                stmt = con.createStatement();
                stmt.executeQuery(qry);
               
        }catch(Exception e){
                System.err.println(e);
        }
	}
	
    public static ResultSet Query(String qry){
        ResultSet rs = null;
       
        try{
        	stmt = con.createStatement();
        	
            rs = stmt.executeQuery("SELECT * FROM `p1_minecraft` where Name = '" + qry + "';");
            
        }catch(Exception e){
                System.err.println(e);
        }
       
        return rs;
    }


    public static boolean ResultPlayer(String qry){
    	
    	boolean rs = false ;
    	
    	try{
        	stmt = con.createStatement();
            rs = stmt.execute("SELECT * FROM `p1_minecraft` where Name = '" + qry + "';");
            
        }catch(Exception e){
                System.err.println(e);
        }
    	
    	return rs;
    }
	
    public static void Delete(String string){
        try{
                stmt = con.createStatement();
                stmt.execute("DELETE FROM `p1_minecraft` WHERE (`ID`='" + string + "');");
               
        }catch(Exception e){
                System.err.println(e);
        }
    }
}
und noch die plugin.yml
Code:
name: Deathrunner
main: me.ivory.deathrunner.Deathrunner
version: 0.1
commands:
  repair:
    usage: /repair
    permissions: deathrunner.repair
  drc:
    usage: /drc

vll hilft das ja noch weiter... weil ich bin mit meinem Latein echt am Ende.
 
Zuletzt bearbeitet:
G

games6471

Guest
Type name = wert

Code:
    private boolean setupEconomy()
    {
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
        if (economyProvider != null) {
            economy = economyProvider.getProvider();
        }

        return (economy != null);
    }

Mit "us.playerAddGroup(p, "Vip");" wird die Methode "playerAddGroup" mit den Paramatern p vom Typ Player und dem String "Vip" auf der Variablen "us" aufgerufen.
 
G

games6471

Guest
Die Variable "us" hat keinen Wert (null, also zeigt auf nichts). Somit kannst du sie auch nicht benutzen (--> NullPointerException | Zugriff auf eine Variable, die auf nichts zeigt). Also musst du der Variable erst mal etwas zuweisen mit:

Variablenname = Wert
oder falls die Variable noch nicht existiert:
Typ Variablenname = Wert

Beispiel:

username = "games647";
String username = "games647";

Das Plugin Vault gibt bereits auf der devBukkit-Seite ein Beispiel, das selbe wie im vorherigen Post. Nun müsste der Code nur noch für die Permission angepasst werden und du könntest mit diesen Snippet der Variablen "us" den passenden Wert zuweisen.

Beispiel:
Dafür musst du dann nur noch die Methode aufrufen
Code:
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            [COLOR="#FF0000"]us [/COLOR]= permissionProvider.getProvider();
        }
        return (permission != null);
    }
 
Oben