Category

Minecraft

docker+mc的运维管理方案

Minecraft

之前在 一篇文章 中提到过docker部署minecraft服务器,后来发现并不好用,因为portainer免费版并没有很好的控制台管理方式,没有用户组之类的精确权限控制,同时也没有好用的文件管理方案,最终选择使用code-server来管理,在容器中安装tmux用于后台运行并随时打开控制台,同时还有vscode的好用文件管理

Dockerfile

bash
# ubuntu 作为基础镜像。
FROM ubuntu:24.04

# HTTP 代理
ENV HTTP_PROXY="http://172.17.0.1:7890"
# HTTPS 代理
ENV HTTPS_PROXY="http://172.17.0.1:7890"
# 针对 code-server/npm/git 等的全局代理(通常是小写的)
ENV http_proxy="http://172.17.0.1:7890"
ENV https_proxy="http://172.17.0.1:7890"
ENV NO_PROXY="localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
# 时区
ENV TZ="Asia/Shanghai"

# 配置 APT 清华源
COPY aliyun-ubuntu.sources /etc/apt/sources.list.d/
RUN apt-get update

# 安装依赖
RUN DEBIAN_FRONTEND=noninteractive \
    apt-get install -y --no-install-recommends \
    curl \
    gosu \
    tmux \
    ca-certificates \
    iputils-ping \
    wget \
    zip \
    unzip \
    locales \
    && rm -rf /var/lib/apt/lists/*

# 设置编码
RUN locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

# code-server
RUN curl -fsSL https://code-server.dev/install.sh | sh

COPY start.sh /
RUN chmod +x /start.sh

RUN useradd --shell /bin/bash -u 1001 -m mc
WORKDIR /home/mc

# 暴露端口
EXPOSE 8080
EXPOSE 25565

CMD ["/start.sh"]

start.sh

bash
#!/bin/bash
set -e

# 检查环境变量是否已设置
if [ -z "$SERVER_NAME" ]; then
    echo "Error: SERVER_NAME environment variable is not set correctly."
    exit 1
fi

# 修正文件归属
chown -R mc /home/mc

# ===============================================================
# 信号捕获函数:用于优雅关闭 MC Server
# ===============================================================
graceful_shutdown() {
    echo "Caught signal. Performing graceful shutdown..."
    
    # 检查 tmux session 是否存在
    if tmux has-session -t mc 2>/dev/null; then
        echo "Sending 'stop' command to Minecraft server via tmux..."
        
        # 使用 tmux send-keys 向 'mc' 会话发送 'stop' 命令和 Enter 键
        # -t mc: 指定目标会话
        # C-m: 相当于按下 Enter 键
        tmux send-keys -t mc 'stop' C-m
        
        # 等待 MC Server 进程退出。mc-server-runner 会处理 Java 的关闭
        # 我们可以等待 tmux session 消失,表示 mc-server-runner 已退出
        TIMEOUT=60
        COUNT=0
        while tmux has-session -t mc 2>/dev/null && [ $COUNT -lt $TIMEOUT ]; do
            echo "Waiting for Minecraft server to stop... (Max $TIMEOUT seconds)"
            sleep 1
            COUNT=$((COUNT + 1))
        done
        
        if [ $COUNT -eq $TIMEOUT ]; then
            echo "WARNING: Minecraft server did not stop gracefully within $TIMEOUT seconds. Killing tmux session."
            tmux kill-session -t mc 2>/dev/null
        else
            echo "Minecraft server stopped successfully."
        fi
    else
        echo "Minecraft server tmux session not found or already stopped."
    fi

    # 停止 code-server (exec 后的 code-server 已经是主进程,收到信号后会自动退出)
    # 我们这里不需要手动杀死 code-server,因为 Tini 会转发信号给它。
    # 退出脚本,允许 Tini 干净地清理进程
    exit 0
}

# 捕获 SIGINT (Ctrl+C) 和 SIGTERM (Docker Stop) 信号
trap 'graceful_shutdown' SIGINT SIGTERM

echo Starting Server...
cd /home/mc/$SERVER_NAME
gosu mc tmux new -d -s $SERVER_NAME
gosu mc tmux send-keys -t $SERVER_NAME:0 "$START_CMD" C-m

echo Starting Code...
gosu mc sed -i "s#^password: .*#password: $CODE_PASSWORD#" /home/mc/.config/code-server/config.yaml
gosu mc code-server --bind-addr 0.0.0.0:8080 /home/mc/$SERVER_NAME &
CODE_SERVER_PID=$!
echo "code-server started with PID $CODE_SERVER_PID."

# 等待 code-server 进程或收到的信号。
# 这一行是保持 start.sh 脚本存活的关键,以监听信号。
wait $CODE_SERVER_PID

# 如果 code-server 意外退出,则执行优雅关闭流程
graceful_shutdown

aliyun-ubuntu.sources

yaml
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

docker-compose.yml 使用示例(此处的镜像是本地构建的)

yaml
services:
  velocity:
    image: minecraft-universal:1.5
    container_name: velocity
    hostname: velocity
    environment:
      SERVER_NAME: "velocity"
      START_CMD: "./start.sh"
      CODE_PASSWORD: "<your-password>" 
    ports:
      - "25565:25565"
    volumes:
      - /opt/java:/java:ro
      - /opt/mc-velocity:/home/mc
    restart: unless-stopped
    networks:
      - mc
      - web

使用时需要先在映射的目录下创建目录,目录名字和环境变量中的SERVER_NAME一致,并在目录下添加 start.sh 以及其他服务器文件,对应compose中定义的启动指令

minecraft docker运行

Minecraft

今天研究了一下docker中运行minecraft,原因是希望在不给ssh的情况下允许别人进入服务器后台,因为已经部署了portainer,所以希望可以直接通过portainer操作后台

构建镜像

首先需要一个镜像来运行服务端

一开始我选择了Alpine作为底包,然后发现这个包实在是太干净了,甚至用的都不是glibc,下好的预编译的jdk没法跑,于是换了ubuntu

然后希望通过不同的目录来区分各个不同的子服,所以用环境变量+启动脚本动态选择工作目录

Dockerfile

dockerfile
# ubuntu 作为基础镜像。
FROM ubuntu:24.04

ENV TINI_VERSION=v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini

# 设置环境变量的默认值,这些值会被 docker-compose.yml 中的配置覆盖。
ENV SERVER_NAME=minecraft_server
ENV START_CMD="/java/bin/java -Xms1G -Xmx1G -jar server.jar --nogui"

# 设置容器内的通用工作目录。
WORKDIR /${SERVER_NAME}

# 暴露 Minecraft 服务器默认的 TCP 和 UDP 端口。
EXPOSE 25565

# 将启动脚本复制到镜像中。
COPY start.sh /start.sh

# 授权启动脚本可执行权限。
RUN chmod +x /start.sh

# 设置入口点。tini 确保当容器收到停止信号时,能优雅地关闭 Java 进程。
ENTRYPOINT ["/tini", "--"]

# 定义默认的启动命令。
CMD ["/start.sh"]

start.sh

bash
#!/bin/bash

# 检查环境变量是否已设置
if [ -z "$SERVER_NAME" ]; then
    echo "Error: SERVER_NAME environment variable is not set correctly."
    exit 1
fi

cd /$SERVER_NAME
echo "starting..."
exec $START_CMD
bash
# 构建指令
docker build -t minecraft-universal:1.0 .

docker compose

yaml
services:
  sc:
    image: minecraft-universal:1.2
    container_name: sc # 容器名字
    # 允许attach
    stdin_open: true
    tty: true
    ports:
      - "35565:25565" # 游戏端口映射,可以修改为其他端口
    environment:
      # 服务器名
      SERVER_NAME: "sc"
      START_CMD: "/java/bin/java -jar fabric-server-mc.1.21.8-loader.0.17.2-launcher.1.1.0.jar nogui"
    volumes:
      # 挂载宿主机的 Java 目录到容器中的 /java
      - /usr/local/jdk/21:/java
      # 挂载宿主机的服务器目录到容器中
      - ./sc:/sc
    restart: unless-stopped

使用如上配置之后可以在attach后正常和服务端控制台交互

重点是 stdin_open: truetty: true

gradle导入authlib依赖

Minecraft
纯文本
repositories {
    maven("https://libraries.minecraft.net")
}

dependencies {
    implementation("com.mojang:authlib:3.11.49")
}

Minecraft相关问题汇总

Minecraft

就是找个地方放一些问题的解决办法

客户端

切换音频输出后没有声音

原因:mc不会主动切换音频输出

解决办法:按f3+t重载材质包(不行的话试试重启)

服务端

cmd中不输出日志消息

原因:启动脚本里面用了javaw而不是java或者在脚本里面设置了其他的不该设置的选项

解决办法:使用正确的脚本启动,脚本示例

paper.yml按世界单独配置

Minecraft

paper.yml中的设置很丰富,可设置的项目非常多,但是有一点可能很少有人知道,那就是这些功能可以按世界单独设置。paper.ymlworld-settings下的所有的选项都可以按世界单独设置(但是一些项目只在特定的世界有效,比如末影龙相关的设置只在末地有效)

默认在world-settings下有default项,这一项的意思是默认配置,如果没有其他的配置覆盖他,那么paper将会以default下的配置项进行运作

只有 world-settings.default 下的项目才可以按世界单独配置,不在其中的项目是不可以单独设置的

默认配置为

yaml
world-settings:
  default:
    grass-spread-tick-rate: 1
    seed-based-feature-search: true
    seed-based-feature-search-loads-chunks: true
    ...: ...
    ....: ...

多世界的配置为

yaml
world-settings:
  # 默认配置
  default:
    grass-spread-tick-rate: 1
    seed-based-feature-search: true
    seed-based-feature-search-loads-chunks: true
    ...: ...
    ....: ...
  # 下界的单独设置,在下界会覆盖default的设置
  # 没有在此处设置的会沿用default
  world_nether:
    grass-spread-tick-rate: 2
    seed-based-feature-search: true
    seed-based-feature-search-loads-chunks: true
    ...: ...
    ....: ...
  # 末地的单独设置,在下界会覆盖default的设置
  # 没有在此处设置的会沿用default
  world_the_end:
    grass-spread-tick-rate: 3
    seed-based-feature-search: true
    seed-based-feature-search-loads-chunks: true
    ...: ...
    ....: ...

Paper反矿透anti-xray的开启 & 配置

Minecraft

官方文档

paper自带一个反透视的功能,相比较插件的反矿透,优化做的较好

此功能只有paper和基于paper的服务端核心才有(如果服务端没有paper.yml配置文件那就是不支持,bukkit,spigot,forge,fabric是没有的)

高版本paper核心的配置文件在 服务端文件夹/config 文件夹下

原理大概是通过给客户端发送虚假的数据包,使得平常不可见的方块在客户端上的数据并不是真实的数据,使用一些“工具”的客户端看到的这些方块也就不是真实的方块了

以下的解释参考自paper官方文档:https://paper.readthedocs.io/en/latest/server/configuration.html

以及:https://gist.github.com/stonar96/ba18568bd91e5afd590e8038d14e245e

启用

打开 服务端文件夹/paper.yml 找到 anti-xray 设置项

默认的配置如下

低版本的配置文件有所不同是正常情况

bash
# 这里以1.17版本的配置文件为示例解释每个配置项的含义
# 如果不同版本有差异属于正常情况
anti-xray:
  # 是否启用 true -> 启用
  enabled: false
  # 引擎模式
  # 1是用石头替换下面列表里面的方块
  # 2是用随机方块替换所有方块
  # 这里的方块指的是玩家看不到的,没有裸露在外的方块
  engine-mode: 1
  # 设置隐藏矿石的最大高度
  # 需要填写16的倍数,其他值将向下舍入为16的倍数
  # 在此高度以下的方块将会按对应的模式进行反矿透
  max-block-height: 64
  # 方块更新的半径, 当一个方块被更新时, 客户端的方块也会随之更新
  # 有效值:0, 1, 2
  # 大于2的默认为2, 小于0的默认为0
  # 不要使用0, 这只是一种测试模式
  update-radius: 2
  # 是否混淆接触熔岩的方块
  lava-obscures: false
  # 是否允许有paper.antixray.bypass权限的玩家绕过反矿透
  use-permission: false
  # 在引擎模式1中要隐藏的方块列表
  # 一些方块可能需要手动添加
  # 注意: 此列表使用的是原版方块名称而不是bukkit方块名称。
  hidden-blocks:
    - copper_ore
    - deepslate_copper_ore
    - gold_ore
    - deepslate_gold_ore
    - iron_ore
    - deepslate_iron_ore
    - coal_ore
    - deepslate_coal_ore
    - lapis_ore
    - deepslate_lapis_ore
    - mossy_cobblestone
    - obsidian
    - chest
    - diamond_ore
    - deepslate_diamond_ore
    - redstone_ore
    - deepslate_redstone_ore
    - clay
    - emerald_ore
    - deepslate_emerald_ore
    - ender_chest
  # 在引擎模式2中应该替换的方块列表
  # 一些方块可能需要手动添加
  # 注意: 此列表使用的是原版方块名称而不是bukkit方块名称。
  replacement-blocks:
    - stone
    - oak_planks

这里将 enable: false 改成 enable: true 以启用反矿透

配置详细解释

enabled

解释:是否启用

允许的值:true / false

engine-mode

解释:反矿透的运作方式

模式1:根据世界类型用石头、地狱岩或末地石替换指定的矿石(通过发送经过修改的数据包,性能消耗较模式2相比较小)

模式2:在向客户端发送块数据包时随机放置指定的假矿(性能消耗较模式1相比较大)

允许的值:1 / 2

抗 X 射线模式 图片来源于 https://gist.github.com/stonar96/ba18568bd91e5afd590e8038d14e245e

模式1计算量较小,但模式2可以更好地反矿透。在模式1中,只有完全被不透明方块覆盖的矿石才能被隐藏。这意味着暴露在空气中的矿石仍然可见。在模式2中,假矿石中会遮挡这些矿石,并且添加假空气

max-block-height

解释:反矿透的运作范围,可以写128

允许的值:16的倍数,其他值将向下舍入为 16 的倍数

注:低版本的配置与上述不同,填写的是max-chunk-section-index,规则是 (填写的数值 + 1) * 16。大于 15 的 max-chunk-section-index 默认为 15。小于 0 的 max-chunk-section-index 没有意义。

update-radius

解释:方块更新的半径, 当一个方块被更新时, 客户端的方块也会随之更新

允许的值:0 / 1 / 2 (大于2的默认为2, 小于0的默认为0)

注:不要使用0, 0是一种测试模式,如没有需要请不要修改

lava-obscures

解释:是否混淆接触熔岩的方块,可以写true

允许的值:true / false

use-permission

解释:是否允许有paper.antixray.bypass权限的玩家绕过反矿透,可以写false

允许的值:true / false

hidden-blocks

解释:在引擎模式1中要隐藏的方块列表, 一些方块可能需要手动添加(例如下界的矿石)

注:此列表使用的是原版方块名称而不是bukkit方块名称。

replacement-blocks

解释:在引擎模式2中应该替换的方块列表, 一些方块可能需要手动添加

注:此列表使用的是原版方块名称而不是bukkit方块名称。

ps

按世界单独配置

IPV6联机教程

Minecraft

注意

  1. 此教程需要联机双方的网络都支持IPV6(查看方法会在下面写出)
  2. 手机(使用流量)和一些偏远地区可能尚不支持IPV6
  3. 该方式联机可能没有内网穿透简单(因人而异)

检查是否支持IPV6

浏览器打开 http://test-ipv6.com/ 如果显示如下图,那么恭喜你,你的网络是支持并且开启了IPV6的

将这一串字符串自行保存,不要给你不信任的人

上面获取到IPV6地址的可以跳过下面的路由器启用IPV6教程,直接看联机部分

路由器启用IPV6

如果不显示这一串文字,那么可能是你的路由器没有开启IPV6

以我的路由器为例,打开IPV6的步骤如下图所示

保存所需要的时间可能比较长,请耐心等待

修改并且保存成功之后再进入上面的IPV6检测网页,检查是否能够获取到IPV6地址

如果你在路由器里没找到关于IPV6的选项,那么恭喜你,你的路由器不支持IPV6,需要换新的(简而言之就是这个教程你可以不用看了)

如果你的光猫支持IPV6,电脑直连光猫能够识别,连路由器却识别不了,那么就需要打开路由器管理后台,把路由器切换成中继模式(或者你把光猫改成中继模式,然后进去路由器选择拨号模式,接着把你的光猫账号密码输入进去)

联机

上面我们拿到的IPV6地址,然后进入游戏对局域网开放拿到端口(点击对局域网开放,左下角的聊天栏会告诉你在哪个端口开放)

例如:拿到的IPV6地址是 1234:1234:1234:1234:1234:1234:1234:1234 ,端口是 25565 ,不要急着连,看完下面的开放端口

那么就需要使用 [1234:1234:1234:1234:1234:1234:1234:1234]:25565 来连接

这里注意地址使用 [] 包括,并且使用的是英文冒号 :

IPV6地址不是固定的,一般一天变一到二次,改变之后需要再次访问上面的链接获取

开放端口

如果路由器不是桥接的,那么需要开放端口才可以让外网访问

这里以我的路由器为例,开放端口的步骤如下图所示

Paper Watchdog 报错

Minecraft

问题特征

使用paper及其分支核心,服务端长时间无响应时会由Watchdog打印线程转储信息

特征是有很长的一串报错,开头如下

log
[Paper Watchdog Thread/ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - git-Paper-xxx (MC: 1.1x.x) ---
[Paper Watchdog Thread/ERROR]: The server has not responded for 10 seconds! Creating thread dump

中间会出现多个类似以下结构的报错

[Paper Watchdog Thread/ERROR]: ------------------------------
[Paper Watchdog Thread/ERROR]: Current Thread: Timer hack thread
[Paper Watchdog Thread/ERROR]: 	PID: x | Suspended: false | Native: false | State: TIMED_WAITING
[Paper Watchdog Thread/ERROR]: 	Stack:
[Paper Watchdog Thread/ERROR]: 		xxxx.xxxx.xxxxxx.xxxxx(xxxx xxxx)
[Paper Watchdog Thread/ERROR]: ------------------------------

最后会进行插件和存档的保存消息,并且不会退出服务端的进程(会导致自动重启脚本失效)

这是由于服务端的进程未响应的时长超出了设置的限制,导致Watchdog打印线程转储信息并自动保存关闭

可能的导致原因

  • 某些插件的代码有bug导致主线程进入死循环
  • 粘液科技之类的插件
  • 玩家做的红石机器造成了过大的卡顿
  • 服务器配置太差

解决办法

寻找卡服根源

可以安装spark插件(指令教程),查看占用分析

自行寻找(可以二分法删插件),多看看日志可能有所帮助

升级硬件

大部分时候是升级CPU,cpu选择优先考虑单核水平,可以百度cpu天梯图查看单核排名

和多分配内存(分配过多内存并没有作用,多分配内存只是为了减小gc压力,cpu速度不够的时候并不能靠多分内存弥补)

修改watchdog的限制

治标不治本,该卡还会卡,仅在某些特殊情况(如预加载地图)下使用

找到 服务端文件夹/paper.yml (高版本在 服务端文件夹/config/paper-global.yml ),打开并找到以下选项

watchdog: early-warning-every: 5000 early-warning-delay: 10000

  • early-warning-every: 服务器无响应时打印线程转储之间的间隔(以毫秒为单位)
  • early-warning-delay: 服务器无响应后距离watchdog线程开始打印线程转储的毫秒数

将两个值改成你要的数值即可,注意单位是毫秒

崩溃&启动失败的日志/崩溃报告解析

Minecraft

日志

日志位于

  • 客户端:客户端文件夹/.minecraft/logs
  • 服务端:服务端文件夹/logs

文件夹中,最后一次启动的日志是 latest.log ,每当服务端启动时,旧的 latest.log 会被压缩到 年-月-日-次数.log.gz 文件中

如果你的启动脚本是带有自动重启的,并且你没有在它开始重启之前关闭它,那么 latest.log 就会被压缩到gz文件中

此时你需要找到对应的gz文件,使用解压缩软件查看其中的log文件

log文件可以直接用文本文档打开,通常有问题的日志应该从后往前看

崩溃报告

日志位于

  • 客户端:客户端文件夹/.minecraft/crash-reports
  • 服务端:服务端文件夹/crash-reports

文件夹中,崩溃报告的命名格式是 crash-年-月-日_时.分.秒-服务端/客户端.txt

崩溃报告中通常会带有

  • 崩溃原因的描述
  • 导致崩溃的报错
  • 崩溃时运算的实体
  • 服务器的存档信息
  • 服务器的版本
  • 服务器的JVM信息
  • 服务器的系统信息
  • MOD列表(mod服)

以下是一些常见的问题

mod前置未安装

Mod §eMOD名字§r requires §6前置名字§r §o前置版本 or above§r§7Currently, §6前置名字§r§7 is §o§nnot installed

解决办法:安装对应版本的前置

mod前置版本不合要求

Mod §e`MOD名字`§r requires §6`前置名字`§r §o需要的`前置版本` or above, and below `` 需要的`前置版本` ``§r§7Currently, §6`` `前置名字` ``xx§r§7 is §o当前`` 的`前置版本` ``

解决办法:安装对应版本的前置

Minecraft服务端地址

Minecraft

默认地址

Minecraft服务端的端口默认是25565,地址默认是127.0.0.1

客户端进入服务端需要填写 地址:端口 ,注意这里的地址和端口需要换成你自己的,并且冒号一定要用英文的 : ,否则会无法连接。当你认为自己其他地方没有问题的时候请检查一下冒号是否写错了

修改端口

端口在 服务端文件夹/server.properties 文件中修改,此文件可以直接用文本文档打开

在其中找到 server-port=25565 (其他port项不用管),将其中的25565调整到你需要的端口(如非必要,不要修改端口,游戏中加入服务器时,端口是25565的服务器的地址可以不写端口)

端口可用数值1-65535,其中0不使用,1-1023为系统端口,也叫BSD保留端口,1024-65535为用户端口,又分为:BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535),建议使用五位数端口以防止端口冲突

修改端口后需要重启服务器生效,如果重启时控制台报错 **** FAILED TO BIND TO PORT! 就代表你选择的端口被其他进程占用了,需要更换端口

指定地址

默认地址127.0.0.1可以理解为本机,也就是当你服务端和客户端在一台机器上的时候可以使用此地址连接到服务端

在同一局域网中可以通过 服务端所在机器的ip:服务端端口 连接到服务端,例如( 192.168.1.1:25565

如果要跨公网连接的话有以下几种方式

  1. 有自己的公网ip(公网ip在哪儿,服务端的机器也要在哪儿,不要说有个vps然后要自己电脑开的服能远程连接,不现实)
  2. 使用frp,也就是内网穿透,教程
  3. 使用自己的动态公网ip,教程

常见问题

no further information

连接时出现

意为你填写的地址没有响应

可能原因有

  1. 地址有错误
  2. 防火墙没关闭
  3. 安装组未放行(vps)

如果是vps,请关闭系统防火墙并配置安全组放行

如果是第三方服务商提供的机器,可以找服务商询问

Unknow Host

大概率是地址写错了,请检查地址种的冒号是否是英文的冒号 :

原版客户端进Forge服

你需要使用mod一致的客户端连接服务器

连接中止

可能的原因有很多,你应该

  1. 检查你的客户端mod是否与服务端mod对应
  2. 检查你的服务端和客户端日志
  3. 如果你看不懂日志,请把完整的日志文件发给看得懂的人让他帮你(问的时候先提供日志并且详细地描述问题)

DDNS教程

Minecraft

此教程需要花钱购买一个域名,腾讯云,阿里云等服务商均提供此服务且价格并不贵

购买域名的教程此处就不放了,以下的教程需要有域名

申请公网ip

首先移动用户可以关闭此教程了,移动的公网ip极难申请

联通和电信用户可以打电话给运营商要一个动态公网ip,如果问用来做什么的话可以说装监控

我就是电信用户,一个电话搞定

光猫改桥接

同样是打电话给运营商,让运营商把自己的光猫模式改成桥接

获取密钥

这里我是使用的腾讯云,就以腾讯云的控制台举例

首先进入腾讯云的控制台 https://console.dnspod.cn/

查看图片

进入DNSPod Token界面,如果没有密钥的新建一个

创建后拿到id和token

保存好id和token,不要泄露给不信任的人

使用DDNS程序动态解析ip到域名

这里我使用的是DDNS-GO https://github.com/jeessy2/ddns-go

 GitHub

jeessy2/ddns-go

在release界面中选择最新的适合你操作系统的构建并下载 https://github.com/jeessy2/ddns-go/releases

按照README.md中的使用教程启动之后,通过浏览器进入其设置界面

在此处填入之前保存的id和token 在此处填入之前保存的id和token 在IPV4下设置你要解析的域名 在IPV4下设置你要解析的域名

在IPV4下的Domains中填写你要解析的域名(如果是子域名需要自行添加域名解析,见/blog/腾讯云域名添加子域名解析/

IPV6按需设置,没有的不填

设置完成后点击最下方的SAVE

点击保存 点击保存

管理端口映射

此时我们已经可以通过域名访问我们的ip了,但是一般我们的网络和公网直接还隔了一个路由器

这里以华为的路由器为例

打开NAT服务 打开NAT服务

这里假设我的电脑上开了一个mc的服务端,使用25565端口,我要把它映射到公网ip的25565上

这里注意设备不要选错了,要选择对应的设备

设置映射 设置映射

保存之后就可以从外网连接了(如果连接不了的话请自行检查机器的防火墙)

注意

  1. ddns-go进程将会每隔一段时间检测一次ip变动,并在变动后更新域名对应的ip
  2. 根据解析端的dns不同,刷新时间会有出入,这里建议将dns设置为 119.29.29.29223.5.5.5
  3. 保持ddns-go的进程开启,不要关闭(linux可以使用screen)

Minecraft服务端更换核心

Minecraft

保险起见,进行此操作前应该将服务端文件备份 (整个服务端文件夹打包或者复制一份都可)

以下所有操作均需要在关服时进行操作

服务端更新核心(不更换游戏版本)

将新的核心移动到服务端文件夹内

forge和fabric需要重新安装以下载需要的lib文件,单独复制核心并不能成功开服

然后修改开服脚本中的 -jar 参数后的核心名字

启动服务端后注意控制台,如果有报错需要注意

在确认没有问题后再删除旧的核心Jar文件

服务端更换核心

插件和mod是不互相兼容的,除非是没有安装插件或mod的情况下更换,否则不推荐

插件服和(mod服或插件mod服)互换核心时需要修改存档结构

修改方法

将新的核心移动到服务端文件夹内,然后修改开服脚本中的 -jar 参数后的核心名字

启动服务端后注意控制台,如果有报错需要注意

在确认没有问题后再删除旧的核心Jar文件

更换不同游戏版本的核心

如果是升级,1.12 -> 1.13,1.17 -> 1.18 等大更新不建议更换,及其容易出问题

如果是降级,想都别想

小更新将新的核心移动到服务端文件夹内,然后修改开服脚本中的 -jar 参数后的核心名字

启动服务端后注意控制台,如果有报错需要注意

在确认没有问题后再删除旧的核心Jar文件

Minecraft服务端换地图

Minecraft

保险起见,进行此操作前应该将服务端文件备份 (整个服务端文件夹打包或者复制一份都可)

客户端/官服存档结构

主世界中的区块存储在这个根文件夹中,下界则存储在子文件夹DIM-1中,末地则存储在DIM1中。每个维度都有其自己的datapoiregion文件夹。

https://wiki.biligame.com/mc/%E4%B8%96%E7%95%8C

具体存档结构见:https://wiki.biligame.com/mc/Java%E7%89%88%E4%B8%96%E7%95%8C%E6%A0%BC%E5%BC%8F

新的世界 ├─advancements ├─data ├─datapacks ├─DIM-1 下界 ├─DIM1 末地 ├─entities ├─playerdata ├─poi ├─region └─stats

插件服存档结构

服务端文件夹 ├─ world 主世界及存档通用数据文件 │ ├─ advancements │ ├─ data │ ├─ datapacks │ ├─ entities │ ├─ level.dat │ ├─ level.dat_old │ ├─ playerdata │ ├─ poi │ ├─ region │ ├─ session.lock │ ├─ stats │ └─ uid.dat ├─ world_nether 下界数据文件 │ ├─ data │ ├─ DIM-1 │ ├─ level.dat │ ├─ level.dat_old │ ├─ session.lock │ └─ uid.dat └─ world_the_end 末地数据文件 ├─ data ├─ DIM1 ├─ level.dat ├─ level.dat_old ├─ session.lock └─ uid.dat

MOD服存档结构

在原版的基础上可能会有其他维度的文件夹,一般是DIM-维度编号为名字的文件夹

更换地图

插件服和官服/mod服的存档互相更换时需要改变结构

插件服存档移动到官服/mod服/单机

world_netherworld_the_nether 中的DIM开头的文件夹移动到 world 文件夹中

然后将world文件夹整个移动到服务端中

反之,新建 world_netherworld_the_nether 文件夹,将DIM开头的文件夹移动到其中

注意,mod创建的维度无法移动到插件服,多世界插件创建的维度和主世界在迁移时仅可保留一个作为主世界(可以拆成一个单独的存档)

MinecraftMOD服安装/配置MOD

Minecraft

找mod

mod一般发布在curseforge上 https://www.curseforge.com/minecraft/modpacks (此网站国内不墙,但是访问需要过人机验证)

国内找mod推荐mc百科 https://www.mcmod.cn/modlist.html mod搬运较多;相比mcbbs的mod板块多了搜索功能,搜索功能完善,筛选条件够多,并且介绍/物品/教程都较全,格式规范;但是更新会有延迟,下载并不是都有,一般是找到mod之后通过其中的连接跳转到cursegorge下载最新版

mcbbs的mod板块 https://www.mcbbs.net/forum-mod-1.html

安装mod

首先分清楚客户端mod和服务端mod(mc百科的介绍界面有标注)

客户端mod是只在客户端生效的mod,在服务端毫无作用还有极大几率在启动时出错导致崩溃

一般添加了汉化,特效,修改了渲染等的mod就是服务端mod

例如小地图,optifine高清修复,血条,jei等

服务端mod分为纯服务端使用的服务端mod和客户端和服务端都使用的服务端mod

一般添加了新物品,新生物,新游戏机制的就是服务端mod

例如暮色森林,匠魂,工业等

纯服务端mod一般是指在服务端生效,且不需要客户端安装的mod(客户端可装可不装)

纯服务端mod比较少见,除非mod发布页面写了只需要服务端安装,否则都按服务端mod处理

例如平坦基岩生成

将mod加入mods文件夹 服务端文件夹/mods 然后重启服务端

配置mod

更新mod

如果mod作者没有注明需要操作什么,一般就是将旧的mod的Jar删除后将新的mod的Jar放进mods文件夹

汉化mod

mod的jar文件使用压缩软件打开,找到 assets/mod名字/lang 文件夹,其中会有一个或多个json文件,如果缺少zh_cn.json的话这个mod就无法显示中文的内容

此操作需要在客户端/服务端关闭的情况下进行

此时可以到网上找找有没有mod的汉化,如果没有并且想要自己汉化mod的可以将en_us.json复制一份出来,将其中的 "xxxx.xxx.xx": "yyyyyyyyyyyy" 格式的一段中的yyyyyyyyyyyy内容替换成中文内容,注意不要有json语法错误

推荐使用vscode并且安装json插件进行编辑

替换完成后保存并关闭,将此文件命名为zh_cn.json,然后放进上面在mod的Jar文件中找到汉化文件的文件夹中

此方法也可用于汉化光影包

Minecraft插件服安装/配置插件

Minecraft

找插件

插件一般发布在spigot上 https://www.spigotmc.org/search/?type=resource_update (此网站国内不墙,只有5秒的ddos检测)

国内找插件可以去mcbbs,搬运的插件一般都会汉化用法和配置文件,提供明确的获取方式 https://www.mcbbs.net/forum-servermod-1.html

安装插件

插件服的插件基本通用,版本向前兼容(比如支持1.13的插件,如果没有描述,多半支持1.14及以后的版本)

下载插件得到插件的jar文件后将jar文件移动到插件服的plugins文件夹中,然后重启服务端

如果启动时没有报错,并且启动完之后在控制台输plugins看到插件名字并且是绿字说明插件启动/安装成功

配置插件

使用汉化的语言/配置文件

汉化的语言文件有多种可能的使用方式

  1. 插件配置文件夹中有默认的语言文件,替换掉它
  2. 插件有语言文件夹,将语言文件(文件中带zh_CN或者类似的标识)放进去,然后在配置文件中搜索lang,找到后替换语言代码(一般为zh_CN)
  3. 插件自带汉化,在配置文件中搜索lang,找到后替换语言代码(一般为zh_CN)

配置文件的汉化一般是汉化了其中的注释,如果汉化文件不是最新的,建议对照着旧文件改插件自动生成的配置文件,否则可能会有错漏导致不可预知的后果

查看默认配置文件

插件的Jar文件使用压缩软件打开,里面会有默认的配置文件(注意不要修改其中的默认文件,复制出来即可)

此方法可以查看其自带的语言文件是否有自己需要的,以及它使用的语言代码格式

更新插件

如果插件作者没有注明需要操作什么,一般就是将旧的插件Jar删除后将新的插件Jar放进plugins文件夹

一些插件的链接

EssentialsX(包括本体和Protect,Chat,Spawn):提供大部分的基础指令和对玩家限制。使用时需要手动给default组添加权限。注意需要下载带X的版本

mcbbs:https://www.mcbbs.net/thread-619883-1-1.html

中文Wiki:https://mineplugin.org/Essentials

官网:https://essentialsx.net/

英文Wiki:https://essentialsx.net/wiki/Home.html

构建:https://ci.ender.zone/job/EssentialsX/

GitHub:https://github.com/EssentialsX/Essentials/

Luckperms:提供权限组管理,个人认为比GroupManager好用,安装完第一次启动可能比较慢,请耐心等待

mcbbs:https://www.mcbbs.net/thread-676818-1-1.html

官网:https://luckperms.net/

中文Wiki:https://pluginscdtribe.github.io/wiki/luckperms/

构建:https://ci.lucko.me/job/LuckPerms/

GitHub:https://github.com/lucko/LuckPerms/

AuthMeReloaded(开发版):提供登录功能,替代正版验证

mcbbs:https://www.mcbbs.net/thread-442729-1-1.html

官网:https://www.spigotmc.org/resources/authme-reloaded.6269

英文Wiki:https://github.com/AuthMe/AuthMeReloaded/tree/master/docs

构建:https://ci.codemc.io/job/AuthMe/job/AuthMeReloaded/

GitHub:https://github.com/AuthMe/AuthMeReloaded/

CoreProtect:记录玩家的几乎所有操作,提供按区域/玩家/时间回档的功能,防熊利器,但是要定期清理,不然会很占储存

mcbbs:https://www.mcbbs.net/thread-682499-1-1.html

官网:https://www.spigotmc.org/resources/coreprotect.8631/

中文Wiki:https://mineplugin.org/CoreProtect

Residence:领地插件,允许玩家圈地以保护自己的房屋农田等建筑。虽然是付费插件,但是提供了免费版下载,会限制在63格以上高度放置流体和中立方块,一定要手动关闭,方法见mcbbs帖子

mcbbs:https://www.mcbbs.net/thread-631343-1-1.html

官网:https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-16.11480/

免费下载:https://zrips.net/Residence/

Github:https://github.com/Zrips/Residence

Vault:经济及部分插件的前置

官网:https://www.spigotmc.org/resources/vault.34315/

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-703488-1-1.html

中文Wiki:https://mineplugin.org/Vault

XConomy:经济插件,国产插件,作者修bug快,也可以用其他的经济插件代替

mcbbs:https://www.mcbbs.net/thread-962904-1-1.html (包含Wiki)

spigot:https://www.spigotmc.org/resources/xconomy.75669/

GitHub:https://github.com/YiC200333/XConomy

Skinsrestorer:皮肤插件,允许离线服务器显示正版皮肤(没办法,谁叫国内离线玩家多)

mcbbs:https://www.mcbbs.net/thread-805404-1-1.html

官网:https://www.spigotmc.org/resources/skinsrestorer.2124/

英文Wiki:https://github.com/SkinsRestorer/SkinsRestorerX/wiki

GitHub:https://github.com/SkinsRestorer/SkinsRestorerX

PlaceholderAPI:占位符变量,返回你需要的玩家数据,很多插件的软前置

mcbbs:https://www.mcbbs.net/thread-829732-1-1.html

官网:https://www.spigotmc.org/resources/placeholderapi.6245/

中文Wiki:https://mineplugin.org/PlaceholderAPI

LockettePro:木牌箱子锁

和LWCX相比牌子会占用一格空间,且给予的信任人数有上限,要给很多信任时建议使用圈地,但是使用简单

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-944015-1-1.html

官网:https://www.spigotmc.org/resources/lockettepro-for-1-14-1-15-1-16.74354/

GitHub:https://github.com/brunyman/LockettePro

英文Wiki:https://github.com/connection-lost/LockettePro/wiki

LWCX:箱子锁

和LockettePro相比不会有牌子占用一格空间,添加信任的数量无上限,容器放下即锁

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-892322-1-1.html

官网:https://www.spigotmc.org/resources/lwc-extended.69551/

GitHub:https://github.com/pop4959/LWCX

构建:https://ci.codemc.io/job/pop4959/job/LWCX-dev/

英文Wiki:https://github.com/pop4959/LWCX/wiki

Multiverse-Core:多世界插件,方便管理多个世界,是部分插件的前置

mcbbs:https://www.mcbbs.net/thread-1016455-1-1.html

官网:https://dev.bukkit.org/projects/multiverse-core(可能需要魔法上网)

中文Wiki:https://mineplugin.org/Multiverse-Core

构建:https://ci.onarandombox.com/job/Multiverse-Core/

GitHub:https://github.com/Multiverse/Multiverse-Core/

QuickShop Reremake:商店插件,允许使用箱子,末影箱等容器作为商店出售或收购物品

mcbbs:https://www.mcbbs.net/thread-809496-1-1.html(包含wiki)

官网:https://www.spigotmc.org/resources/quickshop-reremake-1-16-ready-say-hello-with-rgb.62575/

构建:https://ci.codemc.io/job/Ghost-chu/job/QuickShop-Reremake/

GitHub:https://github.com/Ghost-chu/QuickShop-Reremake

PlayerTitle:称号,国产插件

mcbbs:https://www.mcbbs.net/thread-1004671-1-1.html

spigot:https://www.spigotmc.org/resources/playertitle.78048/

FarmProtect:保护农田不被踩坏

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-797619-1-1.html

spigot:https://www.spigotmc.org/resources/farmprotect.6259/

Lite Sign In:签到,国产插件

mcbbs:https://www.mcbbs.net/thread-1056080-1-1.html

spigot:https://www.spigotmc.org/resources/lite-sign-in-1-7-1-16-sign-in-rewards-chest-gui-mysql-sqlite-customizable.79584/

Citizens:NPC插件

mcbbs:https://www.mcbbs.net/thread-797288-1-1.html(带wiki)

spigot:https://www.spigotmc.org/resources/citizens.13811/

Citizens CMD:点击NPC使用指令

mcbbs:https://www.mcbbs.net/thread-1002989-1-1.html

spigot:https://www.spigotmc.org/resources/citizens-cmd.30224/

TrMenu:菜单(2.0版本付费,但是GitHub有下载)

mcbbs:https://www.mcbbs.net/thread-918078-1-1.html

GitHub:https://github.com/TrMenu/TrMenu/actions

TrChat:修改聊天格式

mcbbs:https://www.mcbbs.net/thread-903335-1-1.html

Github:https://github.com/Arasple/TrChat/releases/tag/1.71

TrHologram:悬浮字

mcbbs:https://www.mcbbs.net/thread-923397-1-1.html

Github:https://github.com/Arasple/TrHologram/releases

Plotsquared:地皮

mcbbs:https://www.mcbbs.net/thread-573771-1-1.html

spigot:https://www.spigotmc.org/resources/plotsquared-v5.77506/

MiniMOTD:修改motd

mcbbs:https://www.mcbbs.net/thread-1075003-1-1.html

spigot:https://www.spigotmc.org/resources/minimotd-server-list-motd-plugin-with-rgb-gradients.81254/

TitleManager:修改玩家tab样式和右侧计分板

mcbbs:https://www.mcbbs.net/thread-810394-1-1.html

spigot:https://www.spigotmc.org/resources/titlemanager.1049/

ViaVersion:跨版本,允许其他版本的客户端进入服务器

mcbbs:https://www.mcbbs.net/thread-1023597-1-1.html

spigot:https://www.spigotmc.org/resources/viaversion.19254/

ViaBackwards:跨版本,兼容更低的版本

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-698692-1-1.html

spigot:https://www.spigotmc.org/resources/viabackwards.27448/

LaggRemover:优化

mcbbs(旧版本,仅供参考):https://www.mcbbs.net/thread-715006-1-1.html

官网:https://dev.bukkit.org/projects/laggremover  (可能需要魔法上网)

ScriptBlockPlus:脚本方块,点击/踩踏/挖掘时使用指令

mcbbs:https://www.mcbbs.net/thread-691900-1-1.html

spigot:https://www.spigotmc.org/resources/1-9-1-16-x-scriptblockplus-mechanics.78413/

VeinMiner:连锁挖矿

mcbbs:https://www.mcbbs.net/thread-600757-1-1.html

spigot:https://www.spigotmc.org/resources/veinminer.12038/

Marriage Master:结婚

mcbbs:https://www.mcbbs.net/thread-905947-1-1.html

spigot:https://www.spigotmc.org/resources/marriage-master-mc-1-7-1-16.19273/

IronElevators:铁块电梯

mcbbs:https://www.mcbbs.net/thread-612833-1-1.html

spigot:https://www.spigotmc.org/resources/ironelevators-1-4-6-1-16.19451/

Minecraft服务端配置文件

Minecraft

server.properties

这个文件是所有服务端(上面列出的主流服务端)都会生成的一个配置文件,位于核心Jar文件同级目录中

一些基础的参数需要在此文件中设置,下面会列出一些常用参数的用法(以1.16的为参考)

  1. allow-flight=false 允许玩家在安装添加飞行功能的mod前提下在生存模式下飞行
  2. allow-nether=true 允许玩家进入下界
  3. difficulty=easy 定义服务器的游戏难度
  4. enable-command-block=false 是否启用命令方块
  5. level-seed= 种子
  6. level-type=default 地图所生成的类型 default:标准的世界 flat:超平坦 largebiomes:巨大生物群系
  7. max-players=20 最大玩家数量
  8. max-tick-time=60000 最大刻时长,单位毫秒,当一个游戏刻的时长超过此数值后游戏会强行停止并崩溃(paper会保存存档、插件数据),设置为-1以禁用
  9. motd=A Minecraft Server 多人游戏界面服务器的信息
  10. online-mode=true 在线模式,设置为false允许离线模式的玩家进入服务器
  11. pvp=true 玩家pvp
  12. server-ip= 服务器ip,如果你不是清楚地知道你在改什么,让它留空,不要动它
  13. server-port=25565 服务器端口,如果你要开两个服务端或者有其他程序占用了25565端口的话可以自行修改
  14. view-distance=10 服务端视距,如果卡顿的话可以减小该值,可以设置为6
  15. white-list=false 白名单,如果开启,没有添加过白名单的玩家将会无法进入服务器,如果是离线模式的服务器,添加白名单的玩家必须进入过服务器,否则即使添加了白名单,此玩家也无法进入服务器(离线服务器建议用插件或mod实现白名单)

未列出的内容见 https://minecraft.fandom.com/zh/wiki/Server.properties#Java.E7.89.88_3

bukkit.yml

基于bukkit的服务端会生成此文件,位于核心Jar文件同级目录中

配置参考wiki(英文) https://bukkit.gamepedia.com/Bukkit.yml

spigot.yml

基于spigot的服务端会生成此文件,位于核心Jar文件同级目录中

配置参考wiki(英文) https://www.spigotmc.org/wiki/spigot-configuration/

paper.yml

基于paper的服务端会生成此文件,位于核心Jar文件同级目录中

参考wiki(英文) https://paper.readthedocs.io/en/latest/server/configuration.html

中文参考

以上文件的部分内容汉化+优化参考 https://www.mcbbs.net/thread-478126-1-1.html

插件配置

插件的配置文件一般都会生成在plugins文件夹中的插件同名文件夹内

一般使用yml文件作为配置文件,具体配置方法看插件发布贴作者的说明

yml文件可以直接用文本文档打开,但是没有语法高亮,推荐使用vscode并添加yaml插件

yml语法 https://www.runoob.com/w3cnote/yaml-intro.html (推荐小白看一看,只要了解基础的语法即可)

如果reload时配置文件有语法错误,后台会报一长串错误,并且指令的返回消息可能不会正常显示

mod配置

mod的配置一般在config文件夹中的mod名开头的文件/文件夹中,1.12前文件格式为cfg,之后为toml

一般文件中会有英文注释,如果看不懂不要乱改(先去机翻

这两种文件都可以直接用文本文档打开,但是没有语法高亮,推荐使用vscode并添加对应插件

Minecraft服务端搭建与运行

Minecraft

安装Java

开服需要安装Java (64位机器装64位Java)

安装Java教程

获取核心

首先选择自己要使用的核心和游戏版本

新建一个文件夹,确保其路径没有中文

下载核心后移动到此文件夹

此处注意,forge和fabric的核心是需要通过安装获得的,其他核心大多是一个单独的Jar文件,会自动下载需要的lib文件

移动核心时

  • forge请连着 libraries 文件夹一起
  • fabric请连着 .fabric.fabric-installer 两个文件夹一起

启动

官服的jar文件可以双击打开,但是其他的核心据我所知均需要使用开服脚本,开服脚本教程

现在的文件夹中应该有核心和启动脚本两个文件

win双击start.bat启动服务器,linux在命令行中输入./start.sh (无法执行的看脚本教程中的添加权限)

启动之后如果是没有自动重启的脚本会一闪然后关闭,此时文件夹中会自动生成 eula.txt

打开 eula.txt ,将其中的 false 改成 true (注意不要打错单词),保存并关闭

此时再启动脚本,服务端会正常启动

Minecraft服务端核心介绍及链接

Minecraft

本教程仅包含Java版的核心,基岩版不在此教程范围内

官服

Mojang官方发布的服务端,不支持插件/MOD,只支持数据包

因为Mojang网站的下载不好找并且只有最新版,所以这里放一个第三方的下载链接收集站

https://mcversions.net/

插件服

插件服是只能使用插件(Plugin)的服务端核心,包括以下几个主流的核心

插件服的插件基本通用,版本向前兼容(比如支持1.13的插件,如果没有描述,多半支持1.14及以后的版本)

  1. Bukkit https://getbukkit.org/
  2. Spigot(Bukkit的分支) https://www.spigotmc.org/ (不提供最新版下载,可以自行构建或寻找第三方构建站)
  3. Paper(Spigot的分支|优化性能) https://papermc.io/downloads (粘性活塞刷物品需要手动配置paper.yml启用,刷沙机不可用,配置方法见/blog/服务端配置/
  4. Airplane(Paper的分支|优化性能) https://ci.tivy.ca/
  5. Purpur(Paper的分支|性能最好) https://purpur.pl3x.net/downloads/
  6. 其他基于Bukkit的插件服

MOD服

MOD服是只能使用MOD的服务端核心,根据加载器的不同,分为以下两种核心

  1. Forge https://files.minecraftforge.net/net/minecraftforge/forge/
  2. Fabric https://fabricmc.net/use/

两者的mod不互通(作者标注了互通的除外)

注意,使用MOD服核心时客户端连接服务端需要

  1. 服务端和客户端的加载器版本(Forge/Fabric版本)一致
  2. 服务端和客户端的服务端MOD一致
  3. 服务端和客户端的服务端MOD版本一致

插件MOD服

同时支持插件和mod的服务端核心,有以下特点

  1. 性能比纯插件/MOD服差
  2. 并非兼容所有插件和mod(不兼容不一定是不能加载,也可能是某个功能不可使用/使用时出现异常)
  3. 客户端的连接同样需要满足和上述mod服相同的条件
  4. 新手服主强烈不建议使用

包括以下几个主流核心

  1. Mohist (使用Forge的mod和Bukkit插件,支持高版本) https://mohistmc.com/download/
  2. Arclight (使用Forge的mod和Bukkit插件,支持高版本) https://github.com/IzzelAliz/Arclight/releases
  3. CatServer (使用Forge的mod和Bukkit插件,仅支持1.12.2) https://catmc.org/
  4. Magma (使用Forge的mod和Bukkit插件,写此教程时尚未支持1.16) https://github.com/magmafoundation/Magma
  5. Sponge (使用Forge的mod和Sponge插件,仅支持1.12.2) https://www.spongepowered.org/

Minecraft服务端教程目录

Minecraft

本教程只讲Java版的核心,基岩版不在此教程范围内

搭建服务端相关

核心介绍

核心是开服所必备的东西,种类繁多,这里对其做简单的分类和介绍

开服脚本

一般开服的设置都比较多,每次都用命令行启动非常麻烦,所以使用脚本

安装Forge

Forge是一种mod加载器,安装了Forge,才可以使用mod(forge的mod)

安装Fabric

Fabric是新出来(相比较Forge)的一种加载器 ,安装了Fabric,才可以使用mod(fabric的mod)

搭建服务端

从零开始搭建一个服务端

配置服务端

搭建完服务端之后对齐进行配置(服务端/插件/mod)

插件相关

插件的安装和配置

mod相关

mod的安装和配置

其他开服相关

更换核心

从一个核心换到另一个核心,或者是更新核心

更换地图

更换地图

地址/端口

端口配置和常见连接服务器失败的解决办法

内网穿透

通过内网穿透使不在一个局域网中的朋友也能链接服务端

DDNS动态解析域名

使用ddns而不是内网穿透,带宽上限就是自己网络的带宽上限,少一个中转,延迟也会更低

日志/崩溃报告

日志/崩溃报告怎么看

Minecraft开服脚本

Minecraft

总是有人不看完就跑来问我,所以把常见问题及其解决办法放到最上面

常见问题

Unrecognized VM option 'xxx'

这里是你使用的开服脚本中的某个参数,不被你的Java接受

xxx可能是 +AggressiveOpts 也可能是 +UseCompressedOops 或者是你启动脚本中的其他不被接受的参数

解决办法:

将开服脚本中的包含xxx的那一段参数删除

Unrecognized VM option '+AggressiveOpts' 就删除 -XX:+AggressiveOpts

Unrecognized VM option ' +UseCompressedOops ' 就删除 -XX:+UseCompressedOops

Could not reserve enough space for object heap

设置了过大的内存

解决办法:

将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)

将参数换成 -Xmx1G -Xms1G

内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了

页面文件太小,无法完成操作

设置了过大的内存

解决办法:

将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)

将参数换成 -Xmx1G -Xms1G

内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了

1.17及以后版本使用了低于Java16的Java

Forge的报错 Forge的报错 Fabric的报错 Fabric的报错 Paper的报错 Paper的报错 Spigot的报错 Spigot的报错

只要出现了以上图片中类似的报错,就意味着你需要使用Java16

解决办法:(二选一)

  1. 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
  2. 卸载其他版本的Java,只留Java16(不推荐)

1.16及以前版本使用了高于(包括)Java16的Java

只要出现了以上图片中类似的报错,就意味着你需要使用Java16之前的版本(不包括Java16,Java8/11等LTS版本都是不错的选择)

解决办法:(二选一)

  1. 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
  2. 卸载其他版本的Java,只留Java8/11(不推荐)

注意

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

开服需要安装Java (64位机器装64位Java)

安装Java教程

通用

开服所用的指令就一条,一般是java开头的那一条,其他部分都是起辅助作用的,比如设置cmd窗口标题、自动重启等

这里拿一个典型的开服指令举例 java -Xmx2G -Xms2G -jar server.jar nogui

这里的 server.jar 是示例,实际使用时请手动改成核心jar的名字

Java

橙色字 java 意为使用可执行文件java,一般java需要在path中(设置path linux win),如果需要指定使用的java的话需要修改path中的java或者使用绝对路径

脚本使用绝对路径指定使用的java(点击展开)

以下的红字为修改的内容
如果你已经有开服命令了,只需要单独替换开头的 java

windows
假设java路径位于 C:\Program Files\Java\jdk1.8.0_301\bin\java
一般的脚本 java -Xmx2G -Xms2G -jar server.jar nogui
需要改为 "C:\Program Files\Java\jdk1.8.0_301\bin\java" -Xmx2G -Xms2G -jar server.jar nogui
linux(不知道是啥的不需要看)
假设java路径位于 /usr/local/jdk1.8.0_301/bin/java
一般的脚本 java -Xmx2G -Xms2G -jar server.jar nogui
需要改为 /usr/local/jdk1.8.0_301/bin/java -Xmx2G -Xms2G -jar server.jar nogui

JVM参数

红色字 -Xmx2G -Xms2g -jar 是jvm参数

设置jvm参数是开服非常重要的一环,使用的最大内存,最小内存,优化参数等都是jvm参数

-Xmx2G 设置最大可用内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xmx256M

-Xms2G 设置初始内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xms256M

-jar 意为通过jar文件启动,后面需要接文件名字,如果后面接的jar文件名字错误或者jar文件损坏则会报错

其他优化参数见 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

MC服务端参数

紫色字 nogui 意为不显示mc自带的ui界面,不管是否添加此参数,服务端始终会将日志输出至命令行

自带的UI界面效果如下(下图是paper的,和原版略有区别)

Windows

创建脚本

在服务端文件夹新建一个txt文件,将其改名为start.bat

若文件没有显示默认的txt扩展名

编辑脚本

右键bat文件,点击编辑

打开后输入下方的开服代码

如果是新建的脚本,文件>另存为 下方的编码选择ANSI,否则中文会乱码,保存

WIN脚本示例

bat
@ECHO OFF
@REM 作者404E
set a=0
echo ------------------------------------------------------------------
echo --                                                              --
echo --                           正在启动                           --
echo --                                                              --
echo ------------------------------------------------------------------
:start
set b = %date:~0,4%.%date:~5,2%.%date:~8,2% %time:~0,2%:%time:~3,2%:%date:~8,2%
title 服务端 重启%a%次 上次重启于%b%
set date1=%date:~0,4%%date:~5,2%%date:~8,2%
set time1=%time:~0,2%%time:~3,2%%time:~6,2%
java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
set date2=%date:~0,4%%date:~5,2%%date:~8,2%
set /a c=%time:~0,2%%time:~3,2%%time:~6,2% - %time1%
if %c% LEQ 1 (
    if %date2% == %date1% (
        echo ------------------------------------------------------------------
        echo --                                                              --
        echo --                  :( 启动异常,请检查启动参数                  --
        echo --                  或者咨询其他人,按任意键退出                 --
        echo --                                                              --
        echo ------------------------------------------------------------------
        pause>null
        exit
    )
)
set /a a=%a%+1
echo ------------------------------------------------------------------
echo --                                                              --
echo --                       将在3秒后自动重启                      --
echo --                       按任意键跳过等待                       --
echo --                      或者直接关闭服务端                      --
echo --                                                              --
echo ------------------------------------------------------------------
timeout /T 3
goto start

以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

Linux步骤

创建&编辑脚本

bash
vi start.sh

按i或insert键进入编辑模式

输入下方示例的中的脚本代码

按esc,输入:wq保存

给予可执行权限

使用 sudo chmod +x start.sh 给脚本添加可执行权限(root用户可不加sudo,直接使用chmod)

脚本示例

bash
#!/bin/bash
#作者404E
echo '------------------------------------------------------------------'
echo '-                                                                -'
echo '-                         开始启动服务端                         -'
echo '-                                                                -'
echo '------------------------------------------------------------------'
while true;
do
    java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                       服务器将在3秒后重启                      -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
        echo -n "·"
        sleep 1s
    done
    echo ''
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                         开始重启服务端                         -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
done

以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

重启时自动备份的脚本

bash
#!/bin/bash
#作者404E
echo '------------------------------------------------------------------'
echo '-                                                                -'
echo '-                         开始启动服务端                         -'
echo '-                                                                -'
echo '------------------------------------------------------------------'
while true;
do
    java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
    # 备份
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                     服务器将在3秒后开始备份                    -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
    echo -n "·"
    sleep 1s
    done
    # 备份保留个数
    c=5
    if [ ! -d "backup" ];then
    mkdir backup
    fi
    rm -rf backup/$c.tar.gz
    for((i=$c;i>0;i--));
    do if [ -f "backup/"$i".tar.gz" ];then
    mv backup/$i.tar.gz backup/`expr $i + 1`.tar.gz
    fi done
    # 创建备份指令,可自行添加文件夹(将#去掉)
    tar -zcf backup/1.tar.gz world #world_nether world_the_end
    # 备份结束
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                  备份完成  服务器将在3秒后重启                 -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
        echo -n "·"
        sleep 1s
    done
    echo ''
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                         开始重启服务端                         -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
done

基于sakura frp的内网穿透

Minecraft

首先你要知道的事情有

  1. sakura frp需要花一块钱实名才能使用
  2. 默认是有带宽限制的(人数不多的话没影响)
  3. 目前能白嫖的节点较少(好用的服务器都被白嫖的占满了)
  4. vip不是必须,但是vip节点和更高的速度确实很香
  5. frp只需要开服或者是对局域网开放的那一方才需要下载使用

注册/登录 账号

在Sakura frp的官网注册 https://www.natfrp.com/

下载frp客户端

进入管理面板 https://www.natfrp.com/user/

点击进入软件下载并选择适合自己操作系统的客户端下载

下载的exe打开并且完成安装

客户端登录

在网页上的管理面板点击进入用户信息

访问密钥默认不显示,鼠标左键点击一次后显示。选中并复制

打开安装好的客户端

创建隧道

此时你应该知道你内网穿透的端口和协议

点击左侧的隧道并且在最上方找到加号,点击创建新隧道

进入隧道创建界面后需要填写的有

  1. 本地ip (如没有特殊情况写 127.0.0.1
  2. 端口 (MC Java服务端默认 25565;Java版客户端每次对局域网开放的端口都是随机的,需要自行填写;基岩版服务端默认 19132
  3. 隧道类型 (MC Java服务端默认 TCP,基岩版服务端默认 UDP
  4. 穿透节点 (选择离自己和联机的朋友都相对较近的区域的节点,最好选择多线的服务器)

其他选项

  1. 隧道名称:留空/自己命名
  2. 备注:同上
  3. 远程端口:可以自己自定义,但是大部分端口已经有人使用,所以大概率要试好几次才能找到一个没人用的端口,故推荐留空让服务器分配

完成后点击创建,弹出的界面询问是否继续创建选择否

开启隧道 & 查看地址

此时隧道虽然创建完毕,但是需要手动开启

手动开启隧道后在左侧找到日志选项,在最下面找到隧道的映射地址,首先自己测试连接正常后即可将地址给别人,让他通过此地址进行连接

此时内网穿透已经完成

注意 & 常见问题

内网穿透的服务器数量少:除非花钱买vip,用vip节点,否则无解,满了的服务器怎么给你用?

客户端对局域网开放关闭重新开之后连接不了:每次对局域网开放的端口都是随机的,需要重新创建隧道(或者使用联机mod设置端口为固定端口)

vip流量:只是放宽了带宽限制,对于人数不是非常多的服务器来说并没有必要,在默认的带宽限制下也是可以正常游玩的

使用内网穿透进入服务器的玩家地址都是127.0.0.1,绝对不要banip,会导致所有通过内网穿透进入服务器的玩家都无法进入服务器

安装Optifine高清修复

Minecraft

下载

  1. 进入Optifine官网 https://www.optifine.net/downloads
  2. 选择自己需要的版本下载(要求小版本也对应),下载时点击右侧的Mirror按钮
  3. 下载完成的文件应该是一个Jar文件

注意

服务端不需要也不能安装Optifine,如果安装了会导致无法启动

安装

原版

  1. 双击打开Optifine的Jar文件,选择安装位置为 客户端文件夹/.minecraft 文件夹

    • 如果打不开,在Jar所在的文件夹中的空白地方,按shift+右键点击在此处打开Powershell

    • 在其中输入java -jar optifineJar的完整文件名 并且回车

    • 如果不能打开可以找我询问,并附带powershell中显示的内容截图

    • 在其中输入java -jar optifineJar的完整文件名 并且回车

    • 如果不能打开可以找我询问,并附带powershell中显示的内容截图

  2. 选择 客户端文件夹/.minecraft 文件夹

  3. 点击左下角的install安装

Forge

  1. 将下载的Optifine的Jar文件移动到 游戏文件夹/.minecraft/mods
  2. 重启游戏

Fabric

  1. 下载OptiFabric
  2. 将Optifine和OptiFabric的Jar文件移动进 客户端文件夹/.minecraft 文件夹
  3. 重启游戏

更新

  1. 下载新版本的Optifine的Jar文件
    1. 通过安装方式使用的Optifine需要下载新版本的按照上面的步骤重新安装Optifine
    2. Forge在mods文件夹中找到旧的Optifine的Jar文件,删除并把新的Optifine移动到mods文件夹
    3. Fabric需要同时更新Optifine和OptiFabric,在mods文件夹中找到旧的Optifine和OptiFabric的Jar文件,删除并把新的Optifine和OptiFabric移动到mods文件夹
  2. 重启游戏

安装Forge/Fabric

Minecraft

前言

如果需要进入加了mod的服务器,你的客户端需要满足以下要求

  1. 安装了与服务端相同版本的Forge/Fabric
  2. 客户端的服务端mod与服务端一致(包括mod版本),不能多也不能少
  3. 客户端mod不影响

mod大致分为3种

  1. 只需客户端添加的[客户端mod]
  2. 需要客户端和服务端同步添加的[服务端mod]
  3. 只需要服务端添加的[纯服务端mod]

mod服进服需要客户端和服务端的[服务端mod]同步

并且mod和Forge的版本也需要同步

定义:

  • 服务端mod: 添加了新物品,新生物,新游戏机制的
  • 客户端mod: 修改了一些渲染或者像optifine,血条,小地图,jei
  • 纯服务端mod: 比较少见,除非mod发布页面写了只需要服务端安装(比如平坦基岩生成)
    • ps: 有些客户端mod的某些功能需要服务端同步安装才可以使用
    • 但是服务端不安装也不影响其基本功能

进入插件服时客户端不能安装服务端mod

官启 & 服务端

官启没有一键安装Forge/Fabric的功能,需要自己下载Forge/Fabric的jar,手动安装

服务端也是如此

安装过程参考

Forge

Fabric

HMCL

  1. 打开HCML,点击左侧的齿轮,然后点击左上角的加号安装一个新的游戏版本
  2. 上方的下载源切换到MCBBS(国内较快)
  3. 选择自己要安装的游戏版本
  4. 点击此游戏版本进入安装界面
  5. 点击Forge/Fabric,选择最上方的最新版本
  6. 不要选择Optifine(以mod形式安装更加稳定且便于更换)
  7. 点击右下角的安装
  8. 安装完成之后回到主界面并在右下角切换游戏版本为装了Forge/Fabric的版本

PCL2

  1. 打开PCL2,点击左下角的版本选择,选择添加已有文件夹或添加新 .minecraft 文件夹
  2. 在右侧点击下载游戏
  3. 选择自己需要的版本
  4. 选择Forge/Fabric
  5. 不要选择Optifine(以mod形式安装更加稳定且便于更换)
  6. 点击右上角的安装
  7. 安装完成之后回到主界面并在右下角切换游戏版本为装了Forge/Fabric的版本

下载并使用Fabric安装器

Minecraft

下载

Fabric 下载地址:https://fabricmc.net/use/

windows用户点击右侧的按钮下载安装器(如下图)

linux用户或者使用命令行安装的点击左侧的按钮下载安装器(如下图)

使用

exe

  1. 双击打开安装器的exe文件
    1. 客户端选择左上角的客户端
    2. 服务端选择左上角的服务端
  2. 选择游戏版本,加载器版本默认最新即可
  3. 安装位置
    1. 服务端就是服务端核心所在的文件夹(空文件夹也没问题,安装器会自动下载原版jar作为启动的库文件)
    2. 客户端选择 客户端文件夹/.minecraft 文件夹
  4. 点击确定开始安装
  5. 安装成功后客户端在启动器的启动选项中选择带Fabric的版本启动
  6. 服务端的启动脚本中 -jar 后的参数填写他自动生成的名字带fabric的jar,安装器最后有可选的生成启动脚本选项,可以让他自动生成

Jar

客户端

在命令行中输入 java -jar fabric-installer.jar client -dir 安装路径

安装路径是你的 .minecraft 文件夹的路径

其他可用参数

  • -mcversion Minecraft游戏版本,默认最新
  • -loader FabricLoader版本,默认最新

服务端

在命令行中输入 java -jar fabric-installer.jar server

其他可用参数

  • -dir 安装位置,默认安装Jar所在文件夹,也就是 .
  • -mcversion Minecraft游戏版本,默认最新
  • -loader FabricLoader版本,默认最新
  • -downloadMinecraft 下载官服的Jar(Fabric启动需要官服作为库文件)

到此Fabric安装器的使用已经讲完了,如果有疑问或者错漏可以通过qq 869951226 找我

下载并使用Forge安装器

Minecraft

下载

Forge的安装器是客户端和服务端共用的,下载下来是一个jar文件

Forge下载地址:https://files.minecraftforge.net/

下载的时候先找到自己要的版本,然后右键复制链接地址,拿到一个如下的链接

https://adfoc.us/serve/sitelinks/?id=271228&url=**https://maven.minecraftforge.net/net/minecraftforge/forge/1.17.1-37.0.17/forge-1.17.1-37.0.17-installer.jar**

从这个链接里面截取加粗紫色字的那一段链接,直接打开就是下载链接

因为有些人实在是太蠢,受不了了,我特地又加了这张截图 因为有些人实在是太蠢,受不了了,我特地又加了这张截图

使用

使用之前确保自己安装了Java并且正确配置了jar文件的打开方式(java.exe)

安装Java

Java下载见 https://www.java.com/en/download/manual.jsp

注意:

  1. 下载时选择正确的架构,64位的操作系统选择64位的java,32位的操作系统选择32位的java(32位的可用内存受限制)
  2. Offline的离线安装包下载较快,推荐使用(在线安装包国内下载极慢)
  3. 安装的时候选择一个自己找得到的位置,或者在安装时记下默认的安装路径,后面会用到

打开方式不正常的解决办法

  1. 右键jar,点击属性
  2. 找到打开方式右侧的更改
  3. 找到如下图(Java启动项)的选项
    1. 如果找到了的话选中并跳到第4步
    2. 如果没有的话在最下面找到更多应用
    3. 还没有的话点击在这台电脑上查找其他应用
    4. 找到你安装Java的位置,进入bin文件夹选择javaw.exe
  4. 双击打开Jar文件
    1. 如果双击打开正常的跳到第5步(打开之后等待一会儿)

    2. 在Jar所在的文件夹中的空白地方,按shift+右键点击在此处打开Powershell

    3. 在其中输入java -jar 你的安装jar完整名字 并且回车

    4. 如果不能正常打开可以找我询问,并附带powershell中显示的内容截图

  5. 看下方的安装步骤

安装步骤

  1. 服务端和客户端的操作有所不同
    1. 客户端选择第一个Client
    2. 服务端选择第二个Server
  2. 点击右下角的三个点选择安装路径
    1. 服务端就是服务端核心所在的文件夹(空文件夹也没问题,安装器会自动下载原版jar作为启动的库文件)
    2. 客户端选择 客户端文件夹/.minecraft 文件夹
  3. 点击确定开始安装
  4. 如果安装失败可以多试几次,国内网络环境不佳,连接超时属于正常现象,如果多次失败可以试试早上安装(亲身经历表明这是有用的)
  5. 安装成功后
    1. 客户端在启动器的启动选项中选择带Forge的版本启动
    2. 服务端的启动脚本中 -jar 后的参数填写他自动生成的名字带forge的jar,一般格式为forge-游戏版本-forge版本.jar,注意不要选带install的jar,那是安装jar不是启动jar(如果是更新的话需要更换为新生成的jar的文件名)

命令行安装步骤

此方式不能安装客户端

在命令行中输入 java -jar forge-1.1x.x-xx.x.xx-installer.jar -installServer 目标路径

其中目标路径是要安装forge的服务端文件夹

等到运行完并且出现

The server installed successfully You can delete this installer file now if you wish

字样时,代表安装成功

到此Forge安装器的使用已经讲完了

粘液科技货运教程

Minecraft

功能方块

货运管理器

货运的核心,以下所有方块都需要此方块作为核心,范围5x5x5

范围是指上/下/左/右/前/后方5格(包含)以内的方块才能连接到货运管理器,不能连接粒子效果没覆盖的位置的方块

如图所示,有玻璃放置的地方放置货运节点才能正确连接货运管理器

不推荐放置多个,可用货运节点(连接器)扩展范围

货运节点(连接器)

在连接上货运管理器的前提下,扩展其连接范围

货运节点(输入)(蓝色花纹)

从附着的容器中抽取物品, 可以设置频道,可以设置黑/白名单

如果要抽取所有物品:改成黑名单并且不要在左边的3x3的格子内放任何物品

货运节点(输出)(黄色花纹)

将物品放入附着的容器,可以设置频道,但是不能设置黑/白名单

高级货运节点(输出)(黄色花纹)

将物品放入附着的容器,可以设置频道,可以设置黑/白名单

简单的实现

A -> B

  1. 需要一个货运管理器(没有连接节点是出现如图字样是正常情况)

  2. 放置容器和输出/输入节点

  3. 在输入节点(蓝色花纹)的设置界面中修改白名单为黑名单

  4. 然后输入节点连接的容器中的方块就会自动抽取到输出节点连接的容器上了

多节点

  1. 在上一步的基础上另外设置一对输入节点和输出节点及其容器
  2. 修改输入节点为黑名单
  3. 现在两对传输节点会同时工作
  4. 但是其中的物品不会保留原先的顺序(最终位于哪个容器是不确定的)

频道

  1. 在刚才新建的一对节点中设置频道为2(橙色羊毛)
  2. 现在这两对节点就是互不干扰的,传输的物品不会混到一起

黑/白名单

  1. 黑名单是指除了左边的格子中匹配的物品之外的物品才会被抽取/放入
  2. 白名单是指只有左边的格子中匹配的物品才会被抽取/放入
  3. 假设有一个容器,我们只从中抽取铁矿石,那么我们应该设置白名单并且在左侧的格子中放置一个铁矿石(只抽取铁矿石)(数量无所谓),如果设置了无效请检查输出节点的频道,模式以及对应的容器是否已满
  4. 再假设这个容器有另一个抽取节点,从中抽取其他的物品,并且要让他不抽取铁矿石,那么我们应该设置黑名单并且也在左侧的格子中放置一个铁矿石(抽取铁矿石之外的物品)(数量无所谓),如果设置了无效请检查输出节点的频道,模式以及对应的容器是否已满