logo
0
0
WeChat Login
Forkfrommingpixel.net/war-vs-war, aheadmaster6 commits, behindmaster6 commits

WarvsWar

Version Minecraft Forge TACZ License

与 TACZ 深度集成的 Minecraft 竞技对战系统

支持团队死斗(TDM)与自由乱斗(FFA),提供完整的战备管理、地图投票、复活机制、统计追踪与双 HUD 风格

功能特性快速开始游戏模式配置指南开发文档


功能特性

🎯 核心竞技系统

游戏模式

  • TDM(团队死斗):红蓝对抗,团队协作击杀得分
  • FFA(自由乱斗):所有人互为敌人,个人击杀排名

对局流程

  • 大厅投票系统:实时票数统计、取消投票、强制开始
  • 自动开始机制:满足投票条件自动倒计时
  • 复活倒计时:死亡后观战,倒计时结束自动复活
  • 结算展示:MVP 评选、排行榜、游戏时长统计

战斗机制

  • 可配置玩家最大生命值(20HP~100HP)
  • 友军伤害比例控制(0%~100%)
  • 助攻判定系统(可配置时间窗口)
  • 战备锁定机制:移动或战斗后自动锁定装备

🔫 TACZ 深度集成

虚拟战备系统

  • 自动扫描所有已加载的 TACZ 枪包
  • 动态分类显示(步枪/冲锋枪/狙击枪/霰弹枪等)
  • 支持拖拽滚动与右键快速卸载
  • 多预设方案(3 套可切换配置)

虚拟弹药系统

  • 根据枪械类型自动计算备弹
  • 支持扩容弹匣自动适配
  • 无需在背包中携带弹药物品
  • 可配置各类型枪械的弹匣数量

虚拟改装系统

  • 无需拥有实体配件即可改装
  • 配件配置持久化保存
  • 集成原生 Tooltip 预览枪械数值
  • 战备锁定后禁止改装(竞技平衡)

武器管理

  • 武器携带限制:最多 2 把主武器 + 1 把手枪
  • 可配置死亡掉落行为(主武器/副武器/手枪/近战/投掷物)
  • 战备物品快速消失(默认 15 秒,可配置)
  • 支持 LRTactical 近战与投掷武器(可选依赖)

🎨 双 HUD 风格系统

经典风格(BossBar)

  • 使用原版 BossBar 显示对局信息
  • 兼容性最佳,适合传统玩家
  • 支持 Tab 列表详细统计

现代风格(CS2)

  • 仿 CS2 紧凑透明 HUD
  • 中心时间块 + 分数块 + 目标进度条
  • TDM 模式支持双方头像条或存活摘要
  • 自适应布局,窄屏自动降级
  • 按 Tab 键自动隐藏,不遮挡详细信息
  • 服务端权威数据,客户端平滑倒计时

HUD 特性

  • 实时同步对局状态(Full/Delta 增量更新)
  • 时间紧迫色彩提示(≤30s 黄色,≤10s 红色)
  • 玩家状态叠层(存活/死亡/掉线)
  • 可配置透明度、垂直偏移、服务器名称
  • 支持结算阶段继续显示(可配置)

🗺️ 地图管理系统

地图创建与配置

  • 支持中文地图名称
  • 可视化区域划定(区域魔杖)
  • 自定义地图图标(头颅库)
  • 多队伍出生点配置(红/蓝/FFA/观察者)

地图投票

  • 实时票数统计与广播
  • 支持取消投票
  • 管理员强制指定地图
  • 地图信息查看(区域数量、图标等)

⚙️ 配置系统

Cloth Config 集成

  • 主菜单配置界面(Mods → Config)
  • 游戏内配置界面(/ww config)
  • 分类清晰:对局设置 / 场景与掉落 / 客户端设置
  • 实时生效,无需重启

服务端配置

  • 游戏规则:模式、分数上限、时间限制、友军伤害
  • 对局参数:最大生命值、自然回血、名牌可见性
  • 场景设置:昼夜循环、伪和平模式
  • 掉落配置:各槽位掉落行为、物品消失时间
  • 弹药配置:各类型枪械弹匣数量
  • 复活延迟:可配置 0-60 秒(0 为立即复活)

