本帖最后由 Freeze_Dolphin 于 2021-7-15 18:00 编辑
RT,写插件需要用到
一开始打算直接保存ItemStack对象为二进制文件,
直接报NoSerializableException
然后用ItemStack#serialize方法序列化了在保存
结果和我说物品堆元属性不能被序列化!md!
复制代码
RT,写插件需要用到
一开始打算直接保存ItemStack对象为二进制文件,
直接报NoSerializableException
然后用ItemStack#serialize方法序列化了在保存
结果和我说物品堆元属性不能被序列化!md!
- java.io.NotSerializableException: org.bukkit.craftbukkit.v1_16_R3.inventory.CraftMetaSkull
- at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185) ~[?:?]
- at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349) ~[?:?]
- at java.util.LinkedHashMap.internalWriteEntries(LinkedHashMap.java:333) ~[?:?]
- at java.util.HashMap.writeObject(HashMap.java:1411) ~[?:?]
- at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
- at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
- at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
- at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
- at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1145) ~[?:?]
- at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497) ~[?:?]
- at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433) ~[?:?]
- at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179) ~[?:?]
- at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1379) ~[?:?]
- at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1175) ~[?:?]
- at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1553) ~[?:?]
- at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510) ~[?:?]
- at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433) ~[?:?]
- at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179) ~[?:?]
- at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349) ~[?:?]
- at io.freeze_dolphin.plain_tinker.utils.SLUtl$.save(SLUtl.scala:10) ~[?:?]
- at io.freeze_dolphin.plain_tinker.commands.threads.CreationThread.io$freeze_dolphin$plain_tinker$commands$threads$CreationThread$generateRecipe(CreationThread.scala:151) ~[?:?]
- at io.freeze_dolphin.plain_tinker.commands.threads.CreationThread$anon$2.onClick(CreationThread.scala:132) ~[?:?]
- at redempt.redlib.inventorygui.InventoryGUI.onClick(InventoryGUI.java:421) ~[?:?]
- at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor75.execute(Unknown Source) ~[?:?]
- at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-778]
- at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-778]
- at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-778]
- at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2715) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:32) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:10) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1266) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1259) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1220) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1134) ~[patched_1.16.5.jar:git-Paper-778]
- at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-778]
- at java.lang.Thread.run(Thread.java:834) [?:?]
本帖最后由 Clemens_Mine 于 2021-7-16 19:08 编辑
用 BukkitObjectOutputStream 序列化
用 BukkitObjectInputStream 反序列化
序列化代码
复制代码
反序列化代码
复制代码
用 BukkitObjectOutputStream 序列化
用 BukkitObjectInputStream 反序列化
序列化代码
- public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException {
- try {
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);
-
- dataOutput.writeInt(items.length);
-
- for (int i = 0; i < items.length; i++) {
- dataOutput.writeObject(items[i]);
- }
-
- dataOutput.close();
- return Base64Coder.encodeLines(outputStream.toByteArray());
- } catch (Exception e) {
- throw new IllegalStateException("无法序列化物品.", e);
- }
- }
反序列化代码
- public static ItemStack[] itemStackArrayFromBase64(String data) throws IOException {
- try {
- ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
- BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream);
- ItemStack[] items = new ItemStack[dataInput.readInt()];
-
- for (int i = 0; i < items.length; i++) {
- items[i] = (ItemStack) dataInput.readObject();
- }
-
- dataInput.close();
- return items;
- } catch (ClassNotFoundException e) {
- throw new IOException("无法反序列化物品.", e);
- }
- }
Clemens_Mine 发表于 2021-7-16 19:05
用 BukkitObjectOutputStream 序列化
用 BukkitObjectInputStream 反序列化
序列化代码
这新人勋章是咋做到的。。