所以,我想在我的“BasicStuff”插件(插件名称)中使用 /togglepickaxe 来让玩家在每次手里拿着镐时扔掉镐。如果有人也遇到过这个问题,请告诉我为什么会发生这种情况,因为我多次遇到这个问题:/这是我的代码,它在执行命令后使服务器崩溃:
package MainPackage;
import java.util.LinkedList;
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.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin{
public static LinkedList<String> nopickaxeplayers = new LinkedList<String>();
@Override
public void onEnable()
{
System.out.println("TogglePickaxe is enable");
}
@Override
public void onDisable()
{
System.out.println("TogglePickaxe is disabled");
}
public boolean onCommand(CommandSender sender, Command cmd, String cmdlabel, String[] args)
{
if(cmdlabel.equalsIgnoreCase("togglepickaxe"))
{
if(sender instanceof Player)
{
Player player = (Player) sender;
if(player.hasPermission("BasicStuff.togglepickaxe"))
{
if(args.length == 1)
{
Player trolled_player = Bukkit.getPlayer(args[0]);
if(trolled_player == null)
{
player.sendMessage(ChatColor.RED + args[0] + " is not online");
return false;
}
if(trolled_player.hasPermission("BasicStuff.togglepickaxe.exempt"))
{
player.sendMessage(ChatColor.RED + "You can't deny pickaxe usage on this Player");
return false;
}
if(Main.nopickaxeplayers.contains(trolled_player.getName()))
{
Main.nopickaxeplayers.remove(trolled_player.getName());
trolled_player.sendMessage(ChatColor.GOLD + "You can use Pickaxes again");
player.sendMessage(ChatColor.GOLD + trolled_player.getName() + " can use Pickaxes again");
}
else
{
Main.nopickaxeplayers.add(trolled_player.getName());
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
{
@Override
public void run()
{
Player player;
while(Main.nopickaxeplayers.size() > 0)
{
for(int i = 0; i < Main.nopickaxeplayers.size(); i++) {
if(Bukkit.getPlayer(Main.nopickaxeplayers.get(i)) != null)
{
player = Bukkit.getPlayer(Main.nopickaxeplayers.get(i));
if(player.getInventory().getItemInMainHand() != null) {
if(player.getInventory().getItemInMainHand().getType() == Material.DIAMOND_PICKAXE
|| player.getInventory().getItemInMainHand().getType() == Material.GOLDEN_PICKAXE
|| player.getInventory().getItemInMainHand().getType() == Material.IRON_PICKAXE
|| player.getInventory().getItemInMainHand().getType() == Material.NETHERITE_PICKAXE
|| player.getInventory().getItemInMainHand().getType() == Material.STONE_PICKAXE
|| player.getInventory().getItemInMainHand().getType() == Material.WOODEN_PICKAXE
)
{
ItemStack axe = player.getInventory().getItemInMainHand();
player.getInventory().setItemInMainHand(null);
player.getWorld().dropItemNaturally(player.getLocation(), axe);
}
}
}
}
}
}
}, 0, 5);
trolled_player.sendMessage(ChatColor.GOLD + "You can no longer use Pickaxes");
player.sendMessage(ChatColor.GOLD + trolled_player.getName() + " can no longer use Pickaxes");
}
}// if args.length == 1
else
{
player.sendMessage("/togglepickaxe <player>");
}
}
else
{
player.sendMessage(ChatColor.DARK_RED + "You don't have permission to do that");
}
}
else
{
sender.sendMessage(ChatColor.RED + "Only Players can execute /togglepickaxe <player>");
}
}
return false;
}//onCommand
}//类
这是错误代码,它并没有真正说明太多(我猜)
[13:11:13 ERROR]: Fatal error trying to convert TogglePickaxe v1.0:MainPackage/Main$1.class
org.bukkit.plugin.AuthorNagException: No legacy enum constant for GOLDEN_PICKAXE. Did you forget to define a modern (1.13+) api-version in your plugin.yml?
at org.bukkit.craftbukkit.v1_16_R3.util.Commodore$1$1.visitFieldInsn(Commodore.java:314) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.libs.org.objectweb.asm.ClassReader.readCode(ClassReader.java:2415) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.libs.org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1488) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.libs.org.objectweb.asm.ClassReader.accept(ClassReader.java:718) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.libs.org.objectweb.asm.ClassReader.accept(ClassReader.java:401) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.v1_16_R3.util.Commodore.convert(Commodore.java:174) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers.processClass(CraftMagicNumbers.java:340) ~[paper.jar:git-Paper-414]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:155) ~[paper.jar:git-Paper-414]
at org.bukkit.plugin.java.JavaPluginLoader.getClassByName(JavaPluginLoader.java:216) ~[paper.jar:git-Paper-414]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:122) ~[paper.jar:git-Paper-414]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:111) ~[paper.jar:git-Paper-414]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_251]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_251]
at MainPackage.Main.onCommand(Main.java:67) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper.jar:git-Paper-414]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[paper.jar:git-Paper-414]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:807) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2021) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1832) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1785) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1132) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1125) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeAll(IAsyncTaskHandler.java:95) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1261) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:996) ~[paper.jar:git-Paper-414]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:173) ~[paper.jar:git-Paper-414]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]
这是 plugin.yml:
name: TogglePickaxe
author: StepsisObserver
version: 1.0
main: MainPackage.Main
commands:
togglepickaxe:
description: toggles if a player can use a pickaxe
我使用 spigot.jar 作为参考库,我的服务器是 paper.jar(不是 spigot/bukkit),但对于我所有的其他插件工作:(
答案 0 :(得分:0)
我找到了解决方案...我在重复任务调度程序中使用了一个 while 循环... 我删除了 while( size > 0) 并将其更改为 if (size == 0) Bukkit.getScheduler().cancelTask(taskId);