- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 bukkit/spigot 的新手,我正在制作一个插件,玩家可以在其中键入命令“/sign”,然后会在玩家旁边创建一个附在木 block 上的标志。该标志将显示“你好 PlayerName”。但是,我收到错误:org.bukkit.command.CommandException: Unhandled exception executing command 'sign' in plugin
。
这是我的部分代码:
if (cmd.getName().equalsIgnoreCase("sign") && sender instanceof Player){
Player player = (Player) sender;
Location location = player.getLocation();
World someWorld = Bukkit.getServer().getWorld("world");
double playerx = location.getX();
double playery = location.getY();
double playerz = location.getZ();
int px = (int)playerx;
int py = (int)playery;
int pz = (int)playerz;
Location nLoc = new Location(someWorld, px+2, py+1, pz);
Location sLoc = new Location(someWorld, px+1, py+1, pz);
Block block = someWorld.getBlockAt(nLoc);
block.setType(Material.WOOD);
Block block1 = someWorld.getBlockAt(sLoc);
block1.setType(Material.SIGN);
Sign sign = (Sign) block1.getState();
sign.setLine(0, "Hello\n"+player.getName());
}
我该如何修复这个错误?
我在控制台上得到的完整错误是:
[17:46:00 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'sign' in plugin FirstPlugin v1.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at org.bukkit.craftbukkit.v1_9_R1.CraftServer.dispatchCommand(CraftServer.java:645) ~[spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.PlayerConnection.handleCommand(PlayerConnection.java:1350) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.PlayerConnection.a(PlayerConnection.java:1185) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_71]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_71]
at net.minecraft.server.v1_9_R1.SystemUtils.a(SourceFile:45) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.MinecraftServer.D(MinecraftServer.java:721) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:400) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:660) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:559) [spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_71]
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_9_R1.block.CraftBlockState cannot be cast to org.bukkit.block.Sign
at zak.firstplugin.FirstPlugin.onCommand(FirstPlugin.java:58) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.9.jar:git-Spigot-d20369f-7fc5cd8]
... 15 more
最佳答案
如果你投了一个BlockState
的 Block
对于它不是实例的子类,将抛出此错误(如在您的堆栈跟踪中):org.bukkit.craftbukkit.[version].block.CraftBlockState cannot be cast to org.bukkit.block.[YourState]
.换句话说,您的代码会抛出该错误,因为该 block 实际上不是 Sign
。 , 因为它是 BlockState
不是 Sign
的实例.以后可以随时使用instanceof
查看确保父类(super class)可以转换为特定的子类:
if (block.getState() instanceof Sign) {
Sign sign = (Sign) block.getState();
// ... Your code
}
即使您将其 Material 设置为 Material.SIGN
,您的方 block 也不是标志的原因, 是 Material.SIGN
enumerator 实际上指的是符号 item 类型,而不是 block 类型,其中实际上有两个( Material.SIGN_POST
和 Material.WALL_SIGN
)。令人困惑的是,当您设置 Block
时,Bukkit/Spigot 不会警告您的类型为项目类型的类型,而是设置 Block
的类型或 Material 到空气(因此抛出 ClassCastException
)。我猜既然你正在为标志生成一个实心 block ,你可能想要后者的枚举器或 Material.WALL_SIGN
.
此外,为了确保标牌上的文字出现,您需要使用 state.update()
更新 BlockState。 (甚至可能使用 state.update(true)
强制更新)。
要在下一行写下玩家的名字,您需要添加 String
使用 sign.setLine(1, player.getName())
到第 2 行(索引 1) , 不使用 \n
换行符,Minecraft 标志不处理。
最后但并非最不重要的一点是,您案例中的墙上标志将朝向错误的方向,这可以通过更改标志的旋转来解决。这当然取决于木 block 相对于标志的放置位置,因此在您的情况下,标志需要旋转面向西。要设置标志的旋转,我们可以使用已弃用的 setData(byte data)
Block
的方法s,但是如果你想用不被弃用的、更容易阅读的方式来做,我们将不得不处理另一个小问题:有一个 org.bukkit.block.Sign
。 接口(interface),和一个org.bukkit.material.Sign
类。 Sign
的所有用法以上引用org.bukkit.block.Sign
接口(interface)是 BlockState
的子类型.这用于例如设置标志的文本。 org.bukkit.material.Sign
是 MaterialData
的子类型我们可以使用 state.getData()
访问的类并用于更改标志的方向,因为该类实现了 Directional
接口(interface)(特别是 Attachable
接口(interface))。所以要设置文本 和 旋转标志,我们必须同时使用类和接口(interface)。下面是一些示例代码:
Block sign = world.getBlockAt(signLoc); // Get the block
sign.setType(Material.WALL_SIGN); // Set the type to "WALL_SIGN", now it's BlockState is an instance of "Sign"
BlockState signState = sign.getState(); // Get the general state
if (signState instanceof org.bukkit.block.Sign) { // Make sure the sign block really does have the "Sign" BlockState (this isn't really necessary, more of a double check)
org.bukkit.block.Sign signBlock = (org.bukkit.block.Sign) signState; // Note that this is the org.bukkit.block.Sign interface
signBlock.setLine(0, "Hello"); // Set the first line
signBlock.setLine(1, player.getName()); // Set the second line
if (signState.getData() instanceof org.bukkit.material.Sign) { // Now get the "MaterialData" from the BlockState...
org.bukkit.material.Sign signMaterialData = (org.bukkit.material.Sign) signState.getData(); // And cast it to org.bukkit.material.Sign
signMaterialData.setFacingDirection(BlockFace.WEST); // Use this to change the direction of the sign, in this case WEST (sign is placed + X direction of player)
}
signBlock.update(); // Update the sign's state
}
关于java - 无法编辑标志 - Bukkit : org. bukkit.command.CommandException:插件 X 中执行命令 'sign' 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36679175/
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在寻找有关如何构建可扩展 WCF 服务器(具有动态加载的服务)的建议,最好使用 System.Addins 或 MEF。 服务器应托管实现最小“插件”API(StartService/StopSe
有没有一种方法可以使用加载浏览器扩展/插件/插件的 headless 浏览器(即 PhantomJS、Selenium)来运行自动测试? 更具体地说,我想模拟广告拦截器(如 Ghostery、ad-b
我是 gradle 的新手,我使用 artifactory 作为我的 repo 服务器。我在网上查看了如何将我的项目发布到我的 repo 服务器,发现我可以使用 maven-publish 或使用 a
我想禁用某些状态的点击/事件,并仅使少数状态可点击。我通读了http://newsignature.github.io/us-map/处的文档,并且找不到与此问题相关的任何内容。 最佳答案 http:
据我了解,在Intellij中使用idea插件打开Maven构建的项目并不是最好的方法,即调用: mvn idea:idea 但是直接打开pom文件(Intellij有默认的Maven插件);同样的事
使用Artifactory plugin对于 Jenkins pipeline 来说是一种幸福,只要遵循文档就可以了。但后来我介绍了Maven Flatten plugin解析父模块和子模块 mvn
我已经安装了Elasticsearch版本1.7.1。一切正常。我也安装了 JDBC 驱动程序。检查下面我的插件文件夹 目录E:\Xampp\htdocs\my-elastic\elasticsear
在我使用 webpack common chunks 插件创建包含第三方库(如 angular、react、lodash 等)的 vendor 包之前,但后来我知道了 webpack dll
我们正在尝试使用(Jenkins、sonar、eclipse ...)安装 CI 平台。 为了让每个开发人员都可以在提交之前对他的代码进行分析,我想知道两种选择: 使用 Sonar 插件运行本地分析。
我知道这是一个比较特殊的问题。尽管如此,也许有些人知道这一点: 我想在 Eclipse 中使用 Maven 编译 Hector=> 分支:0.7.0 和标签:hector-0.7.0-29(https
我卡住了。我一直在尝试寻找或自己创建一个简单的准系统示例,说明如何为 VS 2010 Express 创建 Outlook 插件。我知道这在 VS 2010 Pro 中更简单,但是,在快速版本中真的不
我有以下排除过滤器来忽略所有 R 文件类: findbugs-exclude-filter.xml 当我将它用于 FindBugs-IDEA 插件时,它可以
我刚开始玩 CakePHP,我发现了 Wildflower CMS .我喜欢这个想法,并打算开始修补它。不过,我有一个问题。 在自述文件中,我发现了以下内容:“Wildflower 不是也不会是 Ca
虽然现在大部分情况都是使用n-api来编写插件,但是底层毕竟是v8(和libuv),使用v8编写简单的插件,同时熟悉v8的使用。 本文介绍在写c++插件时,简单又常用的写法,其实本质上,写插件
本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了。 相比PyCharm,V
Maven – 插件 什么是 Maven 插件? Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来: 创建 jar 文件 创建 war
我正在编写一个插件来添加带有标签 [deposit_page] 的页面;该标记应替换为一些 PHP 代码。 这就是我所拥有的,但它不起作用。有什么我遗漏或做错了什么吗? function deposi
我是一名优秀的程序员,十分优秀!