Code:java package com.chrome.Main; import java.io.File;import java.io.IOException;import java.util.HashMap; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.configuration.file.FileConfiguration;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerCommandPreprocessEvent;import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin implements Listener { private HashMap<String, String> requests = new HashMap<String, String>(); public File SecurityQuestions = new File(getDataFolder() + ""); public File Config = new File(getDataFolder(), "Config.yml"); public FileConfiguration SecurityQuestion; public void onEnable() { //Listener pvpask = new this(); Bukkit.getPluginManager().registerEvents(this, this); if(!SecurityQuestions.exists()){ SecurityQuestions.mkdir(); System.out.println("[SecurityQuestions] SecurityQuestions file created"); }else{ System.out.println("[SecurityQuestions] SecurityQuestion file detected"); } if(Config.exists()){ System.out.println("[SecurityQuestions] Config.yml file detected"); }else{ try { Config.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } getLogger().info("Enabled!"); } public void onDisable(){ getLogger().info("Disabled!"); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < args.length; i++){ sb.append(args[i]).append(" "); } String allArgs = sb.toString().trim(); Player p = (Player)sender; Player t = Bukkit.getPlayer(args[0]); if(cmd.getLabel().equalsIgnoreCase("1v1")) { if(p.hasPermission("1v1.others")){ if(args.length == 0){ p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"/1v1 <player>"); }else{ } if (args.length == 1) { if (Bukkit.getOfflinePlayer(args[0]).isOnline()) { requests.put(sender.getName(), t.getName()); p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You sent a 1v1 Request to " + ChatColor.GOLD + t.getDisplayName()); t.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You have just received a 1v1 request from " + ChatColor.GOLD + p.getDisplayName()); t.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"To Accept type /1v1accept "); }else{ p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.GOLD + allArgs + ChatColor.GREEN + " is offline!"); } } } } return false; } @EventHandler public void onPrepocess(PlayerCommandPreprocessEvent e) { final Player p = e.getPlayer(); HashMap<String, String> requests = new HashMap<String, String>(); if (e.getMessage().equalsIgnoreCase("/1v1accept") && requests.containsKey(p.getName())) { String reciever = requests.get(p.getName()); p.sendMessage(ChatColor.GREEN +"[1v1]: " + ChatColor.GOLD + reciever + ChatColor.AQUA + " accepted your 1v1 Request"); if (p.getServer().getPlayer(reciever) != null) { Player recieverp = p.getServer().getPlayer(reciever); recieverp.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You accepted " + ChatColor.GOLD + p.getName() + ChatColor.AQUA +"'s 1v1 request!"); p.teleport(recieverp.getLocation()); } } } }[/i] Stacktrace: This just causes internal errors
ChromeHD__ The error states an ArrayIndexOutOfBoundsException on line 61. In 61 you declare a player variable from the first argument, WITHOUT checking first. This will throw an ArrayIndexOutOfBoundsException if obviously nothing is there (hence the null message).
Adjust your check upward a bit. You did check it, just too late Code:java if(args.length == 0) {p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"/1v1 <player>");return;}Player t = Bukkit.getPlayer(args[0]); Also, make sure you check that t != null and your not checking sender before casting it, sender doesn't have to be a player Code:java if(!(sender instanceof Player)) {// Send an error telling them it can't be the console.return;}Player p = (Player)sender; EDIT by Moderator: merged posts, please use the edit button instead of double posting.
Alshain01 Now it says nothing no stacktrace Does anyone know how I can fix this EDIT by Moderator: merged posts, please use the edit button instead of double posting.
Gater12 Gater12 Code:java package com.chrome.PvPAsk; import java.io.File;import java.io.IOException;import java.util.HashMap; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.configuration.file.FileConfiguration;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerCommandPreprocessEvent;import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin implements Listener { private HashMap<String, String> requests = new HashMap<String, String>(); public File SecurityQuestions = new File(getDataFolder() + ""); public File Config = new File(getDataFolder(), "Config.yml"); public FileConfiguration SecurityQuestion; public void onEnable() { //Listener pvpask = new this(); Bukkit.getPluginManager().registerEvents(this, this); if(!SecurityQuestions.exists()){ SecurityQuestions.mkdir(); System.out.println("[SecurityQuestions] SecurityQuestions file created"); }else{ System.out.println("[SecurityQuestions] SecurityQuestion file detected"); } if(Config.exists()){ System.out.println("[SecurityQuestions] Config.yml file detected"); }else{ try { Config.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } getLogger().info("Enabled!"); } public void onDisable(){ getLogger().info("Disabled!"); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < args.length; i++){ sb.append(args[i]).append(" "); } String allArgs = sb.toString().trim(); Player p = (Player)sender; if(!(sender instanceof Player)) { System.out.println("This is a command for a player"); return true; } if(cmd.getLabel().equalsIgnoreCase("1v1")) { if(p.hasPermission("1v1.others")){ if(args.length == 0) { p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"/1v1 <player>"); return true; } Player t = Bukkit.getPlayer(args[0]); if (args.length == 1) { if (Bukkit.getOfflinePlayer(args[0]).isOnline()) { requests.put(sender.getName(), t.getName()); p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You sent a 1v1 Request to " + ChatColor.GOLD + t.getDisplayName()); t.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You have just received a 1v1 request from " + ChatColor.GOLD + p.getDisplayName()); t.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"To Accept type /1v1accept "); }else{ p.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.GOLD + allArgs + ChatColor.GREEN + " is offline!"); } } } } return false; } @EventHandler public void onPrepocess(PlayerCommandPreprocessEvent e) { final Player p = e.getPlayer(); HashMap<String, String> requests = new HashMap<String, String>(); if (e.getMessage().equalsIgnoreCase("/1v1accept") && requests.containsKey(p.getName())) { String reciever = requests.get(p.getName()); p.sendMessage(ChatColor.GREEN +"[1v1]: " + ChatColor.GOLD + reciever + ChatColor.AQUA + " accepted your 1v1 Request"); if (p.getServer().getPlayer(reciever) != null) { Player recieverp = p.getServer().getPlayer(reciever); recieverp.sendMessage(ChatColor.GREEN +"[1v1]: "+ ChatColor.AQUA +"You accepted " + ChatColor.GOLD + p.getName() + ChatColor.AQUA +"'s 1v1 request!"); p.teleport(recieverp.getLocation()); } } } }[/i]
Ah, well that wasn't the original question. To be honest, I couldn't even tell that's what it was supposed to do really. You shouldn't be using the PlayerCommandPreprocessEvent unless you know precisely how it works. In your case, your using it as a command handler which is wrong, all that code should be in the onCommand. This statement will always be false... or produce an error since your not checking that getOfflinePlayer is not null. Code:java Bukkit.getOfflinePlayer(args[0]).isOnline() This is not wrong, but inefficient. Always use an iterator when it's available. Avoid for loops. Code:java for (int i = 0; i < args.length; i++) { should be: Code:java for(String a : args) {sb.append(a).append(" ")} Clean up your code and repost it. I'm having trouble reading it. Your new code is checking the sender too late, you have to check before you cast. EDIT by Moderator: merged posts, please use the edit button instead of double posting.
Alshain01 can you point me to what line i need to fix im completely lost i need help someone help please EDIT by Moderator: merged posts, please use the edit button instead of double posting.
K basically this is your code: Code:java Player p = (Player)sender;if(!(sender instanceof Player)) {System.out.println("This is a command for a player");return true;} The problem is that your already saying that sender is a type of Player and then checking it after, simply put line 1 in the if statement (using else) to fix your problem.