William_Shi 发表于 2020-5-7 19:51
截图!
你把一堆类的代码混在一起了!
我怎么看的了行号??????
- package top.zjzdmc.datehoer.losemoney;
- import net.milkbowl.vault.economy.Economy;
- import net.milkbowl.vault.economy.EconomyResponse;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.plugin.RegisteredServiceProvider;
- import org.bukkit.plugin.java.JavaPlugin;
- import top.zjzdmc.datehoer.losemoney.event.LoseMoneyListener;
- public final class Losemoney extends JavaPlugin {
- private static Economy econ = null;
- public static Losemoney instance;
- @Override
- public void onEnable() {
- // Plugin startup logic
- getLogger().info("[LoseMoney]§6插件以加载");
- if (!setupEconomy() ) { //判断是否有vault!
- getLogger().info("没有找到经济插件!!请安装vault");
- getServer().getPluginManager().disablePlugin(this);
- return;
- }
- getConfig().options().copyDefaults();
- saveDefaultConfig();
- getServer().getPluginManager().registerEvents(new LoseMoneyListener(),this);
- }
- 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;
- }
- @Override
- public void onDisable() {
- // Plugin shutdown logic
- }
- }
- package top.zjzdmc.datehoer.losemoney.event;
- import net.milkbowl.vault.economy.Economy;
- import net.milkbowl.vault.economy.EconomyResponse;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import top.zjzdmc.datehoer.losemoney.Losemoney;
- public class LoseMoneyListener implements Listener {
- private static Economy econ = null;
- @EventHandler
- public void onPlayerdeath(PlayerDeathEvent e){
- Player player = e.getEntity().getPlayer();
- double money = Losemoney.instance.getConfig().getDouble("LoseMoney");
- EconomyResponse take = econ.withdrawPlayer(player,money);
- if(take.transactionSuccess()){
- player.sendMessage("扣除"+money);
- }
- else{
- System.out.println(take.errorMessage);
- }
- }
- }
唯爱她° 发表于 2020-5-7 19:49
在下面的回复里了
反正就是这个栈帧
Caused by: java.lang.NullPointerException
at top.zjzdmc.datehoer.losemoney.event.LoseMoneyListener.onPlayerdeath(LoseMoneyListener.java:17) ~[?:?]
出现了NPE
扣钱的逻辑应该是Losemoney.econ而不是第二个类里面的econ
建议巩固下基础逻辑知识
建议巩固下基础逻辑知识
Caused by: java.lang.NullPointerException
at top.zjzdmc.datehoer.losemoney.event.LoseMoneyListener.onPlayerdeath(LoseMoneyListener.java:17) ~[?:?]
出现了NPE
- private static Economy econ = null;
咱先学java行不?你直接对着null操作钱?
你要获取你主类的econ
然后比如说赋值给这个econ
再进行操作
William_Shi 发表于 2020-5-7 20:05
Caused by: java.lang.NullPointerException
at top.zjzdmc.datehoer.losemoney.event.LoseMoneyL ...
- public class ExamplePlugin extends JavaPlugin {
-
- private static final Logger log = Logger.getLogger("Minecraft");
- private static Economy econ = null;
- private static Permission perms = null;
- private static Chat chat = null;
https://github.com/MilkBowl/VaultAPI
这个示例不就是给的null吗
本帖最后由 飞翔之歌 于 2020-5-7 20:53 编辑
Go to learn java
出门左拐java教程欢迎您
而且下面还有代码这里面的perms、chat、econ都已经赋过值了
唯爱她° 发表于 2020-5-7 20:13
https://github.com/MilkBowl/VaultAPI
这个示例不就是给的null吗
Go to learn java
出门左拐java教程欢迎您
而且下面还有代码这里面的perms、chat、econ都已经赋过值了
唯爱她° 发表于 2020-5-7 20:13
https://github.com/MilkBowl/VaultAPI
这个示例不就是给的null吗
实例先声明了成员变量
然后在onEnable里面对变量进行了赋值
其他类调用的时候变量就不是null了
你不能纯粹CV代码,应该多思考