无法加载:InvalidPluginException

时间:2014-12-05 23:55:31

标签: java exception bukkit

我正在做一个传送插件。 有没有解决这个问题?

在我的服务器上加载时,我收到此错误:

  

[15:46:39错误]:无法加载'插件\ RTeleport.jar'在文件夹'插件'   org.bukkit.plugin.InvalidPluginException:找不到主类`me.roofer.RTel   扩展端口'       在org.bukkit.plugin.java.PluginClassLoader。(PluginClassLoader.jav)   a:42)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j)   ava:127)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager。   java:328)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager)   .java:251)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugins(CraftServer.ja)   va:364)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.craftbukkit.v1_7_R4.CraftServer。(CraftServer.java:32   6)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       at net.minecraft.server.v1_7_R4.PlayerList。(PlayerList.java:68)[c   raftbukkit.jar:GIT-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在net.minecraft.server.v1_7_R4.DedicatedPlayerList。(SourceFile:14   )[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       at net.minecraft.server.v1_7_R4.DedicatedServer.init(DedicatedServer.jav)   a:133)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java   :436)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:6   28)[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]   引起:java.lang.ClassNotFoundException:me.roofer.RTeleport       在java.net.URLClassLoader $ 1.run(未知来源)〜[?:1.8.0_25]       在java.net.URLClassLoader $ 1.run(未知来源)〜[?:1.8.0_25]       at java.security.AccessController.doPrivileged(Native Method)〜[?:1.8.0_   25]       在java.net.URLClassLoader.findClass(未知来源)〜[?:1.8.0_25]       在org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader。   java:77)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader。   java:62)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]       在java.lang.ClassLoader.loadClass(未知来源)〜[?:1.8.0_25]       在java.lang.ClassLoader.loadClass(未知来源)〜[?:1.8.0_25]       at java.lang.Class.forName0(Native Method)〜[?:1.8.0_25]       在java.lang.Class.forName(未知来源)〜[?:1.8.0_25]       在org.bukkit.plugin.java.PluginClassLoader。(PluginClassLoader.jav)   a:40)〜[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]   ......还有10个

这是代码。 没有警告,config.yml文件没问题。

package me.roofer.RTeleport;

import java.util.UUID;
import java.util.logging.Logger;

import me.roofer.RTeleport.RTeleport;

import org.bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;

public class RTelport extends JavaPlugin {
    public Logger logger = Logger.getLogger("rtp");   
    public RTeleport plugin;

    @Override
    public void onDisable() {
        PluginDescriptionFile pdfFile = this.getDescription();
        getLogger().info(pdfFile.getName() + " has been disabled!");
    }
    @Override
    public void onEnable() {
        PluginDescriptionFile pdfFile = this.getDescription();
        getLogger().info(pdfFile.getName() + " has been Enabled!");
    }
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
        Player player = (Player) sender;
        if(player.hasPermission("rteleport.*")){
            if(commandLabel.equalsIgnoreCase("rtp")){
                player.sendMessage(ChatColor.RED + "NOT ENOUGH ARGUMENTS!");
            }else if(args.length == 1){
                Player targetPlayer = player.getServer().getPlayer(UUID.fromString(args[0]));
                Location location = targetPlayer.getLocation();
                player.teleport(location);
                player.sendMessage(ChatColor.DARK_AQUA + "Teleportation commensing... ");
            }
        }
        return false;
    }
}

2 个答案:

答案 0 :(得分:1)

main:文件中的plugin.yml键设置为主类的全名,包括包。

main: me.roofer.RTeleport.RTeleport


我建议您遵循命名约定并将软件包放在小写中。

答案 1 :(得分:0)

在您的plugin.yml文件中,您说主要包是me.roofer.RTeleport.RTeleport,但您提供的类名为RTelport。尝试将plugin.yml中的包名称更改为me.roofer.RTeleport.RTelport或将您的班级名称更改为RTeleport

此外,建议不要使用public Logger logger = Logger.getLogger("rtp");,因为这可能会导致问题。相反,请尝试使用public Logger logger = Bukkit.getLogger();

此外,您假设发件人是玩家。要避免任何错误,请尝试将onCommand方法更改为:

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    if(!(sender instanceof Player)){
        sender.sendMessage(ChatColor.RED + "You must be a player to do that!");
        return true;
    }
    Player player = (Player) sender;
    if(player.hasPermission("rteleport.*")){
        if(commandLabel.equalsIgnoreCase("rtp")){
            if(args.length != 1){
                player.sendMessage(ChatColor.RED + "Incorrect arguments!");
                return true;
            }
            else{
                Player targetPlayer = player.getServer().getPlayer(UUID.fromString(args[0]));
                if(targetPlayer == null){
                    player.sendMessage(ChatColor.RED + "Could not find player!");
                    return true;
                }
                player.teleport(targetPlayer);
                player.sendMessage(ChatColor.DARK_AQUA + "Teleportation commencing... ");
                return true;
            }
        }
    }
    return false;
}

通过添加return true;语句,可以阻止代码进展并防止可能发生的一些错误。

此外,您应该在传送之前检查播放器是否存在。如果玩家不在线,则会出错。

以上代码修复了所有内容。