java - Spigot/Bukkit - 获取箱子库存 - Java

标签 java minecraft bukkit

我试图保存一个宝箱,所以我有一个BlockState和一个InventoryBlockState 没有问题,但在 Inventory 中,他总是保存 0 作为 ItemStack 的数量。

if (BlockState instanceof Chest) {
    Chest chest = (Chest) bs;
    Inventory inv = chest.getBlockInventory();
    System.out.println(inv.getItem(0).getAmount());
}

在控制台中,会打印 0,当 Chest 如下所示时也是如此:Screenshot | Chest

编辑: 现在我有这个:

BlockState nbs = bs.getBlock().getState();
System.out.println(((Chest) nbs).getBlockInventory().getItem(0).getAmount());

但现在我收到此错误:

[21:16:25 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'set' in plugin GlobalSystem vAlpha_0.0.1
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-db6de12-07c3001]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-db6de12-07c3001]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-db6de12-07c3001]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_73]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_73]
    at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-db6de12-07c3001]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-db6de12-07c3001]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_73]
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_8_R3.block.CraftBlockState cannot be cast to org.bukkit.block.Chest
    at me.Nightfighter001.GlobalSystem.Methoden.Undo.add(Undo.java:56) ~[?:?]
    at me.Nightfighter001.GlobalSystem.Commands.setzen.onCommand(setzen.java:53) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-db6de12-07c3001]
    ... 15 more

但我没有任何 CraftBlockState,我也从未导入过它!

如果我再解释一下,也许你会更容易理解: 我正在开发类似 WorldEdit 的东西,所以我可以选择 block 并更改它们。对于自己的 /undo- 和 /redo- 命令,我需要保存旧的 block 。我在 HashMap 中执行此操作。我将 BlockStates 保存在 HashMap 的 ArrayList 中。

感谢您的帮助,并对我的英语不好表示歉意;)

最佳答案

您可以使用自定义 YAML 文件并在其中保存值,然后当您这样做时,您可以将这些值放入库存中

如果您不知道该怎么做,您可以创建一个 HashMap,然后将项目槽的编号放在一个值一侧,将其类型放在另一侧,您可以使用 Microsoft Excel 存储项目类型和快捷方式名称,然后您可以获得自定义配置文件,然后执行 for 循环将值存储在 HashMap

如果这对帖子有帮助,请评论或投票支持该帖子,这样我就知道我有所帮助:D

关于java - Spigot/Bukkit - 获取箱子库存 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347788/

相关文章:

java - GetType 不接受 itemStack

java - 编写 bash 或其他脚本以重新启动另一个脚本

java - Spigot/Bukkit插件开发1.15.2自定义播放器头部报错找不到符号

java httpclient连接池租约与保持 Activity

java - 未使用的对象在堆栈中仍然可见时是否可用于垃圾回收?

java - 在 Minecraft 中为盔甲添加自定义模型?

java - 使用 Jackson 库进行 Bukkit ItemStack 序列化

java - Bukkit - 为什么转换为 Damageable 有效?

java - 网络连接时如何检测网络变化和从 A 到 B 的变化 Activity

java - 如何在 Java 中跟踪电子邮件?