搭建环境&前言

本文搭建环境:
腾讯云学生机1C2G1M
系统:Centos7.5
这个配置足够大约5-8人多人联机纯净服

按照多年开服经验来看,纯净服平均每位玩家在线时候带宽占用0.1Mbps左右,而Mod服大约1.5倍即0.15Mbps/每人
当然,mod服内存以及CPU占用要远远大于纯净服
如果你要开商业服,我建议你放弃国内的VPS提供商,比如阿里云这类,尤其是腾讯云,CPU性能太差,不适合开MC
Minecraft服务器一般只会占用1个线程,所以以单线程性能强的CPU往往单服在线人数可以更高
如果要开商业服,在线人数不多的,并且收入也不是很多的,建议还是淘宝买面板服,也就是传说中的Multicraft面板服
至于商家,建议X喵这种,如果是X牛、X特这种就算了吧,洋垃圾X5650 128G开100多个服务器,不卡才怪

如果你收入真的很多,在线人数也很多,那建议托管独立服务器到机房

如果没钱还想用独立服务器,建议还是洗洗睡吧,目前看到的最低托管价格某宿迁水防20M双线一个月450,别说X鸟云,谁用谁后悔,这只是托管费用,服务器另外还要钱

安装Oracle Java

回到正题,为什么要用Oracle的Java,自带源里的openJDK不好吗
按我个人而言,我不建议开Minecraft服务器用openJDK,这会带来各种莫名其妙的问题,插件编译,服务端编译也一般用的是Oracle Java,所以为了防止后期出现各种各样莫名其妙的问题,我建议还是不要去用openJDK开Minecraft服务器了

Oracle也提供了rpm文件,所以在Centos安装Java也不难
使用以下命令下载java(截至本文最新版jdk8为u202),以下命令已包括Cookie,否则无法用wget直接下载

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "https://download.oracle.com/otn-pub/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.rpm"

由于Oracle的服务器在国外,所以国内在晚上高峰时候下载可能会慢一点,也可以自己本地下好用winscp之类的sftp工具上传到服务器中

使用以下命令安装java

yum localinstall jdk-8u202-linux-x64.rpm

期间会询问是否安装,按y后回车稍微等一会儿就自动安装完成了

[[email protected]_0_12_centos ~]# yum localinstall jdk-8u202-linux-x64.rpm
Loaded plugins: fastestmirror, langpacks
Examining jdk-8u202-linux-x64.rpm: 2000:jdk1.8-1.8.0_202-fcs.x86_64
Marking jdk-8u202-linux-x64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package jdk1.8.x86_64 2000:1.8.0_202-fcs will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package    Arch       Version                   Repository                Size
================================================================================
Installing:
 jdk1.8     x86_64     2000:1.8.0_202-fcs        /jdk-8u202-linux-x64     294 M

Transaction Summary
================================================================================
Install  1 Package

Total size: 294 M
Installed size: 294 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2000:jdk1.8-1.8.0_202-fcs.x86_64                             1/1
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
  Verifying  : 2000:jdk1.8-1.8.0_202-fcs.x86_64                             1/1

Installed:
  jdk1.8.x86_64 2000:1.8.0_202-fcs

Complete!

验证Java是否安装完成
输入java -version返回以下内容就表示安装完成了

[[email protected]_0_12_centos ~]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

下载服务端

这里我选择的是PaperSipgot的服务端,这是一个原版插件端,基于Spigot而来

项目地址:https://papermc.io/
构建服务器:https://papermc.io/ci/job/Paper/

需要注意的是,如果需要最新的1.13.2的服务端需要到https://papermc.io/ci/job/Paper-1.13/中下载,本文也使用的是最新的1.13.2的服务端

服务端在运行时候会在运行目录中生成一堆需要的文件夹和文件,所以我们先创建一个文件夹,mc改成你想要的文件夹名字就好了

mkdir mc

然后cd到创建的文件夹中

cd mc

下载最新服务端,同样的,由于服务器在国外,所以......Just Hold On

wget https://papermc.io/ci/job/Paper-1.13/lastSuccessfulBuild/artifact/paperclip.jar

启动服务端

我们首次启动直接java -jar paperclip.jar就可以了
因为首次并不会启动服务端,只会下载一些必须文件和要求同意EULA,下载文件还是那句话......

EULA是1.7.10之后的产物,那时候出了一起DCMA事件,这件事件导致CraftBukkit停更(如果使用BuildTool可以获得由Spigot提供的CraftBukkit),Spigot停止直接发布服务端,而是只能自己使用BuildTool下载源码以及编译服务端,以及Cauldron(MCPE)Mod服务端永远停在了1.7.10,感兴趣的可以自己搜索了解下
现在支持插件的Mod服只有Sponge,且不支持一且纯净服的插件(即使使用一些办法运行纯净插件,也会出现各类问题)

