1

サーバーの KitPvP セクション用のプラグインに取り組んでいます。

現在、追加MoneyPerKillしていますが、問題が発生しました。

私のコードは次のとおりです。

package com.lobbyist.junk.kitpvp;

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

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.RegisteredServiceProvider;

public class MoneyPerKill implements Listener {

    public static Economy econ = null;

    @EventHandler
    public void onPlayerDeathEvent(PlayerDeathEvent event) {
        Player player = event.getEntity();
        Player killer = player.getKiller();
        EconomyResponse r = econ.depositPlayer(killer, 10.00);
        if (r.transactionSuccess()) {
            killer.sendMessage(ChatColor.GOLD + "You recieved $10 for killing" +  player.getDisplayName());
        }
    }
}

私のメインクラスMain.javaでは、イベントも登録しました。

そしてMain.java私は持っています:

public static Economy econ = null;
private boolean setupEconomy() {
    RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
    if (economyProvider != null) {
        econ = economyProvider.getProvider();
    }

    return (econ != null);
}

問題は、プレイヤーを殺したときにキラーにお金が与えられないことです。

4

2 に答える 2

2

私が見る限り、あなたは Main.java の econ フィールドに Economy サービス オブジェクトを登録して参照していますが、MoneyPerKill.java PlayerDeathEvent リスナーでは、MoneyPerKill の econ と同じように econ を参照していますが、これは null です。したがって、この時点で、プレーヤーが死亡するたびに、コードは NullPointerExceptions をスローします。

この問題を解決するには、Main.java の econ フィールドを参照する必要があります。これを行うには、Main.econ.depositPlayer(killer, 10.00) と入力します。

PS静的フィールドをいたるところに作成する代わりに、メインクラスのインスタンスを使用することを検討する必要がありますが、それはトピックから外れています。

リシャーン・グプタが言ったことも考慮してください。

于 2015-04-25T11:17:49.740 に答える