2015-07-19 75 views
0

我需要將一個字符串從類傳遞到Java中的另一個類(Bukkit),我已經閱讀了一些類似的問題,但我無法解決問題。在類之間傳遞一個值

我有一個主類

public class Main extends JavaPlugin { 

    @Override 
    public void onEnable() { 

     new PlayerListener(this); 

     this.saveDefaultConfig(); 

     String bannedBlocksString = this.getConfig().getString("bannedBlocks"); 
    } 

    @Override 
    public void onDisable() { 

    } 

} 

而另一個階級 「PlayerListener」

public class PlayerListener implements Listener { 

    public PlayerListener(Main plugin) { 
     plugin.getServer().getPluginManager().registerEvents(this, plugin); 
    } 

    // public static final String bannedBlocksString = "DIAMOND_BLOCK; EMERALD_BLOCK"; 

    public static final String[] bannedBlocks = bannedBlocksString.split("; "); 

    public static boolean isBannedBlock(String[] bannedBlocks, String blockPlaced) { 
     boolean returnValue = false; 
     for (String bannedBlock : bannedBlocks) { 
      if(blockPlaced.equalsIgnoreCase(bannedBlock)){ 
       returnValue = true; 
      } 
     } 
     return returnValue; 
    } 

    @EventHandler 
    public void onBlockPlace(BlockPlaceEvent event) { 

     String blockPlaced = event.getBlockPlaced().getType().toString(); 

     if(!event.getPlayer().hasPermission("antibuild.block.noplace") && isBannedBlock(bannedBlocks, blockPlaced)) { 
      event.setCancelled(true); 
      event.getPlayer().sendMessage(ChatColor.RED + "You can not place this block."); 
     } 

    } 

} 

如何我可以從類 「PlayerListener」 獲得主要bannedBlocksString的價值?

+1

這聽起來像你已經*嘗試*的東西,但它沒有奏效 - 所以你試了什麼,發生了什麼? (鑑於你在'PlayerListener'構造函數中有一個'Main'實例的引用,你可以在'Main'和'getBannedBlock()'方法或類似的東西中有一個字段......) –

+0

謝謝大家,問題解決了。 –

回答

0

試試這個,我希望它的工作原理:

從主營:

PlayerListener pl = new PlayerListener(this); 

    this.saveDefaultConfig(); 

    String [] bannedBlocksString = pl.getBannedBlocks(); 

從PlayerListener必須聲明get方法:

public String [] getBannedBlocks(){ 
return this.bannedBlocks; 

}

0

如果取消註釋PlayerListener中的bannedBlocksString,那麼你總是可以在Main類中訪問它使用PlayerListener.bannedBlocksString作爲變量是靜態的。

如果您想以相反的方式完成此操作,並指定您需要的值以從變量中刪除final並使用下面的代碼。

PlayerListener.bannedBlocks = bannedBlocksString.split("; ");