想做一个死亡加钱的Bukkit Plugin,目前状况↓
复制代码根据https://github.com/MilkBowl/VaultAPI,我写了一行EconomyResponse r = econ.depositPlayer(player, 1);//这一行是减钱,并把Vault放进了依赖(当然头文件有),程序不会报错
但死了以后那一行确确实实执行了,但钱没有变化
(可能描述的不详细,如果要补偿随时提出)
- /*有一点的删减,不影响阅读*/
- import me.clip.placeholderapi.PlaceholderAPI;
- import org.bukkit.ChatColor;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.PlayerRespawnEvent;
- import org.bukkit.entity.Player;
- import org.bukkit.plugin.Plugin;
- import net.milkbowl.vault.chat.Chat;
- import net.milkbowl.vault.economy.Economy;
- import net.milkbowl.vault.economy.EconomyResponse;
- import net.milkbowl.vault.permission.Permission;
- import java.util.logging.Logger;
- public class Die implements Listener {
- private static final Logger log = Logger.getLogger("Minecraft");
- private static Permission perms = null;
- private static Chat chat = null;
- Plugin plugin = me.myplugin.one.One.getProvidingPlugin(me.myplugin.one.One.class);
- private static Economy econ = null;
- @EventHandler
- public void Die(PlayerRespawnEvent die){
- Player player = die.getPlayer();
但死了以后那一行确确实实执行了,但钱没有变化
(可能描述的不详细,如果要补偿随时提出)
在你这个类加上复制代码然后再在你的事件里加入复制代码
- public static Economy getEconomy() {
- return econ;
- }
- Economy economy = getEconomy();
- EconomyResponse response = economy.withdrawPlayer(player, money);
本帖最后由 BellTune 于 2021-1-11 21:05 编辑
噗,哈哈哈哈
一、API用法不当
这里直接给你傻瓜式用法:
复制代码
二、加减错误
deposit 指的是 存储,存入,存款 指的是加钱
withdraw 指的是撤退,撤回,取出 指的是扣钱复制代码三、判断余额
扣钱之前最好判断一下玩家的余额免得扣成负数
噗,哈哈哈哈
一、API用法不当
这里直接给你傻瓜式用法:
- RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
- economy = economyProvider.getProvider();
二、加减错误
deposit 指的是 存储,存入,存款 指的是加钱
withdraw 指的是撤退,撤回,取出 指的是扣钱
- economy.withdrawPlayer(player, 1); #扣玩家一块钱
扣钱之前最好判断一下玩家的余额免得扣成负数
GhostSkyV9 发表于 2021-1-11 20:13
在你这个类加上然后再在你的事件里加入
加了,还是没反应,钱没变,服务器执行到那一行报错,写的时候编译器不报错
- import me.clip.placeholderapi.PlaceholderAPI;
- import org.bukkit.ChatColor;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.PlayerRespawnEvent;
- import org.bukkit.entity.Player;
- import org.bukkit.plugin.Plugin;
- import net.milkbowl.vault.economy.Economy;
- import net.milkbowl.vault.economy.EconomyResponse;
- public class Die implements Listener {
- public static Economy getEconomy() {
- return econ;
- }
- Plugin plugin = me.myplugin.one.One.getProvidingPlugin(me.myplugin.one.One.class);
- private static Economy econ = null;
- @EventHandler
- public void Die1(PlayerRespawnEvent die){
- Player player = die.getPlayer();
- Economy economy = getEconomy();
- EconomyResponse response = economy.withdrawPlayer(player, 1);
- }
- }
早晨解说 发表于 2021-1-13 17:32
加了,还是没反应,钱没变,服务器执行到那一行报错,写的时候编译器不报错
...
请提供一下你得报错信息
GhostSkyV9 发表于 2021-1-13 20:24
请提供一下你得报错信息
执行到那一行就报这个
- [09:28:32] [Server thread/ERROR]: Could not pass event PlayerRespawnEvent to Dieevents v1.0.2
- org.bukkit.event.EventException: null
- at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PlayerList.moveToWorld(PlayerList.java:654) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PlayerList.moveToWorld(PlayerList.java:582) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1655) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PacketPlayInClientCommand.a(SourceFile:31) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PacketPlayInClientCommand.a(SourceFile:8) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_271]
- at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_271]
- at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- at java.lang.Thread.run(Unknown Source) [?:1.8.0_271]
- Caused by: java.lang.NullPointerException
- at me.myplugin.one.event.Die.Die1(Die.java:27) ~[?:?]
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_271]
- at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_271]
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_271]
- at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_271]
- at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
- ... 17 more
本帖最后由 GhostSkyV9 于 2021-1-14 10:56 编辑
复制代码
你这里传了一个null进去,代码是什么
复制代码我把getEconomy放到了主类,然后在主类写一个
复制代码
早晨解说 发表于 2021-1-14 08:55
执行到那一行就报这个
- at me.myplugin.one.event.Die.Die1(Die.java:27) ~[?:?]
你这里传了一个null进去,代码是什么
- @EventHandler
- public void Die(PlayerRespawnEvent die) {
- Player player = die.getPlayer();
- Economy economy = Main.getEconomy();
- EconomyResponse response = economy.withdrawPlayer(player, 1);
- if (response.transactionSuccess()){
- player.sendMessage("你被扣除了一元");
- }
- }
- 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;
- }
嗯对,然后你要把你事件类的那个变量放到主类
早晨解说 发表于 2021-1-14 20:51
报错丫,报错了……
是放在event的那个里还是主类里,我放在主类里的
setupEconomy和getEconomy这两个方法放到主类,然后在你的事件类去调用getEconomy方法然后
- private static Economy econ = null;
你这报错我看的有点迷