2016-12-24 59 views
0

我試圖訪問存儲我的 這裏類的方法中的名稱訪問一個名字是我的代碼:在不同的方法

public class PunishCommand implements Listener, CommandExecutor { 

    private String tn; 
    private Player target; 


@SuppressWarnings("deprecation") 
public boolean onCommand(CommandSender sender, Command cmd, String label, 
     String[] args) { 
    Player p = (Player) sender; 
    target = Bukkit.getServer().getPlayer(args[0]); 
    tn = target.getName(); 
    if(!sender.hasPermission("punishgui.open")) { 

     sender.sendMessage(ChatColor.RED + "You do not have enough permissions to do that."); 
     return true; 
    } 

    if(args.length == 0) { 

     sender.sendMessage(ChatColor.RED + "Usage: /punish <player>"); 
     return true; 
    } 

    if(args.length == 1) { 
     if (target == null) { 
      sender.sendMessage(ChatColor.RED + "Your target is invalid!"); 
      return true; 
     } 
     else 
     { 
      openGUI(p); 
      return true; 
     } 
    } 

    if (args.length > 1) { 

     sender.sendMessage(ChatColor.RED + "Usage: /punish <player>"); 
     return true; 
    } 

    return false; 
} 
public String getNameTarget() 
{ 
    return this.tn; 
} 

public void openGUI(Player player) 
{ 
    //owner (null=everyone), slots(rowsx9), name 
    Inventory inv = Bukkit.createInventory(null, 9, ChatColor.RED + "Punish Player"); 

    ItemStack clearInv = new ItemStack (Material.BARRIER); 
    ItemMeta clearInvMeta = clearInv.getItemMeta(); 
    ItemStack changeGM = new ItemStack (Material.LAVA_BUCKET); 
    ItemMeta changeGMMeta = changeGM.getItemMeta(); 
    ItemStack invis = new ItemStack (Material.REDSTONE); 
    ItemMeta invisMeta = invis.getItemMeta(); 
    ItemStack fix = new ItemStack (Material.SPIDER_EYE); 
    ItemMeta fixMeta = fix.getItemMeta(); 
    ItemStack stop = new ItemStack (Material.FERMENTED_SPIDER_EYE); 
    ItemMeta stopMeta = stop.getItemMeta(); 
    ItemStack tMute = new ItemStack (Material.POISONOUS_POTATO); 
    ItemMeta tMuteMeta = tMute.getItemMeta(); 


    clearInvMeta.setDisplayName(ChatColor.RED + "Warn"); 
    clearInv.setItemMeta(clearInvMeta); 
    changeGMMeta.setDisplayName(ChatColor.RED + "Mute"); 
    changeGM.setItemMeta(changeGMMeta); 
    invisMeta.setDisplayName(ChatColor.RED + "Kick"); 
    invis.setItemMeta(invisMeta); 
    fixMeta.setDisplayName(ChatColor.RED + "Temp Ban"); 
    fix.setItemMeta(fixMeta); 
    stopMeta.setDisplayName(ChatColor.RED + "Ban"); 
    stop.setItemMeta(stopMeta); 
    tMuteMeta.setDisplayName(ChatColor.RED + "Temp Mute"); 
    tMute.setItemMeta(tMuteMeta); 


    inv.setItem(5, tMute); 
    inv.setItem(4, invis); 
    inv.setItem(3, fix); 
    inv.setItem(2, clearInv); 
    inv.setItem(1, stop); 
    inv.setItem(0, changeGM); 

    player.openInventory(inv); 
} 

public void openGUI1(Player player) 
{ 
    Inventory tb = Bukkit.createInventory(null, 9, ChatColor.RED + "Temp Ban Options"); 

    ItemStack ten = new ItemStack (Material.OBSIDIAN); 
    ItemMeta tenMeta = ten.getItemMeta(); 
    ItemStack thirty = new ItemStack (Material.BEDROCK); 
    ItemMeta thirtyMeta = thirty.getItemMeta(); 

    tenMeta.setDisplayName(ChatColor.RED + "10 Minutes"); 
    ten.setItemMeta(tenMeta); 
    thirtyMeta.setDisplayName(ChatColor.RED + "30 Minutes"); 
    thirty.setItemMeta(thirtyMeta); 

    tb.setItem(0, ten); 
    tb.setItem(1, thirty); 

    player.openInventory(tb); 
} 

public void openGUI2(Player player) 
{ 
    Inventory tb2 = Bukkit.createInventory(null, 9, ChatColor.RED + "Temp Mute Options"); 

    ItemStack ten2 = new ItemStack (Material.WATER_BUCKET); 
    ItemMeta ten2Meta = ten2.getItemMeta(); 
    ItemStack thirty2 = new ItemStack (Material.GRASS); 
    ItemMeta thirty2Meta = thirty2.getItemMeta(); 

    ten2Meta.setDisplayName(ChatColor.RED + "10 Minutes"); 
    ten2.setItemMeta(ten2Meta); 
    thirty2Meta.setDisplayName(ChatColor.RED + "30 Minutes"); 
    thirty2.setItemMeta(thirty2Meta); 

    tb2.setItem(0, ten2); 
    tb2.setItem(1, thirty2); 

    player.openInventory(tb2); 
} 

@EventHandler 
public void onInventoryClick(InventoryClickEvent event) 
{ 

    Player player = (Player) event.getWhoClicked(); 
    event.setCancelled(true); 
    if(!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Punish Player")) 
    { 
     return; 
    } 
    if(event.getCurrentItem()==null || event.getCurrentItem().getType()==Material.AIR || !event.getCurrentItem().hasItemMeta()) 
    { 
     player.closeInventory(); 
     return; 
    } 

    switch(event.getCurrentItem().getType()) 
    { 
    case BARRIER: 
     player.sendMessage(ChatColor.DARK_RED + "This is a warning: " + ChatColor.RED + "Stop what you are doing or further punishments will follow."); 
     break; 
    case LAVA_BUCKET: 
     Bukkit.dispatchCommand(Bukkit.getConsoleSender() , "kill " + getNameTarget()); 
     break; 
    case SPIDER_EYE: 
     openGUI1(player); 
     break; 
    case FERMENTED_SPIDER_EYE: 
     Bukkit.dispatchCommand(Bukkit.getConsoleSender() , "ban " + getNameTarget()); 
     break; 
    case REDSTONE: 
     Bukkit.dispatchCommand(Bukkit.getConsoleSender() , "kick " + getNameTarget()); 
     break; 
    case POISONOUS_POTATO: 
     openGUI2(player); 
     break; 
    case OBSIDIAN: 
     Bukkit.dispatchCommand(Bukkit.getConsoleSender() , "tempban " + getNameTarget() + " 10 minutes"); 
     break; 
    case BEDROCK: 
     Bukkit.dispatchCommand(Bukkit.getConsoleSender() , "tempban " + getNameTarget() + " 30 minutes"); 
     break; 
    default: 
     player.closeInventory(); 
     break; 
    } 

} 

} 

我試圖獲取名稱,並在其存儲String tn,然後在onInventoryClick方法中調用它。 **此代碼實現bukkit API

+1

你會得到什麼錯誤?你在這裏有什麼情況?爲什麼你需要在你的類中作爲變量專門訪問它 – Kerooker

+0

我想在args [0]處獲取字符串,因爲它只會是玩家的名字。該名稱存儲在onCommand方法的tn下。我想在onInventoryClick方法中也使用這個名字,但是我的代碼有一些錯誤,並且我沒有得到正確的名字。我設置了getNameTarget()作爲獲取名稱的一種可能的方式,但那不起作用。 – user3015822

+0

你得到的錯誤是什麼?期望的行爲是什麼?當您運行onInventory時,您是否嘗試過打印該名稱,以查看它是否實際上不同? – Kerooker

回答

0

您試圖直接讓玩家使用該名稱,但這隻能通過在線玩家完成。

如果找不到名字或玩家離線,則返回「null」。我建議您添加一張支票,並將結果打印到控制檯/聊天室。如果您想使用實際的離線播放器,請使用this

(另外,你甚至在檢查args [0]是否被給出之前試圖讓你的播放器對象)

+0

我修正了它:)我改變了玩家靜態以及我的其他方法...似乎上班。 – user3015822