MC群组服开服教程系列二: 核心端搭建
核心端的选择
市面上的核心端还是比较多的。这里简单列举几个比较知名的。
官方核心
Minecraft Server 是 Mojang 官方制作的原版服务端,更新非常快,基本上和 Minecraft 客户端版本同时发布,不能安装任何 Mod 和插件,只能够使用原版的命令和物品,适合基友服联机使用。
下载地址: https://www.minecraft.net/en-us/download/server
Paper核心
Spigot 的进一步优化版本,在相关算法方面,较 Spigot 有所提高,优化 TPS 等,支持 CraftBukkit 和 Spigot 插件,API 没有太大修改。
核心下载地址:paper
插件下载地址:paper plugins bukkit plugins
CatServer
Bedrock Server
Sponge Forge
核心对比
核心名字 | 适合场景 | |
官方核心 |
10人以下联机 不需要插件,mod的 |
|
Paper |
百人或者几十人场景联机 追求性能,比较推荐 |
|
CatServer |
同时使用mod和插件的。 | |
Bedrock Server |
官方基岩,不需要插件,mod的 | |
Sponge Forge |
mod服重度推荐 |
我们本系列主要是java的纯净群组服开发教程,选择paper来进行安装说明。
Paper的下载
paper的下载需要从paper的官方地址进行下载,地址为:https://papermc.io/downloads。截止当前日期2023.01.12,最高的核心版本为1.19.3。我们选择最新的版本进行下载。
JAVA的安装
paper的java语言编写的,启动需要java的运行时环境,我们需要按照我们下载的版本选择合适的java版本。具体的版本可以参考官方文档: https://docs.papermc.io/paper/getting-started
Paper Version | Recommended Java Version |
---|---|
1.8 to 1.11 | Java 8 |
1.12 to 1.16.4 | Java 11 |
1.16.5 | Java 16 |
1.17.1-1.18.1+ | Java 17 |
通过表格我们知道1.19.3版本适合采用Java17的环境。需要去JAVA的官方地址进行下载。https://www.oracle.com/java/technologies/downloads
我这里使用的操作系统是centos系统,所以我选择一个x64 RPM Package下载地址为: https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
具体操作如下
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm yum install -y jdk-17_linux-x64_bin.rpm java --version
paper的安装和启动
paper的安装官方教程: https://docs.papermc.io/paper/getting-started
具体操作如下
# 创建一个主城(zhucheng)文件夹 mkdir zc # 进入目录 cd zc/ # 将下载好的paper核心移动到这个目录 cp ~/paper-1.19.3-376.jar . # 确认文件移动过来了 ls -l # 第一次尝试启动下 java -jar paper-1.19.3-376.jar # 修改eula文件,遵守协议 sed -i 's@eula=false@eula=true@g' eula.txt # 确认文件修改完毕 cat eula.txt # 在此尝试启动下 java -jar paper-1.19.3-376.jar # 看下默认的配置主配置文件 cat server.properties # 这里按照我们规划的端口,进行修改端口 # 这里按照我们 sed -i 's@server-port=25565@server-port=33301@g' server.properties # 修改服务器为离线服务器,你要开正版的话,就不需要改这个了。 sed -i 's@online-mode=true@online-mode=false@g' server.properties # 尝试再次启动 java -jar paper-1.19.3-376.jar
第一次启动后大概是如下日志
[root@mc zc]# java -jar paper-1.19.3-376.jar Starting org.bukkit.craftbukkit.Main System Info: Java 18 (Java HotSpot(TM) 64-Bit Server VM 18.0.2.1+1-1) Host: Linux 4.18.0-408.el8.x86_64 (amd64) Loading libraries, please wait... [22:32:06 INFO]: Building unoptimized datafixer [22:32:07 INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD' [22:32:08 INFO]: Loaded 7 recipes [22:32:08 INFO]: Starting minecraft server version 1.19.3 [22:32:08 WARN]: **************************** [22:32:08 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED. [22:32:08 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS. [22:32:08 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/ [22:32:08 WARN]: **************************** [22:32:08 INFO]: Loading properties [22:32:08 INFO]: This server is running Paper version git-Paper-376 (MC: 1.19.3) (Implementing API version 1.19.3-R0.1-SNAPSHOT) (Git: 1719345) [22:32:08 INFO]: Server Ping Player Sample Count: 12 [22:32:08 INFO]: Using 4 threads for Netty based IO [22:32:08 INFO]: [ChunkTaskScheduler] Chunk system is using 1 I/O threads, 8 worker threads, and gen parallelism of 8 threads [22:32:08 INFO]: Default game type: SURVIVAL [22:32:08 INFO]: Generating keypair [22:32:08 INFO]: Starting Minecraft server on *:33301 [22:32:08 INFO]: Using epoll channel type [22:32:08 INFO]: Paper: Using libdeflate (Linux x86_64) compression from Velocity. [22:32:08 INFO]: Paper: Using OpenSSL 1.1.x (Linux x86_64) cipher from Velocity. [22:32:08 INFO]: Server permissions file permissions.yml is empty, ignoring it [22:32:08 WARN]: **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE! [22:32:08 WARN]: The server will make no attempt to authenticate usernames. Beware. [22:32:08 WARN]: While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose. [22:32:08 WARN]: To change this, set "online-mode" to "true" in the server.properties file. [22:32:08 INFO]: Preparing level "world" [22:32:09 INFO]: Preparing start region for dimension minecraft:overworld [22:32:09 INFO]: Time elapsed: 58 ms [22:32:09 INFO]: Preparing start region for dimension minecraft:the_nether [22:32:09 INFO]: Time elapsed: 14 ms [22:32:09 INFO]: Preparing start region for dimension minecraft:the_end [22:32:09 INFO]: Time elapsed: 9 ms [22:32:09 INFO]: Running delayed init tasks [22:32:09 INFO]: Done (0.799s)! For help, type "help" [22:32:09 INFO]: Timings Resetl
联机测试下
服务器创建完毕了,我们需要联机测试下。 启动一个mc客户端(比如hmcl),选择一个1.19.3的客户端进行连接。
效果图如下
常见问题
Fabric又是什么? 他和核心端比如paper是什么关系?
fabric一般是客户端mod的加载的, 当然了这个也可以作为服务端核心来的,需要配合mod一起工作, paper那就是纯粹的服务端核心,一般配合plugins工作。
配置说明
其他
管理脚本优雅化
一个问题,每次启动都很麻烦是不是,能不能写个脚本,我每次执行一个脚本就可以启动服务呢。
这里我提供一个我服务器的一个脚本给大家。
#!/bin/bash # chkconfig: 2345 20 80 . /etc/init.d/functions name=$(echo "$(basename $0)" |sed 's@mc_@@g') echo "mc=$name" java_cmd="/usr/bin/java" mc_instance_dir="/home/mc/instances" log_file=$mc_instance_dir/$name/nohup.log jar_name=" $name.jar" get_jvm(){ local area=$1 case $area in bc) echo " -Xms4G -Xmx4G ";; vel) echo " -Xms4G -Xmx4G ";; hub) echo " -Xms4G -Xmx4G ";; d1) echo " -Xms4G -Xmx4G ";; d2) echo " -Xms4G -Xmx4G ";; s1) echo " -Xms16G -Xmx16G ";; s2) echo " -Xms16G -Xmx16G ";; s3) echo " -Xms16G -Xmx16G ";; s4) echo " -Xms16G -Xmx16G ";; z1) echo " -Xms16G -Xmx16G ";; c1) echo " -Xms16G -Xmx16G ";; *) echo " -Xms1G -Xmx2G ";; esac } base_dir=${mc_instance_dir}/$name generate_sh(){ cd ${base_dir} if [ "X$name" == "Xs5" ] ; then return ; fi echo "/usr/bin/java $(get_jvm $name) -jar "${jar_name}" " >start.sh } mc_exist(){ ps aux |grep "${jar_name}" |grep -v grep >/dev/null } status(){ mc_exist if [ $? -eq 0 ]; then echo "$name running" else echo "$name stopped" fi } start() { cd $base_dir generate_sh tmux new-session -d -s $name echo "starting $name" conn "cd ${base_dir}" conn "bash start.sh" } conn(){ tmux send-keys -t ${name} "$1" C-m } attach(){ tmux attach-session -t ${name} } stop() { end_cmd="" if [ "X$name" == "Xbc" ] || [ "X$name" == "Xtest_bc" ] ; then end_cmd="end " elif [ "X$name" == "Xvel" ] || [ "X$name" == "Xtest_vel" ] ; then end_cmd="end " else end_cmd="stop" conn "bc 分区$name准备重启5s..." sleep 5 conn "save-all" sleep 5 fi conn "${end_cmd}" for i in $(seq 1 30); do echo "while $i=======" mc_exist ret=$? echo $ret if [ $ret -ne 0 ] ; then break else sleep 1 fi done stop_kill echo "kill session $name" tmux kill-session -t $name echo "$name stopped" } stop_kill(){ cd $base_dir ps aux |grep "${jar_name}" |grep -v grep |awk '{print $2}' |while read pid ; do kill -9 $pid done } case "$1" in conn) cmd="$2" conn "$cmd" ;; start) start ;; stop) stop ;; restart) stop start ;; status) status ;; attach) attach ;; *) echo "Usage: $0 {start|stop|status|restart|conn|attach}" esac exit 0
这个脚本是一个通用脚本的, 后面其他的分区都可以使用的。
posted on 2023-01-14 13:00 LinuxPanda 阅读(1511) 评论(0) 编辑 收藏 举报