0

我目前正在尝试修复一些代码,但我似乎找不到问题:

构建路径包括 Vault 和 Bukkit 1.7.9。

它声称该错误来自 InstantiationException,但据我所知,我没有包含任何 Instantiatons。如果有人遇到此错误,请帮助修复。它是一个异常的插件类型...

这是我的代码:

package me.REDANDBLUEWHO.Combat;

import java.util.Arrays;
import java.util.logging.Logger;

import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class Combat extends JavaPlugin implements Listener {

    public static Economy econ = null;
    public static EconomyResponse r;
    Logger logger = Logger.getLogger("Minecraft");
    public Inventory CombatShopInv;
    public ItemStack H, C, L, B;


    public Combat(Plugin plugin) {
        CombatShopInv = Bukkit.getServer().createInventory(null, 36, ChatColor.DARK_AQUA + "CombatShop");

        ItemStack DH = new ItemStack (Material.DIAMOND_HELMET);
        ItemMeta MH = DH.getItemMeta();
        MH.setLore(Arrays.asList(ChatColor.DARK_AQUA + "8000 Credits"));
        MH.setDisplayName(ChatColor.GRAY + "Buy: " + ChatColor.DARK_AQUA + "Diamond Helmet");
        DH.setItemMeta(MH);
        H = DH;

        ItemStack DC = new ItemStack (Material.DIAMOND_CHESTPLATE);
        ItemMeta MC = DC.getItemMeta();
        MC.setLore(Arrays.asList(ChatColor.DARK_AQUA + "12800 Credits"));
        MC.setDisplayName(ChatColor.GRAY + "Buy: " + ChatColor.DARK_AQUA + "Diamond Chestplate");
        DC.setItemMeta(MC);
        C = DC;

        ItemStack DL = new ItemStack (Material.DIAMOND_LEGGINGS);
        ItemMeta ML = DL.getItemMeta();
        ML.setLore(Arrays.asList(ChatColor.DARK_AQUA + "11200 Credits"));
        ML.setDisplayName(ChatColor.GRAY + "Buy: " + ChatColor.DARK_AQUA + "Diamond Leggings");
        DL.setItemMeta(ML);
        L = DL;

        ItemStack DB = new ItemStack (Material.DIAMOND_BOOTS);
        ItemMeta MB = DB.getItemMeta();
        MB.setDisplayName(ChatColor.GRAY + "Buy: " + ChatColor.DARK_AQUA + "Diamond Boots");
        MB.setLore(Arrays.asList(ChatColor.DARK_AQUA + "6400"));
        DB.setItemMeta(MB);
        B = DB;

        CombatShopInv.setItem(0, H);
        CombatShopInv.setItem(1, C);
        CombatShopInv.setItem(2, L);
        CombatShopInv.setItem(3, B);



    }

    public void onEnable() {
        new Combat(this);
        Bukkit.getServer().getLogger().info("Combat Shop Enabled!");
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
         if (!setupEconomy() ) {
                this.logger.severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
                getServer().getPluginManager().disablePlugin(this);
                return;
         }

    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Combat Shop Disabled!");
    }

    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }
        RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
        if (rsp == null) {
            return false;
        }
        econ = rsp.getProvider();
        return econ != null;
    }

    public boolean onCommand(CommandSender sender, Command cmd,
            String commandLabel, String[] args) {
        Player player = (Player) sender;
        if (cmd.getName().equalsIgnoreCase("CombatShop")) {
            player.openInventory(CombatShopInv);
            player.sendMessage(ChatColor.DARK_AQUA + "[Global-Kits] "
                    + ChatColor.GRAY + "Opening the" + ChatColor.DARK_AQUA
                    + " Global Kits " + ChatColor.GRAY
                    + "InGame credits store!");

        }
        return true;

    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
            if (!e.getInventory().equals(CombatShopInv)) {
                if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Diamond Helmet")) {
                    r = econ.withdrawPlayer(p.getName(), 8000.00);
                    p.closeInventory();
                    p.getEquipment().setHelmet(new ItemStack (Material.DIAMOND_HELMET));
                if(r.transactionSuccess()) {
                    p.sendMessage("You successfully bought a Diamond Helmet");
                } else {
                    e.isCancelled();
                    p.sendMessage(ChatColor.RED + "You do not have enough credits to buy this item!");
                    p.closeInventory();
                }
            }           
        }
    }
}

这是错误日志:

[13:58:21 ERROR]: Could not load 'plugins\CombatShop.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Abnormal plugin type
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
a:56) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
ava:127) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
java:328) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
.java:251) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugins(CraftServer.ja
va:357) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.reload(CraftServer.java:79
9) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.Bukkit.reload(Bukkit.java:288) [craftbukkit.jar:git-Bukkit
-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
0) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServe
r.java:703) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(Craf
tServer.java:690) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:
296) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2
61) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5
58) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java
:469) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6
28) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
Caused by: java.lang.InstantiationException: me.REDANDBLUEWHO.Combat.Combat
        at java.lang.Class.newInstance(Unknown Source) ~[?:1.7.0_51]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
a:52) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-64-g3012211-b3076jnks]
        ... 15 more
4

1 回答 1

0

我相信这种行为来自new Combat(this);你的onEnable()方法。你为什么不创建一个方法,例如调用createCombatShopInv你放置代码的地方?然后调用中的方法onEnable()

此外,我发现:

  1. 在 Java 中,方法名和变量名以小写字母开头(除非它是常量)
  2. 无需使用“Bukkit”,您有一个插件实例并且可以使用getServer()
  3. Bukkit 已经有一个记录器,(你也使用它),只需使用getLogger()
于 2014-05-06T15:35:00.850 回答