【问题标题】:Cannot make a static reference to the non-static method --- from the type --- Java Bukkit Minecraft无法对非静态方法进行静态引用 --- 从类型 --- Java Bukkit Minecraft
【发布时间】:2021-04-24 06:58:09
【问题描述】:

我知道还有很多其他类似的帖子来自人们试图在他们的静态课程中找到他们的问题,我已经阅读了它们但无济于事。我正在尝试为 bedwars 制作一个 minecraft bukkit 插件,并在尝试使用 world 时。--- 我经常收到这些错误(无法从类型 World 中对非静态方法 getPlayers 进行静态引用)并且找不到静态的位置类起源于。这是我的代码:

package me.fitch.bedwars.timers;

import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.World;
import org.bukkit.entity.Player;

import me.fitch.bedwars.main;


public class starttimer implements Listener {
    private main plugin;
    public starttimer(main plugin) {
        this.plugin = plugin;
        Bukkit.getPluginManager().registerEvents(this, plugin);
    }
    
    @EventHandler
    public void startjoin(PlayerJoinEvent e)
    {
        Object [] players = World.getPlayers().toArray(); //error here
        if(players.length == 8)
        {
            //start countdown
        }
    }
}

希望你能帮上忙,我不只是瞎了 谢谢:)

编辑:在实例化 World server = new World(); 之后,我现在收到“无法实例化世界类型”错误,感谢到目前为止的帮助,希望你能帮助解决这个问题 :)

编辑 2:所以 e.getPlayer().getWorld() 现在可以工作了,所以谢谢,但我现在在我的主类中遇到问题,其中 e 不是一个东西

package me.fitch.bedwars;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.plugin.java.JavaPlugin;

import me.fitch.bedwars.listeners.beddestroy;



public class main extends JavaPlugin {
    private main plugin;
    public main(main plugin) {
        this.plugin = plugin;
    }
    @Override
    public void onEnable()
    {
        
        World.setSpawnLocation(Integer.parseInt( plugin.getConfig().getString("respawn_pointx")), Integer.parseInt( plugin.getConfig().getString("respawn_pointx")) + 1,Integer.parseInt( plugin.getConfig().getString("respawn_pointz")));
        new beddestroy(this);
    }
}

【问题讨论】:

  • 另外,private main plugin; 是什么?乍一看,这似乎是一个编译错误

标签: java plugins minecraft bukkit


【解决方案1】:

你会希望你的听众在自己的班级myListener.java

从该类中的侦听器事件中,您应该能够执行您需要执行的所有操作。

我喜欢创建一个public static Plugin 对象,以防您需要从插件中的任何其他类引用插件对象的特定实例。

您将像这样在Main.onEnable()注册监听器

package myPlugin;

import myPlugin.myListenerClass;

import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
    public static Plugin instance;

    @Override
    public void onEnable() {
    
        instance = this;

        PluginManager my_pm = getServer().getPluginManager();
        my_pm.registerEvents(new myListenerClass(), this); 
    }
}

您的 myListenerClass.java 将设置如下:

package myPlugin;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;

public class myListenerClass implements Listener {

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {

        System.out.println("PlayerJoinEvent was triggered!");

        int playerCount = Bukkit.getServer().getOnlinePlayers().size();

        if (playerCount == 8) {
            // start countdown
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 2013-01-15
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多