前言

国庆节七天在家我的朋友LLJ闲着无聊想要玩MC,于是找到我说开个服来玩玩。说得倒是轻巧,现在的版本的Java MC内存占用不少,更别说开Mod服了,服务器内存也至少得8G起步,这样下来一个月的开销也不少了,我问了问他家里有没有闲置的电脑,毕竟内网穿透咱们还是搞得起的,用自己电脑跑个MC服务端穿透出去,然后一直把电脑的电插着也算当服务器用了(汗~

果真我LLJ有一台闲置的HUAWEI笔记本放在学校,在经过同意之后也是二话不说提前返校开始了折腾。

装系统(图方便直接用手机拍了)

物色电脑配置

开机我直接进Bios了,电脑的配置不是很理想,毕竟是几年前的老电脑了,不过开个MC服绰绰有余了,只有8G内存就不用Windows了,刷个轻量点的Linux使用以免爆内存。

制作启动盘

我选用的系统是Debian12,U盘做启动盘的话用8G的就够了。

先去官网下ISO文件(https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/

启动盘制作工具我用的UltraISO(Gitcode上面开源工具)

前置准备工作都准备好了之后直接把U盘插上电脑,打开软件点开ISO往U盘里面写入即可

开刷

写入完成了直接把U盘拔下来插到HUAWEI笔记本上面(这笔记本居然没有USB口子

不过问题不大,我们使用转接口,完事重新进一下BIOS,把启动项设置成我们的U盘就行了

直接选择图形化界面安装,后面也是一路顺利直接刷上了!!

这个圆润的UI很漂亮啊我是真的喜欢!!!

装MC服务端

装环境

Java版MC肯定得装Java啊,所以第一步先把Java环境装好,Java的版本取决于你要玩哪个版本的MC,我这里选的是最新版的原版即1.21.1版本,Java装的是Adoptium的21.0.4(https://adoptium.net/zh-CN/

环境我是手动装的,当然你也可以apt直接装,那样更方便

首先把Java的tar压缩包下载到服务器上面,你可以直接到官网下,也可以用终端命令

wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.tar.gz

解压一下,然后把它移到新文件夹,记住这个路径我们要配置环境变量,我这里是放在/usr/lib/jvm/下面

tar -zxvf OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.tar.gz
mv jdk-21.0.4+7 /usr/lib
cd /usr/lib
mkdir jvm
mv jdk-21.0.4+7 /jvm

完事我们改一下环境变量,把配置写进去就像下面这样

nano .bashrc

export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4+7
export PATH=SJAVA HOME/bin:$PATH

保存了之后重启环境变量,输入命令查看Java版本就可以看到已经配置好了

source  /etc/profile
java -version
配置并启动MC服务端核心

服务端核心(简称核心,有时也被叫做服务端)是指开服时用于直接或间接启动Minecraft服务器的一类文件,文件名一般以 .jar 结尾。 一般情况下,我们使用 CMD/PowerShell (可执行文件名以.bat为结尾)或是 *nix Shell (可执行文件名以.sh为结尾)运行这样的程序以启动服务器。而且核心的种类非常多,除了官方的还有很多二开的优化的核心,我们这里玩的原版服,就选用Paper做核心,他是Spigot 核心的的进一步优化版本,在相关算法方面,较 Spigot 有所提高,优化 TPS 等,支持 CraftBukkit 和 Spigot 插件,API 没有太大修改。如果你要玩模组服的话,可以选用Forge,Fabric这些核心,他们支持安装模组。

首先我们去Paper的官网把服务端核心下载到服务器上面,最好单独创建一个文件夹放这些文件(https://papermc.io/downloads/paper

下载好之后我们ls可以看到一个.jar文件,可以用以下命令启动它

java -Xmx8192M -Xms8192M -jar <服务器核心的文件名> nogui

#Xmx8192M: 设置 JVM 使用的最大内存为8192MB。这个参数限制了服务器在运行过程中最多使用多少内存。
#Xms8192M: 设置 JVM 启动时的初始内存为8192MB。这个参数保证了服务器在启动时有足够的内存。
#nogui: 表示启动服务器时不显示图形用户界面 (GUI),这通常用于在资源有限的环境下运行服务器,比如在命令行或远程服务器上。

启动了之后它会自动配置下载一些内容,然后需要我们同意一个eula的用户协议,我们使用ls指令可以看到一个eula的txt文件,修改里面的内容

nano eula.txt

#把里面的false改为true

保存退出之后我们重新输入启动命令就会开始生成世界了。

同时,目录下还有一个sever.properties文件,这里面是关于服务器游戏的一些设置,如下:

类型

默认值

说明

allow-flight

布尔值

false

允许生存模式的玩家飞行,如果有 Mod 允许这么做的话

当 allow-flight 开启时,作弊可能会更常见,因为这会使得作弊更容易。创造模式不受影响。

false - 不允许飞行(在空中滞留 5 秒以上的玩家会被踢出)。

true - 允许飞行。

allow-nether

布尔值

true

允许玩家进入下界。

false - 下界传送门不工作。

true - 允许玩家通过传送门进入下界。

announce-player-achievements

布尔值

true

当某个玩家获得成就时发送广播。

difficulty

整数(0-3)

1

定义服务器的难度(如怪物伤害,饥饿的处理和药水对玩家的效果)。

0 - 和平

1 - 简单

2 - 普通

3 - 困难

enable-query

布尔值

false

允许服务器开启针对 GameSpy4 协议的监听。用于收集服务器信息。

enable-rcon

布尔值

false

允许远程连接到游戏控制台。

enable-command-block

布尔值

false

允许命令方块。

force-gamemode

布尔值

false

强制玩家以默认的游戏模式(Gamemode)进入。

false - 玩家加入时的游戏模式是上次他们退出时的游戏模式。

true - 玩家总是以默认游戏模式加入游戏。

gamemode

整数(0-3)

0

定义游戏模式。

0 - 生存

1 - 创造

2 - 冒险

3 - 旁观

generate-structures

布尔值

true

是否在新区块中生成结构(例如村庄)。

false - 不会生成结构。

true - 会生成结构。

注意:即使设置为 false,地牢依然会生成。

generator-settings

字符串

blank(空的)

这个设置用于自定义世界生成。访问 Minecraft Wiki 的 Superflat 和 Customized 页面(外部链接)以获得设置样例。

hardcore

布尔值

false

如果设置为 true,玩家在死后会被永久封禁。

level-name

字符串

world

“level-name”选项会被用于世界的名称和文件夹的名称。你可以将已有的世界目录拷贝过来,并修改这里和目录名一致以载入世界。

单引号(')等符号可能需要在之前使用反斜线(\)转义。

level-seed

字符串

blank(空的)

添加一个地图种子,就像在单机模式中那样。

有一些地图种子的例子,比如:minecraft,404,1a2b3c。

level-type

字符串

DEFAULT

确定生成地图的类型。

DEFAULT:标准的世界生成,有山脉、山谷、水流等。

FLAT:超平坦世界,主要用于建筑。

LARGEBIOMES - 与 DEFAULT 类似,但所有生物群落的尺寸都变得大了一些。

AMPLIFIED - 与 DEFAULT 类似,但世界生成高度限制增加。

CUSTOMIZED - 与 DEFAULT 一样,除了生成地图时使用 generator-settings 的预设这一点。

max-build-height

整数

256

允许建造方块的最高高度。地形也会在高度限制内十分自然的生成。

max-players

整数(0-2147483647)

20

同一服务器可以同时容纳玩家的最大数目。越多玩家同时在线需要更多的服务器资源,请注意:有 OP 权限的玩家将不被计算在线玩家数目中,但 OP 不能在服务器满人的情况下加入游戏。如果你把这个值写的特别大,游戏客户端就会 Boom 地一声爆炸。

max-tick-time

整数(0-(2^63-1))

60000

单个 tick 的最长等待时间。如果服务器发现超过这个值,将会输出以下消息:“A single server tick took 60.00 seconds (should be max 0.05); Considering it to be crashed, server will forcibly shutdown”,接着就会调用 System.exit(1) 来结束服务器运行。

-1 - 禁用此功能

max-world-size

整数(1-29999984)

29999984

这设置了世界边界包含的最大方块数量,也就是设置了世界半径。虽然把该数字调大在命令输出结果上看不出什么异常,但是游戏潜在的世界边界并不会发生变化,也就是说,设置 max-world-size 大于默认值将什么都不会发生。

示例:

  • 设定世界大小为 1000 会让你的世界的长宽为 2000x2000

  • 设定世界大小为 4000 会让你的世界的长宽为 8000x8000

motd

字符串

A Minecraft Server

服务器名字下的那一行小字(服务器描述)。

  • MOTD 支持颜色代码和字体代码。

  • 如果 MOTD 有超过 59 个字符,那么客户端显示 MOTD 时可能会出现一个通讯错误。

network-compression-threshold

整数

256

默认情况下它允许大小不超过 n-1 字节的数据包正常传输,而不小于 n 字节的数据包将会被压缩。因此把该数字调小会导致游戏进行更多的数据包压缩,不过对于小的数据包来说,压缩这一操作并不会使数据包变小多少,甚至可能还会变大。

-1 - 禁用压缩

0 - 全部压缩

注意:根据以太网规范的要求,小于 64 字节的数据包应填充为 64 字节。因此,将这个值设置为小于 64 并不是什么好的做法。同时也不建议超过 MTU(最大传输单位),通常为 1500 字节。

online-mode

布尔值

true

服务器会根据 Minecraft 的帐户数据库检查准备连入的玩家是否合法。只有你的服务器没有连接到互联网时才应把它设置为 false,因为如果服务器无法连接到 minecraft.net 的话,所有玩家都会被拒之门外。如果设置为 false,黑客可以很容易地使用假帐户连入你的服务器!如果服务器对盗版玩家开放,也请把他设置为 false,那么服务器就会在离线模式下运行,并允许拥有没有正版授权的 Minecraft 副本的玩家进入服务器。

false - 已禁用。服务器不会检查玩家是否为正版。

true - 服务器将会检查玩家是否为正版。

op-permission-level

整数(1-4)

4

设置 OP 的权限等级。每个等级也包含比其低等级的权限。

1 - OP 可以绕过出生点保护.

2 - OP 可以使用 /clear、/difficulty、/effect、/gamemode、/gamerule、/give、和 /tp,并且可以编辑命令方块。

3 - OP 可以使用 /ban、/deop、/kick、和 /op。

4 - OP 可以使用 /stop。

player-idle-timeout

整数

0

该功能将在值不为 0 时启用。如果玩家持续闲置超过这个分钟数对应的时间,那么它被自动踢出。

注意:有时玩家闲置时间将会被重置,例如当服务器接收到以下数据包时:

  • 102(0x66)WindowClick

  • 108(0x6c)ButtonClick

  • 130(0x82)UpdateSign

  • 14(0xe)BlockDig

  • 15(0xf)Place

  • 16(0x10)BlockItemSwitch

  • 18(0x12)ArmAnimation

  • 19(0x13)EntityAction

  • 205(0xcd)ClientCommand

  • 3(0x3)Chat

  • 7(0x7)UseEntity

pvp

布尔值

true

启用服务器的 PVP,玩家们就可以互相伤害了。

false - 玩家们不能互相伤害(也就是 PVE 模式)。

true - 来啊,互相伤害啊。

注意:由别的玩家制造的非直接伤害(如被别人的岩浆烧/TNT爆炸/水淹/沙子盖住)在 PVP 关闭的情况下还是有伤害的。

query.port

整数(1-65534)

25565

设置查询服务器的端口(参见 enable-query

rcon.password

字符串

blank(空的)

设置 RCON 远程连接的密码。

rcon.port

整数(1-65534)

25575

设置 RCON 远程连接的端口。

resource-pack

字符串

blank(空的)

设置资源包的路径。玩家可以选择是否使用服务器提供的资源包。

resource-pack-hash

字符串

blank(空的)

资源包的 SHA-1 值。请将其填写为小写十六进制。建议指定这个值。这不仅用于验证资源包的完整性,而且提高了缓存的有效性和可靠性。

server-ip

字符串

blank(空的)

如果你想把你的服务器绑定到特定的 IP 上去请设置这一项。强烈建议将这一项留空。

server-port

整数(1-65534)

25565

设置服务器要监听的端口。如果你的服务器位于一个使用了 NAT 的网络环境中(没有公网 IP 或者在防火墙之后),请记得添加端口转发。

snooper-enabled

布尔值

true

设置服务器是否定期向 http://snoop.minecraft.net(外部链接)发送 snoop 数据。

false - 不发送数据。

true - 发送数据。

spawn-animals

布尔值

true

设定动物是否生成。

false - 所有动物都会立刻消失,并且不再生成。

true - 动物跟往常一样正常生成。

提示:如果你的卡顿和延迟主要来源于此,请设置为 false。

spawn-monsters

布尔值

true

设置敌对生物是否能够生成。

false - 所有怪物都会立即消失,并且不再生成。

true - 怪物跟往常一样生成:在黑暗中或是在晚上生成。

如果你设置难度为和平模式,该选项无效。

提示:如果你的卡顿和延迟主要来源于此,请设置为 false。

spawn-npcs

布尔值

true

决定村民是否生成。

true - 启用。将会生成村民。

false - 禁用。没有村民会生成。

spawn-protection

整数

16

决定出生点保护半径。 0:保护出生点脚下的那个方块。 1:保护出生点附近的 3x3 范围。 2:保护出生点附近的 5x5 范围。 以此类推。 在第一个玩家进入服务器之前,出生点保护不会启用。如果你的服务器没有任何一个 OP,那么也不会启用。

use-native-transport

布尔值

true

Linux 服务器性能改进:在 Linux 上优化数据包发送及接收。

false - 已禁用。禁用 Linux 数据包收发优化。

true - 已启用。启用 Linux 数据包收发优化。

view-distance

整数

(3-15)

10

设置服务端世界发送给客户端的世界数据的多少,以距离玩家设置的以区块为单位的半径为准。它将决定服务端的视距。

10 是默认值。如果你感觉服务器卡顿,请减小这个值。

white-list

布尔值

false

开启服务器白名单。参见管理白名单页面。白名单开启时不在白名单内的玩家不能进入服务器。例如,你可以用于自己的私人服务器。如果你只想让你钦定的朋友进入,那么请把他们加入到白名单内。

false - 不使用白名单。

true - 文件 whitelist.json 将用于玩家白名单。

注意:游戏内钦定的 OP 会被自动加入到这个列表里,所以你不需要再次把他们加入进来。

核心启动后在玩家进入世界之后我们可以看到该玩家的用户名,在核心运行界面输入op (用户名)可以给予该玩家管理员权限,即可以输入作弊指令。

至此已经部署完成了,再给服务器25565端口配置个内网穿透就可以和朋友远程畅玩了,不得不说有一点折腾,不过现在开服完完全全不用这么麻烦了,自己部署的话还可以用一个名为MCSM的面板,全程可视化面板操作,只需要鼠标点一点就行了,更甚至还有卖面板服的游戏云,你只需要花钱买一个面板就行了,进入面板自己配置好就可以和朋友一起玩了,雨云好像就有这种游戏云售卖,腾讯云之前我也看到过。