七、计分板

写在前面
对于计分板,相信大部分人会认为这是一个计分的玩意。但不然,它的用处远远不止计分那样简单,计分板在服务器中起着重要的作用,在大部分插件中都有着它的身影。

另注:本章节有大量干货,请细细咀嚼。


获取计分板

  • 获取原版的计分板

首先我们需要一个对象。

Scoreboard scoreboard;

然后,再去获得服务器的计分板。

//获取服务器中对主计分板的管理
scoreboard = getServer().getScoreboardManager().getMainScoreboard();

新建计分板

  • 新建一个不受原版指令控制的计分板
Scoreboard scoreboard = manager.getNewScoreboard();

教程改进
由于§是一个特殊的字符,而在键盘上并没有§这个键,为了打代码更加的方便,我们将颜色标识§转换为&

//将§转为&,这样我们打代码会更加方便
public String parse(String s) {return s.replace("&","§").replace("§§","&");
}

在获取计分板之后,我们来看看计分板的作用。


1.计分项

  • 计分板可以计分……当然,也不止计分。

我相信当初计分板的用途是用来显示玩家的分数及排名,但却被开发者们玩成了可以创建队伍又可以计分又可以写字的一块板子

1.1.计分项

  • 计分项为Objective

首先新建一个计分项:

Objective obj;

对于一个计分板,我们需要有标题、准则、内部名。

obj = scoreboard.registerNewObjective("内部名","dummy","我是标题~");

内部名和标题很好理解,而准测是什么?

准则 描述
dummy 无法使用指令修改准则
deathCount 累加死亡次数准则
playerKillCount 玩家击杀次数记录准则
killByTeam.XXX 记录XXX队的击杀数准则
teamKill 记录击杀队伍数准则

使用dummy准则,使得玩家无法通过指令修改计分板,大大提高了插件的地位,加强插件集权。

之后,我们还需设置计分板显示位置:

//设置显示位置为侧边栏
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
显示位置 描述
BELOW_NAME 设置位置在玩家Tag里
PLAYER_LIST 设置位置在玩家列表中
SIDEBAR 设置位置在侧边栏中

之后,我们就可以加入分数了。

  • 分数为Score类

想要设置分数,首先需要找到Objective

Score score = obj.getScore("Java全科分数:");

之后就可以设置分数了:

score.setScore(760);

然后,向玩家推送计分板:

Player player = (Player) sender;
player.setScoreboard(scoreboard);

总结:先设置项,再为该项添加分数,最后推送给指定玩家(不推送玩家无法看见)

2.队伍

  • Team可以帮助我们快速分队、设置选项。

2.1.基操

  • 创建队伍。
Team team = scoreboard.registerNewTeam("红队");

在上面的代码中,我们在计分板中注册了“红队”这一队伍,并赋给team
而为了区别其他队伍,我们为这个team中的所有玩家设置类似于称号一样的前缀(prefix)

  • 设置前缀
//设置红队所有玩家的前缀
team.setPrefix(parse("&[红队]"));

同样的,有前缀也就有后缀(Suffix)

  • 设置后缀
team.setSuffix(parse("&a至高无上"));

但是,我们的队伍却是空的,我们需要向其加入玩家(实体):

  • 加入实体
//加入实体
team.addEntry("Java");

如果我们想要移除一个实体,可以removeEntry来实现。

  • 移除实体
//移除实体
team.removeEntry("Java");

同样的,如果我们想要移除一个队伍,可以通过本身取消注册。

  • 移除队伍
//移除队伍
team.unregister();
  • 展示名

向其他队伍展示己队的名字,可以使用setDisplayName

team.setDisplayName(parse("&4至高无上的Java"));

效果图:

2.2.选项

  • Team中有着许多选项供用。

既然Team是自带的,也是自家产的,多好的东西,干嘛自己写一个Team呢?

选项 描述
NAME_TAG_VISIBILITY 玩家名字是否可见
DEATH_MESSAGE_VISIBILITY 死亡信息是否可见
COLLISION_RULE 实体碰撞

如:我要设置队伍中的玩家名字可见,而在其他队伍中队友名字不可见。

team.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);

上面代码中的FOR_OTHER_TEAMS意思为对其他队伍关闭这个选项,如果是FOR_OWN_TEAM则是对我所在的队伍关闭这个选项

此外,还有一些其他选项,不过不是通过setOption来实现。

选项 描述
setAllowFriendlyFire 是否对友军开火
canSeeFriendlyInvisibles 队友是否隐身

至于更多方法实现,请参阅BukkitAPI文档。


上一篇:我的世界Bukkit服务器插件开发教程(六)定时器
下一篇:我的世界Bukkit服务器插件开发教程(八)进度、进度条与自定义合成表

