Java craftbukkit.v1_15_R1.entity.CraftPlayer无法施放
我的英语不好,但我不得不问一下这个错误,因为我在任何地方都不能很好地理解它 我正在制作minecraft插件以返回玩家选择的位置 但是我无法修复这个错误 这是整个错误日志Java craftbukkit.v1_15_R1.entity.CraftPlayer无法施放,java,plugins,minecraft,Java,Plugins,Minecraft,我的英语不好,但我不得不问一下这个错误,因为我在任何地方都不能很好地理解它 我正在制作minecraft插件以返回玩家选择的位置 但是我无法修复这个错误 这是整个错误日志 [10:57:29] [Server thread/INFO]: Player issued server command: /setposition [10:57:29] [Server thread/ERROR]: null org.bukkit.command.CommandException: Unhandled ex
[10:57:29] [Server thread/INFO]: Player issued server command: /setposition
[10:57:29] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'setposition' in plugin Main v0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:723) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.PlayerConnection.handleCommand(PlayerConnection.java:1658) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1498) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:918) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:911) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:895) [Server.jar:git-Spigot-6de3d4b-fc24934]
at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:828) [Server.jar:git-Spigot-6de3d4b-fc24934]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer cannot be cast to package1.PlayerPosition
at package1.SetPosition.onCommand(SetPosition.java:16) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[Server.jar:git-Spigot-6de3d4b-fc24934]
... 17 more
回来了
玩家可以通过setposition命令移动到所选位置
package package1;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import net.md_5.bungee.api.ChatColor;
public class Back implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
if(sender instanceof Player) {
Player p = (Player) sender;
PlayerPosition pp = (PlayerPosition) p;
if(pp.location.equals(null)) {
p.sendMessage(ChatColor.RED + "Set Your Position To Back First By Using SetPosition.");
return false;
}
else
{
p.teleport(pp.location);
return true;
}
}
return false;
}
}
这是PlayerPosition班
这个类扩展了Player
和添加位置
package package1;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public abstract class PlayerPosition implements Player {
public Location location;
PlayerPosition(Location l){
this.location = l;
}
}
这是设置位置命令
package package1;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import net.md_5.bungee.api.ChatColor;
public class SetPosition implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
if(sender instanceof Player) {
Player p = (Player) sender;
PlayerPosition pp = (PlayerPosition) p;
pp.location = p.getLocation();
p.sendMessage(ChatColor.BLUE + "Position Setting Complete.");
return true;
}
return false;
}
}
如何修复它?Player是一个接口,而不是一个类,因此任何实现Player接口的类都必须实现Player中的所有方法 例如:
public interface MyInterface {
public void aMethod();
}
如果您有一个实现了myIntefrace
的类,那么您的类必须实现aMethod
:
public class MyClass implements MyInterface {
public void aMethod() {
//Do something
}
}
有关更多信息,请参阅此处:
因此,如果您想要PlayerPosition
实现Player
,您必须自己实现Player
界面中包含的大量方法。因此,根本不建议这样做
正因为如此,你不能从CraftPlayer
到PlayerPosition
施放
一种解决方法是将播放器位置保存在/setposition
上的HashMap
中,并在返回时从中获取
您的问题的解决方案可以是:
SetPosition.java:
public class SetPosition implements CommandExecutor {
@Override
public boolean onCommand(CommandSender theSender, Command command, String s, String[] strings) {
if (theSender instanceof Player) {
Player p = (Player) theSender;
PluginCore.getInstance().setLocation(p, p.getLocation());
p.sendMessage(ChatColor.BLUE + "Position Setting Complete.");
}
return false;
}
}
Back.java:
public class Back implements CommandExecutor {
@Override
public boolean onCommand(CommandSender theSender, Command command, String s, String[] strings) {
if (theSender instanceof Player) {
Player p = (Player) theSender;
Location location = PluginCore.getInstance().getLocation(p);
if (location == null) {
p.sendMessage(ChatColor.RED + "Set Your Position To Back First By Using SetPosition.");
} else {
p.teleport(location);
}
}
return false;
}
}
PluginCore.java:(主类)
公共类PluginCore扩展了JavaPlugin{
私有静态插件核心实例;
私有HashMap位置=新HashMap();
@凌驾
public void onEnable(){
实例=此;
this.getCommand(“back”).setExecutor(new back());
这个.getCommand(“setposition”).setExecutor(新的setposition());
}
公共静态插件核心getInstance(){
返回实例;
}
公共位置getLocations(玩家p){
返回位置。获取(p);
}
公共无效设置位置(玩家p,位置){
这个。位置。放置(p,位置);
}
}
我希望有帮助
public class PluginCore extends JavaPlugin {
private static PluginCore instance;
private HashMap<Player, Location> locations = new HashMap<Player, Location>();
@Override
public void onEnable() {
instance = this;
this.getCommand("back").setExecutor(new Back());
this.getCommand("setposition").setExecutor(new SetPosition());
}
public static PluginCore getInstance() {
return instance;
}
public Location getLocations(Player p) {
return locations.get(p);
}
public void setLocation(Player p, Location location) {
this.locations.put(p, location);
}
}