教程 <废> 如何优雅的用 Multicraft 开 BDS 插件服

老发布投票了


  • 总投票
    2
  • 投票关闭 .

kengwang

强者
[请注意, 此帖内容已经过时]
[请注意, 此篇内容仅为草稿, 且未进行二次审核]

如何优雅的用 Multicraft 开 BDS 插件服
本文作者为 Kengwang 仅发布于 MineBBSMcbar 此文章采用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议进行许可。
二次修改已经增加了图片以及部分代码
前言
在去年我在Mcbar发布了一篇 如何优雅地用Multicraft开BDS服务器 (此文已经重新发出,但是内容可能稍微有点旧) 一年过去了,BDS圈子也发生了变化,原本认为只能原版生存的BDS因为Player大佬的一篇文章而产生了众多优秀框架和插件。对于腐竹来说,又有插件又是原版是非常吸引人的,很多面板商也就开始选择了BDS插件服。这也就回到了开头的问题,如何优雅地用Multicraft开BDS插件服

0x01 为什么要用Multicraft
诚然,现在有很多优秀的开源面板,但是大多不适合拿来做商用,而是方便团队和个人管理。而Multicraft凭借着多年来的技术沉淀所拥有的稳定性,安全性,易管理性(以及防破解性)也算是成熟的解决方案了。@Multicraft Support 没想到居然官方也在,哈哈.

顺便打个广告,我目前正在策划一个 EasyCraft 面板,采用 C# 的 .NET Core, 将会实现很多有趣的功能,敬请期待!
永恒云
永恒云的方法最为简单,采用的不是BDX或者BDSJSRunner,而是采用了BDL这个框架。BDL框架没有脚本Mod的支持,所以没有那么广泛使用。



既然采用了BDL,系统肯定是Linux了

顺带一提,因为BDS的Linux版本没有做代码优化导致效率很低,所以Linux的BDS比Windows卡。 永恒的解决方案我个人是不推荐的。不过有一说一,永恒的价格很舒适,本次测试只花了2元就开了台BDS服务器(端午节期间购买,不知道是不是卡的BUG,假如说是的话那要说声对不起,我没有长时间的开服)而且实现方法也很简单,几下能搞定. 我也就不会对这种方案进行实现.

PS. 由于开始撰写文章的时候 BDX 和 BDL 的作者还未发布 End of Support Sysca11 大佬在 2020 年 6 月 28 日在 Telegram 群正式声明终止维护(但BDL会更新 1.60 )
旋律云
旋律云对于BDS圈子的开发者很友好,他们的解决方案我也会详细的说明下。 首先是核心,旋律云支持BDS原版和插件服(BDX和BDSJSRunner),他们用的也是Linux系统(Debian GNU/Linux 10),但是他们却跑起来了BDX插件服,其中就不得不提wine了。BDX的作者也说明了假如在Linux环境下建议使用wine。 但是旋律云的一个危险的操作就是暴露了 run.sh 意味着稍微有点Linux知识的人就可以修改 run.sh 来运行他想要运行的程序,反弹一个 shell,来进行只能在 localhost 上执行的操作.

旋律云方案
(注: 此章节仅是对方案的猜测,我不是官方人员,不能保证此方案和旋律云方案完全一致,如旋律云因为技术需要要删除此章节可以邮箱 atkengwang@qq.com 联系)

好了,最近有买服务器的资金了,我就买了21元/月的服务器来试试. 旋律还挺良心的,支持自定义玩家数

进行切换了核心,我们会发现控制台输出有安装模板的迹象



这个也是个不错的想法,灵活的运用了 Multicraft 的模板功能来切换核心数据,然后我们再看看服务器文件,里面有个run.sh,看样子就是开服要执行的命令了,我把他内容贴出来

#!/bin/bash
export WINEDLLOVERRIDES="vcruntime140_1,vcruntime140,msvcp140=n;mscoree,mshtml,explorer.exe,winemenubuilder.exe,services.exe,playplug.exe=d"
export WINEDEBUG="-all"
export PATH=$PATH:"/opt/wine/bin/"
wine64 bedrock_server.exe | tee -a latest.log
不难发现,这个是使用Wine来运行的,加载一堆dll然后再启动BDX版的bds服务器,同时记录日志到latest.log

