Skip to content

基于 Fabric 1.21.10 的起床服务器搭建

第一部分:搭建Fabric服务器

准备工作


在 Linux 环境搭建 (以 Ubuntu/Debian 为例)

1. 安装必要的JAVA环境

bash
# Ubuntu/Debian
apt update && apt install openjdk-21-jre-headless screen -y

2. 创建服务器目录

bash
mkdir bw_server
cd bw_server
# 然后通过FTP等方式上传 server.jar 到此目录

3. 首次运行服务器

bash
# 使用screen保持会话
screen -S minecraft

# 首次启动
java -Xmx2G -Xms1G -jar java -Xmx2G -jar fabric-(自行填写实际的JAR).jar nogui nogui

# 退出screen会话(先按Ctrl+A,再按D)

4. 同意EULA协议

bash
nano eula.txt
# 将 eula=false 改为 eula=true
# 然后保存并退出编辑器(先按ctrl+X,再按Y,最后按Enter)

Windows环境搭建

1. 安装Java环境

2. 创建服务器文件夹

  • 在桌面或其他位置创建新文件夹 (不要使用中文命名)
  • 将server.jar放入此文件夹

3. 创建启动脚本

在文件夹中创建start.bat文件,内容为:

bat
@echo off
java -Xmx2G -Xms1G -jar fabric-(自行填写实际的JAR).jar nogui
pause

4. 首次运行并同意EULA

  • 双击start.bat运行
  • 打开生成的eula.txt 并将eula=false改为eula=true

第二部分:安装起床战争数据包

数据包安装步骤 (Linux/Windows通用)

1. 停止服务器

确保服务器完全停止运行 (终端运行 stop 指令)

2. 删除原有的世界(Word)文件夹

bash
# Linux
cd bw_server
rm -rf world

# Windows
# 直接删除world文件夹

3. 上传并解压数据包

注意事项:

下载文件时,请仔细核对文件夹和文件名称:

文件夹命名格式: 起床战争v版本号【MC版本号】

包含的文件:

  • 数据包: 起床战争数据包 v版本号.7z
  • 资源包: [MC版本号] 起床战争-资源包 [v版本号].zip

文件类型识别:

  • .7z 后缀 → 数据包文件
  • .zip 后缀 → 资源包文件
bash
# Linux
# 通过FTP或其他方式上传数据包文件到服务器
unzip 起床战争数据包_v版本号.7z
# 查看解压出的文件夹名
ls
# 将解压出的文件夹重命名为world
mv 解压出的文件夹名 world

# Windows
# 解压7z文件,将文件夹重命名为world

4. 配置服务器设置

我们需要编辑server.properties文件,以下是建议的配置:

properties
# 服务器简介设置(可选,也可以按照喜好自行填写)
motd=§f                §e§lBED WARS §6[1.21.10]§f\n           §b§l单挑模式 §7| §3§l枪械模式 §7| §9§l疾速模式

# 资源包配置(重要!)
require-resource-pack=true
resource-pack=你的资源包的直链URL (必须是直链!)
resource-pack-sha1=资源包SHA1哈希值 (请自行计算哈希)

# 体验优化设置
allow-flight=true // 开启允许飞行,避免不必要的误判
// 吐个槽:实际上真实的外挂可以随意的绕过这个检测
// 而且禁用的话可能会因为各种原因误判然后被无辜的踢出
// 因此你禁用了飞行也没什么用
// Tips:而且Fabric端可以装载更高级的反作弊,这样对比着
spawn-protection=0 // 设置出生点保护为0,也就是禁用

enable-command-block=true
// 在1.21.10版本,enable-command-block的配置项已被删除
// 其默认为开启的,因此不需要管

5. 获取资源包直链和SHA1值

资源包直链获取方法:

  • 使用云存储服务(如123网盘、Google Drive、OneDrive等)来生成直链
  • 或使用专业的文件托管服务
  • 把资源包丢在服务器上并复制其的访问链接
  • 除此之外,必须确保链接是支持HTTPS的!

SHA1值计算方法

bash
# Linux
sha1sum 资源包文件名.zip

# Windows
certutil -hashfile 资源包文件名.zip SHA1

6. 启动服务器验证

bash
# Linux(在screen会话中)
java -Xmx2G -Xms1G -jar server.jar nogui

# Windows
双击start.bat

配置说明

资源包配置详解

  • require-resource-pack=true - 强制客户端使用资源包
  • resource-pack - 必须是可直接下载的URL链接
  • resource-pack-sha1 - 验证资源包完整性,并验证其是否已被篡改

性能优化设置

  • allow-flight=true - 启用飞行,防止不必要的误判
  • spawn-protection=0 - 禁用出生点保护,避免影响游戏机制

必要检查:

  • 启用命令方块 - 以确保数据包功能正常 (在1.21.10版本,这个服务器配置已被删除,其默认为开启的,因此不需要管)

安装MOD/反作弊 (可选)

现在,您可以按照自己的需求来安装一些MOD 这里主要安装反作弊MOD

