摸鱼摸了半个月,终于更新啦!这次的章节很重要!(于是我又水了一个开头梗)
Spigot插件教学——玩家の新属性
[其它教程没有的知识点(重要)]
Part1-学会使用HashMap储存玩家信息
[其它教程没有的知识点(重要)]
Java自带了各种各样的API(额外的功能),其中有一些给开发者使用的数据结构,例如HashMap 为了给每个玩家储存单独对应的信息,肯定是这样配对的: 一个玩家-一个信息。这正好应对了HashMap中的键-值关系。 那么玩家就是一个标识,我们可以利用HashMap来控制对应的玩家信息。 这样子创建一个HashMap:(括号中的可以不写)
想要给每个玩家储存血量值,键就用String类型的玩家名,值就用int类型的血量值,这样写
哎呀!我们发现Eclipse在int上面打上了红线并提示错误,这是因为泛型的原因(见Part4). 那么我们直接这样写,反正int和Integer可以随时转换:
好了!这样我们的为玩家储存的HashMap就创建好啦! 这是控制HashMap中控制数据的常用函数:
|
Part2-把玩家的信息储存至YAML文件
[其它教程没有的知识点(重要)]
在之前的章节中,我们已经学会了怎么使用YAML文件储存配置,现在,我们把玩家的信息也一一储存成YAML文件。 储存的代码:
那么,保存玩家的信息就用:save(玩家名字); 读取的代码:
那么,读取玩家的信息就用:load(玩家名字); 为了使插件能够自动储存、读取,那么我们就创立监听器,在玩家加入服务器、退出服务器时调用对应的save()、load()方法 在加入服务器时,调用load(event.getPlayer().getName()); 在离开服务器时,调用save(event.getPlayer().getName()); 在离开服务器时删,除不再需要的信息:HashMap名字.remove(event.getPlayer().getName()); |
Part3-储存自定义对象以减少你的HashMap个数
[其它教程没有的知识点(重要)]
按照我上面的教程,如果小伙伴们想同时保存玩家的血量值、饥饿值、盔甲值、呼吸值(原版四大HUD),那么只能这样写:
为了使HashMap的个数少些,我们为什么不把这么多属性放到一起呢? 有小伙伴可能会问:HashMap中每个键只能对应一个值,该怎么聚合到一起呢? 那么,我们就自己来定义全新的对象,假设一个玩家对应一个对象,那么我们就这样写:
public HashMap<String,playerData> playerDatas = new HashMap(); 看,我们把所有的属性都放进同一个HashMap啦! 如果要访问数据,就直接使用playerDatas.get(玩家名).health|hunger|armor|air 如果要新建数据,就直接使用playerDatas.put(玩家名, new playerData(20,20,0,20)); 从YAML中保存、读取数据也是同理,直接访问即可 |
Part4-HashMap注意事项
[其它教程没有的知识点(重要)]
1-HashMap中不能容纳int, short, byte, long类型!但是它可以容纳Integer, Short, Byte, Long! 2-HashMap中切勿存放Player类型变量,宁可用String类型的玩家名来代替Player类型的玩家! 3-注意使用后删除HashMap中的无用数据,否则可能会导致内存泄漏! 4-切勿直接用输出流把HashMap保存成txt文件,否则读入时可能会有空指针错误! 5-注意在插件启用时,遍历一遍服务器的玩家,以免某op使用/reload指令,导致HashMap直接被刷新 |
8892字打得手疼
[groupid=1306]Bone Studio[/groupid]