第五十二章 /kick和黑名单系统
在上一章我们学习了白名单的使用方法。但在MC Java版中不只有白名单,还有黑名单系统。
黑名单系统的组成和白名单类似,也是由两部分组成:黑名单相关指令和服务器目录下的黑名单文件。
虽然组成成分类似,但黑名单和白名单还是有许多不同之处。第一,黑名单目前仅在Java版服务器中有;第二,黑名单的记录内容比白名单的内容更加复杂;第三,黑名单的作用和白名单是相反的;第四,黑名单系统是一直在运行的,无法关闭
那么黑名单有什么用呢?黑名单和白名单一样,也是服务器随身携带的一个小本本,这个小本本上面也记录了一些玩家(还有IP地址)。当一个玩家想要进入服务器时,服务器就会拿出这个小本本,看一看该玩家的名字和UUID是否被记录在了本子上,然后再看看该玩家的IP地址是否也被记录。只要玩家名和IP地址中两者有任意一者被记录在了本子上,该玩家就无法进入服务器。
没错,黑名单系统就是一个服务器的“封号”系统。但是说成“封号”并不准确,因为“封号”仅指的是封禁整个账号,而黑名单系统不止会封禁账号,还可以封禁IP地址。
什么是IP地址?IP地址(Internet Protocol Address),即互联网协议地址。用人话来说,IP地址就相当于你和其他人在互联网上的邮编,双方都需要通过IP地址才能互相收发邮件。假设你的IP地址是222.216.131.255,你的朋友的IP地址是23.135.160.255,你想要给他发送一条信息,那么这条信息上面就会标注上你作为发信人的IP地址还有他作为收信人的IP地址,这样他才能收到信息。
封禁IP地址,就相当于拒收从某IP地址发来的信息。
黑名单上到底记录了什么信息呢?一项封禁具体有如下信息:
如果封禁的是玩家名,这里会记录该玩家名对应的UUID:XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX
被封禁的玩家名(name)或IP地址(ibr /):XXXXXX
该项封禁的创建时间(created):XXXX-XX-XX XX:XX:XX +XXXX
该项封禁的创建人(source):XXXXXX
该项封禁的到期时间(exbr /ires):默认为forever
封禁的原因(reason):默认为Banned by an obr /erator.
我们该怎样通过指令使用黑名单?
黑名单相关的指令有许多,具体有:
\\封禁相关\\
/ban <玩家名或UUID>[封禁原因]——通过玩家名或UUID来封禁一名玩家,玩家无需在线。
/ban-ibr / <IP地址或在线玩家名称>[封禁原因]——直接封禁一个IP地址或封禁一名在线玩家的IP地址
\\查看相关\\
/banlist <ibr /s|br /layers>——查看被封禁的IP列表或玩家列表。ibr /s即Ibr /列表,br /layers即玩家列表。
\\解封相关\\
/br /ardon <玩家名>——解封一个玩家名(从黑名单上移除指定玩家名)
/br /ardon-ibr / <IP地址>——解封一个IP地址(从黑名单上移除指定IP地址)
虽然比/whitelist指令要复杂一点,但仍然很简单,对吧?
现在我们来看一个情景(本情景为作者瞎编,如有雷同,纯属巧合):
在某生存+小游戏服务器中,有一名叫做Klee的玩家(IP地址为1.145.14.191)乱放TNT,放火烧山,给该服务器中的其他玩家造成许多损失。经管理员们讨论后,服务器给予该玩家永久封禁账号(/ban Klee 由于您严重违反我们服务器相关规定,该帐号已被永久封禁)+IP地址(/ban-ibr / 1.145.14.191)大礼包,并补偿服务器内的其他玩家每人3万游戏币,同时对受灾严重地区进行回档操作。
如果这名玩家想要再次进入服务器,那么她将会收到一条错误信息:由于您严重违反我们服务器相关规定,该帐号已被永久封禁。
如果这名玩家还不服气,网上买了个黑号打算再进服务器大干一番,只要她的IP地址还是原来的那个1.145.14.191,那么她就永远无法进入该服务器(除非IP地址被解封或她的IP地址换了)。
对了,如何查看一名玩家的IP地址呢?
打开你服务器的根目录,找到logs文件夹。进入该文件夹,找到需要查看的玩家最后上线那天的服务器日志文件。打开后,使用Ctrl+F(Windows和Linux)或Command⌘+F(Mac)搜索该玩家名称,就能很快地找到该玩家的IP信息。
现在你知道如何使用黑名单了吧?就算你学会了,本章也没有到此结束(/kick还没讲呢!)。
注意到上面封禁的具体信息中有一行封禁到期时间了没有?
你有没有发现,在黑名单的相关指令中,从来没有出现过能够设置封禁时长的参数,每次封禁都是forever(永久封禁)。这究竟是怎么一回事?
实际上,这里藏着一个天大的BUG,一个从Java1.9甚至更早到现在都未能解决的BUG:
当一项封禁到了到期时间,游戏仍然会继续封禁而不是放弃该项封禁。
虽然该bug在1.9版本才被发现,Mojang内部员工也说了该Bug在1.13.1被解决(MC-84786),但实际上仍然没有解决(MC-158900)。根据目前Mojang bug反馈网站上显示的信息,该错误影响了原版MC的1.9~1.12.2、1.14.4~1.17版本。如果这个bug在接下来的1.19甚至是以后的1.20版本中被解决,那么Mojang很有可能会给/ban还有/ban-ibr /指令添加一个新的可以设定到期时间的参数!
唉,我们是不是漏了什么东西?
/kick啊!
/kick的作用是踢出一名玩家。和黑名单不同的是,被踢出的玩家可以再次进入到服务器中而不受限制,相当于是一个警告或是一个玩笑。
/kick的语法如下:
/kick <目标选择器:玩家>[踢出原因]
即使/kick的使用如此简单,我们仍然需要注意以下几点:
①在基岩版中,/kick可以在命令方块中执行(需要权限等级仅为1)。但在Java版中不行(需要3级权限)。
②在基岩版中,/kick不能踢出服务器的拥有者。但在Java版中,这是可行的。
③在基岩版中,/kick在命令方块执行成功输出的红石信号强度等同于/kick本次执行所踢出的玩家数量。
本章就到此结束了。