Java版服务器概念一览
服务器的使用离不开各种方式的理解与运用,而这些方式的基础就是「概念」的理解
无可厚非的是,这些「概念」需要一定的服务器基础,即:
- 能看懂汉字,理解字词。
- 会打开服务器文件,需要一定的英语基础。
如果你满足以上条件,恭喜你!您可以很容易地去理解此文章!
目录:
- 什么是服务端?
- 什么是插件?
- 什么是模组?
- 什么是日志?
- 什么是数据包?
- 什么是世界?
- 什么是根目录?
- 什么是NBT?
- 什么是卡顿?
- 什么是权限?
什么是服务端?
服务端是一种有针对性的服务程序
服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据
简单点说,客户端自己开单人游戏,可以看做客户端也是一种服务端,单人世界也是一种服务器。
同理,服务端开启服务器,可以看做服务端是一种不同的客户端,多人世界就是另一种服务器。
也就是说,客户端点击多人世界链接ip,所连接的对象就是服务器,而这个允许我们进行服务器联机的软件/程序可以简单称为服务端。
服务端有什么?
Minecraft 提供了让玩家可以进行多人游戏的服务端,称为 Minecraft Server,俗称 Vanilla Server 、香草端、原版端(vanilla本身就有香草、原版的意思在里面)
由于原版 Minecraft Server 拓展性及性能不足,社区衍生出了多种服务端,
这些提供多人游戏服务的程序/软件常被人称为核心,大致可分为 Mod 服务端和插件服务端。
常见的Mod服务端有Forge和Fabric等。
常见的插件服务端有Bukkit和paper等。
什么是插件?
不同于大部分模组需要同时安装在客户端和服务端,插件安装在服务端,玩家只需使用原版客户端即可进入服务器,大多数情况下不需要专门安装Mod。
插件为什么叫插件(Plugins)?
是因为它相对于模组(Mods)有更高的即时性,能够更为方便地添加或修改游戏内容,对服务器本身的侵入性修改也更小,根据意思来讲,即插即拔,那不就是插件嘛。
插件本身需要安装在Plugins文件夹,且需要插件/混合服务端才能启动。
永远!不要!尝试热插拔,热加载任何插件!(除非插件本身就有热加载指令)否则带来的后果将是无法想象的!
而且如果没有提前说明插件支持的小版本,一定要尝试是否正常加载方可使用!
插件的优点:
- 有手就行,开发/使用难度十分简单。
- 拥有庞大的社区。
- 轻量化。在同等数量的mod/插件情况下,mod服相较于插件服,插件服的性能略胜一筹。一般来说,插件服需要在意的就是世界的卡顿问题。
- 如果MC底层包括原版服务端代码有修改之外,一般插件的版本更新速度不用着急,比如说某些插件(如vault)几年前更新的版本最新版本也能用。
插件的缺点
- 如果插件实现的功能较多,更换一个小版本都很可能导致某些功能失去作用甚至无法正常加载。
- 接触 Minecraft 本身的代码变得困难,而且通常需要考虑多个版本之间的代码变动。
- 很难直接像模组那样直接更改游戏代码,某些必须需要修改源代码才能实现的功能在插件上很难实现。
插件经过许多年的开发,目前已经可以做到了使用自定义,物品,方块,HUD,家具,Emoij,生物实体,农作物,树叶,Tooltip,附魔…所以,很多时候不要轻易地认为插件在最终效果上不如MOD,很多时候插件在不需要考虑兼容存档的情况下能更方便的使用也可以达到和Mod相同的效果。
什么是模组?
模组(Mod)是遵循Forge、Fabric或LiteLoader等 API 规范编写的Java程序,一般安装在/mods
文件夹下,mod安装必须遵循forge/fabric的版本,哪怕少了一个小版本,都会报错。安装完之后需要重启服务器。一般来说,mod服务器所需配置比插件服务器要高,即使是同等条件下
模组的优点
- 可以更为随心所欲的修改包括客户端和服务端的游戏代码,功能性更多;
- 大多数大型 Mod 是有相对详细的 Wiki 供玩家参考,更方便入手;
- 可以控制客户端使用的 Mod 降低客户端使用作弊端的可能性;
模组的缺点
- 模组基本没有稳定的 API,不像插件依赖稳定的 API 的插件,如果你玩的模组相对小众,那么很可能只有特定几个版本能够找到;
- 服务端如果不加插件生态,管理方面的模组会少一些,如果加上 Bukkit 生态兼容又容易出现兼容性、报错等问题,服务端往往稳定性欠佳,基本只能开半年;
- 模组更容易出现不兼容的情况,有时由于版本等不兼容很容易导致客户端无法启动的问题;
- 客户端必须安装特定的模组才能进入服务器,这存在的便捷性和安全性问题对某些玩家来说是比较难以接受的;
- 关于玩法的模组性能往往比较拉胯(特别是 Forge 平台),对于 CPU 和内存的要求会更高
什么是日志?
日志记录了服务器的运行信息,运行时产生的错误和警告,同时也是大佬们用来分析为什么功能不正常或不能用的必要途径,正常情况下,服务器的最新日志保存在 服务器根目录/logs/latest.log
,是同步控制台输出的
每天凌晨 00:00 时服务器将会将最新的日志latest.log压缩为以时间命名的.gz压缩文件,直接在控制台找到日志分析阅读即可。如果您还是理解不了,请看下图:
这便是压缩为以时间命名的.gz压缩文件
这便是latest.log
日志一般是由[时间] [线程 / 日志级别]: 日志内容
组成的,如下:
[23:44:24] [Server thread/INFO]: [PlaceholderAPI] Successfully registered external expansion: ViaVersion [2.0.0]
[23:44:24] [Server thread/INFO]: [PlaceholderAPI] Successfully registered external expansion: essentials [1.5.2]
[23:44:24] [Server thread/INFO]: [PlaceholderAPI] Successfully registered external expansion: pointsapi [1.0.2]
[23:44:24] [Server thread/INFO]: 9 placeholder hook(s) registered! 1 placeholder hook(s) have an update available.
[23:44:24] [Server thread/WARN]: [ViaVersion] There is a newer plugin version available: 5.1.1, you're on: 5.0.3
[23:44:24] [Server thread/INFO]: Done (108.443s)! For help, type "help"
[23:44:24] [Server thread/INFO]: [voicechat] Loading plugins
[23:44:24] [Server thread/INFO]: [voicechat] Loaded 0 plugin(s)
[23:44:24] [Server thread/INFO]: [voicechat] Initializing plugins
[23:44:24] [Server thread/INFO]: [voicechat] Initialized 0 plugin(s)
[23:44:24] [Server thread/WARN]: [voicechat] Running in offline mode - Voice chat encryption is not secure!
除此之外,对于一些报错信息,通常服务器会将日志命名为debug.log
,也有可能存储在crash-reports
文件夹下
日志也是分等级的,我们在小学语文学过,读文章要画关键句,关键词,日志也是一样的。
日志分为3个等级:
INFO:信息类,如聊天内容/玩家状态/玩家指令/插件信息/……
WARN:警告类,对于一些潜在的风险进行警告,有可能发展为报错(在某些情况下,WARN也可以看做是报错)。
ERROR:报错类,服务器出现错误后输出的信息。
总的来说,当服务器出现异常时请立刻检查日志中是否出现了 WARN 或 ERROR 级别的报错,建议先搜索查看是否有人遇到类似情况,再结合翻译结果尝试修复。如果搞不定可以请教其他人,但请不要直接复制日志成百上千的内容到群里面,如果日志内容实在多,请发日志文件。
什么是数据包?
数据包是从Minecraft逻辑结构层面修改我的世界,它可以添加或覆盖游戏中几乎一切的元素。一定程度下可以代替Mod,但它并不会改变原版的内容。其功能可用于覆盖或添加新的函数、进度、战利品表、物品修饰器、配方、结构、标签、维度、世界生成等,数据包存放于我的世界存档目录下 world/datapacks 它既可以是文件夹亦可以是压缩包。当你加入时数据包将为该世界启用。
数据包是存在加载顺序的,在数据包各个功能同一个分类下不同的加载顺序会导致不同的结果也就是不同的覆盖产生。这个顺序存储在
world/level.dat
**您可以通过单人创建存档时调整数据包的位置决定数据包的加载顺序。
您可以通过 /datapack
查看已经加载或未加载的数据包**。
常见数据包的下载:
PlanetMinecraft 比较老牌的一个网站,不止有数据包,还有许多地图(尽管有些一言难尽)。
Modrinth 新兴的我的世界资源平台,东西比较全。
9Minecraft 比较老牌的我的世界资源网站了,界面不太符合中国习惯(全英),不太推荐。
数据包工具:
Datapack Map 查看世界生成数据包对应种子的地图。
Datapack Maker 数据包生成器,适用于大部分环境。
Mcreator 生成/制作初级数据包的不二之选,推荐。
vanilla tweaks 常用数据包的结合体,可以集成下载。
关于数据包的编写,详细请看我的世界wiki。
什么是世界?
Minecraft 的几乎一切行为都是建立在 “世界” 上,而世界中的方块、实体等文件都存储在了根目录的对应文件夹下。
Minecraft 原版目前有三个世界,分别是主世界 world(world),地狱 DIM-1 (world_nether),末地 DIM1 (world_the_end)。
每个世界的方块都按照 X 和 Z 每 16 * 16 为区块(Chunk)。其中每 32 * 32 个区块就会成为一组存储进一个独立的区域文件(Region)。
在这里以主世界为例,说说世界是怎样保存的:
文件夹:
advancements/ :储存玩家的成就,每个玩家对应一个 UUID **;
data/ :idcounts.dat和map_xxx.dat 储存的是玩家合成的地图有关的数据;
datapacks/ :储存世界所使用的数据包(一般 Bukkit 系服务器有一个 Bukkit 文件夹);
entities/ :储存对应 region 中的实体;
playerdata/ :储存着玩家的数据信息(如血量、经验值等);
poi/ :存储世界中村民的兴趣点(如床、工作方块)。(只在 1.14 + 版本中使用);
region/ :储存方块信息;
stats/ :储存玩家在此世界游玩时的统计信息(如击杀了 xx 只鸡、使用了 xx 次工作台)。
如果还有其他文件夹一般为插件储存用的文件夹,如 itemsadder 文件夹是插件 ItemsAdders 创建的用于保存世界中自定义物品的文件夹
文件:
level.dat :储存该世界的全局信息(如种子、是否生成结构、世界类型、世界重生点等);
level.dat_old : 可以视为 level.dat 的备份文件;
session.lock :用于储存最后执行的程序修改这一文件以及访问的权限;
/data/raids_end.dat :储存世界内正在进行的袭击的信息;
/data/random_sequences.dat :存储战利品表使用的随机序列数据;
paper-world.yml(只存在于 Paper 服务器中):记录世界特有的 Paper 设置。
其他世界的文件夹大同小异不要将任何存档从高版本降至低版本(例如1.21降至1.19)!小版本降版本都会有问题,更何况大版本降版本!除非你不想要你的存档,否则千万不要这样!存档最次只适合升级(也有风险)而不是降级,任何存档转换都会有大问题
!
什么是根目录?
根目录指逻辑驱动器的最上一级目录,它是相对子目录来说的。打开“我的电脑”,双击C盘就进入C盘的根目录,双击D盘就进入D盘的根目录。其它类推。
根目录在文件系统建立时即已被创建,其目的就是存储子目录(也称为文件夹)或文件的目录项。一“棵“目录树,树的最根本就是它的根(根目录)。
例如abc/file2/3.txt abc/便是根目录。
什么是NBT?
NBT简单来讲就是用来描述
- 某个方块 - (比如箱子,熔炉)装了什么,告示牌信息,命令方块里的命令,等等。
- 某个实体 - 穿了什么,拿了什么,药水效果,着火,骑乘,等等。
- 某个物品 - 名字,描述,附魔,属性,耐久损耗,CMD标签,等等。
什么是卡顿?
服务器中玩家可感知到的卡顿是多种多样的,其中主要包括服务器处理速度不足导致的MSPT 偏高,TPS 偏低,
服务器网络波动导致的 Ping (即为服务器和玩家之间的网络延迟)
总的说来,MSPT 和 TPS 是用于评价服务器流畅程度的,而 Ping 是用于评价服务器和玩家之间的网络稳定性
玩家往往分不清到底是服务器卡顿还是网络延迟,请服主自行区分。不应因为玩家在社区说一句 “
服务器卡了
“ 然后就默认是服务器问题。
那么问题来了,Minecraft的底层卡顿逻辑是什么呢?
理想情况下
服务器无论什么版本都是每秒钟刷新20次,也就是说每次刷新之间间隔50ms( 1000ms/20 ) 刷新一次,即为一个Tick;
正常情况下
每个Tick都小于50ms,为了保证服务器以20Tick每秒的速度运行,服务器将选择等待下一个Tick;
服务器滞后时
当服务器某个 Tick 无法在 50ms 内完成时,服务器将产生滞后,一旦滞后,每个 Tick 将会顺延,每秒钟发生的 Tick 将会减少
这就是TPS(Ticks Per Second)(每秒 Tick 数) 正常应为 20 ,即服务器每秒钟进行 20 次更新,确保红石、生物 AI 等按照正常工作。
TPS只是最基础的量化卡顿程度。并不是TPS高,玩家就感受不到卡顿,也不是TPS低就一定会感受到非常卡顿这是因为,TPS只是计算一个平均值,如果某一个Tick花费了800ms ,而剩下的18Tick只花费了200 ms,即使计算出的TPS为19但玩家会感受到的800ms的滞后。下文提到的MSPT能够更加精准量化卡顿程度。
MSPT(就是每进行一次 Tick 所花费的毫秒数)(Milliseconds Per Tick)。
如果 MSPT数值较低,说明服务器可以迅速快速进行每次Tick,游戏运行更为流畅
反之,如果MSPT过高,意味着每次Tick所需的时间变长,游戏的运行速度就会变慢,进而影响到整体的TPS,影响MSPT的东西很多,如区块生成,AI计算,插件计划任务等都会影响MSPT。
知道了这些,那么该如何查看TPS和MSPT呢?
- 如果为purpurfork服务器可以输入
/tpsbar
查看MSPT和TPS; - 如果为paper服务器可输入
/mspt
查看 MSPT,输入/tps
查看 TPS; - 安装TpsBar插件,显示更好看(?)。
如果上文提到的MSPT和TPS都没有问题,那么就要考虑Ping了。
在Minecraft中,网络延迟(通常表示为 Ping)是玩家连接到服务器时数据传输所花费的时间,Ping值的高低直接影响了玩家在游戏中的体验,特别是在需要快速反应和精确操作的场合,谁也不想落地水变成落地 水,因此,网络延迟也是一个十分重要的卡顿内容。
那什么是Ping呢?
当玩家在Minecraft中尝试与服务器通信时,玩家的计算机会向服务器发送一个数据包,然后等待服务器的响应。
从数据包发送出去到收到服务器的响应,所花费的时间就是Ping值。Ping通常以ms(毫秒)为单位来表示。Ping值的高低对游戏体验有着显著的影响。
Ping的具体要求大概和服务器本身的性质有关
一般说来服务器 Ping 要求为:
PVP服务器:< 50 ms
生存服务器:< 200 ms
建筑服务器:< 500 ms
此处的延迟为玩家在该类型服务器游戏体验明显变差的阈值,并非高于本数值就完全不可玩。总而言之,为玩家提供可靠的链接是每个服务器应尽的义务。
tips:海绵的付费节点采用三网聚合BGP技术,能够根据用户网络自动选择最佳线路,减少卡顿。即使是最低价位的9.9元服务器,也能享受到BGP聚合线路的优势。这种方式极大地减少了腐竹优化的工作量,所以对此不做讨论。
什么是权限?
权限 - 在插件服务端中,确认玩家做某行为的能力是否被允许;
节点 - 权限的单元,一个节点就是一条权限,可以使用权限系统插件给予各个用户,如cmi.tp
就是一条权限节点,而权限节点前的cmi
就是父节点;
通配符 - 即为*
,当给予玩家权限父节点.*
即可获取父节点对应的所有权限节点,如cmi.*
即代表 所有的 cmi.kit cmi.heal...
等节点;
继承 - 继承就是子用户组可以使用从父用户组继承的各种属性;
这便是关于权限的概念,权限就是可以让服主和管理组能有效地管理用户的权限,能够准确地控制一个玩家能干什么、不能干什么。
我们有且只推荐LuckPerms作为权限插件,详细使用教程请看LuckPerms使用教程
最后编辑:tangbao 更新时间:2025-01-01 09:00