Java(Bukkit)如何使用这个来访问Config?

时间:2015-06-10 17:56:19

标签: java config bukkit

我有两个课程" main"用于命令和更多和"事件"对于事件和现在 我想把这个事件和#34; PlayerdeathEvent"传送我到一个点,从点的坐标保存在配置中,现在我测试这个:

  1. 我在事件类

    中创建了它
    public  void lbbkampfrespawn()
    {
    
    FileConfiguration cfg = this.getConfig();
    
    {
            String world = cfg.getString("LBBsetkampfrespawn1.world");
            double x = cfg.getDouble("LBBsetkampfrespawn1.x");
            double y = cfg.getDouble("LBBsetkampfrespawn1.y");
            double z = cfg.getDouble("LBBsetkampfrespawn1.z");
            double yaw = cfg.getDouble("LBBsetkampfrespawn1.yaw");
            double pitch = cfg.getDouble("LBBsetkampfrespawn1.pitch");
            Location loc = new Location(Bukkit.getWorld(world), x, y, z);
            loc.setYaw((float) yaw);
            loc.setPitch((float) pitch);
            p1.teleport(loc);
    }
    {
    
            String world = cfg.getString("LBBsetkampfrespawn2.world");
            double x = cfg.getDouble("LBBsetkampfrespawn2.x");
            double y = cfg.getDouble("LBBsetkampfrespawn2.y");
            double z = cfg.getDouble("LBBsetkampfrespawn2.z");
            double yaw = cfg.getDouble("LBBsetkampfrespawn2.yaw");
            double pitch = cfg.getDouble("LBBsetkampfrespawn2.pitch");
            Location loc = new Location(Bukkit.getWorld(world), x, y, z);
            loc.setYaw((float) yaw);
            loc.setPitch((float) pitch);
            p2.teleport(loc);
    }
    
    
    
    }
    
    
    }
    
  2. 问题: 我不知道"getConfig()" eclipse说我诅咒方法getConfig()

    1. 我使用静态

      在主类中创建了它
      public static void lbbkampfrespawn()
       {
      
      FileConfiguration cfg = this.getConfig();
      
      {
              String world = cfg.getString("LBBsetkampfrespawn1.world");
              double x = cfg.getDouble("LBBsetkampfrespawn1.x");
              double y = cfg.getDouble("LBBsetkampfrespawn1.y");
              double z = cfg.getDouble("LBBsetkampfrespawn1.z");
              double yaw = cfg.getDouble("LBBsetkampfrespawn1.yaw");
              double pitch = cfg.getDouble("LBBsetkampfrespawn1.pitch");
              Location loc = new Location(Bukkit.getWorld(world), x, y, z);
              loc.setYaw((float) yaw);
              loc.setPitch((float) pitch);
              p1.teleport(loc);
      }
      {
      
              String world = cfg.getString("LBBsetkampfrespawn2.world");
              double x = cfg.getDouble("LBBsetkampfrespawn2.x");
              double y = cfg.getDouble("LBBsetkampfrespawn2.y");
              double z = cfg.getDouble("LBBsetkampfrespawn2.z");
              double yaw = cfg.getDouble("LBBsetkampfrespawn2.yaw");
              double pitch = cfg.getDouble("LBBsetkampfrespawn2.pitch");
              Location loc = new Location(Bukkit.getWorld(world), x, y, z);
              loc.setYaw((float) yaw);
              loc.setPitch((float) pitch);
              p2.teleport(loc);
      }
      
      
      
      }
      
    2. 问题:我不能用这个。在静态

      感谢您的帮助,我需要做什么!

      当您需要更多来自鳕鱼时,请发送什么。

      感谢。 Sry拼写

1 个答案:

答案 0 :(得分:1)

  

编者注:
  之前已包含Deutsche版本的答案,但removed because帖子应为英文。如果您想看到它,请使用revision history

getConfig()方法继承自JavaPlugin类,只有一个类应该扩展。但是,有很多方法可以从另一个类访问配置文件。例如,人们可以保留对你的主要内容的引用。类或插件(扩展JavaPlugin的那个)然后使用该对象/引用调用getConfig()。您还可以创建一个静态getter方法来返回插件的实例(不确定这是不是很好)。 Eclipse可能会告诉您创建getConfig()方法,因为您在不扩展JavaPlugin的类中调用它。

例如,让我们说你的JavaPlugin扩展名为" Main"。例如,如果您有一个想要访问Main类的侦听器类,则可以在侦听器类的构造函数中请求此信息。在您的监听器课程中,您将拥有:

public class MainListener implements Listener {

    private Main plugin;

    public MainListener(Main plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onRespawn(PlayerRespawnEvent event) {
        FileConfiguration config = plugin.getConfig();
    }

如您所见,这使您可以在plugin.getConfig()课程的任何位置使用MainListener。您将使用onEnable()实例化侦听器(例如,在Main类的new MainListener(this);方法中)。当然不要忘记注册听众。

我理解你在这里要做的事情,但我相信有一个更好的方法(在死亡时传送球员是毛病或明显不起作用)。我不确定为什么你的方法是静态的,你在事件方法中调用它吗? P1p2未作为方法中的参数传递。这就是我要做的事情(试过这个并且它有效):不是在死亡事件中传送球员,而是在玩家重生时改变重生位置:

@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) {
    FileConfiguration config = getConfig(); //Or whichever method you are using
    World world = Bukkit.getWorld(config.getString("world"));
    double x = config.getDouble("x");
    double y = config.getDouble("y");
    double z = config.getDouble("z");
    float yaw = (float) config.getDouble("yaw");
    float pitch = (float) config.getDouble("pitch");
    event.setRespawnLocation(new Location(world, x, y, z, yaw, pitch));
}

这是我的测试config.yml文件:

world: world
x: 0
y: 80
z: 0
yaw: 0
pitch: 0

注意:我没有检查具有该名称的世界是否真的存在,以及该位置是否是玩家传送到的安全位置。这将是您需要实施的事情。