本帖最后由 1582952890 于 2017-9-16 20:10 编辑

反无限夜视终极版
SANVR - SCAntiNightVisionReloaded

一切基于客户端的反作弊都是无效的。本插件采用通过服务端限制的方式,真正有效防止无限夜视。

前言
我在N年以前曾写过一个叫做 SCAntiNighVision 的插件。那个插件是我的处女作,问题有很多,而且到后来下载地址也找不到了。>.> 因为这两天不知道被谁挖了出来导致一大堆人问我要下载地址,为了世界的爱与和平,我就重新写了一下那个插件。希望各位喜欢。

言归正传,想必很多服主和熊孩子已经知道了,通过修改 options 的办法可以获得『无限夜视』的效果,挖起矿来简直耍流氓。这个问题一直没有被重视我想很大一部分程度上是因为服主普遍认为这个问题并不会极大地破坏平衡,但是我相信看了下面两幅图后,任何希望维护服务器公平的服主还是会为之一震的吧。


图1:使用无限夜视


图2:不使用无限夜视

为了解决这个蛋疼的问题,这个插件就诞生了。这个插件的原理很简单:每一个玩家都有一个叫做黑暗指数的东西,这个指数一开始是满的。如果这个玩家在黑暗环境中活动,这个指数就会慢慢下降,如果下降达到一定值就会触发一些措施来制裁这个玩家。当然如果这个玩家回到光明的地方,黑暗指数就会上升。如果到达很亮的地方,这个指数就会直接完全恢复。

至于措施有哪些,我们还是一边看配置文件一边说明。配置文件中文的(为了能够支持中文,我搞了一堆反射 >.> 所以在将来的某个版本可能会出问题,不过 1.8.8 - 1.9.4 都测试了没问题。)


图3:配置文件是中文的

配置文件
检查周期
检查周期即每隔多久插件对所有玩家的亮度进行一轮检查。单位是 tick。每 1 秒是 20 tick。

最低可视亮度
如果玩家所处环境亮度低于这个值,那么这个玩家的黑暗指数将会下降。反之则会上升。差距越大,下降/上升速度越快。

黑暗指数立刻恢复亮度
如果玩家所处环境亮度高于这个值,那么这个玩家的黑暗指数将会立即恢复出厂值。

黑暗指数最大值/最小值
玩家的黑暗指数最开始将会是最大值,往下掉不会掉超过最小值,上升亦不会超过最大值。

世界设定
类型为 NORMAL 的世界就是主世界之类的。类型为 NETHER 的世界就是下界之类的。类型为 END 的世界就是末地之类的。由于下界和末地很亮,所以不建议开启。还有一项不工作的世界,出现在这里的世界将不会启用本插件的功能。


图4:在末地,即使亮度为0,不开作弊依然看得清

措施
接下来是重头戏:措施。每一个措施(除了“提示”只有是否开启),都有两个可修改的值:是否开启启用阀值。其中是否开启指定了这个措施是否会被启用。启用阀值指定了当黑暗指数低于何值时触发。(当然你可以把启用阀值设置成几千万,这样效果和不开启是一样的。)接下来逐一介绍几个措施:

提示
提示就是设置当玩家的黑暗指数处于某几个范围时,发送一个 title 给玩家。它的值是一个列表。其中列表的每一项必须是由竖线(|)分割的两个值,前面那个值是一个整数,第二个值是字符串。意思是当黑暗指数低于前面的那个阀值时,向玩家发送后面那个字符串。比如 “160|§c由于此处光线过暗,您的速度已受到影响。” 将会发送给黑暗指数低于160的玩家 “§c由于此处光线过暗,您的速度已受到影响。”


图5:提示的效果

减速
减速就是让玩家在黑暗环境中越走越慢。其中,除了是否开启启用阀值正常速度是一个 0.0 到 1.0 的值。在默认情况下玩家速度是 0.2。除非你在对所有玩家进行加速,否则不要修改这个值。最低减速至是一个 1 到 100 的值,代表了一个百分值,玩家的速度将会慢慢从正常速度转换到 (正常速度*该值/100)。

