跳过正文

Java MC服务器搭建

·3317 字·7 分钟· loading ·
技术教程 Minecraft
褐瞳さん
作者
褐瞳さん
Everyone is mania in general
目录

前言
#

我相信有很多 MC 玩家在拥有了自己的第一台服务器时都想要搭建一个属于自己的服务器,我买下第一台服务器时就是为了和小伙伴开黑 MC。因为可以说是零基础搭建的服务器,在此期间遇到了很多问题,所以想借此写一篇博客,用来帮那些也是第一次搭 MC 服务器的萌新。 本篇文章主要会说到 Liunx 服务器上 Java 纯净服和 Forge 服的搭建,还会简单说一下如何在服务器上将不同端口上的 MC 服务器分配到不同的三级域名上。 MC 的服务器主要为纯净服,Mod 服和插件服,因为插件服我并没有搭建过,所以就不在这里多做解释了。

纯净服搭建
#

需要准备的东西:

  1. 一台服务器,云服务器或者自己搭建的本地服务器都可,我的这里使用的是阿里云服务器,系统是 Ubuntu 22.04
  2. 纯净服的服务器核心
  3. 对应版本的 Java 1.17 及以上使用 Java16,以下使用 Java8,根据自己的服务器版本装对应的 Java 版本
  4. Xshell 和 Xftp,这俩软件的个人版是免费的,如果你的服务器上有安装宝塔,也可以直接使用宝塔

以上都准备好了就可以开始准备搭建你的纯净服服务器了

首先将你的服务器核心放进你的服务器文件夹,比如我的的核心是 1.12.2 的版本核心,放在了 /home/HeTong/Minecraft/1.12.2文件夹内。

接下来安装 Java,我第一次开服就在这里卡了很久,首先对应看你下载的 Java 版本是否正确,1.17 及以上的版本都需要 Java16 或者以上的版本,其他的用 Java8,如果你是 1.16.5 及以下的版本启动还有问题试试退到 Java8 更老的版本,比如我使用了 Java8 的 331 版本启动 1.12.2 却报错,换成 Java8 的 251 就好了,请对应版本下载 Jdk,比如我的的服务器就需要的是 jdk-8u251-linux-x64.tar.gz请对照自己的服务器版本下载对应的 Jdk,Java 的安装可以参照这篇文章

安装好了正确的 Java 版本后你就可以开始启动你的 MC 服务器啦,纯净服的启动十分的简单,直接输入

java -Xms**m -Xmx**m -jar <你的核心名字> nogui

就会开始启动了,在这其中,-Xms**m是你的最小分配给 MC 的运行内存,-Xmx**m是你分配给MC的最大运行内存,比如我的的是

java -Xms1G -Xmx1G -jar server-1.12.2.jar nogui

第一次启动肯定是不会直接启动的,需要你确定协议(EULA),你可以打开你的 Xftp,找到你的服务器核心的位置,里面有一个刚生成的「eula.txt」文件,右键使用记事本编辑,将 false改为 true

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Fri Jan 12 18:56:37 CST 2024
eula=false

然后除了eula还有一个文件需要修改,就是 server.properties,里面的参数在这篇文章有详解,一般我们需要改的有「online-mode」这一项,意思是是否启用在线模式,如果是 true,将只有正版玩家可以进入游戏。 现在你已经基本设定好了你的服务器属性了,再次输入

java -Xms**m -Xmx**m -jar server-*.*.*.jar nogui

你就会发现自己的服务器顺利启动了,ok啦!然后在控制台键入 op <你的ID>来赋予管理员权限给你自己

接下来你就可以邀请好友进入你的服务器了,如果你打算开一个小服用来开黑一起玩建议开启白名单,在控制台键入 whitelist on便开启了白名单

然后用 whitelist add <你的好友的ID>来添加白名单

那想停止服务器怎么办呢?直接在控制台键入 stop 就行了,当然你也可以在游戏内以 op 身份使用指令 /stop 来停止服务器。

当然我们不想每次启动服务器都输入那么长的指令,那我们可以写个简单的 shell 脚本,文件名为 run.sh,大概的内容是

#!/bin/bash

cd /your/minecraft/path/
screen -dmS <你想要的 screen 名字> java -Xms*G -Xmx*G -XX:+AggressiveOpts -XX:+UseCompressedOops -jar <mc核心文件名> nogui
echo "minecraft <MC 的版本> server started successfully"

如果 screen 报错可以先 sudo apt-get install screen -y来安装 screen。

其中的 screen -dmS是后台启动一个窗口名字就是你设定的名字,-XX:+AggressiveOpts -XX:+UseCompressedOops是用来优化启动的指令,/your/minecraft/path/是你放置服务器核心文件夹的绝对路径,比如我的的脚本就是

#!/bin/bash

cd /home/HeTong/Minecraft/1.12.2/
screen -dmS mc java -Xms2G -Xmx2G -XX:+AggressiveOpts -XX:+UseCompressedOops -jar minecraft_server.1.12.2.jar nogui
echo "minecraft 1.12.2 server started successfully"

现在你每次启动都可以使用 ./run.sh来快捷启动 MC 服务器

但是要记得你的 run.sh的文件位置才行的,比如我将 MC 放在了 /home/HeTong/Minecraft/1.12.2这个文件夹内,并且脚本名称为 1.12.2-run.sh,那么我想在任何地方运行服务器核心的话运行指令就为 bash /home/HeTong/Minecraft/1.12.2/1.12.2-run.sh

那么如何用 shell 脚本停止 mc 服务器的运行呢?答案就是:

#!/bin/sh

