• 欢迎访问蓝天云资源论坛,我们希望为大家提供一个自由、安全、和谐的交流平台。为了维护良好的论坛秩序,我们制定了以下规定,希望大家共同遵守

    1.本论坛允许大家分享自己的资源与内容,但请务必遵守相关板块的规定,不得发布任何违法、低俗、涉黄、暴力等不良信息。
    2.如需转载其他论坛的资源,请标注下载外链和地址来源,未经授权不得直接将资源搬运到本站下载。
    3.本论坛的版主都有负责人每天查看,请注意回复言辞和发帖内容,不得发布谣言、虚假信息等不实内容,严重者将直接被封禁IP。
    4.为维护论坛的健康发展,不得发布任何关于非MC内容的新闻及涉及政治敏感话题。

    我们希望在这里大家可以自由、友好地交流和分享,共同建设一个和谐的MC社区。如有任何问题和建议,请及时与管理员联系,我们将竭诚为大家服务。感谢大家的支持和配合!

基岩插件 (内测中)LevelRipper - 存档撕裂者|适用于BDS的临时优化解决方案,提高BDS的多核心性能 23w01a

适用于LLBDS

月光微暖

管理成员
管理成员
2023/02/04
52
2
8
这是一个可以让BDS利用多核心,在大型服务器,尤其是e5这类核心足够多的主机上,在玩家人数非常多或服务器压力较大时,确保tps维持在可接受范围的临时方案。
该方案属于群组服。
目前已经实现已经开半个月的图在e3-1276v3上实现全服10人同时在线tps不低于17,i9-10900k上(仅开两个端)实现全服18人同时在线tps稳定在18-19
该方案仅适用于在线人数较多的服务器,如果是在线人数5人以内的小型服务器,建议仍然使用传统的清除实体等方案优化服务器并考虑提高更换单核性能高的服务器。在本人的开服经验中,单核cpuz跑分400以上的CPU都能在绝大多数情况下承受5人在线。
该方案目前不成熟,存在诸多限制和缺陷,不建议对原版内容有相当高要求的服主使用
该方案目前仍在研讨阶段,有众多功能尚未实现
该方案不稳定,因为还没有经过大量的测试(仅在一个服务器上正式采用并证明可行)
该方案采用后,存档难以恢复至之前状态,请谨慎做出选择。在采用前,请务必备份整个服务端
该方案对开服技术有较高要求,建议已有至少数月bds开服经验的服主了解,新手会难以理解配置的步骤
该方案后期维护工程量较单端更大,运营方建议团队合作
该方案需要占用多个服务器端口,采用内网穿透或端口有限的vps请注意可用的端口数量
该方案需要开启多个bds,如果使用面板服开服,将需要购买多个面板,且每个面板需要至少有三个公网端口或可在内网互相访问
只有多核心性能足够的时候,该方案才能起到明显作用。对于8700k物理机和2核心的13900k,如果价格相近,那么13900k仍然可以带来更好的体验。与2核心13900k对比,至少需要9700k物理机才能在采用此方案后看到显著的提升。

感兴趣的加群715732100了解

实现原理:克隆整个已有bds,并通过mwl限定玩家在每个bds中的活动区域以防冲突。在不同bds间传送时,配套插件将会把玩家传送至对应的坐标。传送后,ws协调服务端将同步玩家的背包等数据。
最终效果:玩家仅在跨越不同bds相接处时,会经过一次传送,其他时候与在单个地图中进行游戏没有区别。而bds可以利用多核心,来突破单核心性能的技术限制,变相利用多核心计算,进而提高每个bds的流畅度。即使一个bds卡顿,卡顿也不会影响到其他的端。

时间仓促,具体教程我会一点一点补充,如果感兴趣可以加群了解

请不要在服务器开启时安装!这可能会导致玩家数据错误!

目前已经测试下界中的传送并证实此插件已兼容下界。但是目前仍无法为在下界的跨区传送同步偏航角。目前也仍未支持全图仅使用一个末地。对于全服同一末地,如果开发顺利,将可能在接下来的一两个版本发布。

安装教程
安装MWorldLimit