反作弊安装步骤

  1. 下载反作弊MOD

  2. 安装MOD

    • 将下载的JAR文件放入服务器的mods文件夹中
    • 重启服务器以加载MOD
  3. 验证安装

    • 启动服务器后,检查控制台是否有Grim加载成功的消息
    • 确认config文件夹中已生成GrimAC配置文件夹

反作弊配置

反作弊提供了详细的配置选项 以下是针对起床战争服务器优化的配置方案:

config.yml - 主要检测参数配置

yaml
# config.yml - 主要配置
# 版权所有 © 2025 DefineOutside 及贡献者 / 遵循 GPLv3 开源协议
# 由 雾霭 做了些许针对BW数据包的修改

alerts:
    print-to-console: true
    proxy:
        send: false
        receive: false

verbose:
    print-to-console: false
check-for-updates: false

client-brand:
    ignored-clients:
        - "^vanilla$"
        - "^fabric$"
        - "^lunarclient:v\\d+\\.\\d+\\.\\d+-\\d{4}$"
        - "^Feather Fabric$"
        - "^labymod$"
    disconnect-blacklisted-forge-versions: true

spectators:
    hide-regardless: false
    allowed-worlds:
        - ""

max-transaction-time: 5
disable-pong-cancelling: false
cancel-duplicate-packet: true
ignore-duplicate-packet-rotation: false

Simulation:
    setback-decay-multiplier: 0.85
    threshold: 0.25
    immediate-setback-threshold: 1.2
    max-advantage: 6
    max-ceiling: 6
    setback-violation-threshold: 12

Phase:
    setbackvl: 1
    decay: 0.005

AirLiquidPlace:
    cancelvl: 0

FabricatedPlace:
    cancelvl: 5

FarPlace:
    cancelvl: 5

PositionPlace:
    cancelvl: 5

RotationPlace:
    cancelvl: 5

NoSlow:
    threshold: 0.08
    setbackvl: 12
    decay: 0.35

Knockback:
    setback-decay-multiplier: 0.999
    threshold: 0.001
    immediate-setback-threshold: 0.1
    max-advantage: 1
    max-ceiling: 4

Explosion:
    threshold: 0.001
    setbackvl: 3

TimerA:
    setbackvl: 5
    drift: 120

TimerLimit:
    ping-abuse-limit-threshold: 1000

NegativeTimer:
    drift: 1200

VehicleTimer:
    setbackvl: 10

PacketOrderI:
    exempt-placing-while-digging: false

Reach:
    threshold: 0.0013
    block-impossible-hits: true
    enable-post-packet: true

exploit:
    allow-sprint-jumping-when-using-elytra: true
    allow-building-on-ghostblocks: true
    distance-to-check-if-ghostblocks: 2

debug-pipeline-on-join: false
experimental-checks: true

reset-item-usage-on-item-update: true
reset-item-usage-on-attack: true
reset-item-usage-on-slot-change: true

packet-spam-threshold: 100
debug-packet-cancel: false

max-ping-out-of-flying: 1000
max-ping-firework-boost: 1000

history:
    enabled: true
    entries-per-page: 15
    server-name: Prison
    database:
        type: SQLITE
        host: localhost
        port: 3306
        database: grim
        username: root
        password: ""

config-version: 9

messages.yml - 反作弊消息提示配置

yaml
prefix: "&b反作弊 &8»"

alerts-enabled: "%prefix% &f警报已开启"
alerts-disabled: "%prefix% &f警报已禁用"
verbose-enabled: "%prefix% &f详细警报已开启"
verbose-disabled: "%prefix% &f详细警报已禁用"
brands-enabled: "%prefix% &f显示客户端名牌已开启"
brands-disabled: "%prefix% &f显示客户端名牌已禁用"
client-brand-format: "%prefix% &f%player%用%brand%加入了游戏"
console-specify-target: "%prefix% &c您必须指定一个目标作为控制台!"
reloading: "%prefix% &7重载配置中..."
reloaded: "%prefix% &f配置已经重载完毕."
reload-failed: "%prefix% &c重载配置失败."
player-not-found: "%prefix% &c指定玩家不存在或离线!"
player-not-this-server: "%prefix% &c指定玩家不在此服务器上!"
spectate-return: "\n%prefix% &f点击这里返回之前的位置\n</hover></click>"
cannot-spectate-return: "%prefix% &c您只能在观看玩家后执行此操作"
cannot-run-on-self: "%prefix% &c你不能对自己使用此命令!"
upload-log: "%prefix% &f已经将日志文件上传至: %url%"
upload-log-start: "%prefix% &f上传中...请等待"
upload-log-not-found: "%prefix% &c找不到该日志."
upload-log-upload-failure: "%prefix% &c上载此日志时出错,有关详细信息,请参阅控制台"
run-as-player: "%prefix% &c此命令只能由玩家使用!"
run-as-player-or-console: "%prefix% &c此命令只能由玩家或控制台使用!"

alerts-format: "%prefix% &f%player% &b触发了&f%check_name%%experimental% &f(x&c%vl%&f) &7%verbose%"
alerts-format-proxy: "%prefix% &f[&cproxy&f] &f%player% &b触发了&f%check_name%%experimental% &f(x&c%vl%&f) &7%verbose%"
experimental-symbol: "*"

