# 🐱 Neko Core
**喵核心** · 为高负载生存 / 战争服打造的 Folia 定制服务端
*碰撞加速 · 网络优化 · 实时可观测 · 一键调优*




`AUTO` · `GPU` · `FFM` · `JAVA` · `VANILLA` —— 碰撞后端,游戏内热切换
---
## 🎯 这是什么
**Neko Core** 是在 [Luminol 1.21.8](https://github.com/LuminolMC/Luminol)(Folia 分支)之上的定制服务端,把三套各自为政的优化整合成一个能打的整体:
| 体系 | 来自 | 解决什么 |
| :--- | :--- | :--- |
| 🚀 **AR 碰撞加速** | AcceleratedRecoiling | 高实体密度下的碰撞计算瓶颈 |
| 🌐 **网络优化** | Kitin | 弱网卡顿、带宽爆炸、地形/粒子刷屏 |
| 🧹 **LagFixer / ESU** | LagFixer + ESU | 实体堆积、爆炸卡服、挂机跟踪、冗余发包 |
> 构建基线 **Java 25**,全程对照 **Paper/Folia 原版**做实测,数字不掺水。
---
## ⚡ 性能亮点:AR 碰撞加速
不是"叠加一层 native",而是**真正替换掉原版那次昂贵的空间查询**——tick 前用 native 广相位算出 per-region 碰撞图(线程隔离,Folia 安全),`pushEntities` 直接 O(1) 查图,原版推挤/拥挤伤害逻辑完全保留。
**实测**(对照已优化的 Paper/Folia 原版,MSPT 越低越好):
```
场景:8000 实体散布 场景:3000 实体密集
┌──────────┬─────────┬─────────┐ ┌──────────┬─────────┬─────────┐
│ 后端 │ MSPT │ vs 原版 │ │ 后端 │ MSPT │ vs 原版 │
├──────────┼─────────┼─────────┤ ├──────────┼─────────┼─────────┤
│ FFM 🥇 │ 78.5ms │ 3.19× │ │ FFM 🥇 │ 24.1ms │ 3.05× │
│ JAVA │ 204.6ms │ 1.23× │ │ VANILLA │ 73.6ms │ 1.00× │
│ VANILLA │ 250.8ms │ 1.00× │ │ JAVA │ 94.0ms │ 0.78× │
└──────────┴─────────┴─────────┘ └──────────┴─────────┴─────────┘
FFM 稳定 ~3× 领先原版
```
> 📌 不是"数十倍"——因为对照组是**已经有空间索引优化的 Paper/Folia**,不是裸原版。3× 是实打实可复现的硬提升。
---
## 🧩 功能一览
### 🚀 碰撞加速(默认开)
- 多后端:`AUTO / GPU / FFM / JAVA / VANILLA`,启动优先 FFM、失败自动回退
- FFM:批量内存拷贝 + 零分配路径 + 碰撞数削峰
- 密度门控:只有局部密集的实体走加速,稀疏实体走原版(零行为偏差)
### 🌐 网络优化(`config/Network.yml`)
- **区块惰性加载** — 小范围反复横跳不重发地形包
- **高频实体包减量** — 船/矿车在农场不再每 tick 强制同步;高速 TNT/掉落物/经验球跳过冗余包
- **粒子限流打包** — 视野/距离/遮挡剔除后再发,治领地特效刷屏
- **区块发送限速 + QoS** — 全局限速 + 按 IP/域名/线路分组限流、级联限流
- **玩家自适应限流** — 按延迟/抖动动态收紧弱网玩家的发送率与跟踪范围
- **多端口监听** — 额外端口可单独配 PROXY Protocol v2(FRP 与直连共存)
### 🧹 LagFixer / ESU(默认关,按需开)
- **EntityLimiter** — 每区块实体上限 + 周期溢出清扫(带削峰:单次清扫有移除上限,爆发不卡)。生成闸门用 per-chunk/per-tick 计数缓存,实体爆发时不再全 region 扫描(O(N²)→O(N))
- **EntityCull 视锥剔除** 👁️ — 玩家视野锥外、且超出近距豁免半径的实体**不发包给该客户端**(背后的怪不占带宽/不卡客户端)。转身即恢复(每 tick 重判),近距离始终可见防贴脸突现。多人混战 / 刷怪海减客户端压力专用
- **MobAiThrottle** 🧟 — 远离玩家的怪物寻路/索敌降频(按非活跃时长分级),玩家靠近立即恢复。**惊变100天 / 刷怪海专治**,移动控制仍每 tick 不抽搐
- **MobAiReducer** — 精简生物 AI 目标
- **ExplosionOptimizer** — 爆炸威力上限 / 防连锁 / 管理模式
- **AFK 实体跟踪降频** — 全员挂机且实体远时降频,活动即恢复
- **ESU 零位移包裁剪** — 跳过零位移/零旋转的实体移动包
- **ESU 生物 velocity 包降频** 🚦 — 走路的怪不再每 tick 发速度包(变化太小/发得太频就跳过,~20包/秒→7包/秒);击退/爆炸/坠落立即发,玩家与投射物不受影响。丧尸海/混战第二大带宽源
### 📊 实时可观测
- **出站带宽实时监控** — 当前 Mbps、峰值、本次累计用量
- **内置 spark profiler** 🔥 — 原生集成(Folia 安全),`/spark` 直接可用:`profiler` 采样找热点、`health` 看 TPS/MSPT/CPU/内存。无需装插件,战争爆发时一条命令定位瓶颈
---
## 🎮 命令
```bash
# 碰撞后端
/nekobackend status # 当前后端与关键配置
/nekobackend set # 运行时热切换
/nekobackend reload # 重载后端选择器
# 实时带宽
/nekobackend bandwidth # 出站带宽:现在 / 峰值 / 累计
# 内置 spark profiler(无需插件,Folia 安全)
/spark profiler --timeout 60 # 采样 60s 找 MSPT 热点(出网页报告)
/spark health # TPS / tick 时长 / CPU / 内存
/spark tps # 实时 TPS
# 一键开关优化模块(无需改配置重启)
/nekobackend toggle
# module ∈ entity_limiter / entity_cull / explosion_optimizer / afk_entity_tracking /
# mob_ai_reducer / mob_ai_throttle / skip_zero_delta_packets
```
---
## 🔧 构建与启动
**环境:JDK 25**。在 `Luminol-ver-1.21.8` 目录:
```bash
./gradlew applyAllPatches
./gradlew :luminol-server:jar :luminol-server:createBundlerJar :luminol-server:createPaperclipJar \
--no-daemon --no-configuration-cache
```
启动(推荐 paperclip):
```bash
java -jar NekoCore-paperclip-1.21.8-R0.1-SNAPSHOT.jar --nogui
```
首启自动生成 `config/Network.yml`;碰撞与 LagFixer/ESU 配置在 `luminol_config/`。
> 📦 已构建好的产物见 **[Releases](https://github.com/dmz7p4xmqh-coder/Luminol-Core/releases)**。
---
## ⚠️ 使用须知
- **追求原版还原度**:AR 的实体挤压表现与原版不完全一致,可将后端设为 `VANILLA`。
- **任何优化异常**:把对应模块 `enabled` 置 `false`(或 `/nekobackend toggle ... off`)即可回退,无需回滚 jar。
- **性能数字**:来自本机无头环境实测,对照组为已优化的 Paper/Folia 碰撞(非裸原版)。真实大型服收益理论更高,但需生产环境验证。
---
## 📝 更新日志
| 版本 | 内容 |
| :--- | :--- |
| **v1.0.8** | 🚦 ESU 生物 velocity 包降频:走路的怪不再每 tick 发速度包,丧尸海/混战第二大带宽源;`/nekobackend toggle entity_velocity_packet` 开关 |
| **v1.0.7** | 🐛 修复插件兼容性:服务端版本号在缺少 folia-api 元数据时退化成 `Unknown-Version`,导致按语义版本解析版本号的插件(如 SkinsRestorer)启动崩溃(`parseInt("")`)。现回退到合法版本号 `1.21.8-R0.1-SNAPSHOT` |
| **v1.0.6** | ⚡ 修复 EntityLimiter 生成闸门的 O(N²):原本每生成一个实体都全 region 扫一遍(实体爆发时限制器自己成卡顿源),改为 per-chunk/per-tick 计数缓存,爆发场景 O(N²)→O(N) |
| **v1.0.5** | 👁️ EntityCull 视锥/距离剔除:视野外远处实体不发包给客户端,`/nekobackend toggle entity_cull on` 游戏内开关 |
| **v1.0.4** | 🔥 内置 spark profiler 原生集成(Folia 安全),`/spark` 开服即用;修复启动日志在 Windows GBK 控制台的乱码 |
| **v1.0.3** | 🧟 MobAiThrottle:远离玩家的怪物 AI 降频(惊变100天 / 刷怪海专治) |
| **v1.0.2** | EntityLimiter 溢出清扫削峰 + `/nekobackend toggle` 模块热开关 |
| **v1.0.1** | 出站带宽实时监控(当前 / 峰值 / 累计 Mbps) |
| **v1.0.0** | 首版:AR 碰撞加速 + Kitin 网络优化 + LagFixer/ESU 整合 |
---
## 🙏 致谢上游
Neko Core 站在巨人的肩膀上,向以下项目致敬:
- [**Luminol**](https://github.com/LuminolMC/Luminol) — 本项目的基底(Folia 分支 + 可配置原版特性 + API)
- [**Folia** / **Paper**](https://github.com/PaperMC/Folia) — 区域化多线程服务端核心
- [**AcceleratedRecoiling**](https://github.com/) — 碰撞加速架构灵感
- [**Kitin**](https://github.com/SucIXR/Kitin) — 网络优化体系
- **LagFixer** / **ESU** — 实体限制与发包优化
各上游许可(GPL/LGPL)均予以尊重,相关署名保留在对应源码中。
📎 Luminol API 接入(点击展开)
```kotlin
repositories {
maven { url = "https://repo.menthamc.org/repository/maven-public/" }
}
dependencies {
compileOnly("me.earthme.luminol:luminol-api:$VERSION")
}
```
---
**🐱 Neko Core** · 让你的服务器跑得像猫一样轻
*Built with [Claude Code](https://claude.com/claude-code)*