【问题标题】:Cannot find main class in bukkit plugin在 bukkit 插件中找不到主类
【发布时间】:2019-01-10 17:53:09
【问题描述】:

我的插件有问题。错误是“找不到主类'turtdle.abilities.Main'”(我知道我拼错了turtle,但这是我的用户名。)

此插件适用于我的服务器。我已经尝试完成 plugin.yml 文件(包括作者、版本等)。我还尝试将插件名称更改为“Main”。我也尝试过移动 yml,但没有成功。

package turtdle.abilities;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    public Permission playerPermission1 = new Permission("turtdle.abilities.get");
    public Permission playerPermission2 = new Permission("turtdle.place.bedrock");
    @Override
    public void onEnable() {
        getLogger().info("onEnable Has been enabled for abilities plugin! BOOP!");
        new PlayerListener(this);
        new BlockRestricter(this);
        PluginManager pm = getServer().getPluginManager();
        pm.addPermission(playerPermission1);
        pm.addPermission(playerPermission2);
    }

    @Override
    public void onDisable() {
        getLogger().info("onDisable Has been triggered for abilities plugin");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label,
            String[] args) {
        if (cmd.getName().equalsIgnoreCase("hello") && sender instanceof Player) {
            Player player = (Player) sender;
            player.sendMessage("Hewwooo, " + player.getName());
            return true;
        }
        return false;

    }
}

 

package turtdle.abilities;

import org.bukkit.ChatColor;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;

public class PlayerListener implements Listener{
    public PlayerListener(Main plugin) {
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }
    @EventHandler
    public void onDeath (PlayerDeathEvent e) {
        Player player = e.getEntity();
        if (!player.hasPermission("turtdle.abilities.get")) {
            player.sendMessage(ChatColor.AQUA + "OOF");
        }
        else {
            {
                player.sendMessage(ChatColor.AQUA + "you should've abused...");
            }
        }
    }
}

 

package turtdle.abilities;

import org.bukkit.ChatColor;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;

public class BlockRestricter implements Listener{
    public BlockRestricter(Main plugin) {
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }
    @EventHandler
    public void onBlockPlace (BlockPlaceEvent e) {
        Player player = e.getPlayer();
        Block block = e.getBlock();
        if (!player.hasPermission("turtdle.place.bedrock") &&  block.getType().getId() == 7) {
            player.sendMessage(ChatColor.RED + "You CAN'T PLACE THIS " + ChatColor.BOLD + "BLOCK! " + ChatColor.RESET  + ChatColor.RED +  " it is ILLEGAL");
            e.setCancelled(true);

        }
    }
}

 

plugin.yml: 
main: turtdle.abilities.Main
name: TurtdleAbilitiesCore
version: 0.2.9
author: CakeyTheTurtdle
description: ExclusiveWolfHuntplugin
commands:
   hello:
      description: When you're lonely
      usage: /hello

嘿,这是我的全部错误

https://pastebin.com/FAieE0Lr

【问题讨论】:

  • 你是如何导出这个插件的?
  • 我转到文件、导出、jar 文件(在 java 下拉菜单中),然后只是 plugin.yml,然后我不编辑任何其他内容并单击完成。
  • 也许包名中的句点在某种程度上影响了它,使它认为包名是turtdle并且正在寻找类abilities
  • 这里没有指定。这是编译时错误还是运行时错误?
  • @Sean 我尝试将包名更改为只是turtdle,但错误仍然存​​在

标签: java minecraft bukkit


【解决方案1】:

不幸的是,另一个答案不正确。

在你链接的Pastebin中,我们可以看到错误如下:

Caused by: java.lang.ClassNotFoundException: turtdle.Main

当 Bukkit 试图加载你的主类时,它正在寻找类turtdle.Main。这很奇怪的原因是你的 plugin.yml 告诉它寻找turtdle.abilities.Main,它没有这样做。

我对问题原因的猜测是,有时在编译项目时,您的 IDE 可能实际上并未抓取编辑后的 ​​plugin.yml 文件以放入最终的 jar 中。要解决此问题,请完成以下步骤:

  1. 打开您的项目文件夹并删除任何/所有以下文件/文件夹(如果存在):
    • bin/
    • 目标/
    • YourPluginName.jar
  2. 转到您服务器的文件夹并删除 YourPluginName.jar 那里也
  3. 重新编译您的项目并将新的 jar 文件添加到您的插件文件夹中。

希望这应该可以解决问题。你的 plugin.yml 文件和代码看起来都很好,理论上应该可以工作。这是我能想到的唯一会导致问题的事情。

祝你好运!

【讨论】:

  • 我试图删除 bin 的内容,加载 eclip 时出错,幸好有备份
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多