白色的小熊
记得之前提问,有人说可以把数据存在ByteBuf里,查了一下,这个是和网络编程相关的东西,不知道怎么把数据存在这里面,就是我写的插件有一些HashMap之类的数据,玩家一退出数据就重置了,每次还得判空,然后设置初始值,请问怎么把数据存在ByteBuf里?

洞穴夜莺
ByteBuf是用来发包的,强烈不建议你把它当个序列化工具用
首先呢,Spigot/Paper的默认环境是没有Netty这个依赖的,要引用Netty中的类必须声明依赖,build.gradle如下
  1. dependencies {
  2.     ...

  3.     // 运行期netty由Minecraft本体提供,不需要打包进插件
  4.     compileOnly 'io.netty:netty-all:4.1.68.Final'
  5. }
复制代码

用法:

  1. ByteBuf bytebuf = Unpooled.buffer(); // 分配一个ByteBuf
  2. bytebuf.writeInt(1);// 写入一个数字1
  3. bytebuf.writeDouble(1.0); // 写入浮点数1.0
  4. try (ByteBufInputStream bufStream = new ByteBufInputStream(e); FileOutputStream fileStream = new FileOutputStream("out.bin")) { // 将bytebuf内容写入out.bin文件
  5.         bufStream.transferTo(fileStream);
  6. }
  7. bytebuf.release();// 释放ByteBuf
复制代码

至于读取,write变read,transferTo方向反一反就行


William_Shi
ByteBuf 和你的重置数据需求没有任何关联。通过恰当的办法令 HashMap 被持久化保存,不会导致玩家退出后数据重置。

白色的小熊
William_Shi 发表于 2022-8-14 16:25
ByteBuf 和你的重置数据需求没有任何关联。通过恰当的办法令 HashMap 被持久化保存,不会导致玩家退出后数 ...

你说有什么办法能让HashMap持久化保存?

白色的小熊
洞穴夜莺 发表于 2022-8-14 16:06
ByteBuf是用来发包的,强烈不建议你把它当个序列化工具用
首先呢,Spigot/Paper的默认环境是没有Netty这个 ...

依赖啥的都弄好了,一直出错
  1. java.lang.IndexOutOfBoundsException: readerIndex(0) + length(4) exceeds writerIndex(0): UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 256)
  2.         at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1442) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
  3.         at io.netty.buffer.AbstractByteBuf.readInt(AbstractByteBuf.java:809) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
  4.         at MyPlugin.data.ReadData(data.java:16) ~[?:?]
  5.         at MyPlugin.Listener.getLike(Listener.java:40) ~[?:?]
  6.         at MyPlugin.Listener$1.run(Listener.java:74) ~[?:?]
  7.         at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftTask.run(CraftTask.java:82) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  8.         at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:415) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  9.         at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1285) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  10.         at net.minecraft.server.dedicated.DedicatedServer.b(DedicatedServer.java:429) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  11.         at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:1237) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  12.         at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1047) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  13.         at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
  14.         at java.lang.Thread.run(Thread.java:833) [?:?]
复制代码

实在不知道改咋弄了,就来提问了

洞穴夜莺
白色的小熊 发表于 2022-8-14 19:27
依赖啥的都弄好了,一直出错
实在不知道改咋弄了,就来提问了

你又不贴代码
而且强烈反对将ByteBuf用作序列化工具,保存数据请用正经序列化工具如YamlConfiguration、Gson、DataOutputStream

白色的小熊
洞穴夜莺 发表于 2022-8-14 19:38
你又不贴代码
而且强烈反对将ByteBuf用作序列化工具,保存数据请用正经序列化工具如YamlConfiguration、G ...

问一下有没有相关的教程,教我用这些工具存储数据