1. MC 服务器的基本知识
  2. 客户端启动器
  3. Spigot 服务器搭建

1. MC 服务器的基本知识

转载来源: [ Asterisk | 知乎 ]

  • Realms: Mojang 官方推出的出租服务器的服务,服务端一定和官方服务端完全兼容,尽管 Mojang 可以修改它的实现(很贵)
  • Vanilla server: 官方服务端,兼容性坠吼(Mojang 是你爸爸)
  • Bukkit: 给官服加入插件机制,已停止开发,主要继承者是 Spigot
  • Spigot: 给 Bukkit 服务端加入大量优化,速度相当快,大多数第三方服务器都使用这个服务端(CraftBukkit API 现在也是 Spigot 团队维护)
  • Paper: 给 Spigot 添加了一些比较激进的优化,应该是基于官方代码的服务端里坠快的
  • Forge: 老牌 mod API, 优点就是 mod(这不是一个独立的服务端,但是通常 mod 和原版是不能兼容的,所以把 mod API 也视作一种服务端)
  • Cauldron(MCPC+): 相当于给 Spigot 装上了 Forge API, 同时可以用 Bukkit 插件和 Forge mod, 已停止开发(被 DMCA takedown 了)
  • KCauldron 是 Cauldron 的一个 fork, Thermos 是 KCauldron 的一个 fork, 都是给 Cauldron 续命的尝试
  • Sponge: 打算搞个大新闻的新 mod API(这也不是一个独立的服务端)
  • Spout: 一个停止开发的非官方服务端,有很多好玩的特性
  • Glowstone 和 Glowstone++: 出现较早的,完成度较高的非官方服务端
  • Dragonet: 允许 PC 和 PE 玩家连接到同一个服务器,起初基于 Glowstone++ 开发,后来重写了
  • Cuberite: 用 C++ 写的非官方客户端,跑得比谁都快

主要选择目标有两个:

  1. Spigot:支持插件但不支持 mod,当前大多数服务器的选择,支持 python api
  2. Forge:支持的 mod 的服务器

选择 Spigot 来安装,如果有机会再装个 Forge 的

2. 客户端启动器

在 Github 上搜一搜,HMCL 是用的最多的
[ HMCL 服务器|Github ]

  1. 下载 exe 文件
  2. 创建文件夹放进去(没有安装步骤,本身不是安装包,而是启动器本身)
  3. 启动程序,选择离线模式(如果有账号登陆也行)

  4. 设置数据文件夹(默认在 C 盘)

  5. 下载想要的游戏版本

  6. 启动游戏(如果是离线模式,而且对方服务器开启了正版验证则会连接失败)

3. Spigot 服务器搭建

3.1 准备一个云服务器(略)

3.2 安装服务器(基于 apt-get,其他包管理工具需要改成对应命令)

参考链接:

[ 搭建 spigot 服务器 | 腾讯云社区 ]
[搭建 spigot | Spigot 官网 ]

以下命令基本都需要 root 权限,如果忘记了就清除中间产物后加上 sudo 重新运行

  1. 更新系统

    1
    sudo apt-get update && sudo apt-get upgrade
  2. 安装 git

    1
    sudo apt-get install git
  3. 安装 java

    1
    sudo apt-get install openjdk-8-jre-headless
  4. 开放指定端口

    1
    2
    # .如果您正在使用IP tables防火墙(如“ 保护服务器”中所示),请在iptables规则中添加例外:
    sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
  5. 获取编译工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 两条下载命令等价
    curl -o BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
    wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

    # 运行完之后,在合适的地方新建一个minecraft文件夹
    # 建立目录minecraft
    # \---server
    # \---build
    # 把 BuildTools.jar 复制到build文件夹中
  6. 编译

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 这一步很重要,腾讯云上的步骤没有这一步,失败了...
    # 这一步的作用时把git的换行符自动转换恢复为默认
    git config --global --unset core.autocrlf
    sudo java -jar BuildTools.jar

    # 编译的时候时可以选择版本的
    # 默认为最新版本,如下命令的 --rev latest可以省略
    java -jar BuildTools.jar --rev latest

    # 其他版本命令形如:
    java -jar BuildTools.jar --rev 1.16.1
  7. 运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 把生成的形如 spigot-1.16.1.jar 文件放入 server文件夹
    # 下述命令为直接运行,分配的空间适用于 2GB 内存的机器
    java -XX:MaxPermSize=1024M -Xms512M -Xmx1536M -jar spigot-1.16.1.jar

    # 第一次运行必定失败
    # 会给出一个文件,要求同意其许可
    [INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

    # 找到生成的 eula.txt 文件,同意许可
    eula=true

    # 再次运行就可以成功了
    # 但是需要再修改一个东西,以关闭正版验证
    # 在 server 文件夹中找到server.properties 修改 online-mode
    online-mode=false

    # 运行的时候,服务器需要gui界面,会自动发送x11请求(需要用专门软件接受)
    # 一般可以通过参数把这个关掉
    # 所以最终的运行命令为:
    # 最大栈空间1GB 初始堆空间512MB 最大堆空间1536MB 指定关闭GUI界面
    sudo java -XX:MaxPermSize=1024M -Xms512M -Xmx1536M -Djava.awt.headless=true -jar spigot-1.16.1.jar
  8. 从服务器的控制台打开端口

  9. 运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # screen 命令简介:
    # 用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
    # 简单来说就可以看作一个命令行界面的终端切换软件
    screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
    -A  将所有的视窗都调整为目前终端机的大小。
    -d <作业名称>  将指定的screen作业离线。
    -h <行数>  指定视窗的缓冲区行数。
    -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
    -r <作业名称>  恢复离线的screen作业。
    -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
    -s  指定建立新视窗时,所要执行的shell。
    -S <作业名称>  指定screen作业的名称。
    -v  显示版本信息。
    -x  恢复之前离线的screen作业。
    -ls或--list  显示目前所有的screen作业。
    -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

    # 以下命令很可能需要管理员权限,即需要sudo

    # 强制创建新终端并离线(创建名为minecraft的终端任务)
    screen -dmS minecraft

    # 列出所有终端任务
    screen -ls

    # 关闭终端任务
    screen -X -S minecraft quit

    # 切换至终端任务(切换至MC服务器控制台)
    screen -r minecraft

    所以最终的运行解决方案为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 在 server 文件夹中建立 wrapper.sh
    #!/bin/bash
    sudo java -XX:MaxPermSize=1024M -Xms512M -Xmx1536M -Djava.awt.headless=true -jar spigot-1.16.1.jar

    # 在 server 文件夹中建立 run.sh
    #!/bin/bash
    sudo screen -dmS minecraft ./wrapper.sh

    # 在 server 文件夹中建立 stop.sh
    #!/bin/bash
    sudo screen -X -S minecraft quit

    # 运行的时候,切换命令行到 server 文件夹
    sudo ./run.sh

    # 停止服务器的时候,切换命令行到 server 文件夹
    sudo ./stop.sh