profile:
    - "&7"
    - "%prefix% &f%player% &b的信息"
    - "&b延迟: &f%ping%"
    - "&b版本: &f%version%"
    - "&b客户端型号: &f%brand%"
    - "&b水平敏感度: &f%h_sensitivity%%"
    - "&b垂直敏感度: &f%v_sensitivity%%"
    - "&bFastMath: &f%fast_math%"
    - "&7=="
help:
    - "&7=="
    - "/grim alerts &f- &7显示/隐藏警报"
    - "/grim brands &f- &7显示/隐藏客户端名牌"
    - "/grim profile <player> &f- &7查看玩家信息"
    - "/grim help &f- &7查看此帮助消息"
    - "/grim debug <player> &f- &7开发者预测输出"
    - "/grim perf &f- &7开发者毫秒预测"
    - "/grim reload &f- &7重新加载配置"
    - "/grim spectate <player> &f- &7观看玩家"
    - "/grim verbose &f- &7显示无缓冲区的每个拉回"
    - "/grim log [1-999] &f- &7预测标志的调试日志"
    - "/grim history <player> [页面] &f- &7显示玩家之前的警报"
    - "&7"

grim-history-load-failure: "%prefix% &c历史子系统加载失败!请检查服务器控制台中的错误。"
grim-history-disabled: "%prefix% &c历史子系统已禁用!"
grim-history-header: "%prefix% &b显示&f%player%的日志&f(&f%page%&b/&f%maxPages%&f)"
grim-history-entry: "%prefix% &8[&f%server%&8] &b失败&f%check%&f(x&c%vl%&f)&7%verbose%&f(&b%timeago%前&7)"

punishments.yml - 惩罚配置

yaml
# punishments.yml - 惩罚作弊者配置
# 由 雾霭 做了些许针对BW数据包的修改
# 数据包专门提供了一个函数,用于处理作弊者
# 作弊者在被检测到时会被踢出,达到三次将会被自动封禁

Punishments:
  Simulation:
    remove-violations-after: 300
    checks:
      - "!Simulation"
      - "GroundSpoof"
      - "Timer"
      - "TimerLimit"
      - "NoFall"
    commands:
      - "100:40 [alert]"
      - "120:0 execute as %player% at @s run function sv:server/punish/test"

  Knockback:
    remove-violations-after: 300
    checks:
      - "Knockback"
      - "Explosion"
    commands:
      - "5:5 [alert]"
      - "10:0 execute as %player% at @s run function sv:server/punish/test"

  Post:
    remove-violations-after: 300
    checks:
      - "Post"
    commands:
      - "20:20 [alert]"
      - "40:0 execute as %player% at @s run function sv:server/punish/test"

  BadPackets:
    remove-violations-after: 300
    checks:
      - "BadPackets"
      - "PacketOrder"
      - "Crash"
    commands:
      - "20:20 [alert]"
      - "25:0 execute as %player% at @s run function sv:server/punish/test"

  Reach:
    remove-violations-after: 300
    checks:
      - "Reach"
    commands:
      - "1:1 [alert]"
      - "1:0 execute as %player% at @s run function sv:server/punish/test"

  Hitboxes:
    remove-violations-after: 300
    checks:
      - "Hitboxes"
    commands:
      - "5:3 [alert]"
      - "5:0 execute as %player% at @s run function sv:server/punish/test"

  Misc:
    remove-violations-after: 300
    checks:
      - "Vehicle"
      - "!NoSlow"
      - "Sprint"
      - "MultiActions"
      - "Place"
      - "Baritone"
      - "Break"
      - "TransactionOrder"
      - "Elytra"
      - "Chat"
      - "Exploit"
    commands:
      - "10:5 [alert]"
      - "30:0 execute as %player% at @s run function sv:server/punish/test"

  Combat:
    remove-violations-after: 300
    checks:
      - "Interact"
      - "Aim"
    commands:
      - "20:40 [alert]"
      - "30:0 execute as %player% at @s run function sv:server/punish/test"

  Autoclicker:
    remove-violations-after: 300
    checks:
      - "Autoclicker"
    commands:
      - "20:40 [alert]"
      - "20:40 [log]"

配置说明

  1. config.yml: 主要调整了部分检测的敏感度,针对起床战争进行了优化
  2. messages.yml: 提供了完整的中文提示信息,方便管理员理解反作弊警告
  3. punishments.yml: 设置了渐进式惩罚机制,从报告到管理员到执行惩罚函数 (作弊者在被检测到时会被踢出,达到三次将会被自动封禁)

重要提示: 修改配置后需要使用 /grim reload 命令重新加载配置或重启服务器才能生效!


最终验证

启动服务器后,通过以下步骤验证:

  1. 使用客户端连接服务器
  2. 确认资源包正常加载
  3. 测试数据包各项功能
  4. 游玩几局,检查功能是否正常

至此,你的起床战争服务器已搭建完成! 如有问题,请加入赞助者群聊以获取技术支持 (链接通常在购买渠道的私信内,还请仔细查看!)


本文贡献者:雾霭

起床战争 | 官方文档