当前位置: 代码迷 >> java >> 在类之间传递值
  详细解决方案

在类之间传递值

热度:32   发布时间:2023-08-02 10:39:51.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”类中获取Main中bannedBlocksString的值?

试试这个,我希望它能起作用:

从主要:

    PlayerListener pl = new PlayerListener(this);

    this.saveDefaultConfig();

    String [] bannedBlocksString = pl.getBannedBlocks();

在PlayerListener中,您必须声明get方法:

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

}

如果取消注释PlayerListener中的bannedBlocksString ,则始终可以在Main类中使用PlayerListener.bannedBlocksString对其进行访问,因为变量是静态的。

如果您想通过另一种方法进行处理并分配值,则需要从变量中删除final值并使用下面的代码。

    PlayerListener.bannedBlocks = bannedBlocksString.split("; ");
  相关解决方案