扩大
缩小

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

CatServer是1.12.2的Forge+Bukkit+Spigot服务端核心,国内最早开发的高版本核心, 支持大部分MOD和插件同时稳定运行。
核心下载地址: catserver
插件下载地址:paper plugins  bukkit plugins
mod下载地址: forege mods 

Bedrock Server

Bedrock 是 Minecraft PE 基岩版,也叫携带版或手机版,Bedrock Server 是 Mojang 官方提供的服务端。
Bedrock Server 不能安装插件,只能用于纯净游戏联机使用。支持多平台联机。
核心下载地址:bedrock

Sponge Forge

Sponge 是一个全新的服务端,支持 Sponge 的专用插件,可装 Mod,兼容性比 Cauldron 相比提高了不少,适合开 MOD 服,支持的版本非常高,是目前支持 MOD 的服务端里兼容版本最高的服务端。
但是 Sponge 本身不支持 Bukkit 插件(即使有兼容层,效果也不是很好,只能支持一般的插件),需要服务器的配置比较高,启动速度不佳。
核心下载地址: sponge
mod下载地址: forege mods 

核心对比

MC常见核心端对比
核心名字 适合场景  

官方核心

 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 VersionRecommended 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 
View Code

这个脚本是一个通用脚本的, 后面其他的分区都可以使用的。 

 

posted on 2023-01-14 13:00  LinuxPanda  阅读(1511)  评论(0编辑  收藏  举报

导航