白色的小熊
记得之前提问,有人说可以把数据存在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 被持久化保存,不会导致玩家退出后数据重置。

下一页 最后一页