降低攻击
降低攻击就是让玩家在黑暗环境中攻击力慢慢下降。其中,除了是否开启启用阀值最低减速至是一个 1 到 100 的值,代表了一个百分值,玩家的攻击力将会慢慢从正常值转换到 (正常值*该值/100)。

踢出服务器
踢出服务器就是把黑暗指数过低的玩家踢了。其中,除了是否开启启用阀值踢出理由是一个字符串。指定了将玩家踢出后,显示在该玩家屏幕上的内容。

来自黑暗的伤害
来自黑暗的伤害就是对黑暗中的玩家造成一系列莫名其妙的伤害,造成伤害后,还会对玩家起一个向前的击退效果让玩家以为被身后的奇怪隐形生物击中了(不排除玩家大喊:“OP你别闹了” 的可能性)。其中,除了是否开启启用阀值触发机率是一个 1 到 100 的百分值,指定了在每一检查周期中,会有多少机率对这个玩家造成伤害。造成的伤害中的最大值和最小值决定了这个伤害的量的取值范围。造成击退指定了是否对玩家造成一个假的击退效果。

权限
权限只有一个,sanvr.admin。默认OP,拥有这个权限将会允许该玩家使用以下一系列管理命令。

命令
命令很简单,一共也只有三个:

/sanvr help
显示帮助信息

/sanvr ignore [玩家名]
使一个玩家进入或退出忽略模式。处于忽略模式的人将不受该插件影响。如果没有指定玩家名,将对自己起效。

/sanvr reload
重新载入配置文件。

下载/喷 之前必读
1.本插件没有任何自动更新/自动提交服务器隐私等“统计”功能。我认为这些行为都是耍流氓。
2. 本插件依赖 ProtocolLib,下载地址在此
3. 本插件考虑了喝夜视药水的情况,如果喝了夜视就不会被限制。不要让我在评论里看到有人问“夜视药水怎么办”,我会发飙的。
4. 本插件只支持 1.8+,原因是 1.7 没有 title。
5. 本插件会接管玩家速度。如果你想修改自己的速度,你可以使用速度效果(effect)或者使用 /sanvr ignore 后再使用 ess 的 /speed 命令。
6. 本插件上传到了百度云,中间的 Adf.ly 只是广告。你需要等待五秒并点击右上角的跳过广告来前往下载页。如果你耍流氓不想看广告的话,你可以使用后面提供的度盘分享ID。
7. 本贴不提供源代码,但提供的插件本体没有混淆,你可以用反编译软件进行反编译。如果你的作品中用到了我的代码,希望你能够在发布贴内感谢我一下,当然不是强制的。对于本插件的实现原理有疑问的,或者哪里看不懂的,可以 Q 我。号码在个人资料页。我会尽可能提供帮助的。:)


下载地址 请下载最新版
适用 1.8+:

SCAntiNightVisionReloaded V1.3 分享ID:1c9QZ9O
SCAntiNightVisionReloaded V1.2 分享ID:1qXBPnYG
SCAntiNightVisionReloaded V1.1 分享ID:1sl5p8jb
SCAntiNightVisionReloaded V1.0 分享ID:1o8xn6v4


安装方式
拖入服务端 plugins 文件夹。重启一次服务器,配置文件将会在 plugins/SCAntiNightVisionReloaded/config.yml 处生成。

更新
2016.7.2 V1.0 -> V1.1
- 修复切换世界后/事后喝药水后的缓慢残留问题。
2016.8.11 V1.1 -> V1.2
- 修复半砖 Bug
2016.8.26 V1.2 -> V1.3
- 修复在水下误报
- 修复旁观者模式误报


- 修复所有忽视条件失效 Bug

服主技术讨论群广告
群号:530398148