最近刚开始学习插件开发,在尝试建一个简单的领地插件。在领地中有领地数据的功能。然而现实骨感,满屏的红字。
Map序列化接口无效
储存领地数据的是一个实现了bukkit序列化接口的类,继承于map,实现的序列化接口方法如下
复制代码这是一个很正常的序列化操作。然而实际序列化出来的结果却是这样子的
复制代码是的,序列化时的put并没有生效。
尝试寻找官方类(如Location)的序列化方法
在序列化添加绑定class无效的时候,我首先就想到了官方序列化流程是不是有什么规则
说明:这里我并没有找到官方类的一些序列划流程,只是我在看Location实现序列化接口的时候并没有添加“==”这个键,而实际出来的确是自动加上了,因此想问问大佬们关于序列化时类的绑定是否有其他方法? 比如,此处的location到底是再哪、以怎么样的方式绑定的。
注:下方代码是Location类实现的序列化接口
复制代码
关于Map序列化接口put无效的最终结果
因为我菜,找官方序列化的流程走一半之后我就理不过来了,于是只能动手在原来的领地数据类中的序列化方法多做几次尝试。
当我尝试直接 return null时,时,其结果和上面的结果一模一样。
复制代码
是的,总结:当需要序列化的类是Map的子类时,会直接取Map的键值对数据!
也就是说,当你的类继承于map时,接口ConfigurationSerializable的实现方法不会有任何效果,你只能在外面put一个“==”进行绑定class。
但是,你仍然需要实现这个接口,因为你需要反序列化。
这个坑跳了两三个小时,苦恼。希望大家不要踩了= =
Map序列化接口无效
储存领地数据的是一个实现了bukkit序列化接口的类,继承于map,实现的序列化接口方法如下
- public Map<String, Object> serialize() {
- put("==", getClass().getName());
- return this;
- }
- '2':
- ==: cn.japlayguan.mcplugin.area.v0_2.Area
- <b style="background-color: yellow;"> data:
- test: test</b>
- point1:
- ==: org.bukkit.Location
- world: world
- x: -71.0
- y: 62.0
- z: -37.0
- pitch: 0.0
- yaw: 0.0
- point2:
- ==: org.bukkit.Location
尝试寻找官方类(如Location)的序列化方法
在序列化添加绑定class无效的时候,我首先就想到了官方序列化流程是不是有什么规则
说明:这里我并没有找到官方类的一些序列划流程,只是我在看Location实现序列化接口的时候并没有添加“==”这个键,而实际出来的确是自动加上了,因此想问问大佬们关于序列化时类的绑定是否有其他方法? 比如,此处的location到底是再哪、以怎么样的方式绑定的。
注:下方代码是Location类实现的序列化接口
- public Map<String, Object> serialize() {
- Map<String, Object> data = new HashMap<String, Object>();
- data.put("world", this.world.getName());
- data.put("x", this.x);
- data.put("y", this.y);
- data.put("z", this.z);
- data.put("yaw", this.yaw);
- data.put("pitch", this.pitch);
- return data;
- }
关于Map序列化接口put无效的最终结果
因为我菜,找官方序列化的流程走一半之后我就理不过来了,于是只能动手在原来的领地数据类中的序列化方法多做几次尝试。
当我尝试直接 return null时,时,其结果和上面的结果一模一样。
- public Map<String, Object> serialize() {
- return null;
- }
是的,总结:当需要序列化的类是Map的子类时,会直接取Map的键值对数据!
也就是说,当你的类继承于map时,接口ConfigurationSerializable的实现方法不会有任何效果,你只能在外面put一个“==”进行绑定class。
但是,你仍然需要实现这个接口,因为你需要反序列化。
这个坑跳了两三个小时,苦恼。希望大家不要踩了= =