screen -dr <你的screen名字> -X stuff "say 服务器将在10S后关闭!\n"
sleep 10
screen -dr <你的screen名字> -X stuff "stop\n"

ok以上就是纯净服的开服教程了,很简单吧,接下来说说 forge 版开服教程,其实和纯净版差不多,只是细节更多而已。

Forge服的搭建
#

首先需要准备的东西有

  1. 一台服务器
  2. 纯净服的服务器核心并重命名为 minecraft_server.*.*.*.jar格式,其中 *.*.*是你纯净版核心的版本号
  3. 对应版本的 Java(1.16.5 以下 (包括) 使用 Java 8 以上的使用 Java 11或者更高)
  4. Xshell 和 Xftp ,或者宝塔面板
  5. 既然是 Forge 服,肯定需要 Forge 核心,对应开服版本下载核心的下载器就行了,如果一直加载不出来可以试试科学上网

首先将你的 Forge 核心的下载器和对应版本的纯净服核心放进你觉得合适的位置,比如我使用了 1.16.5 的 Forge 核心,放在了 /home/HeTong/Minecraft/1.16.5-forge

然后安装正确的 Java 版本(不知道为什么,似乎 Forge 对于 Java 版本要求比纯净版要求高许多)

现在假设你没有 Java 版本的问题,你就可以到你的核心所在文件夹下运行这一段指令

java -jar forge-***-installer.jar --installServer

其中 forge-***-installer.jar是你的 Forge 核心下载器的文件名称比如我的的是

java -jar forge-1.16.5-36.2.0-installer.jar --installServer

如果出现了

A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:110)
        at java.base/java.lang.reflect.Method.invoke(Method.java:577)
        at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)
        at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34)
Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')
        at net.minecraft.launchwrapper.Launch.<init>(Launch.java:34)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        ... 3 more

这种类似的错误大概率是 Java 版本不对,可以多试几个 Java 版本。 现在假设你已经安装了正确的 Java 版本,这时候它第一步会下载 mc 的纯净服的服务器核心和 Forge 的核心,因为 mc 官方的下载服务器在国外,所以你的服务器如果没有下载纯净服核心大概会卡在这一步,如果你按照我说的提前准备好了纯净服的核心就会跳过纯净服核心下载这一步,然后等待下载 libraries 库,有的时候也会因为网络原因卡在某一个下载上,你可以试试在自己电脑上先运行 Forge 安装 Server,将下载的 libraries 库打包到服务器上。 现在你已经装好了 Forge 核心,在你的 forge-***-installer.jar同级文件夹下会有一个名为forge-***.jar的核心,运行

java -jar forge-***.jar nogui

例如我的是

java -jar forge-1.16.5-36.2.0 nogui

运行后依旧是 eula 的同意,和 server.properties 的修改,请参照纯净版对应部分。

最后,依旧是写一个方便运行的脚本 run.sh

#!/bin/bash

cd /your/forge/minecraft/path/
screen -dmS <你的 forge screen 名字> java -Xms*G -Xmx*G -XX:+AggressiveOpts -XX:+UseCompressedOops -jar <forge 核心文件名> nogui
echo "minecraft <MC 的版本> server started successfully"

比如我的是

#!/bin/bash

cd /home/HeTong/.minecraft/1.16.5-forge/
screen -dmS forge-1.16.5 java -Xms2G -Xmx2G -XX:+AggressiveOpts -XX:+UseCompressedOops -jar forge-1.16.5-36.2.41.jar nogui
echo "minecraft 1.16-forage server started successfully"

和一个停止运行的脚本 stop.sh

#!/bin/bash

screen -dr <你的 forge MC 的 screen 名字> -X stuff "say 服务器将在10S后关闭!\n"
sleep 10
screen -dr <你的 forge MC 的 screen 名字> -X stuff "stop\n"

取的 screen 名字尽量不要重复

将不同的mc服务器分配给不同的三级域名
#

现在我的的手上只有一个二级域名,但是我又想将两个 mc 服务器同时启动并分配给我手上的两个三级域名,其实最开始也在网上找了好久没有找到解决方案,后来知道了 SRV 解析,完美的解决了我的疑惑。

首先在自己的两个 server.properties 中修改 server-port 即端口的值,其中纯净版服务器端口为默认的25565,Forge 服的端口改为25566。

然后到我的DNS服务商即腾讯 DNS 服务中新添加两条解析,解析类型都为 SRV,主机记录为 _minecraft.tcp.<第三级的名字>其中 <第三级的名字>自己想要实现的三级域名的最前端,比如我想要在 mc.hetong-re4per.com 上运行我的纯净服(端口25565),在 earth.hetong-re4per.com 上运行我的 forge 服(端口26657),就在主记录上填上 _minecraft.tcp.mc,记录值填上 5 0 25565 _mcserver.hetong-re4per.com.,forge 的另起一项分别填上 _minecraft.tcp.earth5 0 25567 _mcserver.hetong-re4per.com.注意,不要直接填服务器 ip,需要填一个提供服务的域名,然后就同下图:

SRV 解析

好了,以上,希望能够帮到萌新,有问题也可以提问,我如果知道的话会尽量帮忙解决。


本文作者: 褐瞳さん
本文链接: https://www.hetong-re4per.com/posts/mcserver-build/
版权声明: 本文文字在未特别注明下默认使用 CC BY-NC-SA 4.0 许可协议。

相关文章

如何搭建自己的 ts3 服务器
·1790 字·4 分钟· loading
技术教程 Teamspeak3
校园网防止多设备检测指北
·2551 字·6 分钟· loading
技术教程 校园网 OpenWrt 多设备检测