Bukkit programmieren: Beim Command andere Methode ausführen

12/28/2016 21:14 GabiKleebi02#1
Code:
package me.gabikleebi02.region;

import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;

public class Region implements CommandExecutor{
	
     [MENTION=295804]Override[/MENTION]
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		
		if(!(sender instanceof Player)){
			sender.sendMessage("§cDu musst ein Spieler sein!");
			return true;
		}
		
		else{	
			
			//Hier soll die Methode inRegion aufgerufen werden
			
		}
		
		return false;
	}

		static void inRegion(Player p, String regionname) {
			
			Plugin worldguard = p.getServer().getPluginManager().getPlugin("WorldGuard");
			WorldGuardPlugin wg = (WorldGuardPlugin) worldguard;
			
			String worldname = p.getWorld().getName();
			World world = Bukkit.getWorld(worldname);
			
			ProtectedRegion rg = wg.getRegionManager(world).getRegion(regionname);
			wg.getRegionManager(world).getRegion(regionname);
			
			Player m = (Player) rg.getMembers();
			Player o = (Player) rg.getOwners();
			
			if(p.getName() == m.getName() || p.getName() == o.getName()){
				p.sendMessage("Hier muss alles für die RCD hin!");
				
			}
			else if(p.hasPermission("rcd.getall")){
				p.sendMessage("Hier muss alles für die RCD hin!");
			}
			else{
				p.sendMessage("Du musst in einer Region sein, in der du auch Rechte hast!");
		}	
	}
}
Ich kriege die Methode dort nicht aufgerufen, weil ich nicht weiß, wie man den
Player und den String mit übergibt.
12/29/2016 00:29 False#2
Quote:
Originally Posted by GabiKleebi02 View Post
Code:
package me.gabikleebi02.region;

import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;

public class Region implements CommandExecutor{
    
     [MENTION=295804]Override[/MENTION]
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        if(!(sender instanceof Player)){
            sender.sendMessage("§cDu musst ein Spieler sein!");
            return true;
        }
        
        else{    
            
            //Hier soll die Methode inRegion aufgerufen werden
            
        }
        
        return false;
    }

        static void inRegion(Player p, String regionname) {
            
            Plugin worldguard = p.getServer().getPluginManager().getPlugin("WorldGuard");
            WorldGuardPlugin wg = (WorldGuardPlugin) worldguard;
            
            String worldname = p.getWorld().getName();
            World world = Bukkit.getWorld(worldname);
            
            ProtectedRegion rg = wg.getRegionManager(world).getRegion(regionname);
            wg.getRegionManager(world).getRegion(regionname);
            
            Player m = (Player) rg.getMembers();
            Player o = (Player) rg.getOwners();
            
            if(p.getName() == m.getName() || p.getName() == o.getName()){
                p.sendMessage("Hier muss alles für die RCD hin!");
                
            }
            else if(p.hasPermission("rcd.getall")){
                p.sendMessage("Hier muss alles für die RCD hin!");
            }
            else{
                p.sendMessage("Du musst in einer Region sein, in der du auch Rechte hast!");
        }    
    }
}
Ich kriege die Methode dort nicht aufgerufen, weil ich nicht weiß, wie man den
Player und den String mit übergibt.
Evtl solltest du erst einmal die Grundkenntnisse erlernen bevor du ein Plugin schreiben willst.
Habe nie viel mit Java gearbeitet aber eine static Function solltest du mit 'class.method(args)' nutzen können.
Sprich bei dir Region.inRegion(player, string)
12/29/2016 01:43 GabiKleebi02#3
Wenn ich das mache, funktioniert dies nicht und es kommt nur die Fehlermeldung "Player cannot be resolved to a variable" bzw. "String cannot be resolved to a variable". Muss ich das überhaupt mit angeben, weil ich will ja nur bei einem die Methode abrufen, sodass sie ausgeführt wird. Oder muss ich das anders machen als mit einem void?
12/29/2016 04:22 ComputerBaer#4
Quote:
Originally Posted by GabiKleebi02 View Post
Ich kriege die Methode dort nicht aufgerufen, weil ich nicht weiß, wie man den
Player und den String mit übergibt.
Quote:
Originally Posted by GabiKleebi02 View Post
Wenn ich das mache, funktioniert dies nicht und es kommt nur die Fehlermeldung "Player cannot be resolved to a variable" bzw. "String cannot be resolved to a variable". Muss ich das überhaupt mit angeben, weil ich will ja nur bei einem die Methode abrufen, sodass sie ausgeführt wird. Oder muss ich das anders machen als mit einem void?
Dann solltest du wirklich mal die Grundlagen lernen. Wie übergibt man einer Methode das was sie haben will? Ich nehme mal an du hast "inRegion" auch nicht selber geschrieben, oder?

Machen wir mal einen kurzen Ausflug zu den Java Grundlagen. Nehmen wir uns also mal diese tolle Methode:
Code:
public static void meineMethode(int zahl, String text) {
    // irgendeine tolle Funktion!
}
Jetzt wollen wir die Aufrufen, dazu brauchen wir einen Integer und einen String. Also wie geht das?
Code:
meineMethode(); // Nein, da fehlt doch alles
meineMethode(int, String); // Nein, das sind doch nur die Datentypen

meineMethode(15, "Test"); // So würde es gehen

int x = 789;
String str = "Hallo";
meineMethode(x, str); // So auch
Kommst du selber drauf wie du deine Methode aufrufst oder muss ich dir die Lösung zeigen?
12/30/2016 18:55 GabiKleebi02#5
Hab jetzt alles ein bisschen umgeschrieben:


Danke für eure Hilfe!