搭建自己的 Minecraft 服务器

本文最后更新于5 年前,文中所描述的信息可能已发生改变。

闲话

腾讯云的学生机其实续费了几年,也没怎么使用它。 阿里云的学生机更是到前几个月,干脆让它过期了。

如今,既别无他用,有想到群内的小伙伴们之前一起在玩 MC ,便索性用来搭建一个私服。 记录下过程,以便看官参考,或自己日后复现。

About

本实验设备为 CentOS 7,其他 Linux 服务器可举一反三。

Set up

想让 Minecraft 在 Linux 上运行,自然需要其 Java 版本。

Install Java

bash
# 查看可获得的 java 版本
yum -y list java*
bash
# 安装 java
yum -y install java-latest-openjdk
# ubuntu
# apt install default-jdk

Install Minecraft Server

安装 Minecraft 服务器版本

下载 MINECRAFT :JAVA 版的服务器

Download

几经辗转,发现官服是安装不了插件的。

http://mineplugin.org

如有兴趣,可参考百科安装不同服务器版本。

你可以在 这里 下载官方 JAVA 版的最新版本服务器。(替换下方下载链接)

bash
mkdir /opt/minecraft
cd /opt/minecraft
# 若没有 wget,需先安装
# yum -y wget
wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar
# 1.14.4
bash
# 编译安装
java -Xms512M -Xmx1024M -jar server.jar nogui
# 初次允许结束会返回一个错误,将会生成一个新的 eula.txt 文件

配置可自行修改

  • -Xms512M 服务端能使用的最小内存
  • -Xmx1024M 最大内存

需要同意文件里的协议,通过下面这条命令将 eula=true 添加到文件中:

bash
sed -i.orig 's/eula=false/eula=true/g' eula.txt
# 再次运行
java -Xms512M -Xmx1024M -jar server.jar nogui

编写自动化脚本

bash
nano /opt/minecraft/start-mc.sh

键入以下内容

bash
#!/bin/bash
cd /opt/minecraft/ && java -Xms2048M -Xmx3472M -jar server.jar nogui
# 保存并退出
# 按 ctrl+x y 回车
bash
# 给予执行权限
chmod +x /opt/minecraft/start-mc.sh

退出 SSH 时,服务端也会关闭。

需要开启新的 screen 会话。

bash
# 若没有 screen,需先安装
# yum -y screen
screen -S mc
/opt/minecraft/start-mc.sh

加入自启动

使 Linux 重启时,自动运行该脚本

bash
nano /etc/rc.local

进入文件,加入以下内容

bash
screen -dm -S mc /opt/minecraft/start-mc.sh
exit 0

Backup

若想要备份服务器世界的地图

Backup.sh

编写备份脚本

打算使用 git 来进行备份,别打我

bash
# /opt/minecraft/mc-server-backup.sh
cd /opt/minecraft/ && git add -A && git commit -m "mc-server-world-backup" && git push
# 注意 linux 和 windows 换行符
# cd /opt/minecraft
# git add -A
# git commit -m "mc-server-world-backup"
# git push -u origin master

设置定时备份任务

bash
vi /etc/crontab

键入以下内容

bash
30 2 * * * root /opt/minecraft/mc-server-backup.sh
# 每天 2:30 执行备份任务

Q&A

登入失败:无效会话

服务器默认会对版权进行校验,如果不是使用正版 MC 登陆,会出现 登入失败:无效会话。 需要将服务器中 server.properties 文件中, online-mode 对应值修改为 false

内网穿透

发现小伙伴的一篇文章 白嫖超算来开服 — 天河二号超级计算机白嫖教程

得知超算习堂这个网站,进入任意课程会分配一台 48 G 内存的虚拟机。 可以连外网,于是也尝试部署了一下 MC 服务器,并用 Sakura Ftp 做了内网穿透,竟然成功了。 初始进入的速度很快。

用了 screen,然后关闭浏览器页面,竟然没有立刻终端。结果几分钟还是被收回了,白高兴一场。(白嫖失败) 似乎找台服务器一直挂着页面可以一直持续下去。因为不小心关掉就没办法备份数据等考虑,还是继续用我的小水管服务器吧。

不过的确算是找到了一个可以实验的地方。

Command

记录 Minecraft 中常用的指令

Server

服务端执行

bash
# 赋予管理权限
/op 用户名

Client

bash
# 死亡不掉落
/gamerule keepInventory true

gamemode

更改游戏模式

bash
# Example
# 改变红色组别所有玩家的游戏模式为创造模式
/gamemode creative @a[team=Red]
ParamsDescription
@p距离最近的玩家
@r随机玩家
@a所有玩家
@e所有实体
ParamsDescription
m游戏模式
team队伍
r小于半径区域
rm大于半径区域
type实体种类
  • [r=R] 只选择以指令的执行处为中心,半径小于 R 的区块里的目标。
  • [rm=RM] 只选择以指令的执行处为中心,半径大于 RM 的区块里的目标。

scoreboard

bash
/scoreboard teams add <队伍名> [显示名称]
bash
/scoreboard teams remove <队伍名>
bash
# 加入队伍
/scoreboard teams join <队伍名> [玩家]
bash
# 设置
/scoreboard teams option <队伍名> <> <>

Example:

bash
/scoreboard teams option <队伍名> color red
/scoreboard teams option <队伍名> friendlyfire false
/scoreboard teams option <队伍名> nametagVisbility hideForOtherTeams
ParamsDescriptionOptionsDefault
friendlyfire队友伤害true/falsetrue
nametagVisbility名称标签可见形式never/hideForOtherTeams/hideForOwnTeam/alwaysalways
deathMessageVisibility死亡时如何显示死亡讯息never/hideForOtherTeams/hideForOwnTeam/alwaysalways

可选颜色

  • black(黑色)
  • dark_blue(深蓝色)
  • dark_green(深绿色)
  • dark_aqua (深水蓝色)
  • dark_red(深红色)
  • dark_purple(深紫色)
  • gold(金色)
  • gray(灰色)
  • dark_gray(深灰色)
  • blue(蓝色)
  • green(绿色)
  • aqua(水蓝色)
  • red(红色)
  • light_purple(亮紫色)
  • yellow(黄色)
  • white(白色)
  • reset(恢复到预设的颜色)

插件

一些有趣的插件

[Dragon Mounts 2 | 龙骑士]

孵化末影龙

官网下载地址

依赖 llibrary

Reference

后话

因为服务器全天在线,所以时间也会相应流逝,颇有些加速世界的无限制中立空间的感觉。

More


Q.E.D.

让百度收录你的 GitHub Pages 博客
导出「你的日记」与导入「一本日记」