客户端配置

  • HUD 样式选择(现代/经典)
  • HUD 透明度与垂直偏移
  • 头像显示与存活人数格式
  • 结算阶段 HUD 显示
  • 数据过期超时设置

🛡️ 队伍装备系统

实战装备

  • 为红蓝队配置战斗盔甲
  • 自动装备与卸载
  • 支持自定义盔甲属性

装饰外观(需要 Cosmetic Armor Reworked)

  • 独立的装饰盔甲槽位
  • 可隐藏实战盔甲外观
  • 仅影响视觉,不影响属性

📊 统计与追踪

玩家统计

  • 击杀/死亡/助攻(KDA)
  • 伤害统计
  • MVP 评选(击杀数优先,死亡数次要)

对局总结

  • 游戏时长统计
  • 排行榜展示(前 8 名)
  • 获胜队伍/玩家
  • 大厅展示上局总结

🔧 管理工具

命令系统

  • 完整的帮助系统(/ww help)
  • 游戏控制:开始、停止、强制结束
  • 配置管理:图形界面或命令行
  • 地图管理:创建、删除、配置、查看
  • 工具:区域魔杖、头颅库、队伍装备

保护机制

  • 赛前保护:非游戏状态玩家无敌(可配置)
  • 大厅保护:禁止丢弃物品与放入展示框
  • 伪和平模式:禁止怪物生成 + 饱和效果

快速开始

依赖要求

