大家好,又见面了,我是你们的朋友全栈君。
1、Minecraft简介
Minecraft《我的世界》是由 Mojang Studios 公司开发的一款生存沙盒游戏。
Minecraft 由瑞典视频游戏程序员和设计师 Markus Alexej Persson
使用Java编程语言创建。
Minecraft 于 2009 年 5 月首次公开,然后在 2011 年 11 月完全发布,Minecraft 此后已被移植到其他多个平台,并且成为有史以来最畅销的视频游戏。2014 年,Mojang 和 Minecraft 的知识产权被微软以25 亿美元的价格收购。
在《我的世界》中,玩家探索一个程序生成的块状 3D 世界,几乎无限的地形,并能够发现和开采原材料、制作工具和物品,并建造结构、土方工程和简单的机器。根据游戏模式,玩家可以与电脑控制的小怪战斗,以及与同一世界的其他玩家合作或竞争。
游戏模式包括玩家必须获取资源来建造世界并能够生存下去的生存模式,以及玩家拥有无限资源和飞行的创造模式。玩家可以修改游戏,以创造新的游戏机制、物品和资产。
游戏分为国际pe基岩版,以及官方正版pc版,常称java版,游戏的Java版以其强大的第三方拓展模组(Forge / Fabric / Liteloader mod)而知名,它们可以为游戏添加各种新的对象、角色和功能。
2、搭建环境选择
Minecraft 服务器端可以是 Windows 或 Linux,Windows 更适用于不熟悉Linux命令的服主,但自带图形窗口的windows对服务器cpu内存资源有一定消耗,因此对于资深的 linux 服务器玩家linux才是更好的选择。
下面准备一台linux服务器,配置2核CPU、8G内存,发行版本选择Ubuntu、Debain、CentOS等,推荐使用Ubuntu Server,如果需要通过互联网访问还需要购买1个公网IP地址,推荐按量付费宽带,可根据需要购买一个域名,绑定到公网IP。
关于云服务器,可选国内三大云厂商阿里云、腾讯云、华为云,不过价格过于昂贵,性能要求不高可以购买他们的轻量应用服务器类型,其他VPS云厂商也数不胜数,比如淘宝搜索Minecraft服务器,购买面板服,如果只是本地测试则更简单,可以使用 VMware Workstation 或 Virtualbox 创建虚拟机。
本篇文章介绍在Linux系统上搭建Minecraft服务端,以及如何使用bungeecord配置为群组模式,本文采用传统的应用部署方式,方便熟悉minecraft服务器端的部署原理和流程,但当前 docker 容器技术大行其道,更推荐使用 docker,能够仅用一条命令几分钟搭建起一个服务端。
docker容器方式搭建请移步:https://blog.csdn.net/networken/article/details/84945172
3、服务器基本配置
服务器准备就绪后,执行以下操作,做一些初始化配置,操作系统版本:Ubuntu Server 22.04 LTS。
1、首先需要使用SSH工具连接到服务器,下载ssh连接工具 tabby 或 xshell ,以xshell为例,勾选两者,下载安装Xshell和Xftp。
新建ssh连接,输入服务器IP地址,点击连接输入用户名及密码,登录到命令行界面:
2、修改服务器主机名,执行exit
命令退出重新连接使配置生效
root@ubuntu:~# hostnamectl set-hostname mcserver
3、创建名为mc
的用户组及用户,指定home目录设置为/opt/minecraft
,方便使用普通用户管理minecraft
groupadd -r mc
useradd -r -g mc -d "/opt/minecraft" -s "/bin/bash" -m mc
为mc用户设置密码123456
echo "mc:123456" | sudo chpasswd
# 或使用passwd命令交互式设置
passwd mc
为mc用户配置sudo免密
tee /etc/sudoers.d/mc <<< 'mc ALL=(ALL) NOPASSWD: ALL'
chmod 440 /etc/sudoers.d/mc
4、切换到普通用户mc,或退出直接使用该用户ssh登录
root@mcserver:~# su - mc
查看当前所在目录
mc@mcserver:~$ pwd
/opt/minecraft
5、配置使用systemctl命令管理minecraft服务
loginctl enable-linger $(whoami)
echo "export XDG_RUNTIME_DIR=/run/user/$(id -u)" >> ~/.bashrc
source ~/.bashrc
将mc用户加入systemd-journal组增加日志查看权限
sudo usermod -a -G systemd-journal mc
6、minecraft服务端依赖java环境,安装java环境,以openjdk为例:
sudo apt update -y
sudo apt install -y openjdk-17-jdk
确认安装成功
mc@mcserver:~$ java --version
openjdk 17.0.3 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)
4、搭建单个服务端
无特殊说明后续所有操作都以普通用户mc身份执行
1、创建服务端安装目录
mc@mcserver:~$ mkdir -p ~/{
jars,instances}
2、下载服务端jar包,下载地址:https://mcversions.net/,选择STABLE RELEASE稳定正式版本,以1.19为例:
下载后使用 xftp或 winscp工具上传到服务器/opt/minecraft/jars
目录下,也可以获取下载链接后直接使用命令下载:
wget https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar -P ~/jars
如果本地上传需要确认jar包权限属于是否mc用户,否则需要执行以下命令修改权限:
sudo chown -R mc:mc ~/jars/server.jar
3、创建minecraft服务启动文件,复制粘贴以下内容到命令行
mkdir -p ~/.config/systemd/user/
cat >~/.config/systemd/user/minecraft@.service<<'EOF' [Unit] Description=Minecraft Server %i Wants=network.target After=network.target [Service] Type=simple WorkingDirectory=/opt/minecraft/instances/%i ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui RestartSec=30 Restart=on-failure KillMode=process KillSignal=SIGINT SuccessExitStatus=130 StandardInput=null [Install] WantedBy=default.target EOF
4、启动minecraft服务端
mkdir -p ~/instances/survival
echo "eula=true" > /opt/minecraft/instances/survival/eula.txt
systemctl --user daemon-reload
systemctl --user enable minecraft@survival
systemctl --user start minecraft@survival
查看服务运行状态,等待服务端完全启动
mc@mcserver:~$ systemctl --user status minecraft@survival.service
● minecraft@survival.service - Minecraft Server survival
Loaded: loaded (/opt/minecraft/.config/systemd/user/minecraft@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-09 20:58:12 CST; 9min ago
Main PID: 5402 (java)
Tasks: 25 (limit: 4538)
Memory: 2.8G
CPU: 2min 54.030s
CGroup: /user.slice/user-998.slice/user@998.service/app.slice/app-minecraft.slice/minecraft@survival.service
└─5402 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui
Jun 09 20:59:44 mcserver java[5402]: [20:59:44] [Worker-Main-7/INFO]: Preparing spawn area: 60%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:50 mcserver java[5402]: [20:59:50] [Server thread/INFO]: Time elapsed: 66705 ms
Jun 09 20:59:50 mcserver java[5402]: [20:59:50] [Server thread/INFO]: Done (85.783s)! For help, type "help"
5、管理服务启停命令
# 重新加载配置
systemctl --user daemon-reload
# 启动服务端
systemctl --user start minecraft@survival
# 停止服务端
systemctl --user stop minecraft@survival
# 重启服务端
systemctl --user restart minecraft@survival
# 查看服务运行状态
systemctl --user status minecraft@survival
# 查看服务启动日志
journalctl -f
5、客户端登录server端
官方客户端下载地址:https://minecraft.net/zh-hans/download/
这里选择使用第三方客户端HMCL,下载地址:https://hmcl.huangyuhui.net/
本地选择一个目录解压安装即可,安装完成以后需要执行两个操作:添加游戏账户、下载游戏版本。
1、点击添加账户,如果已购买游戏选择微软账户或Mojang账户,否则选择离线模式
这里采用离线模式,添加一个本地用户,用户名自定义,在高级设置中可以查看到默认生成的UUID:
注意,采用离线模式,需要修改服务端配置文件,关闭online-mode,找到以下选项改为false
mc@mcserver:~$ vim instances/survival/server.properties
...
online-mode=false
...
重启服务端使配置生效
systemctl --user restart minecraft@survival
2、返回客户端首页,点击下载,点击一个游戏版本进行安装,与服务端版本一致
3、账号和游戏版本准备好后,返回客户端首页,点击启动游戏
选择多人游戏
点击添加服务器
输入服务器名称和服务器地址,名称可自定义,服务器地址可以是公网IP地址或域名:
完成后可以看到已成功添加服务器
点击列表成功登入服务器,执行/list
命令可以显示在线的玩家
查看服务器后端日志,有 steve 用户登录记录
mc@mcserver:~$ journalctl -f
Jun 09 21:19:44 mcserver java[5581]: [21:19:44] [Worker-Main-1/INFO]: Preparing spawn area: 4%
Jun 09 21:19:45 mcserver java[5581]: [21:19:45] [Server thread/INFO]: Time elapsed: 7130 ms
Jun 09 21:19:45 mcserver java[5581]: [21:19:45] [Server thread/INFO]: Done (20.208s)! For help, type "help"
Jun 09 21:20:45 mcserver java[5581]: [21:20:45] [Server thread/INFO]: steve[/192.168.93.229:10391] logged in with entity id 110 at (-28.5, 70.0, -29.5)
Jun 09 21:20:45 mcserver java[5581]: [21:20:45] [Server thread/INFO]: steve joined the game
Jun 09 21:20:51 mcserver java[5581]: [21:20:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2017ms or 40 ticks behind
Jun 09 21:21:54 mcserver java[5581]: [21:21:54] [Server thread/INFO]: steve lost connection: Disconnected
Jun 09 21:21:54 mcserver java[5581]: [21:21:54] [Server thread/INFO]: steve left the game
Jun 09 21:44:37 mcserver java[5581]: [21:44:37] [Server thread/INFO]: steve[/192.168.93.229:6745] logged in with entity id 410 at (-34.35809642546795, 63.0, -0.6483614176174147)
Jun 09 21:44:37 mcserver java[5581]: [21:44:37] [Server thread/INFO]: steve joined the game
6、配置ops权限
可以通过修改ops.json文件为用户添加ops权限,添加前需要获取用户名称及UUID,在线用户可以通过https://namemc.com/这个网站查看某个用户的UUID,离线模式可以在创建用户时高级模式中查看,或在服务端 usercache.json 文件中查看已登录到服务器的用户UUID
1、服务端查看离线用户的UUID
mc@mcserver:~$ cat ~/instances/survival/usercache.json
[{
"name":"steve","uuid":"53909932-f794-33c0-9329-948045a4c1ce","expiresOn":"2022-07-09 21:44:37 +0800"}]
2、配置 ops.json 文件,将用户steve设为op
mc@mcserver:~$ vim instances/survival/ops.json
[
{
"uuid": "53909932-f794-33c0-9329-948045a4c1ce",
"name": "steve",
"level": 4
}
]
重启服务端使配置生效
systemctl --user restart minecraft@survival
重新使用客户端登录,执行/op steve
提示该steve用户已经是管理员,如果需要取消管理员权限执行/deop steve
命令:
op具有很高权限,比如可以修改游戏模式为创造模式,可以使用任何方块和飞行等等:
/gamemode creative
双击空格我们的steve就可以起飞了:
7、搭建群组服务器
下面我们使用bungeecord代理软件搭建由多个服务端组成的群组服务器,这里仅仅进行测试,BC代理软件和所有子服全部运行在一台服务器上。
其架构原理如下图所示:
1、目前已经创建了生存服,在启动一个lobby登录服
mkdir -p ~/instances/lobby
echo "eula=true" > /opt/minecraft/instances/lobby/eula.txt
systemctl --user enable minecraft@lobby
systemctl --user start minecraft@lobby
由于在同一台服务器启动多个服务端,默认端口25565已被占用导致启动失败,需要修改lobby服务端端口号,修改以下两项
mc@mcserver:~$ vim instances/lobby/server.properties
...
online-mode=false
...
server-port=25566
...
重新启动lobby服务端
systemctl --user restart minecraft@lobby
等待服务端完全启动
mc@mcserver:~$ systemctl --user status minecraft@lobby.service
● minecraft@lobby.service - Minecraft Server lobby
Loaded: loaded (/opt/minecraft/.config/systemd/user/minecraft@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-09 22:56:32 CST; 2min 15s ago
Main PID: 6343 (java)
Tasks: 25 (limit: 4538)
Memory: 1.9G
CPU: 1min 6.759s
CGroup: /user.slice/user-998.slice/user@998.service/app.slice/app-minecraft.slice/minecraft@lobby.service
└─6343 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:07 mcserver java[6343]: [22:57:07] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:07 mcserver java[6343]: [22:57:07] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Worker-Main-1/INFO]: Preparing spawn area: 54%
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Server thread/INFO]: Time elapsed: 10855 ms
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Server thread/INFO]: Done (24.147s)! For help, type "help"
客户端添加服务器登录验证,非默认端口时需要添加端口号
2、下载bungeecord jar包到本地,bungeecord代理端下载地址:https://ci.md-5.net/job/BungeeCord/
点击右侧BungeeCored.jar,下载并上传到服务器
这里在官网获取下载链接,直接下载到linux对应目录下:
wget https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar -P ~/jars/
3、创建BungeeCord服务启动文件,复制粘贴以下内容到命令行
cat >~/.config/systemd/user/bungeecord.service<<'EOF' [Unit] Description=bungeecord Server Wants=network.target After=network.target [Service] Type=simple WorkingDirectory=/opt/minecraft/instances/bungeecord ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/BungeeCord.jar nogui RestartSec=30 Restart=on-failure KillMode=process KillSignal=SIGINT SuccessExitStatus=130 StandardInput=null [Install] WantedBy=default.target EOF
4、启动BungeeCord服务端
mkdir -p ~/instances/bungeecord
systemctl --user daemon-reload
systemctl --user enable bungeecord.service
systemctl --user start bungeecord.service
查看服务运行状态,等待服务端完全启动
mc@mcserver:~$ systemctl --user status bungeecord.service
● bungeecord.service - bungeecord Server
Loaded: loaded (/opt/minecraft/.config/systemd/user/bungeecord.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-09 23:11:38 CST; 19s ago
Main PID: 6809 (java)
Tasks: 25 (limit: 4538)
Memory: 127.3M
CPU: 2.473s
CGroup: /user.slice/user-998.slice/user@998.service/app.slice/bungeecord.service
└─6809 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/BungeeCord.jar nogui
Jun 09 23:11:43 mcserver java[6809]: [104B blob data]
Jun 09 23:11:43 mcserver java[6809]: [104B blob data]
Jun 09 23:11:43 mcserver java[6809]: [57B blob data]
Jun 09 23:11:43 mcserver java[6809]: [117B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [109B blob data]
Jun 09 23:11:43 mcserver java[6809]: [107B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [45B blob data]
5、修改BungeeCord配置文件,改动配置项如下,其他默认即可:
mc@mcserver:~$ vim instances/bungeecord/config.yml
listeners:
......
online_mode: false
......
servers:
lobby:
motd: '&1Just another BungeeCord - Forced Host'
address: localhost:25566
restricted: false
survival:
motd: '&1Just another BungeeCord - Forced Host'
address: localhost:25565
restricted: false
重新启动服务
systemctl --user restart bungeecord.servie
6、客户端添加服务器验证
登录后执行/server
命令,将提示你当前所在的服务器,执行/server survival
将切换到survival服务器
查看此时的数据目录结构:
mc@mcserver:~$ sudo apt install -y tree
mc@mcserver:~$ tree -L 3 /opt/minecraft/
/opt/minecraft/
├── instances
│ ├── bungeecord
│ │ ├── config.yml
│ │ ├── locations.yml
│ │ ├── modules
│ │ ├── modules.yml
│ │ ├── plugins
│ │ ├── proxy.log.0
│ │ └── proxy.log.0.lck
│ ├── lobby
│ │ ├── banned-ips.json
│ │ ├── banned-players.json
│ │ ├── crash-reports
│ │ ├── eula.txt
│ │ ├── libraries
│ │ ├── logs
│ │ ├── ops.json
│ │ ├── server.properties
│ │ ├── usercache.json
│ │ ├── versions
│ │ ├── whitelist.json
│ │ └── world
│ └── survival
│ ├── banned-ips.json
│ ├── banned-players.json
│ ├── eula.txt
│ ├── libraries
│ ├── logs
│ ├── ops.json
│ ├── server.properties
│ ├── usercache.json
│ ├── versions
│ ├── whitelist.json
│ └── world
└── jars
├── BungeeCord.jar
└── server.jar
16 directories, 21 files
查看当前服务器列表
以上就是单个服务器及群组服务器的基本搭建方法,在实际搭建时仍有很多参数和配置需要调整,以及不计其数的插件集成。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150627.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...