Вопрос Ошибка cannot invoke...

_MRDen3000YT_

Пользователь
Сообщения
473
Решения
22
Добрый день. Столкнулся с проблемой: ошибка
Java:
[18:51:25] [User Authenticator #1/INFO]: UUID of player _MRDen3000YT_ is 72eeab41-6545-3c73-b123-9b031f07124e
[18:51:25] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to bProtection v1.0
org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.PlayerList.onPlayerJoin(PlayerList.java:346) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.PlayerList.a(PlayerList.java:166) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.LoginListener.b(LoginListener.java:159) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.LoginListener.e(LoginListener.java:57) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.ExceptionInInitializerError
    at EventListeners.OnJoinListener.onJoin(OnJoinListener.java:27) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    ... 14 more
Caused by: java.lang.NullPointerException: Cannot invoke "bProtection.main.bProtection.getDataFolder()" because "Util.IPUtil.plugin" is null
    at Util.IPUtil.<clinit>(IPUtil.java:26) ~[?:?]
    at EventListeners.OnJoinListener.onJoin(OnJoinListener.java:27) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
    ... 14 more
[18:51:27] [Server thread/INFO]: _MRDen3000YT_[/127.0.0.1:54820] logged in with entity id 293 at ([world]-198.0960921291671, 92.0, -85.30031122234358)
OnJoinListener:
JavaScript:
package EventListeners;

import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import Util.IPUtil;
import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class OnJoinListener implements Listener {

    private bProtection plugin;

    public OnJoinListener(bProtection plugin) {
        this.plugin = plugin;

    }

    @EventHandler
    public void onJoin(PlayerJoinEvent join) {
        Player player = join.getPlayer();
        if (join.getPlayer().hasPermission("bProtection.admin")) {
            IPUtil.IPCompare(player); //эта строчка из ошибка 27

        }

    }

}
и IPUtil
Java:
package Util;

import java.io.File;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class IPUtil {

    private static bProtection plugin;
    private static Permission perm;

    @SuppressWarnings("static-access")
    public IPUtil(Permission perm, bProtection instance) {
        this.plugin = instance;
        this.perm = perm;
    }

    private static void addGroup(Player player, String group) {
        perm.playerAddGroup(player, group);
    }
   static File adminsFile = new File(plugin.getDataFolder() + File.separator + "admins.yml"); //ошибка указывает на эту строчку
   static File adminsFile = new File(plugin.getDataFolder() + File.separator + "admins.yml");
    public static void IPCompare(Player player) {
        String nowIP = player.getAddress().getAddress().toString();
        if (plugin.getConfig().getString("admins." + player) == null) {
            admins.addDefault("admins." + player + ".registrationIP", nowIP);
        } else if (nowIP != admins.getString("admins." + player + ".registrationIP")) {
            String defaultGroup = (String) plugin.getConfig().get("settings.non-accepted-admin-group");
            addGroup(player, defaultGroup);

        }

    }

}
 
Последнее редактирование модератором:
Как ты регистрируешь IPUtil при загрузке плагина?

Т.к. у тебя там конструктор и обязательные штуки по типу plugin, то тебе надо вызывать IPUtil через главный класс, где ты его инициализируешь. Т.е., исправленная в ивенте будет Main.IPUtil.IPCompare(player);
 
Как ты регистрируешь IPUtil при загрузке плагина?
static IPUtil IPUtil = new IPUtil();
вот так
Авто объединение сообщений:

Т.к. у тебя там конструктор и обязательные штуки по типу plugin, то тебе надо вызывать IPUtil через главный класс, где ты его инициализируешь. Т.е., исправленная в ивенте будет Main.IPUtil.IPCompare(player);
bProtection.IPUtil.IPCompare(player);
вообще не находит в классе bProtection
Авто объединение сообщений:

Main:
Java:
package bProtection.main;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import Commands.CommandProtection;
import EventListeners.OnJoinListener;
import Util.IPUtil;
import net.milkbowl.vault.permission.Permission;

public class bProtection extends JavaPlugin {
    public static ConcurrentHashMap<Player, String> tokens = new ConcurrentHashMap<Player, String>();
    public static List<String> keys = new ArrayList<>();
    private Permission perm;
    IPUtil IPUtil = new IPUtil(perm, this);
    public void onEnable() {
        setupPermissions();

        CommandProtection cmd = new CommandProtection(perm, this);
        getCommand("protection").setExecutor(cmd);

        File config = new File(getDataFolder() + File.separator + "config.yml");
        if (!config.exists()) {
            getConfig().options().copyDefaults(true);
            saveDefaultConfig();

        }
        File adminsFile = new File(getDataFolder() + File.separator + "admins.yml");
        if (!adminsFile.exists()) {
            try {
                adminsFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        Bukkit.getPluginManager().registerEvents(new OnJoinListener(this), this);
        ConfigurationSection mainSection = this.getConfig().getConfigurationSection("main");
        if (mainSection != null) {
            for (String key : mainSection.getKeys(false)) {
                bProtection.keys.add(key);
                System.out.println(keys);
            }
        }


    }

    private boolean setupPermissions() {
        RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
        perm = rsp.getProvider();
        return perm != null;
    }

}
IPUtil:
Java:
package Util;

import java.io.File;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class IPUtil {

    private static bProtection plugin;
    private static Permission perm;

    @SuppressWarnings("static-access")
    public IPUtil(Permission perm, bProtection instance) {
        this.plugin = instance;
        this.perm = perm;
    }


    private static void addGroup(Player player, String group) {
        perm.playerAddGroup(player, group);
    }
    public static void IPCompare(Player player) {
        File adminsFile = new File(plugin.getDataFolder() + File.separator + "admins.yml");
        FileConfiguration admins = YamlConfiguration.loadConfiguration(adminsFile);
        String nowIP = player.getAddress().getAddress().toString();
        if (plugin.getConfig().getString("admins." + player) == null) {
            admins.addDefault("admins." + player + ".registrationIP", nowIP);
        } else if (nowIP != admins.getString("admins." + player + ".registrationIP")) {
            String defaultGroup = (String) plugin.getConfig().get("settings.non-accepted-admin-group");
            addGroup(player, defaultGroup);

        }

    }

}
OnJoinListener
Java:
package EventListeners;

import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import Util.IPUtil;
import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class OnJoinListener implements Listener {

    private bProtection plugin;

    public OnJoinListener(bProtection plugin) {
        this.plugin = plugin;

    }

    @EventHandler
    public void onJoin(PlayerJoinEvent join) {
        Player player = join.getPlayer();
        if (join.getPlayer().hasPermission("bProtection.admin")) {
        }

    }

}
 
Последнее редактирование модератором:
1) Ты используешь null'овый perm в конструкторе IPUtil, так нельзя;
2) У тебя IPUtil здесь не публичный (и не статический).
Подправил, ошибку с инициализацией класса убрал, теперь осталась старая ошибка:
Java:
[20:21:20 ERROR]: Could not pass event PlayerJoinEvent to bProtection v1.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerList.onPlayerJoin(PlayerList.java:346) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerList.a(PlayerList.java:166) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.LoginListener.b(LoginListener.java:159) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.LoginListener.e(LoginListener.java:57) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "bProtection.main.bProtection.getDataFolder()" because "Util.IPUtil.plugin" is null
        at Util.IPUtil.IPCompare(IPUtil.java:33) ~[?:?]
        at EventListeners.OnJoinListener.onJoin(OnJoinListener.java:28) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
        ... 14 more
IPUtil:
Java:
package Util;

import java.io.File;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class IPUtil {

    private static bProtection plugin;
    private static Permission perm;

    @SuppressWarnings("static-access")
    public IPUtil(Permission perm, bProtection instance) {
        this.plugin = instance;
        this.perm = perm;
    }



    public IPUtil() {
        // TODO Auto-generated constructor stub
    }



    private static void addGroup(Player player, String group) {
        perm.playerAddGroup(player, group);
    }
    public static void IPCompare(Player player) {
        File adminsFile = new File(plugin.getDataFolder() + File.separator + "admins.yml");
        FileConfiguration admins = YamlConfiguration.loadConfiguration(adminsFile);
        String nowIP = player.getAddress().getAddress().toString();
        if (plugin.getConfig().getString("admins." + player) == null) {
            admins.addDefault("admins." + player + ".registrationIP", nowIP);
        } else if (nowIP != admins.getString("admins." + player + ".registrationIP")) {
            String defaultGroup = (String) plugin.getConfig().get("settings.non-accepted-admin-group");
            addGroup(player, defaultGroup);

        }

    }

}
Авто объединение сообщений:

все еще актуально
 
Последнее редактирование:
static IPUtil IPUtil = new IPUtil();
вот так
Авто объединение сообщений:


bProtection.IPUtil.IPCompare(player);
вообще не находит в классе bProtection
Авто объединение сообщений:

Main:
Java:
package bProtection.main;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import Commands.CommandProtection;
import EventListeners.OnJoinListener;
import Util.IPUtil;
import net.milkbowl.vault.permission.Permission;

public class bProtection extends JavaPlugin {
    public static ConcurrentHashMap<Player, String> tokens = new ConcurrentHashMap<Player, String>();
    public static List<String> keys = new ArrayList<>();
    private Permission perm;
    IPUtil IPUtil = new IPUtil(perm, this);
    public void onEnable() {
        setupPermissions();

        CommandProtection cmd = new CommandProtection(perm, this);
        getCommand("protection").setExecutor(cmd);

        File config = new File(getDataFolder() + File.separator + "config.yml");
        if (!config.exists()) {
            getConfig().options().copyDefaults(true);
            saveDefaultConfig();

        }
        File adminsFile = new File(getDataFolder() + File.separator + "admins.yml");
        if (!adminsFile.exists()) {
            try {
                adminsFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        Bukkit.getPluginManager().registerEvents(new OnJoinListener(this), this);
        ConfigurationSection mainSection = this.getConfig().getConfigurationSection("main");
        if (mainSection != null) {
            for (String key : mainSection.getKeys(false)) {
                bProtection.keys.add(key);
                System.out.println(keys);
            }
        }


    }

    private boolean setupPermissions() {
        RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
        perm = rsp.getProvider();
        return perm != null;
    }

}
IPUtil:
Java:
package Util;

import java.io.File;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class IPUtil {

    private static bProtection plugin;
    private static Permission perm;

    @SuppressWarnings("static-access")
    public IPUtil(Permission perm, bProtection instance) {
        this.plugin = instance;
        this.perm = perm;
    }


    private static void addGroup(Player player, String group) {
        perm.playerAddGroup(player, group);
    }
    public static void IPCompare(Player player) {
        File adminsFile = new File(plugin.getDataFolder() + File.separator + "admins.yml");
        FileConfiguration admins = YamlConfiguration.loadConfiguration(adminsFile);
        String nowIP = player.getAddress().getAddress().toString();
        if (plugin.getConfig().getString("admins." + player) == null) {
            admins.addDefault("admins." + player + ".registrationIP", nowIP);
        } else if (nowIP != admins.getString("admins." + player + ".registrationIP")) {
            String defaultGroup = (String) plugin.getConfig().get("settings.non-accepted-admin-group");
            addGroup(player, defaultGroup);

        }

    }

}
OnJoinListener
Java:
package EventListeners;

import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import Util.IPUtil;
import bProtection.main.bProtection;
import net.milkbowl.vault.permission.Permission;

public class OnJoinListener implements Listener {

    private bProtection plugin;

    public OnJoinListener(bProtection plugin) {
        this.plugin = plugin;

    }

    @EventHandler
    public void onJoin(PlayerJoinEvent join) {
        Player player = join.getPlayer();
        if (join.getPlayer().hasPermission("bProtection.admin")) {
        }

    }

}
1. Убери к черту статические поля из IPUtils, раз уж ты используешь конструктор.
2. Создай новый объект IPUtils в главном классе и получай его через синглтон, если уж тебе так принципиально использовать статики. Аля Main.getInstance().getIpUtils()#функция.
Не забывай, что создать объект нужно в момент, когда Permission не null, то бишь после его инициализации.

Либо, убери конструктор у IPUtils и добирайся до Permission через опять же синглтон в главном классе. Тогда можешь сделать все методы в IPUtils статическими..


Советую почитать принципы ООП, у тебя явно видны в коде недопонимания, ты пишешь код наугад (не в придирку сказано).
 
1. зачем статика?
2. ошибка явно говорит что plugin в IPUtils не задан. В чём проблема задать его через мутатор при старте плагина (если хочешь оставить статику)?
 
Назад
Сверху Снизу