网络应用

如何在家搭建一个Minecraft服务器

前言

随着游戏版本的不断提升,游戏服务端对硬件的要求也越来越高。以minecraft-1.14.*为例,服务端满载运行时使用的内存竟超过了2G。如果想向数据中心租用配置能够胜任的服务器,想必是一笔不小的开销(Mojang官方的realm售价也高达$7.99/月)。从成本的角度考虑,用自己的电脑来运行minecraft服务端反而是个不错的选择。这篇教程将会介绍如何在pc上搭建Minecraft Java Edition服务器(在windows10 v1809下演示)。

视频教程

安装Java环境

Minecraft服务端需要在Java环境下运行(推荐Java SE8,其他版本未测试),如果你的电脑还没有安装过Java,请前往Oracle官网下载最新的Java安装包[官网链接|直接下载]。下载完成并安装后,还需要配置环境变量。右键"此电脑",选择"属性",在弹出的窗口中找到"高级系统设置-环境变量"。
java-1.jpg
java-2.JPG
之后,在系统变量中新建


变量名: JAVA_HOME
变量值: C:\Program Files\Java\jdk1.8.0_<你的Java版本>

java-3.JPG
再编辑两个已有的系统变量(如没有则手动新建)


变量名: CLASSPATH
变量值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;    /* 添加在原有变量值开头 */

变量名: PATH
变量值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;    /* 添加在原有变量值开头 */

全部添加完成后,点 确定-应用 来使其生效。

最后,打开命令提示符(Win键+R,输入cmd回车)来检测配置是否正确。再窗口中依次输入"java","javac","java -version"。正常情况下,前两条命令会返回java以及java编译器的使用方法(会很长),第三条会显示当前java版本。如果系统没有提示"找不到命令",则说明配置成功。

下载minecraft服务端

前往Mojang官网下载最新的服务端[官网链接|直接下载],下载完成后进入目录,使用以下命令运行

java -Xmx2048M -Xms2048M -jar server.jar nogui    /* -Xmx -Xms用于指定使用内存大小(MB),可根据实际使用情况调整 */

首次运行会需要签署用户协议。先关闭服务端并前往其所在目录,我们会发现目录下已经自动生成了多个文件。寻找一个名为"eula.txt"的文件,打开,在结尾添加一行

eula=true

并保存,即成功签署用户协议。同时我们还会看到服务器配置文件"server.properties",可根据使用情况编辑

// 参数介绍翻译自Mojang官方文档,地址https://minecraft.gamepedia.com/Server.properties
#Minecraft server properties
#Mon Nov 25 22:26:09 EST 2019
spawn-protection=16
max-tick-time=60000
query.port=25565
generator-settings=
force-gamemode=false    /* 是否强制玩家以默认游戏模式游玩 */
allow-nether=true    /* 是否允许玩家前往下界 */
enforce-whitelist=false
gamemode=survival    /* 游戏模式,包括survival、creative、adventure、spectator */
broadcast-console-to-ops=true
enable-query=false    /* 是否启用GameSpy4协议 */
player-idle-timeout=0    /* 玩家n分钟无任何操作将被自动踢出,0为关闭自动踢出 */
difficulty=easy    /* 游戏难度,包括和平(peaceful)、简单(easy)、普通(normal)、困难(hard) */
spawn-monsters=true    /* 是否生成怪物 */
broadcast-rcon-to-ops=true
op-permission-level=4
pvp=true    /* 允许玩家互相伤害 :D */
snooper-enabled=true
level-type=default    /* 地图生成模式,包括default、flat、largebiomes、amplified、buffet */
hardcore=false    /* 硬核模式(玩家死亡后会进入spectator模式),会覆写设定的游戏难度 */
enable-command-block=false    /* 是否启用命令方块 */
max-players=20    /* 服务器最大支持玩家,可输入0~2147483647 */
network-compression-threshold=256
resource-pack-sha1=
max-world-size=29999984    /* 最大世界范围(半径),比如,1000即为2000x2000棋盘地图 */
function-permission-level=2
rcon.port=25575
server-port=25565    /* 服务器端口 */
server-ip=           /* 服务器地址,默认留空即可 */
spawn-npcs=true    /* 是否生成npc */
allow-flight=false    /* 是否允许玩家飞行 */
level-name=world    /* 世界的名字(同时也是存放世界文件夹的名字),更改名字会让服务器尝试加载不同文件夹中的地图 */
view-distance=10    /* 可视距离,如服务器连接卡顿,可尝试降低 */
resource-pack=
spawn-animals=true    /* 是否生成动物 */
white-list=false
rcon.password=
generate-structures=true    /* 是否生成建筑(包括村庄等) */
max-build-height=256    /* 最大建筑高度 */
online-mode=true    /* 服务器是否开启广域网保护(仅允许正版玩家连接),谨慎切换,可能导致玩家数据丢失 */
level-seed=    /* 世界种子 */
use-native-transport=true
prevent-proxy-connections=false
enable-rcon=false    /* 是否允许远程访问服务端终端 */
motd=A Minecraft Server    /* 用户看到的服务器名字 */

目前,你已经拥有一个可以在局域网内运行的minecraft服务器了。

允许广域网连接

如果想要让不在同一网络下的玩家也可以连接服务器,我们需要配置相应的防火墙规则。

如果你的宽带拥有公网IP,并且你有路由的管理权限,可以前往路由管理页面添加端口转发(检测方法,查看路由器拨号获得的IP与自家宽带打开百度搜索"IP"返回的结果是否一致,一致则说明分配了公网IP)。假设运行minecraft服务端的电脑本地IP为192.168.1.100,服务端使用默认的25565端口,那我们应该添加一项tcp转发记录192.168.1.100:25565至外网某端口(可以同样填默认的25565端口,或其他端口,但玩家在连接时必须输入正确的端口)。假如你使用的是普通的家庭宽带,为了避免公网IP变动,可以使用动态域名解析DDNS。大多数路由器都内置了DDNS提供商(管理面板里找一下),如果没有可以在电脑上安装阿里云或腾讯云的DDNS客户端。启用DDNS后,无论公网IP怎样变动,只要访问域名就可前往服务器(域名解析可能存在一定延迟)。
router.jpg
如果你没有路由管理权限(校园网,公用网络,企业网络等),或宽带没有公网IP,可以使用内网穿透软件(内网穿透的成本还是比直接租用mc服务器要低的)。内网穿透的配置方法可以参考这篇文章
nps.jpg
同样,添加一个tcp隧道,把运行minecraft服务端电脑的25565端口转发到外网的某端口,玩家们就可以通过内网穿透提供的公网IP来访问minecraft服务器了。
mc.jpg

回复

  1. 爱游水的小于 爱游水的小于
    Chrome 97 10

    怎么下载1.16服务器

  2. 爱游水的小于 爱游水的小于
    Chrome 97 10

    咋安插件??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

This is just a placeholder img.