我的世界Bukkit服务器插件开发教程(七)计分板相关推荐

  1. 我的世界Bukkit服务器插件开发教程(八)进度条与自定义合成表

    八.进度条与自定义合成表 写在前面 本来我想将进度放入本章节当中,但无奈进度牵扯到json文件,估计我又要叽叽喳喳讲一堆json,出于人最基本的性格,这章节暂且不讲. 进度条 说起进度条,打个最简单的 ...

  2. 我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效

    十一.粒子.药水效果与音效 太简单了吧! 1.粒子效果 1.1.基本操作 播放粒子,首先需要确定粒子需要播放的位置.需要注意,我们一次只能播放一个粒子,如果需要播放多个粒子的话--也不麻烦. 播放粒子 ...

  3. 我的世界Bukkit服务器插件开发教程(五)方块Blocks

    五.方块Blocks 我怕不更新会被骂,所以更了. 坐标系 小伙纸,求一下∑i=0∞i2\sum_{i=0}^\infty i^2∑i=0∞​i2(bushi 是的,你没猜错,我们要涉及到史上最NB超 ...

  4. 我的世界Bukkit服务器插件开发教程(十五)世界生成器

    十五.世界生成器 如果你仔细观察,会发现有个叫saves的文件夹,这个文件夹是用来存放存档的,即我们平常说的世界. 显然,服务器承担了创建世界.加载世界的任务.Bukkit 中也有专门生成世界的生成器 ...

  5. 我的世界Bukkit服务器插件开发教程(一)第一个插件

    一.第一个插件 这一章节,我们会开发第一个属于自己的插件 在这之前,我们还需了解plugin.yml和config.yml,并大概了解插件的原理 plugin.yml 这个文件必须存在,否则读不出来. ...

  6. 我的世界Bukkit服务器插件开发教程(十三)资源包与玩家资料

    十三.资源包与玩家资料 1.资源包(Resource Pack) 早期的 Minecraft 并没有资源包一说,而是被叫做材质包.有些服务器为了让玩家拥有更好的游戏体验,一般会在自己特制的客户端中存放 ...

  7. 我的世界bukkit服务器开发教程第一章——开发环境

    提示:如果图片看不见或者文字有乱码,请到我的网站:www.xiaoguaimao.cn 前言: 本教程共分为两个部分: 1.服务器插件开发 2.服务器专属启动器开发 如果你学过编程,那你会很轻松,如果 ...

  8. 我的世界虚拟服务器架设,我的世界Minecraft服务器架设教程_服务器怎么建立

    [导读]我的世界Minecraft服务器架设教程. 下面给大家带来<我的世界>Minecraft服务器的架设教程,让大家对我的世界服务器建立有一个不错的认识,从怎么建立,到怎么维护做一个系 ...

  9. 伤害世界怎么自建服务器,伤害世界Hurtworld服务器架设教程

    <伤害世界(Hurtworld)>虽然支持国内直连,不过还是会出现不稳定的情况,自建服务器的好处在于可以有一个稳定的游戏环境,那么本作该如何架设服务器呢,下面带来Hurtworld服务器架 ...

最新文章

  1. 一则android软件开发工程师的招聘信息
  2. pyinstaller打包exe文件闪退解决方案
  3. POJ 3342 Party at Hali-Bula ——(树型DP)
  4. Java InputStream详解
  5. tem在c语言中的作用,Temtem状态有什么效果 Temtem各状态效果介绍_游侠网
  6. 预训练模型transformers综合总结(一)
  7. python 32位和64位的区别在哪
  8. 条款14:在资源管理类中心copying行为(Think carefully about copying behavior in resource-manage classes)...
  9. Html5结合JS实现浏览器全屏功能
  10. Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...
  11. OpenCV辅助对象(help objects)(4)_Exception
  12. 使用JAVA来获得本日,本周,本月,本年的时间信息
  13. 1_Excel实战_自动录入另一个表格对应的数据
  14. 《流浪地球》收益可观 助力北京文化业绩大涨
  15. version for mac 破那啥版
  16. js php c语言for循环,JS for循环语句
  17. Keil5软件安装教程
  18. 2021年一季度口腔护理行业网络关注度分析报告
  19. 阿里小蜜技术学习笔记--知识点整理
  20. 实例介绍fullpage.js常用的配置和方法

热门文章

  1. 打开和写入文件( fopen和fopen_s
  2. win10如何设置定时联网断网辅助自律
  3. IDC FutureScape:全球政府行业2019年预测——中国启示
  4. python程序论文答辩_【干货】毕业论文的答辩流程及注意事项
  5. 蓝海卓越三层漫游解决方案
  6. 基于51单片机的上下限可调的数字温度控制系统
  7. CSS3—盒子模型 讲解
  8. Sprite 从PS切图到具体实现完整过程
  9. 推荐一款页面开发神器,视觉还原可以如此简单
  10. 6-TCP 协议(序号和确认号)