[[email protected]_0_12_centos mc]# java -jar paperclip.jar
Downloading original jar...
Patching original jar...
System Info: Java 1.8 (Java HotSpot(TM) 64-Bit Server VM 25.202-b08) Host:  Linux 3.10.0-957.5.1.el7.x86_64 (amd64)
Loading libraries, please wait...
[16:44:36 INFO]: Loaded 0 recipes
[16:44:36 INFO]: Starting minecraft server version 1.13.2
[16:44:36 WARN]: To start the server with more ram, launch it as "java -Xmx1024M -Xms1024M -jar minecraft_server.jar"
[16:44:36 INFO]: Loading properties
[16:44:36 WARN]: server.properties does not exist
[16:44:36 INFO]: Generating new properties file
[16:44:36 WARN]: Failed to load eula.txt
[16:44:36 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[16:44:37 INFO]: Stopping server
[16:44:37 INFO]: Saving worlds
[16:44:37 ERROR]: Caught previously unhandled exception :
[16:44:37 ERROR]: java.lang.IllegalArgumentException: Reader was not created with TerminalConsoleAppender.getTerminal()

我们会看到一行[16:44:36 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
这是告诉我们需要同意EULA才能开启服务器

输入vi eula.txt编辑eula.txt
eula=false改为eula=true

接着再次启动服务端,这次使用完整的命令

java -Xms256M -Xmx1G -jar paperclip.jar

Xms指的是最小内存,Xmx为最大内存,如果使用的32位java,Xmx最大只能到1G,根据实际情况进行修改启动命令

服务端就会开始释放所需要的文件,生成地图等

当出现了Done (20.969s)! For help, type "help"时候你就可以连上服务器了

不过如果你不是正版玩家,连上会提示无效的会话(请重启游戏)
这是因为服务器默认是开启正版登陆的,这种情况下如果是Offline(盗版)的客户端连接服务器就会出现该提示

输入stop关闭服务器,然后是输入vi server.properties,找到online-mode=true
将其改成online-mode=false再启动服务器,盗版客户端也可以进入服务器了

进阶:使用Screen以及脚本启动以及控制服务器

没有screen的同学,第一件事是yum -y install screen

为什么要用screen?如果不使用screen,你只要一断开ssh连接,或者关闭终端窗口,你的服务器就会被强制关闭

那我为什么不用./start.sh &来运行脚本?毕竟minecraft的服务器控制台是可以输入指令来控制服务器的,并非一无是处,So......

首先输入screen -S mc新建一个窗口,然后在Minecraft服务端的根目录创建启动脚本
输入vi start.sh,内容为

#/bin/sh
java -Xms256M -Xmx1G -jar paperclip.jar

然后赋予脚本运行权限chmod +x start.sh
这样你就可以直接用./start.sh来启动服务器了

在screen中,你可以按下Ctrl+A+D来暂时关闭窗口
重新打开窗口只需screen -r mc即可切换回来

server.properties解释

#Minecraft server properties
#Sat Feb 23 16:56:43 CST 2019
generator-settings=  #地图生成设定
force-gamemode=false  #是否强制游戏模式
allow-nether=true  #是否允许地狱
enforce-whitelist=false  #是否开启强制白名单,开启后如果/hitelist on,不在白名单的玩家会被立即踢出游戏
gamemode=0  #游戏模式 0-生存 1-创造 2-冒险 3-旁观
broadcast-console-to-ops=true  #是否宣告提升管理员,开启后如果有玩家被提升为管理员,所有在线管理员都会收到消息
enable-query=false  #是否开启Query,这是一个UDP服务,可以从这个端口获取服务器信息,一般关闭
player-idle-timeout=0  #玩家挂机几分钟后踢出服务器,数值为分钟,0为关闭
difficulty=1  #难度,0-和平 1-普通 2-困难
spawn-monsters=true  #是否生成怪物
op-permission-level=4  #OP权限等级,详细见附录
pvp=true  #是否开启PVP
snooper-enabled=true  #是否开启统计数据
level-type=DEFAULT  #生成地图类型,详细见附录
hardcore=false  #是否开启极限模式,极限模式下死亡无法重生
enable-command-block=false  #是否开启命令方块,不了解的可以搜索了解下
max-players=20  #最大玩家数
network-compression-threshold=256  #数据包,大于等于N的数据包会被压缩后发送,-1禁用
resource-pack-sha1=  #材质包sha1值
max-world-size=29999984  #世界大小
server-port=25565  #服务器端口,如果改为25565以外的端口进入服务器需要加上:端口
server-ip=  #服务器监听ip,留空为监听所有ip
spawn-npcs=true  #是否生成NPC,如村民
allow-flight=false  #是否允许飞行,注意开启这个生存也不能飞,这是一个反作弊选项,false情况下如果玩家悬空超过5秒会被踢出游戏
level-name=world  #世界名字,地图生存完了就不要动了
view-distance=10  #视距
resource-pack=  #材质包地址,一般情况下留空即可
spawn-animals=true  #是否生成动物
white-list=false  #是否开启白名单
generate-structures=true  #是否生成建筑,如村庄
online-mode=true  #是否开启在线模式,开启后盗版玩家无法进入服务器
max-build-height=256  #最大建筑高度,这个数值不能大于256
level-seed=  #地图生成种子码
prevent-proxy-connections=false  #是否允许通过代理连接服务器
use-native-transport=true  #是否使用本地化翻译
enable-rcon=false  #是否启用rcon,这是一个远程控制协议,不了解情况下不要开启
motd=A Minecraft Server  #MOTD,就是服务器进入前列表上的提示

op-permission-level=4

设定OP的权限等级
1 - OP可以无视重生点保护。
2 - OP可以使用单人游戏作弊命令(除了/publish,因为不能在服务器上使用,/debug也是)并使用命令方块。命令方块和领域服服主/管理员有此等级权限。
3 - OP可以使用几乎所有多人游戏限定的命令(除第4级专用命令)
4 - OP可以使用所有命令,包括/stop、/save-all、/save-on和/save-off。

level-type=DEFAULT

设定世界类型
DEFAULT - 标准的世界带有丘陵,河谷,海洋等
FLAT - 一个没有特色的平坦世界,适合用于建设
LARGEBIOMES - 如同预设世界,但所有生态系都更大(仅快照12w19a,或正式版1.3之后可用)
AMPLIFIED - 如同预设世界,但世界生成高度提高(仅快照13w36a,或正式版1.7.2之后可用)
CUSTOMIZED - 自快照14w21b以來,服务器也支持自定义地形。使用方法是在generator-settings贴上代码。

Last modification:March 1st, 2019 at 08:23 pm
If you think my article is useful to you, please feel free to appreciate