其实本方案也可以不借助这个配套插件,但是将无法实现玩家在全服同时只能有一个坐标和越过区界来传送
首先,安装MWorldLimit。安装好之后,如果使用配套插件LevelRipper,需要对此插件进行修改
直接打开js文件(建议用IDE打开)
在插件最前面加上这一行:
JavaScript:
let transfer=ll.import("LevelRipper","sync")
然后在142行和143行间插入这一行:
JavaScript:
let lastpos=pl.pos;
再145和146行间插入这一行:
JavaScript:
transfer(pl,lastpos)
修改后的140-150行应该是这样的:
JavaScript:
let cache_direction = pl.direction;
let vPos = getNearestValidPos(pl.pos);
// pl.teleport(vPos);
let lastpos=pl.pos;
mc.runcmdEx(`tp "${pl.realName}" ${vPos.x} ${vPos.y} ${vPos.z}`);
// pl.getNbt().setTag(`Rotation`, new NbtList([new NbtFloat(cache_direction.yaw), new NbtFloat(cache_direction.pitch)]));
transfer(pl,lastpos)
pl.tell(`§c你超越了世界边界!`);
}
}
}
修改之后,MWorldLimit将在玩家触碰边界时调用配套插件的API,实现配套插件对MWorldLimit玩家超越边界事件的监听

安装配套插件
解压下载得到的压缩文件,得到LevelRipper.llplugin和LevelRipperServer.llplugin,将此配套插件中的LeverRipper.llplugin放到plugins文件夹。暂时不要安装LevelRipperServer。

启动一次服务器,让两个已安装好的插件生成配置文件

确定服务器本次需要划分出来的区域的数量

您需要将服务器地图分成多个区域。
每个区域的边界必须与x轴与z轴垂直,整个区域的形状必须是矩形。
如果您需要玩家无限跑图,您可以将外围的区域设置其直至坐标2147438647。例如,您可以设置区域“300,460 - 2147438647,2147438647”。
每个区域中都将运行在单独的CPU中, 其进行的所有计算都不会干涉其他的区域。如果该区域卡顿,卡顿也不会扩散到其他的区域。因此,保证每个区域的运算量均衡是您在划分区域时必须考虑的。例如,玩家在一处建造了多门猪人塔,在离该猪人塔有一段距离的地方建造了仅一台刷铁机,您将可能需要考虑将多门猪人塔从中一分为二。只有将多门猪人塔平均分配到两个核心,才能确保每个端的性能最大。在选中该分界处时,您也需要注意该分界处不能跨越任何已有的玩家建筑,尤其是生电机器等依赖方块间传递状态的建筑。

克隆服务器
将现有服务端复制与区域数量的份数。复制前务必保留一个备份。

修改各个服务端的配置
首先,在各个服务端的server.properties中修改端口。所有服务端的ipv4和ipv6端口都不能重复
如果服务器不是独立公网ip,则此时需要配置相应的端口转发或新建穿透,如果开启了防火墙则需要放行相应端口。如果服务器将布署在多个主机,此时需要将服务端上传到其他的主机
然后修改MWorldLimit。对于每个服务端,都需要确定好这个服务端运行的区域,然后修改MWorldLimit的限制区域为这个服务端运行的区域。各个MWorldLimit的限制区域不能重合,也不能间隙过大。
然后修改plugins/LevelRipper/config.json。将所有的区域都添加到这个文件中,并设置好每个区域对应的服务器连接地址。修改好后,将这个文件复制到其他所有的服务端,并修改每个服务端的这个文件的thisServer的地址为当前服务端的连接地址。

安装WS协调服务端

安装LevelRipperServer
安装LevelRipperServer到服务器中的其中一个,启动一次该服务器。插件默认使用6848端口通信,如果此端口上已启动其他服务,需要在所有的LevelRipper配置文件和LevelRipper/server.json中统一修改端口。

本方案的配套插件除所需前置需要金粒外,没有任何付费计划。解决bds服主长久以来的心病刻不容缓,我也希望各位服主能想到更好的方案,来解决本方案中诸多无法避免的缺陷。
转载至MineBBS
 

附件

  • LevelRipper.zip
    6.7 KB · 查看: 0