java - Minecraft Spigot 1.13 FlowerPot 插件在控制台中出现错误
问题描述
我正在为一个朋友制作一个插件,他想要一个用于杂草生长的插件。我希望如果我右键单击带有种子的花盆,花盆中会生成橡树树苗,但我收到错误消息。我尝试了很多方法来修复此错误,但我不知道该怎么做。
@EventHandler
public void onPlace(PlayerInteractEvent e) {
Player p = e.getPlayer();
//----------------------------------------------------//
ItemStack amnesiaHaze = new ItemStack (Material.BEETROOT_SEEDS, 1);
ItemMeta amnesiaMeta = amnesiaHaze.getItemMeta();
amnesiaMeta.setDisplayName("§2Amnesia-Haze Seeds");
amnesiaHaze.setItemMeta(amnesiaMeta);
//----------------------------------------------------//
Block block = e.getClickedBlock();
if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
if(block.getType() == Material.FLOWER_POT) {
if(p.getInventory().getItemInMainHand().equals(amnesiaHaze)) {
((FlowerPot) block.getState().getData()).setContents(new MaterialData(Material.OAK_SAPLING));
block.getState().update();
p.getInventory().getItemInHand().setAmount(p.getItemInHand().getAmount()-1);
}
}
}
}
错误:
[14:25:20] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to DeniPlugin v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:442) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.PlayerInteractManager.a(PlayerInteractManager.java:441) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1250) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:918) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:911) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:895) [spigot.jar:git-Spigot-800b93f-8160e29]
at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:828) [spigot.jar:git-Spigot-800b93f-8160e29]
at java.lang.Thread.run(Unknown Source) [?:?]
**Caused by: java.lang.ClassCastException: org.bukkit.material.MaterialData cannot be cast to org.bukkit.material.FlowerPot**
at de.deni.survival.weedplugin.classes.L_CreatePlant.onPlace(L_CreatePlant.java:33) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[spigot.jar:git-Spigot-800b93f-8160e29]
... 19 more
解决方案
FlowerPot 类已被弃用,使用该类将在运行时导致错误。
https://www.spigotmc.org/threads/328883
FlowerPot BlockState 已被弃用,因为每个盆花现在都是自己的材质,而不是平铺实体。
https://www.spigotmc.org/threads/407454
成就、FlowerPot (BlockState) 和 NoteBlock (BlockState) 类已被移除。尝试在 1.13.x 或 1.14.x 上使用这些类的插件不会按预期工作,但现在它们会出错。
改变花盆内容物的唯一方法就是改变方块的材质。因此setContents
,您将使用setType
块本身将材质更改为Material.POTTED_OAK_SAPLING
.
block.setType(Material.POTTED_OAK_SAPLING);
推荐阅读
- python - 如何将通过 selenium(登录到网站)生成的 url 传递给 PyQt5(以创建 pdf)?
- c++ - 抽象类类型的唯一指针向量会产生问题
- python - 如何检查python方法的定义位置?
- reactjs - react-router 重定向在受保护的路由中不渲染任何内容
- firebase - 使用两个 userId 生成一个 chatRoomId
- graphql - Elixir Phoenix Absinthe Web 和移动应用程序中的 GraphQL API 身份验证
- html - 如果有溢出,让 div 扩展到底部
- python - 如何在 Tensorflow 中设置 ParallelMapDataset 数据类型中的图像数量?
- pam - GDM / PAM 问题
- flutter - 我想淡出前面的步骤并在步进器小部件(颤振)中的步骤之前添加一个日期