必需

  • Minecraft 1.20.1
  • Forge 47.2.0+
  • TACZ 1.1.7+(开发环境依赖通常放在 libs/

可选

  • LRTactical:提供近战与投掷武器(服务端与客户端需同时安装)
  • Cosmetic Armor Reworked:启用装饰盔甲功能
  • Cloth Config:提供图形配置界面(强烈推荐)

安装步骤

  1. 安装 Forge 与 TACZ
  2. warvswar-<version>.jar 放入 mods/ 文件夹
  3. 启动游戏(首次启动会生成配置文件)

最小可玩配置

作为服务器管理员(OP),执行以下命令:

# 1. 设置大厅区域(站在大厅中心执行) /ww setlobby 10 # 2. 创建地图(会打开图标选择界面) /ww map create 沙漠风暴 # 3. 使用区域魔杖划定出生区域 # 创建地图后会自动获得所有队伍的区域魔杖 # 左键设置点1,右键设置点2并保存区域 # 为红队、蓝队、FFA、观察者分别划定区域 # 4. 完成!玩家现在可以投票并开始游戏

游戏模式

TDM(团队死斗)

规则

  • 红蓝两队对抗
  • 击杀敌方玩家得 1 分
  • 先达到目标分数或时间结束时分数高的队伍获胜

特色

  • 队伍选择界面(大厅物品)
  • 双方头像条实时显示(现代 HUD)
  • 存活人数摘要(窄屏自动降级)
  • 队伍装备配置(实战 + 装饰)

FFA(自由乱斗)

规则

  • 所有人互为敌人
  • 击杀任何玩家得 1 分
  • 先达到目标分数或时间结束时分数最高的玩家获胜

特色

  • 无队伍概念,完全个人竞技
  • 显示领先者与自己的分数
  • 排行榜实时更新

配置指南

服务端配置文件

配置文件位置:config/warvswar-server.toml

游戏规则

defaultGameMode = "TDM" # 游戏模式:TDM / FFA defaultScoreLimit = 30 # 分数上限:1-1000 defaultTimeLimit = 600 # 时间限制(秒):60-7200 defaultFriendlyFire = 0.0 # 友军伤害比例:0.0-1.0 playerMaxHealth = 20.0 # 玩家最大生命值:1.0-1024.0 naturalRegen = false # 自然回血 nameTagVisibility = "HIDE_FOR_OTHER_TEAMS" # 名牌可见性

场景设置

daylightMode = "CYCLE" # 昼夜模式:CYCLE / LOCK_DAY / LOCK_NIGHT dayTimeTicks = 6000 # 白天时间刻(LOCK_DAY 时生效) nightTimeTicks = 18000 # 夜晚时间刻(LOCK_NIGHT 时生效) pseudoPeaceful = true # 伪和平模式

对局参数

autoStart = true # 自动开始 pregameProtection = true # 赛前保护 weaponLimit = true # 武器携带限制 assistWindow = 20 # 助攻判定窗口(秒) loadoutDropDespawnTime = 300 # 战备物品消失时间(ticks) respawnDelay = 5 # 复活延迟时间(秒)

掉落配置

dropPrimary = true # 掉落主武器 dropSecondary = true # 掉落副武器 dropPistol = true # 掉落手枪 dropMelee = false # 掉落近战 dropThrowable = false # 掉落投掷物

弹药配置

[magazines] pistol = 3 # 手枪弹匣数 rifle = 4 # 步枪弹匣数 smg = 4 # 冲锋枪弹匣数 sniper = 3 # 狙击枪弹匣数 shotgun = 5 # 霰弹枪弹匣数 mg = 4 # 机枪弹匣数 rpg = 6 # 火箭筒弹匣数 other = 3 # 其他类型弹匣数

客户端配置文件

配置文件位置:config/warvswar-client.toml

HUD 设置

[client] hudStyle = "CS2" # HUD 样式:BOSSBAR / CS2 hudOpacity = 0.9 # HUD 透明度:0.0-1.0 hudShowAvatars = true # 显示头像条(TDM) hudAliveSummaryFormat = "RATIO" # 存活人数格式:X / RATIO hudShowEndingHud = true # 结算阶段显示 HUD hudStaleTimeout = 5 # 数据过期超时(秒) hudOffsetY = 0 # HUD 垂直偏移(像素) hudServerName = "WAR VS WAR" # 服务器名称 loadoutShowSilhouette = true # 战备界面显示剪影

游戏内配置

图形界面(推荐)

  • 主菜单:Mods → WarvsWar → Config
  • 游戏内:/ww config

命令行

# 查看当前配置 /ww config gamemode # 查看游戏模式 /ww config scorelimit # 查看分数上限 /ww config timelimit # 查看时间限制 # 修改配置 /ww config gamemode TDM # 设置为团队死斗 /ww config scorelimit 50 # 设置分数上限为 50 /ww config timelimit 900 # 设置时间限制为 15 分钟 /ww config friendlyfire 0.5 # 设置友军伤害为 50% /ww config playerhealth 40.0 # 设置最大生命值为 40 /ww config respawndelay 10 # 设置复活延迟为 10 秒 # 重置配置 /ww config reset # 重置为默认值 /ww config reset all # 完全重置(包括大厅区域等)

命令参考

游戏控制

/ww start # 打开地图选择界面 /ww start <地图ID> # 直接开始指定地图 /ww stop # 停止游戏(触发结算)

地图管理

/ww map list # 列出所有地图 /ww map create <ID> # 创建地图(打开图标选择) /ww map create <ID> <图标> # 创建地图并指定图标 /ww map delete <ID> # 删除地图 /ww map info <ID> # 查看地图信息 /ww map seticon <ID> # 设置地图图标(打开选择界面) /ww map seticon <ID> <图标> # 直接设置地图图标 /ww map wand <ID> <队伍> # 获取区域魔杖

工具

/ww setlobby <半径> # 设置大厅区域 /ww skull # 打开头颅图标库 /ww teamgear # 打开队伍装备配置 /ww cos # 同 teamgear(快捷命令)

帮助系统

/ww help # 显示命令分类 /ww help <命令> # 显示命令详细帮助

开发文档

构建项目

# 开发构建 .\gradlew build # 发行构建(包含混淆) .\gradlew clean build reobfJar

输出文件:build/libs/warvswar-{mod_version}.jar

项目结构

src/main/java/com/warvswar/ ├── client/ # 客户端代码 │ ├── event/ # 客户端事件处理 │ │ ├── ClientHudEventHandler.java # HUD 事件驱动 │ │ └── ClientTooltipHandler.java # Tooltip 处理 │ ├── gui/ # 客户端 GUI │ │ └── LoadoutScreen.java # 战备界面 │ ├── hud/ # CS2 HUD 系统 │ │ ├── ClientHudRuntime.java # HUD 运行时 │ │ ├── ClientHudState.java # HUD 状态管理 │ │ ├── ClientSkinCache.java # 皮肤缓存 │ │ ├── Cs2HudOverlay.java # HUD 渲染 │ │ ├── Cs2HudOverlayRegistrar.java # HUD 注册 │ │ └── ModernScoreboardOverlay.java # 现代计分板 │ ├── ClientConfigHandler.java # 客户端配置处理 │ ├── ClientLoadoutData.java # 客户端战备数据 │ ├── ClientLoadoutManager.java # 战备管理器 │ ├── ClientSetup.java # 客户端初始化 │ └── ModConfigGui.java # 配置 GUI ├── common/ # 通用代码 │ ├── command/ # 命令系统 │ │ ├── MapIdArgumentType.java # 地图 ID 参数类型 │ │ ├── MapIdArgumentTypeInfo.java # 参数类型信息 │ │ └── ModCommands.java # 命令注册 │ ├── compat/ # 兼容层 │ │ ├── cosmetic/ # Cosmetic Armor 兼容 │ │ ├── CosmeticArmorCompat.java # 装饰盔甲兼容 │ │ └── LrTacticalCompat.java # LRTactical 兼容 │ ├── config/ # 配置系统 │ │ ├── ClientConfig.java # 客户端配置 │ │ └── ServerConfig.java # 服务端配置 │ ├── event/ # 事件处理 │ │ └── CommonEventHandler.java # 通用事件处理 │ ├── game/ # 游戏核心 │ │ ├── mode/ # 游戏模式 │ │ │ ├── FFAGameMode.java # FFA 模式 │ │ │ └── TDMGameMode.java # TDM 模式 │ │ ├── stats/ # 统计系统 │ │ │ ├── LastGameSummary.java # 上局总结 │ │ │ └── PlayerGameStats.java # 玩家统计 │ │ ├── GameManager.java # 游戏管理器 │ │ ├── GameState.java # 游戏状态 │ │ ├── GameTeam.java # 游戏队伍 │ │ ├── IGameMode.java # 游戏模式接口 │ │ ├── ResourceCleanupHelper.java # 资源清理 │ │ ├── SpawnRecord.java # 出生记录 │ │ └── WarConfig.java # 游戏配置 │ ├── gui/ # 服务端 GUI │ │ ├── BaseChestMenu.java # 基础箱子菜单 │ │ ├── ForceStartMapMenu.java # 强制开始菜单 │ │ ├── LoadoutMenu.java # 战备菜单 │ │ ├── MapIconMenu.java # 地图图标菜单 │ │ ├── SkullMenu.java # 头颅菜单 │ │ ├── TeamEquipmentMenu.java # 队伍装备菜单 │ │ ├── TeamMenu.java # 队伍选择菜单 │ │ └── VoteMenu.java # 投票菜单 │ ├── hud/ # HUD 数据模型 │ │ ├── HudEntry.java # HUD 条目 │ │ ├── HudMode.java # HUD 模式 │ │ ├── HudStyle.java # HUD 样式 │ │ └── HudSummary.java # HUD 摘要 │ ├── item/ # 物品 │ │ ├── InteractiveItem.java # 交互物品 │ │ └── RegionWandItem.java # 区域魔杖 │ ├── manager/ # 管理器 │ │ └── PlayerLoadout.java # 玩家战备 │ ├── map/ # 地图系统 │ │ ├── GameMap.java # 游戏地图 │ │ ├── GameRegion.java # 游戏区域 │ │ └── MapManager.java # 地图管理器 │ ├── network/ # 网络系统 │ │ ├── config/ # 配置网络包 │ │ ├── packet/ # 数据包 │ │ │ ├── hud/ # HUD 数据包 │ │ │ └── loadout/ # 战备数据包 │ │ └── PacketHandler.java # 包处理器 │ ├── player/ # 玩家系统 │ │ └── ClassManager.java # 职业管理器 │ ├── registry/ # 注册表 │ │ ├── ModCommandArgumentTypes.java # 命令参数类型 │ │ ├── ModItems.java # 物品注册 │ │ └── ModRegistries.java # 注册表 │ └── util/ # 工具类 │ ├── AttachmentHelper.java # 配件助手 │ ├── ItemLoreUtils.java # 物品描述工具 │ ├── ItemUtils.java # 物品工具 │ ├── MapUtils.java # 地图工具 │ ├── ScoreboardHelper.java # 计分板助手 │ ├── SkullHelper.java # 头颅助手 │ ├── SpawnUtils.java # 出生工具 │ ├── VirtualInventory.java # 虚拟背包 │ └── WandUtils.java # 魔杖工具 ├── mixin/ # Mixin 注入 │ ├── accessor/ # 访问器 │ └── tacz/ # TACZ 注入 │ ├── ClientMessageRefitGunMixin.java │ ├── ClientMessageUnloadAttachmentMixin.java │ └── GunRefitScreenMixin.java └── WarvsWar.java # 模组入口 src/main/resources/ ├── assets/warvswar/ │ ├── lang/ # 语言文件 │ │ ├── en_us.json # 英文 │ │ └── zh_cn.json # 中文 │ ├── models/ # 模型 │ └── textures/ # 材质 └── META-INF/ └── mods.toml # 模组元数据

核心架构

游戏状态机

WAITING(大厅投票) ↓ STARTING(倒计时) ↓ INGAME(对局进行) ↓ ENDING(结算展示) ↓ WAITING(返回大厅)

职责边界

  • GameManager:服务端权威游戏逻辑与状态机
  • WarConfig:服务端配置持久化(SavedData)
  • MapManager:地图与区域数据持久化
  • ClassManager:玩家战备/配件配置持久化
  • ClientLoadoutManager:客户端战备数据管理

HUD 数据链路

  • 客户端定期发送 RequestHudStatePacket
  • 服务端回复 HudStateFullPacket(全量)或 HudStateDeltaPacket(增量)
  • 客户端以 ClientHudState 作为唯一状态源
  • Cs2HudOverlay 仅负责渲染与自适应布局

Mixin 注入层

  • 虚拟背包:拦截枪械改装屏幕
  • 配件卸载拦截:防止玩家刷取配件物品
  • 上下文传递:使用 ThreadLocal 传递 PlayerLoadout

技术文档

开发规范

  1. 任何代码改动必须更新 mod_version 并通过 .\gradlew build
  2. 修改网络包需同步更新 PROTOCOL_VERSION
  3. UI 布局必须基于本地化后的 Component 宽度计算
  4. 修改 zh_cn.json 时必须同步更新 en_us.json
  5. SavedData 修改后必须调用 setDirty()
  6. 核心类需要双语 Javadoc 注释(中文/英文)
  7. 避免使用魔法值,使用常量或枚举替代
  8. 使用并发安全集合防止 ConcurrentModificationException

更新日志

查看完整更新日志:

最新版本 1.2.87(2026-01-29)

新增

  • 完善的命令帮助系统(/ww help/ww help <命令>
  • 详细的命令文档,包含使用示例和权限要求
  • 双语(中文/英文)帮助文本
  • 命令建议功能

变更

  • /ww 不带参数时显示帮助信息
  • 通过分类帮助页面改进命令可发现性

许可证

All Rights Reserved © FIENDLMAO

未经授权,禁止复制、修改或分发本项目代码。


致谢

  • TACZ:提供枪械系统基础
  • LRTactical:近战与投掷武器支持
  • Cosmetic Armor Reworked:装饰盔甲功能
  • Cloth Config:配置界面支持
  • Forge:模组加载器
  • Minecraft:游戏平台

问题反馈项目主页

Made with ❤️ by FIENDLMAO

About

No description, topics, or website provided.
2.14 MiB
0 forks0 stars1 branches0 TagREADMEMIT license
Language
Java98.8%
HTML1.2%