但是,我在这里要吐槽一句,把这个shell这样公开出来真的好吗? 还是777权限......很容易利用用来搞事吗? (虽然没有root)

不过既然如此,我们还是继续吧. 旋律的方案有个很关键的东西就是 wine,以便在Linux上运行Windows程序

具体教程可以看看某位大佬发的帖子: https://www.bilibili.com/read/cv5695357 (已交至 Web Archive 备份)
CentOS 可以执行:
yum -y groupinstall 'Development Tools'

yum -y install libX11-devel freetype-devel zlib-devel libxcb-devel

yum -y install wine

yum -y install p7zip p7zip-plugins unzip

来安装wine
安装好后就可以从模板入手开始搞了~

前排提示:下面内容可能会过于简略和过于硬核,新手可以说一句:我可以的 然后继续看下去

第一步,模板制作
按照官方的教程,在Windows环境下做好符号数据库(RoDB.exe),然后再回到Linux环境下,在服务器目录下运行下面的指令来安装vc运行时 ,Ubuntu或者Arch按照官方教程安装,CentOS可以直接使用我打包好的包

========== 此方案 To Be Continued =======

我接下来会对旋律云的方案进行尝试实现

文章可能还会咕咕咕几天,我会找点钱买下机子 (欢迎赞助哦~ https://afdian.net/@kengwang)

========== To Be Continued ===========



Kengwang 方案
(此方案为Kengwang原创,允许商用,请保留版权,使用GPL协议授权)

此方案为Windows系统方案,Linux就算了,我们开始吧~

创建服务器需要的权限
  1. 打开计算机管理 - 本地用户和组 - 右键 组 - 新建组
    组名: mc
    描述:随意(Minecraft Server User Group)
    然后点击创建
  2. 配置用户组权限
    1. 按下win+r 打开运行
    2. 输入 gpedit.msc
    3. 选择 计算机配置 - Windows设置 - 安全设置 - 本地策略 - 用户权限分配
      共有以下几个策略要更改
      • 拒绝从网络访问这台计算机
      • 拒绝通过远程桌面服务登录
      • 拒绝以服务身份登录
      • 拒绝作为批处理作业登录
    4. 以下以拒绝从网络访问这台计算机为例
      双击此项打开属性

      点击添加用户或组

      点击对象类型,勾选组
      在下方文本框输入mc
      点击检查名称,如果mc下方打了下滑线即可确定然后再确定
      其他几个一样的操作
  3. 禁止错误提示
    1. 以管理员身份运行gpedit.msc
    2. 计算机配置->管理模板->Windows 组件->Windows 错误报告
    3. 在“禁用Windows 错误报告”上右击,选编辑,从未配置或者已禁用改为已启用
    4. 在“阻止显示用户界面上的关键错误”上右击,选编辑,未配置或者已禁用改为已启用
3. 安装开服必备程序
找到Multicraft的Jar文件夹

将我发KWRunner.exe和MCDllInject.exe丢进去,将conf文件也丢进去,创建文件夹叫做BDS,然后将def.properties放进去,再新建个文件夹,名字为BDS 的版本号(如1.14.32.1),再将bds的压缩包丢进去,删除不必要的文件,最后只留下



4. 插件支持
在C:\Plugin\BDSJSRunner下放上BDSJSRunner.dll,随便命名,不过要记住.

修改Multicraft的jar下的BDS-xxxxx-JS-TP 找到command那行,在--dll后面改成刚刚那个dll的存放路径

5. Multicraft配置
修改Multicraft根目录下的Multicraft.conf

  1. 找到serversDir那一行,将他修改到把服务器存在哪里 (E:\Server)
  2. 找到 forbiddenFiles 那一行,将等号后面改为 (.dll|DONOTMODIFY|.exe|.bat|.pif|.sh|.cmd|Password.ini)
  3. 将我发的server_properties.conf 放到 panel\protected\data下
  4. 然后就可以了呢
UAC设置
按键盘的“窗口+R”,在运行窗口中输入“gpedit.msc”回车确认,打开组策略编辑器。在编辑器的左面的列表中,依次点开“计算机配置”、“windows设置”、“安全设置”、“本地策略”、“安全选项”,在安全选项右面的窗口中找到“用户账户控制:以管理员批准模式运行所有管理员”,双击打开。最后在“用户账户控制:以管理员批准模式运行所有管理员”属性中选择“已禁用”,单击确定,重新启动计算机。这样就完全关闭了操作系统的UAC机制。

下载KWRunner (待发布),将其放置到jar目录下
 
由版主最后编辑:

kengwang

强者
我开始找钱买旋律的机子了,21/月,真的好贵啊~ 等下看看有没有人要看,有的话我就赶紧买赶紧写,没有的话我就删帖了吧
顺带说下,我没有收到任何一个面板商的钱,没有给任何面板商打广告,假如说有什么不妥的地方可以在此评论处理,我会更改内容的.
我也是非常抱歉来分析别人的开服方案,我这边我也有一套的,我会把两套都说一下的
 
最后编辑:
L

luft

闲逛的萌新
支持大佬!现在挺需要在linux用mu面板开bds插件服的
 
L

luft

闲逛的萌新
支持大佬!现在挺需要在linux用mu面板开bds插件服的
大佬如果继续写下去的话,我可以买一个嘿嘿嘿
 

kengwang

强者
大佬如果继续写下去的话,我可以买一个嘿嘿嘿
啊,这个方案不会付费. 如果可以的话可以保留版权
 

kengwang

强者
咕咕咕
我暂时还在写
 

难受了

闲逛的萌新
几个月又过去了
 
D

dofes

闲逛的萌新
大佬还更新吗
 

frankniubi

大佬在此
管理成员
也许不更新了
 

kengwang

强者
已经不再更新此贴了, 为了纪念, 我把草稿贴出来吧
时随境迁, 很多优秀的专为 BDS 设计的面板在这几年涌现出来
Yukka 面板就是专门为 BDS 设计的, 当初 2.0 发布的时候还专门研究了下
通过 BDS 插件记录玩家等信息 + 一个启动器 来执行开服等操作记录
这个思路我个人不太喜欢(没有说 Yukka 不好的意思), 毕竟要注入插件的话, 还是有点成本太高了
不知道 Yukka 3.0 之后有没有改变这个思路

之前也打算出过一个面板的, 甚至都已经写到了最终阶段, 也放出了一个 Demo 来尝鲜
估计都知道: MinePanel (EasyCraft)
但是因为之前写 EasyCraft 的时候还不成熟, 一个人扛下了全端, 还准备维持一个生态
但是后来又进行了一次重写, 也进行了一些妥协, 在写好之后放出的 Demo 就是当时的版本
因为我个人是通过开源社区成长的, 也准备将这个项目回馈给开源社区
后来因为和当时我在的一个团队说了一下, 他们也都挺支持我的, 准备和我一起来搞
这就有了 MinePanel 以及后来 MineBBS 上的一个预热
当时我个人的部分想法和团队的想法有点冲突, 在加上个人的时间原因于是被搁置了
现在想起来还是有些可惜的

附:
EasyCraft 开源链接: https://github.com/EasyCraftPanel/EasyCraft
EasyCraft 专用 BDS 插件启动器链接: https://github.com/EasyCraftPanel/Starter-BDSInject
关于面板的一些构想: https://easycraftpanel.github.io/Doc/#/

如果感兴趣的话可以自己研究研究, 如果大家感觉有兴趣, 可以回复一下, 我抽空写完

请注意, EasyCraft / MinePanel 一直都使用的 GPL-3.0 协议, 请勿违反协议
EasyCraft / MinePanel 所发送的文档遵循 CC 3.0 BY-NC-SA 协议
 
最后编辑:
顶部