Compare commits

...

6 Commits

Author SHA1 Message Date
TinyYana 49e92a5c41 新增繁體中文版README、CONTRIBUTING、設定語系檔;及日文版貢獻指南
Co-authored-by: corn323 <wingsky34@gmail.com>
2026-08-10 20:19:58 +08:00
Bacteriawa a9f3c2c291 Fix PCA sync protocol for async portal transfers #166
Update the PCA sync protocol patch to use getHandleRaw() instead of getHandle() when syncing entities to clients. This ensures proper ownership checking when the owner is a destination-world clone being restored during an async portal transfer.
2026-08-10 18:09:24 +08:00
Helvetica Volubi c619486da9 fix: fix bot spawn problem 2026-08-09 03:24:54 +08:00
dependabot[bot] 5cd355881a [ci skip]Bump actions/setup-java from 5.6.0 to 5.7.0 (#171)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.6.0 to 5.7.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v5.6.0...v5.7.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-08 16:23:04 +08:00
Bacteriawa 5a28a619b7 Make RegionizedWorldData.connections public
Change the connections field in RegionizedWorldData from private to public (ReferenceList<Connection>) and add a comment indicating it's exposed for BotList access. The change is in the 0112 patch file; related patch index updates are included in subsequent feature patch files.
2026-08-08 02:04:59 +08:00
Bacteriawa 9b5f3e1bd9 Update Folia 2026-08-08 01:51:27 +08:00
97 changed files with 865 additions and 320 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v7
- name: Set Up JDK
uses: actions/setup-java@v5.6.0
uses: actions/setup-java@v5.7.0
with:
distribution: zulu
java-version: 25
+1 -1
View File
@@ -15,7 +15,7 @@
![Repo contributors](https://img.shields.io/github/contributors/LophineLabs/Lophine?style=for-the-badge&color=brightgreen)
[English](./README_EN.md) | **中文**
[English](./README_EN.md) | **中文(简体)** | [中文(繁體)](./README_ZH_TW.md)
</div>
---
+1 -1
View File
@@ -15,7 +15,7 @@
![Repo contributors](https://img.shields.io/github/contributors/LophineLabs/Lophine?style=for-the-badge&color=brightgreen)
**English** | [中文](./README.md)
**English** | [中文(简体)](./README.md) | [中文(繁體)](./README_ZH_TW.md)
</div>
---
+139
View File
@@ -0,0 +1,139 @@
<div align="center">
<img src="./public/image/lophine/lophine3.png" alt="Lophine Logo" width="300">
# Lophine
*Lophine 是一個基於 Folia 的 fork,具備許多好用的最佳化與可設定的原版特性,目標是在 Folia 上實現更多生電向的內容(完整生電支援請使用 Fabric)*
![Created At](https://img.shields.io/github/created-at/LophineLabs/Lophine?style=for-the-badge&color=blue)
[![License](https://img.shields.io/github/license/LophineLabs/Lophine?style=for-the-badge&color=green)](LICENSE.md)
[![Issues](https://img.shields.io/github/issues/LophineLabs/Lophine?style=for-the-badge&color=orange)](https://github.com/LophineLabs/Lophine/issues)
![Commit Activity](https://img.shields.io/github/commit-activity/w/LophineLabs/Lophine?style=for-the-badge&color=purple)
![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/LophineLabs/Lophine?style=for-the-badge&color=yellow)
![GitHub all releases](https://img.shields.io/github/downloads/LophineLabs/Lophine/total?style=for-the-badge&color=red)
![Repo contributors](https://img.shields.io/github/contributors/LophineLabs/Lophine?style=for-the-badge&color=brightgreen)
[English](./README_EN.md) | [中文(簡體)](./README.md) | **中文(繁體)**
</div>
---
## ✨ 核心特性
- 🔧 **可設定的原版特性** - 彈性調整遊戲機制,以符合不同伺服器的需求
- 📊 **Tpsbar 支援** - 即時顯示伺服器 TPS 狀態
- 🐛 **Folia Bug 修復** - 針對 Folia 已知問題的專項修復
- 💾 **多種存檔格式支援** - 支援 linear 與 b_linearlinear 重新實作)存檔格式
- 🔬 **生電功能強化** - 在 Folia 上實現更多生電內容(完整生電請使用 Fabric)
- 🛠️ **更多實用功能** - 持續新增有用的伺服器功能
### 額外啟動參數
- morninggloryclip.useMojangSource 強制伺服器端使用 Mojang 官方來源下載檔案
- morninggloryclip.enable.mixin 為伺服器插件啟用 mixin 支援
## 📥 下載
### 穩定版本
所有正式發布版本都可以在 [Releases](https://github.com/LophineLabs/Lophine/releases) 頁面找到。
### 開發版本
如果你想搶先體驗最新功能,可以照下面的步驟自行建置。
### 建置步驟
```bash
# Clone 這個專案
git clone https://github.com/LophineLabs/Lophine.git
cd Lophine
# 套用 patch 並建置 Paperclip JAR
./gradlew applyAllPatches && ./gradlew createPaperclipJar
```
建置完成後,你可以在 `lophine-server/build/libs` 目錄中找到產生的 JAR 檔案。
## 🔌 API 使用
### Gradle 設定
```kotlin
repositories {
maven {
url = "https://repo.bacteriawa.com/repository/maven-public/"
}
}
dependencies {
compileOnly("fun.bm.lophine:lophine-api:26.2.build.+")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}
```
### Maven 設定
```xml
<repositories>
<repository>
<id>repository</id>
<url>https://repo.bacteriawa.com/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>fun.bm.lophine</groupId>
<artifactId>lophine-api</artifactId>
<version>[26.2.build,)</version>
<scope>provided</scope>
</dependency>
</dependencies>
```
## 💬 社群與支援
> 如果你對這個專案有興趣,或有任何問題,歡迎隨時來問我們。
### 加入我們的社群
- **QQ 群**: [1020403749](https://qm.qq.com/cgi-bin/qm/qr?k=y_MA9UaN7PM9e9J1LIs9Eea3LK8C0h6J&jump_from=webapi&authKey=ap5f8MlbeezXYtnmpnT5ZOFljDuOyV6OAb2PIcViQ+Ilr60Ycq63FDDTsJOZDYtj)
- **Discord**: [點我加入](https://discord.gg/UXSgPZczcy)
### 取得協助
- 📋 [提交 Issue](https://github.com/LophineLabs/Lophine/issues)
- 💬 [GitHub Discussions](https://github.com/LophineLabs/Lophine/discussions)
- 📖 [專案文件](./docs/)
## 🐛 問題回報
當你遇到任何問題時,歡迎來問我們,我們會盡力協助解決。請記得:
- 📝 **清楚描述問題** - 詳細說明問題的具體狀況
- 📋 **提供完整記錄檔** - 附上錯誤記錄與相關設定資訊
- 🔍 **環境資訊** - 說明伺服器版本、插件清單等環境細節
- 🔄 **重現步驟** - 如果可以,請提供重現問題的具體步驟
## 🤝 貢獻程式碼
我們歡迎社群貢獻!詳細的貢獻指南請參考:
- 📖 [貢獻指南(English](./docs/CONTRIBUTING_EN.md)
- 📖 [貢獻指南(簡體中文)](./docs/CONTRIBUTING.md)
- 📖 [貢獻指南(繁體中文)](./docs/CONTRIBUTING_ZH_TW.md)
- 📖 [貢獻指南(日本語)](./docs/CONTRIBUTING_JP.md)
## 📊 專案統計
### BStats 資料
![bStats](https://bstats.org/signatures/server-implementation/Lophine.svg "bStats")
## ⭐ 給我們一個 Star 吧!
> 你給的每一個免費 ⭐Star,都是我們前進的動力。
+1 -1
View File
@@ -1,7 +1,7 @@
为Lophine贡献代码
===============
[English](./CONTRIBUTING_EN.md) | **中文**
[English](./CONTRIBUTING_EN.md) | **中文(简体)** | [中文(繁體)](./CONTRIBUTING_ZH_TW.md) | [日本語](./CONTRIBUTING_JP.md)
我们很开心您想为我们的项目做出贡献!一般来说,我们对PR的审核是十分宽松的;
但是如果您可以遵守下列的规则,我们可以更快地完成审核。
+1 -1
View File
@@ -1,7 +1,7 @@
Contributing to Lophine
=======================
**English** | [中文](./CONTRIBUTING.md)
**English** | [中文(简体)](./CONTRIBUTING.md) | [中文(繁體)](./CONTRIBUTING_ZH_TW.md) | [日本語](./CONTRIBUTING_JP.md)
We're glad that you want to contribute to our project!
In general, our review of pull requests is very lenient.
+100
View File
@@ -0,0 +1,100 @@
Lophine への貢献
===============
[English](./CONTRIBUTING_EN.md) | [中文(簡體)](./CONTRIBUTING.md) | [中文(繁體)](./CONTRIBUTING_ZH_TW.md) | **日本語**
Lophine プロジェクトに貢献していただき、ありがとうございます!一般的に、PR(プルリクエスト)のレビュー基準は比較的緩やかです。
以下のルールに従っていただければ、よりスムーズにレビューを進めることができます。
## 個人アカウントでフォークしてください
定期的に既存の PR をマージしています。軽微な問題であれば、こちらで直接修正したうえでマージする場合があります。
しかし、組織(Organization)アカウントでフォークしたリポジトリから作成された PR の場合、直接変更を加えることができないため、一度クローズしてから手動で再マージする必要が生じます。
そのため、**組織アカウントを使用してこのプロジェクトをフォークしないでください**。
組織アカウントの PR に直接変更を加えられない理由については、[こちらの Issue](https://github.com/isaacs/github/issues/1681) をご参照ください。
## 開発環境
コードを書き始める前に、以下の開発ツールと環境を準備する必要があります。
- `git`
- `JDK 25` またはそれ以降のバージョン
注意: 作業を開始する前に、OS および Git で長いパス(Long Path)のサポートを有効にしてください。一部のプラットフォームの設定手順は以下をご参照ください。
[`Windows`](https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation)
[`Git for Windows`](https://gitforwindows.org/faq.html#i-get-errors-trying-to-check-out-files-with-long-path-names)
## パッチ(Patch)システムについて
Lophine は Folia と同じパッチシステムを採用しており、修正箇所に応じて以下の 2 つのディレクトリに分かれています。
- `lophine-api` - `Folia-API` / `Paper-API` / `Spigot-API` / `Bukkit-API` をベースにした修正。
- `lophine-server` - Minecraft のバニラサーバーの既存ロジックに対する修正。
このパッチシステムは Git をベースに動作します。Git の基本操作についてはこちらをご覧ください:<https://git-scm.com/docs/gittutorial>
メインのリポジトリをフォークしたら、以下の手順に従って操作してください:
1. フォークしたリポジトリをローカルにクローンします。
2. お使いの IDE またはターミナルで Gradle の `applyAllPatches` タスクを実行します。ターミナルで行う場合は、直接 `./gradlew applyAllPatches` を実行できます。
3. 実行が完了すると、リポジトリのルートディレクトリに `lophine-api``lophine-server``folia-api``folia-server``paper-api``paper-server` の各ディレクトリが生成されます。
4. リポジトリのルートディレクトリ下にある対応する `*-api``*-server` フォルダに移動し、そこで修正を行います。
上記各フォルダの簡単な説明は以下の通りです。より詳細な説明は[こちら](https://github.com/Toffikk/paperweight-examples/blob/18241979c88068d5b061d95ad69c98ecb201c246/README.md)をご参照ください:
1. API 部分
- `lophine-api`:新規 API の追加や変更はここで行ってください。
- `folia-api`:Folia API に対する修正はここで行ってください。
- `paper-api`Paper API / Spigot API / Bukkit API に対する修正はここで行ってください。
2. Server 部分
- `lophine-server`:Minecraft のバニラサーバーに対する修正、および新規作成したファイルはすべてこのフォルダに配置してください。
- `folia-server`Folia Server に対する修正はここで行ってください。
- `paper-server`:Paper サーバーのロジックに基づく修正はここで行ってください。
なお、リポジトリのルートディレクトリにある `*-api``*-server` は通常の Git リポジトリではありません:
- パッチを適用する前は、ベース(Base)は未修正のソースコードを指しています。
- ベース以降のすべてのコミットが、1 つのパッチとして扱われます。
- Folia の最後のコミット以降に追加されたコミットのみが、Lophine のパッチとして扱われます。
## 新規パッチの追加
新しいパッチを追加するのは非常に簡単です。以下の手順に従ってください:
1. `*-api``*-server` 内でコードを変更します。
2. Git を使用して変更をステージングエリアに追加します(例:`git add .`。新しく作成したファイルを同時に追加しないでください)。
3. `git commit -m <コミットメッセージ>` を実行してコミットします。
4. Gradle タスク `fixupPaperApiFilePatches` を実行し、新しく作成されたファイルに対応するパッチファイルを生成します(注意:実行が完了する前にコミットしないでください)。
5. Gradle タスク `rebuildAllServerPatches` を実行し、コミットをパッチに変換します。
6. 生成されたパッチファイルを Git にコミットし、プッシュします。
上記の手順が完了したら、これらのパッチファイルを元に PR を作成して提出できます。
## パッチの修正
既存のパッチを修正する場合は、以下の手順に従ってください:
1. HEAD で直接修正を行います。
2. `git commit -a --fixup <hash>` を実行して、fixup コミットを作成します(Lophine で新しく作成したファイルの変更を一緒にコミットしないでください)。
- コミットメッセージも同時に変更したい場合は、`--fixup` の代わりに `--squash` を使用してください。
3. `git rebase -i --autosquash base` を実行して、fixup コミットを自動的にまとめます。エディタが開いたら、`:q` と入力して終了します。
4. Gradle タスク `fixupPaperApiFilePatches` を実行し、Lophine で新しく作成したファイルのパッチを再生成します(注意:実行が完了する前にコミットしないでください)。
5. Gradle タスク `rebuildAllServerPatches` を実行し、修正を既存のパッチに反映させます。
6. 修正したパッチを再度プッシュし、PR を更新します。
## 設定項目に対するローカライズされたコメントサポートの提供
1. `lophine-server/src/main/resources/assets/lophine/lang` ディレクトリ下に、対応する言語のファイルを作成または修正し、各言語に対応したコメントを追加します。
- ファイル名は <https://minecraft.wiki/w/Language> ページに記載されている言語コード(例:`en_us``zh_cn``zh_hk``zh_tw``ja_jp` など)に従って命名してください。ファイル形式は `json` です。
2. Gradle タスク `sortLangKeys` を実行し、修正した言語ファイルのキーの内容を並べ替えます。
3. `git commit -m <コミットメッセージ>` を実行してコミットします。
4. 修正したファイルをプッシュします。
上記の手順が完了したら、修正した内容を元に PR を作成して提出できます。
+100
View File
@@ -0,0 +1,100 @@
為 Lophine 貢獻程式碼
===============
[English](./CONTRIBUTING_EN.md) | [中文(簡體)](./CONTRIBUTING.md) | **中文(繁體)** | [日本語](./CONTRIBUTING_JP.md)
很高興你願意為這個專案貢獻!一般來說,我們對 PR 的審核標準相當寬鬆;
如果你可以照著下面的規則來,我們就能更快完成審核。
## 請使用個人帳號進行 Fork
我們會定期嘗試合併現有的 PR,如果內容有一些小問題,我們會直接幫你修改後合併。
但如果你的 PR 是用組織(organization)帳號 fork 出來的,我們就沒辦法直接修改你的 PR,只能先關閉、再手動合併一次。
所以,請不要用組織帳號來 fork 這個專案!
你可以參考[這個 Issue](https://github.com/isaacs/github/issues/1681),了解為什麼我們沒辦法直接修改組織帳號的 PR。
## 開發環境
在開始寫程式之前,你需要先準備好以下開發工具與環境:
- `git`
- `JDK 25` 或更新版本
特別提醒:動手之前,請先在你的作業系統與 Git 裡啟用長路徑(long path)支援,以下是部分平台的設定說明。
[`Windows`](https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation)
[`Git for Windows`](https://gitforwindows.org/faq.html#i-get-errors-trying-to-check-out-files-with-long-path-names)
## 認識 Patch(補丁)系統
Lophine 沿用了和 Folia 相同的 patch 系統,並依照修改的部分分成了兩個目錄:
- `lophine-api` - 基於 `Folia-API` / `Paper-API` / `Spigot-API` / `Bukkit-API` 所做出的修改。
- `lophine-server` - 針對 Minecraft 原版伺服器既有邏輯所做的修改。
這套 patch 系統是以 git 為基礎運作的,你可以在這裡了解 git 的基本操作:<https://git-scm.com/docs/gittutorial>
如果你已經 fork 了主要的 repository,接下來請照以下步驟操作:
1. 把你 fork 出來的 repository clone 到本機;
2. 在你的 IDE 或終端機(terminal)裡執行 Gradle 的 `applyAllPatches` 任務;如果是在終端機裡,可以直接執行 `./gradlew applyAllPatches`
3. 執行完成後,repository 的根目錄下應該會出現以下幾組目錄: `lophine-api``lophine-server``folia-api``folia-server` 以及 `paper-api``paper-server`(以下統稱為 `*-api``*-server`);
4. 進入 repository 根目錄下對應的 `*-api``*-server` 資料夾,在裡面進行修改。
以下是對上述各個資料夾的簡單說明,更詳細的說明可以參考[這裡](https://github.com/Toffikk/paperweight-examples/blob/18241979c88068d5b061d95ad69c98ecb201c246/README.md)
1. API 部分
- `lophine-api`:新增 API 的修改請放在這裡
- `folia-api`:針對 Folia API 的修改請放在這個資料夾
- `paper-api`:對於 Paper API / Spigot API / Bukkit API 的修改請放在這個資料夾
2. Server 部分
- `lophine-server`:針對 Minecraft 原版伺服器的修改、以及新增的檔案,都請放在這個資料夾
- `folia-server`:針對 folia-server 的修改請放在這個資料夾
- `paper-server`:根據 Paper 伺服器邏輯的修改請放在這個資料夾
順帶一提,repository 根目錄下的 `*-api``*-server` 並不是一般的 git repository
- 在套用 patch 之前,base(基準點)指向的是未經修改的原始程式碼;
- base 之後的每一個 commit,都會被視為一個 patch
- 只有在 Folia 最後一個 commit 之後的 commit,才會被視為是 Lophine 的 patch。
## 新增 Patch
依照以下步驟新增一個 patch 非常簡單:
1.`*-api``*-server` 裡進行修改;
2. 用 git 把你的修改加入暫存區,例如執行 `git add .`(請不要把新建立的檔案一併加入);
3. 執行 `git commit -m <提交訊息>` 進行 commit
4. 執行 Gradle 任務 `fixupPaperApiFilePatches`,用於新建立的檔案產生對應的 patch 檔(注意:執行完之前先不要 commit);
5. 執行 Gradle 任務 `rebuildAllServerPatches`,用於把你的 commit 轉換成一個 patch
6. 把產生出來的 patch 檔 push 上去。
完成以上步驟後,你就可以拿這些 patch 檔開 PR 提交了。
## 修改 Patch
你可以用以下方法來修改一個既有 patch 的內容:
1. 直接在 HEAD 上進行修改;
2. 執行 `git commit -a --fixup <hash>` ,做一個 fixup commit(請不要把 Lophine 新建立的檔案的修改一併 commit 進去);
- 如果你想順便修改 commit 訊息,可以用 `--squash` 取代 `--fixup`
3. 執行 `git rebase -i --autosquash base` ,進行自動 rebase,接著只要輸入 `:q` 關掉確認頁面即可;
4. 執行 Gradle 任務 `fixupPaperApiFilePatches`,用於重新產生 Lophine 新建立檔案的 patch(注意:執行完之前先不要 commit);
5. 執行 Gradle 任務 `rebuildAllServerPatches`,把修改套用到既有的 patch 上;
6. 把修改後的 patch 重新 push 回去,再開一次 PR。
## 為設定項目提供本地化的注解支援
1.`lophine-server/src/main/resources/assets/lophine/lang` 目錄下新增或修改對應語言的檔案,加入本地化的注解;
- 檔名請依照 <https://minecraft.wiki/w/Language> 頁面上列出的語言代碼來命名,例如 `en_us``zh_cn``zh_hk``zh_tw`,檔案格式為 `json`
2. 執行 Gradle 任務 `sortLangKeys`,把你修改的語言檔內容重新排序;
3. 執行 `git commit -m <提交訊息>` 進行 commit
4. 把你修改的檔案 push 上去。
完成以上步驟後,你就可以拿修改後的內容開 PR 提交了。
+1 -1
View File
@@ -9,7 +9,7 @@ release=true
# true for push to repo, false for skip push repo, auto for detect by release value
pushRepo=auto
foliaRef=e48800d446d2bdeb24a8d31d671554440687e846
foliaRef=57f643f10e0a9d01024773232d38ae666067d593
org.gradle.configuration-cache=true
org.gradle.caching=true
@@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand to Lophine
diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java
index 652ff54e7c50412503725d628bfe72ed03059790..1727ea0b873ee4f9a86cca62eac6dc3a5063b4e6 100644
index 56a5877181e8d37518b178c95155e892c442e96d..ebe0290bf0235af2ba353ac1f74b29080daebba4 100644
--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java
+++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java
@@ -19,6 +19,17 @@ public interface ServerBuildInfo {
@@ -5,10 +5,10 @@ Subject: [PATCH] Luminol Config System
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index fb5ca3ab0ddba433a39e65572beeb955b50d6f72..a139182704a5f147661816d08907be8a7f8f7dde 100644
index 067d901c69a54c4b6ae5a00488f0dacc5fde7961..209d1968f4bff3b33785fd8bfbeea5ae231e581a 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2776,6 +2776,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2774,6 +2774,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value);
// Paper end - API to check if the server is sleeping
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
Date: Sun, 28 Jun 2026 16:40:49 +0800
From: Bacteriawa <A3167717663@hotmail.com>
Date: Sat, 8 Aug 2026 01:25:33 +0800
Subject: [PATCH] KioCG Chunk API
@@ -16,13 +16,13 @@ index d873b78f6935a23ff8f6092b80968267b182cc0f..b4323370859dd4d9e86614484cdb9d2e
+ long getChunkHotAvg(); // KioCG
}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 7a719d31fbc7633a9bb87ea97338190ee3a6047a..b79b9a2ad108c0488d3cc3862f72985059bb4988 100644
index 65e83e171ab4c514662b9344e08f7065fa9efaa1..274af6397b5f7c0b6787e2669de80e54858950a2 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -4020,4 +4020,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
default ObjectContents asObjectContents() {
return this.getPlayerProfile().asObjectContents();
}
@@ -4050,4 +4050,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* clearing any fixed pose in the process.
*/
void unsetFixedPose();
+
+ long getNearbyChunkHot(); // KioCG
}
@@ -5,10 +5,10 @@ Subject: [PATCH] Tick regions api
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index c66cd17fd037b73d8ff04dd2ed328ca25e8b0f1a..b86cd3b37ec3fd63f34acd6bf17f6a91c24b5038 100644
index bf2f7c4959f9f2cd43bbd4d4310e7eedf10cf892..bccb33456d84384bd90887822e16cbad65986106 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -4708,4 +4708,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -4719,4 +4719,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
}
}
}
@@ -8,10 +8,10 @@ As part of: Leaves (https://github.com/HyacinthHaru/Leaves/blob/90080d238e2fcfc1
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 8a24b84db656da4cec59e9bccac306467c8155b0..0ac1e049fad85de8365380b03e60d915ee643f16 100644
index 325d797766de527268eb18bcf9db594ca3a0c519..e922a0eefb03db5e33f3306aaea558b6ed61b42a 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3046,4 +3046,10 @@ public final class Bukkit {
@@ -3045,4 +3045,10 @@ public final class Bukkit {
public static void restart() {
server.restart();
}
@@ -23,10 +23,10 @@ index 8a24b84db656da4cec59e9bccac306467c8155b0..0ac1e049fad85de8365380b03e60d915
+ // Leaves end - Feature API
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index a139182704a5f147661816d08907be8a7f8f7dde..a8c262064e4058f786c62c333130c4cac0ce4b66 100644
index 209d1968f4bff3b33785fd8bfbeea5ae231e581a..ac19fd1b6b8e48313c79d9fb26c3df50f67b64b8 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2782,6 +2782,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2780,6 +2780,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
me.earthme.luminol.api.config.LuminolConfigBuilder getLuminolConfigBuilder();
// Luminol end - Luminol Config API
@@ -5,7 +5,7 @@ Subject: [PATCH] World load/unload APIs
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index a8c262064e4058f786c62c333130c4cac0ce4b66..3c92440fbef6e6970cd800e0038a625a775eda9a 100644
index ac19fd1b6b8e48313c79d9fb26c3df50f67b64b8..c037307f926d64bac3b51a91aa61f63d0357770c 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -775,6 +775,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -8,10 +8,10 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 0ac1e049fad85de8365380b03e60d915ee643f16..a747fbe107dcc134558ca8ecfbe30e81245a5742 100644
index e922a0eefb03db5e33f3306aaea558b6ed61b42a..7120bbea89c1c240b09562c73833f21a9980886f 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3052,4 +3052,15 @@ public final class Bukkit {
@@ -3051,4 +3051,15 @@ public final class Bukkit {
return server.getFeatureManager();
}
// Leaves end - Feature API
@@ -28,10 +28,10 @@ index 0ac1e049fad85de8365380b03e60d915ee643f16..a747fbe107dcc134558ca8ecfbe30e81
+ // Leaves end - Bot API
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 3c92440fbef6e6970cd800e0038a625a775eda9a..c8fc95a85b162cc71aa8dada8f87f4fe6f5dad12 100644
index c037307f926d64bac3b51a91aa61f63d0357770c..6c91cabdcacf7a9bf6421fbb7d52aa17516100f8 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2827,4 +2827,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2825,4 +2825,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
double @Nullable [] getRegionTPS(@NotNull World world, int chunkX, int chunkZ);
// Folia end - region TPS API
@@ -8,10 +8,10 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index a747fbe107dcc134558ca8ecfbe30e81245a5742..b09a90f8187a15ddaa15f231f46f51f2b1d2c1ed 100644
index 7120bbea89c1c240b09562c73833f21a9980886f..b114df0dde2e5bede7bb2956359fdd4ca25ac3da 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3063,4 +3063,10 @@ public final class Bukkit {
@@ -3062,4 +3062,10 @@ public final class Bukkit {
return server.getBotManager();
}
// Leaves end - Bot API
@@ -23,10 +23,10 @@ index a747fbe107dcc134558ca8ecfbe30e81245a5742..b09a90f8187a15ddaa15f231f46f51f2
+ // Leaves end - Photographer API
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index c8fc95a85b162cc71aa8dada8f87f4fe6f5dad12..5e4da280f7bed1084ebc2814d23901ad072e116d 100644
index 6c91cabdcacf7a9bf6421fbb7d52aa17516100f8..e6295c4bb86286aa893b55b77ddbfb2f63fdd05c 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2836,4 +2836,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2834,4 +2834,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull org.leavesmc.leaves.entity.bot.BotManager getBotManager();
// Leaves end - Bot API
@@ -5,7 +5,7 @@ Subject: [PATCH] Luminol Config System
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index e2939cc39a8c103e4c4d7b01d39b5546486e4fbc..a557d488e4e289a61aeb9aed0cc133a0a7ce8f8c 100644
index 693ce1c23c7be6406eda22da57aa4a1b86a08f5f..4385488983a7544eb6d9193d913dc55294f4620d 100644
--- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java
@@ -110,6 +110,7 @@ public class Main {
@@ -17,10 +17,10 @@ index e2939cc39a8c103e4c4d7b01d39b5546486e4fbc..a557d488e4e289a61aeb9aed0cc133a0
Bootstrap.bootStrap();
Bootstrap.validate();
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 6f13870a1b463049dd37cf1c65d0bdecfc35b5c4..a49c46eb7df50fc3c5587a2c3668ab6edc887107 100644
index be15a671e0b39b455cd5983f4b90f8f3022a2ebc..56d26866cb8f413684e62558e5609b273efb8552 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1169,6 +1169,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1168,6 +1168,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
ca.spottedleaf.moonrise.common.util.MoonriseCommon.haltExecutors();
}
// Paper end - rewrite chunk system
@@ -5,7 +5,7 @@ Subject: [PATCH] Correct player respawn place
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 57f93d978fe48fdf6e77b7bfb9f1de060e1a8524..c0e4ddbcf2b1f61fd4a5a6f10882fc1fb4176960 100644
index 16f49ae6736c475207f31392307e280ec06edbc3..a2e40bc7a15ba0663314a288f4a9b3ec3a39dc4d 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -511,8 +511,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -57,7 +57,7 @@ index 51c126735ace8fdde89ad97b5cab62f244212db0..ea2f45964fb8c617f90938597c230b50
+ public void moonrise$write(final io.anonymous.anonymous.data.RegionFile regionFile) throws IOException; // Anonymous - Configurable region file format
}
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index a49c46eb7df50fc3c5587a2c3668ab6edc887107..c74f76b46259204b33b69ad08bb03c81b8b36961 100644
index 56d26866cb8f413684e62558e5609b273efb8552..dd63f14cf6b857202146348b2242673af1883cb7 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -986,10 +986,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -6,7 +6,7 @@ Subject: [PATCH] Do not enable any debug subscriptions
Really this would really crash the server by accident when the operators used F3 + J or toggled the debug synchronizer
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index c0e4ddbcf2b1f61fd4a5a6f10882fc1fb4176960..4e1346777c0664547f73f8672ed02918392b591f 100644
index a2e40bc7a15ba0663314a288f4a9b3ec3a39dc4d..216c9263999f05c36fb4c5598b41ff70e5759f5e 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -3483,7 +3483,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -8,10 +8,10 @@ Inspired by https://github.com/CraftCanvasMC/Canvas/blob/ver/1.21.8/canvas-serve
but Canvas loses its main thread checks so fixed that btw
diff --git a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
index 40b4eeb561a91264b9ab6ddc49cb8a93daae84a4..97f4c546663fb19558246366a3d8d77f2b9327ef 100644
index 77c4670868a95dc7b13461dfa67af34b0a3c329a..111789b4aca281dd1899dfbcc4e7e0ca36d74b51 100644
--- a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
@@ -290,13 +290,14 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
@@ -299,13 +299,14 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
// Paper start
@Override
public void disconnectAsync(final net.minecraft.network.DisconnectionDetails disconnectionInfo) {
@@ -6,7 +6,7 @@ Subject: [PATCH] Fix riding statistics desync
Referred to: https://github.com/CraftCanvasMC/Canvas/commit/057175b0c10d5a4d1d9059fd9d077750c32633b2
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 4e1346777c0664547f73f8672ed02918392b591f..bc390caff901a3b37a5a4ca3619dd9339fa4cb07 100644
index 216c9263999f05c36fb4c5598b41ff70e5759f5e..6c2196726a0669bddda456a089aeec0d9d9bdfa3 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -2516,7 +2516,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -19,10 +19,10 @@ index 4e1346777c0664547f73f8672ed02918392b591f..bc390caff901a3b37a5a4ca3619dd933
int distance = Math.round((float)Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F);
Entity vehicle = this.getVehicle();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 07310ae30817fc88227355739074615969b48184..47eef926f57053ace7ea140261570c4970822062 100644
index 18b9e630442fd31a14e131bb9043be46e10881e3..b475a8fe259848749ee05ff6cf10e46f52f955d3 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4198,7 +4198,13 @@ public abstract class Entity
@@ -4194,7 +4194,13 @@ public abstract class Entity
}
}
@@ -36,7 +36,7 @@ index 07310ae30817fc88227355739074615969b48184..47eef926f57053ace7ea140261570c49
java.util.ArrayDeque<EntityTreeNode> queue = new java.util.ArrayDeque<>();
queue.add(this);
@@ -4211,14 +4217,24 @@ public abstract class Entity
@@ -4207,14 +4213,24 @@ public abstract class Entity
for (EntityTreeNode passenger : passengers) {
queue.add(passenger);
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix entity portal-teleport speed
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index c6434ff2e5c211887c2e98c8462a49e0e1cb5b21..534f103234eb92571c664cbcfea4ce4e990d3ea8 100644
index 35ab432bbd59aba80a6eaca1769e6aa82c8a7e46..6950fa2462353f30ee02e1d0091cfcf289f63939 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1492,7 +1492,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -46,7 +46,7 @@ index c6434ff2e5c211887c2e98c8462a49e0e1cb5b21..534f103234eb92571c664cbcfea4ce4e
} else {entity.inactiveTick();} // Paper - EAR 2
profiler.pop();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 47eef926f57053ace7ea140261570c4970822062..7953b7ece0b5e3f41e85252cdfd8e400fab212ae 100644
index b475a8fe259848749ee05ff6cf10e46f52f955d3..5e7cf38d241591715fec9ec008d3ac87bbaef662 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -387,6 +387,7 @@ public abstract class Entity
@@ -57,7 +57,7 @@ index 47eef926f57053ace7ea140261570c4970822062..7953b7ece0b5e3f41e85252cdfd8e400
public void inactiveTick() {
}
@@ -3595,6 +3596,7 @@ public abstract class Entity
@@ -3591,6 +3592,7 @@ public abstract class Entity
} else {
if (this.portalProcess == null || !this.portalProcess.isSamePortal(portal)) {
this.portalProcess = new PortalProcessor(portal, pos.immutable());
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix player auto saving ignores interval
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index bc390caff901a3b37a5a4ca3619dd9339fa4cb07..6e39d752aef322fc1cc12bf221cff057cad18578 100644
index 6c2196726a0669bddda456a089aeec0d9d9bdfa3..0802483484015fd92dec211aae9fd33e45621f74 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -208,7 +208,7 @@ import org.slf4j.Logger;
@@ -6,7 +6,7 @@ Subject: [PATCH] Force disable builtin spark plugin
The spark passed down from paper has some memory leaking issue, so we fully removed it from the code to prevent that memory leaking issue.
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67b5bcb079 100644
index dd63f14cf6b857202146348b2242673af1883cb7..88ccf32b3c1b3506fb76be5ae520168b6b167aa3 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -672,8 +672,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -29,7 +29,7 @@ index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67
this.server.disablePlugins();
this.server.waitForAsyncTasksShutdown(); // Paper - Wait for Async Tasks during shutdown
}
@@ -1352,7 +1352,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1351,7 +1351,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.statusIcon = this.loadStatusIcon().orElse(null);
this.status = this.buildServerStatus();
@@ -38,7 +38,7 @@ index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67
// Folia start - region threading
if (true) {
io.papermc.paper.threadedregions.RegionizedServer.getInstance().init(); // Folia - region threading - only after loading worlds
@@ -1666,7 +1666,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1665,7 +1665,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
if (this.emptyTicks >= emptyTickThreshold) {
@@ -47,7 +47,7 @@ index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67
if (this.emptyTicks == emptyTickThreshold) {
LOGGER.info("Server empty for {} seconds, pausing", this.pauseWhenEmptySeconds());
this.autoSave();
@@ -1685,7 +1685,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1684,7 +1684,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Paper end - avoid issues with certain tasks not processing during sleep
//this.server.spark.executeMainThreadTasks(); // Paper - spark // Folia - region threading
this.tickConnection();
@@ -56,7 +56,7 @@ index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67
return;
}
}
@@ -1698,7 +1698,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1697,7 +1697,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
};
// Folia end - region threading
@@ -65,7 +65,7 @@ index c74f76b46259204b33b69ad08bb03c81b8b36961..cc8364891a5d2196e8809479db984b67
new com.destroystokyo.paper.event.server.ServerTickStartEvent((int)region.getCurrentTick()).callEvent(); // Paper - Server Tick Events // Folia - region threading
// Folia start - region threading
if (region != null) {
@@ -1785,7 +1785,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1784,7 +1784,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
long remaining = scheduledEnd - endTime; // Folia - region ticking
new com.destroystokyo.paper.event.server.ServerTickEndEvent((int)io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick(), ((double)(endTime - startTime) / 1000000D), remaining).callEvent(); // Folia - region ticking
// Paper end - Server Tick Events
@@ -5,7 +5,7 @@ Subject: [PATCH] Prevent teleprotAsync calls in move events
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index c1faaf7d514c23d756aa626fa93aabd8bb503463..0c5fb17e7cce18eac68183cc3b5de6fc6451dc50 100644
index c86b1fd5e200c478d178be32791b6e8c960d47e2..9be6d486082d344fb91fd74207eee83ca2f8e869 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -730,7 +730,9 @@ public class ServerGamePacketListenerImpl
@@ -18,7 +18,7 @@ index c1faaf7d514c23d756aa626fa93aabd8bb503463..0c5fb17e7cce18eac68183cc3b5de6fc
// If the event is cancelled we move the player back to their old location.
if (event.isCancelled()) {
@@ -1740,7 +1742,9 @@ public class ServerGamePacketListenerImpl
@@ -1741,7 +1743,9 @@ public class ServerGamePacketListenerImpl
Location oldTo = to.clone();
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
@@ -29,10 +29,10 @@ index c1faaf7d514c23d756aa626fa93aabd8bb503463..0c5fb17e7cce18eac68183cc3b5de6fc
// If the event is cancelled we move the player back to their old location.
if (event.isCancelled()) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 7953b7ece0b5e3f41e85252cdfd8e400fab212ae..343e4bb41acfab4e50729aa5dbe2a071dac376a3 100644
index 5e7cf38d241591715fec9ec008d3ac87bbaef662..51dacbe395c85aba9b81831e511a413b303ca675 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4476,12 +4476,25 @@ public abstract class Entity
@@ -4472,12 +4472,25 @@ public abstract class Entity
teleportTarget.cause(), teleportFlags, teleportComplete
);
}
@@ -5,10 +5,10 @@ Subject: [PATCH] Sync dragon part when teleportation or firstly created
diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java
index b31b55f00e2ce1bd6c1011fe852bd1dbb37de524..75c36cbf86e56d4993169688a13f22ccef555d92 100644
index aa53138b3670a8337b639472a6ab5ce46702ff76..ed27b73e787782f328906b2a061feeca25d42a24 100644
--- a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java
+++ b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java
@@ -97,6 +97,7 @@ public final class ServerEntityLookup extends EntityLookup {
@@ -93,6 +93,7 @@ public final class ServerEntityLookup extends EntityLookup {
if (entity instanceof ThrownEnderpearl enderpearl) {
this.addEnderPearl(CoordinateUtils.getChunkKey(enderpearl.chunkPosition()), enderpearl.getId()); // Folia - region threading
}
@@ -17,10 +17,10 @@ index b31b55f00e2ce1bd6c1011fe852bd1dbb37de524..75c36cbf86e56d4993169688a13f22cc
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 343e4bb41acfab4e50729aa5dbe2a071dac376a3..c04917f31585d9d670cc98cda8eb36187f4261d7 100644
index 51dacbe395c85aba9b81831e511a413b303ca675..e2e1b101de8afbec7d853593c527e35111c94319 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4460,6 +4460,7 @@ public abstract class Entity
@@ -4456,6 +4456,7 @@ public abstract class Entity
Entity copy = this.getType().create(destination, EntitySpawnReason.DIMENSION_TRAVEL);
copy.restoreFrom(this);
copy.transform(pos, yaw, pitch, velocity);
@@ -8,7 +8,7 @@ On folia, entity usually cannot move out of the tickregion, but sometimes it act
Reference from : https://github.com/KaiijuMC/Kaiiju/blob/ver/1.20.1/patches/server/0040-Teleport-async-if-we-cannot-move-entity-off-main.patch
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index c04917f31585d9d670cc98cda8eb36187f4261d7..9270b887448023b6ace2e7fae6b632755ce90600 100644
index e2e1b101de8afbec7d853593c527e35111c94319..33c9692a59c58c44a77b1077553e2bda88cb8305 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1163,6 +1163,19 @@ public abstract class Entity
@@ -228,7 +228,7 @@ index 5a72fa0d72bfdb927293abe921c57f6ae964a6ec..f8344f640f119e3865f2718d1abd0ede
private void uncaughtException(final Thread thread, final Throwable thr) {
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index cc8364891a5d2196e8809479db984b67b5bcb079..7c67a8a6cf83ab80d3a8b37c5ff03e7a56497bc9 100644
index 88ccf32b3c1b3506fb76be5ae520168b6b167aa3..8bc18bf35537d5bbf2dacef34886b9a95d44a340 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -236,7 +236,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -240,7 +240,7 @@ index cc8364891a5d2196e8809479db984b67b5bcb079..7c67a8a6cf83ab80d3a8b37c5ff03e7a
private PlayerList playerList;
private volatile boolean running = true;
private volatile boolean isRestarting = false; // Paper - flag to signify we're attempting to restart
@@ -2034,14 +2034,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2047,14 +2047,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
// CraftBukkit start
@@ -258,7 +258,7 @@ index cc8364891a5d2196e8809479db984b67b5bcb079..7c67a8a6cf83ab80d3a8b37c5ff03e7a
Map<ResourceKey<Level>, ServerLevel> newLevels = Maps.newLinkedHashMap(oldLevels);
newLevels.remove(level.dimension());
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 534f103234eb92571c664cbcfea4ce4e990d3ea8..c4d9d890db784d376b876d70f0468df6edb75168 100644
index 6950fa2462353f30ee02e1d0091cfcf289f63939..def5d4ce012dba5f819680d671235173467bfe7a 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -221,6 +221,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -275,7 +275,7 @@ index 534f103234eb92571c664cbcfea4ce4e990d3ea8..c4d9d890db784d376b876d70f0468df6
// CraftBukkit start
private final ResourceKey<LevelStem> typeKey;
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 6e39d752aef322fc1cc12bf221cff057cad18578..00dfc496f4e437393f0fc5707f50783418f263f4 100644
index 0802483484015fd92dec211aae9fd33e45621f74..4c9915087798f6548bb22574051c7b0b5aed7732 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1694,7 +1694,30 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -322,10 +322,10 @@ index 6e39d752aef322fc1cc12bf221cff057cad18578..00dfc496f4e437393f0fc5707f507834
}
);
diff --git a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
index 97f4c546663fb19558246366a3d8d77f2b9327ef..e5304e9d1ea57c01a1147621a42a9b584878f765 100644
index 111789b4aca281dd1899dfbcc4e7e0ca36d74b51..2d3b0243f061aeaa979ddfc89c0361ecc29edcde 100644
--- a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
@@ -210,8 +210,23 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
@@ -219,8 +219,23 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
this.switchToMain = serverPlayer;
// now the connection responsibility is transferred to the region
@@ -350,7 +350,7 @@ index 97f4c546663fb19558246366a3d8d77f2b9327ef..e5304e9d1ea57c01a1147621a42a9b58
world.moonrise$getChunkTaskScheduler().scheduleTickingState(
chunkPos.x(), chunkPos.z(), net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING, true,
ca.spottedleaf.concurrentutil.util.Priority.HIGHER,
@@ -223,9 +238,15 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
@@ -232,9 +247,15 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
);
io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue(
world, chunkPos.x(), chunkPos.z(), () -> {
@@ -367,7 +367,7 @@ index 97f4c546663fb19558246366a3d8d77f2b9327ef..e5304e9d1ea57c01a1147621a42a9b58
);
}
diff --git a/net/minecraft/server/network/config/PrepareSpawnTask.java b/net/minecraft/server/network/config/PrepareSpawnTask.java
index 48f51b0f94df3e59c9410129489c63a4287bc0bc..2682f8702785b1e501748a308c5e394b8b664428 100644
index 9fad06eda81b4c2c1889a9cfa7a6948e7ee01862..854f8954ccfd8c34c9f9c91fd1805260f9b429b5 100644
--- a/net/minecraft/server/network/config/PrepareSpawnTask.java
+++ b/net/minecraft/server/network/config/PrepareSpawnTask.java
@@ -104,6 +104,16 @@ public class PrepareSpawnTask implements ConfigurationTask {
@@ -429,7 +429,7 @@ index 48f51b0f94df3e59c9410129489c63a4287bc0bc..2682f8702785b1e501748a308c5e394b
private final Vec2 spawnAngle;
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101dbe6353246 100644
index 33c9692a59c58c44a77b1077553e2bda88cb8305..e8047a06a2df17fde9965508c1ebcf1fc4d25989 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -392,6 +392,9 @@ public abstract class Entity
@@ -442,7 +442,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
// CraftBukkit end
// Paper start
@@ -4538,6 +4541,17 @@ public abstract class Entity
@@ -4534,6 +4537,17 @@ public abstract class Entity
}
}
@@ -460,7 +460,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
// TODO any events that can modify go HERE
// check for same region
@@ -4556,6 +4570,14 @@ public abstract class Entity
@@ -4552,6 +4566,14 @@ public abstract class Entity
}
for (EntityTreeNode entity : passengerTree.getFullTree()) {
@@ -475,7 +475,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
entity.root.teleportSyncSameRegion(pos, yaw, pitch, velocity);
}
@@ -4571,8 +4593,8 @@ public abstract class Entity
@@ -4567,8 +4589,8 @@ public abstract class Entity
// performs add/remove from world logic which will also perform add/remove tracker logic
}
@@ -486,7 +486,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
}
return true;
}
@@ -4589,7 +4611,7 @@ public abstract class Entity
@@ -4585,7 +4607,7 @@ public abstract class Entity
node.root = node.root.transformForAsyncTeleport(destination, pos, yaw, pitch, velocity);
}
@@ -495,7 +495,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
return true;
}
@@ -4868,6 +4890,13 @@ public abstract class Entity
@@ -4864,6 +4886,13 @@ public abstract class Entity
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(initialPosition),
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(initialPosition)
);
@@ -509,7 +509,7 @@ index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101db
// first, remove entity/passengers from world
EntityTreeNode passengerTree = this.detachPassengers();
@@ -4925,6 +4954,10 @@ public abstract class Entity
@@ -4921,6 +4950,10 @@ public abstract class Entity
if (info.postTeleportTransition() != null) {
info.postTeleportTransition().onTransition(teleported);
}
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Bacteriawa <A3167717663@hotmail.com>
Date: Tue, 21 Apr 2026 01:41:14 +0800
Date: Sat, 8 Aug 2026 01:27:42 +0800
Subject: [PATCH] Kaiiju: Entity tick and removal limiter
Co-authored by: Xymb <xymb@endcrystal.me>
@@ -8,19 +8,19 @@ As part of: Kaiiju (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2e
Licensed under: GPL-3.0 (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2ec408e6411e6f752379da/LICENSE)
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index cb15cfbc684ae9e9d9634886f707c2df10063139..f32d118e1e925b2155cef3fcdcb1e194c541e242 100644
index c8f13da82c55cc5c1fe1c922a87e3eccb1117937..981458f6697a79dbc9fc8cf41c088c98e556c6dd 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -354,6 +354,7 @@ public final class RegionizedWorldData {
@@ -349,6 +349,7 @@ public final class RegionizedWorldData {
private final IteratorSafeOrderedReferenceSet<Mob> navigatingMobs = new IteratorSafeOrderedReferenceSet<>();
public final ReferenceList<Entity> trackerEntities = new ReferenceList<>(EMPTY_ENTITY_ARRAY); // Moonrise - entity tracker
public final ReferenceList<Entity> trackerUnloadedEntities = new ReferenceList<>(EMPTY_ENTITY_ARRAY); // Moonrise - entity tracker
public ReferenceList<Entity> trackerEntities = new ReferenceList<>(EMPTY_ENTITY_ARRAY); // Moonrise - entity tracker
public boolean iteratingTrackerEntities;
+ public final dev.kaiijumc.kaiiju.KaiijuEntityThrottler entityThrottler = new dev.kaiijumc.kaiiju.KaiijuEntityThrottler(); // Kaiiju
// block ticking
private final ObjectLinkedOpenHashSet<BlockEventData> blockEvents = new ObjectLinkedOpenHashSet<>();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index c4d9d890db784d376b876d70f0468df6edb75168..0641b98ef3298eb682ceae83f60b730f3bf90103 100644
index def5d4ce012dba5f819680d671235173467bfe7a..1c01ec9597c47b7296f498a897f1fd2333c8c4d4 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -917,6 +917,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -8,10 +8,10 @@ As part of: Kaiiju (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2e
Licensed under: GPL-3.0 (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2ec408e6411e6f752379da/LICENSE)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 66ddbdb130867a508ba161a570d101dbe6353246..df82f900580ad1b71960eab890a7a6215f578421 100644
index e8047a06a2df17fde9965508c1ebcf1fc4d25989..3b98ef4310d9f996437af9f12ab3de2cf6f4dd63 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4676,15 +4676,19 @@ public abstract class Entity
@@ -4672,15 +4672,19 @@ public abstract class Entity
targetPos, 16, // load 16 blocks to be safe from block physics
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
(chunks) -> {
@@ -35,7 +35,7 @@ index 66ddbdb130867a508ba161a570d101dbe6353246..df82f900580ad1b71960eab890a7a621
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL,
TeleportTransition.PassengerTeleportationMode.POSITION_RIDER
@@ -4700,11 +4704,15 @@ public abstract class Entity
@@ -4696,11 +4700,15 @@ public abstract class Entity
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
(chunks) -> {
BlockPos adjustedSpawn = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, spawnPos);
@@ -53,7 +53,7 @@ index 66ddbdb130867a508ba161a570d101dbe6353246..df82f900580ad1b71960eab890a7a621
false, false,
Relative.union(Relative.DELTA, Relative.ROTATION),
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
@@ -4885,6 +4893,10 @@ public abstract class Entity
@@ -4881,6 +4889,10 @@ public abstract class Entity
return false;
}
@@ -64,7 +64,7 @@ index 66ddbdb130867a508ba161a570d101dbe6353246..df82f900580ad1b71960eab890a7a621
Vec3 initialPosition = this.position();
ChunkPos initialPositionChunk = new ChunkPos(
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(initialPosition),
@@ -4959,9 +4971,14 @@ public abstract class Entity
@@ -4955,9 +4967,14 @@ public abstract class Entity
destination.levelUnloadStateLock.releaseRead();
// Luminol end
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
Date: Sun, 28 Jun 2026 19:58:46 +0800
From: Bacteriawa <A3167717663@hotmail.com>
Date: Sat, 8 Aug 2026 01:29:57 +0800
Subject: [PATCH] Async protocol switching optimization
@@ -137,10 +137,10 @@ index 40f54536422fa38bd84017fc634808016b4de58b..ecaa296f576c5c90fda89e0406d65526
+
}
diff --git a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
index e5304e9d1ea57c01a1147621a42a9b584878f765..af337f77545df94760b12a2b2f5eaf43d18e3774 100644
index 2d3b0243f061aeaa979ddfc89c0361ecc29edcde..e074fe9eb6a1e6cb30b7de522fcac673dcb81960 100644
--- a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java
@@ -188,8 +188,9 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
@@ -197,8 +197,9 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
public void handleConfigurationFinished(final ServerboundFinishConfigurationPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.server.packetProcessor());
this.finishCurrentTask(JoinWorldTask.TYPE);
@@ -151,7 +151,7 @@ index e5304e9d1ea57c01a1147621a42a9b584878f765..af337f77545df94760b12a2b2f5eaf43
try {
PlayerList playerList = this.server.getPlayerList();
if (playerList.getPlayer(this.gameProfile.id()) != null) {
@@ -256,6 +257,18 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
@@ -265,6 +266,18 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis
LOGGER.error("Couldn't place player in world", e);
this.disconnect(DISCONNECT_REASON_INVALID_DATA);
}
@@ -171,10 +171,10 @@ index e5304e9d1ea57c01a1147621a42a9b584878f765..af337f77545df94760b12a2b2f5eaf43
@Override
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 0c5fb17e7cce18eac68183cc3b5de6fc6451dc50..1ea8e03a4dc39486505d21bff1d15cb2339cafc2 100644
index 9be6d486082d344fb91fd74207eee83ca2f8e869..40b409ad07eaa03473712ba83bc4ccd9a5c0f932 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2901,7 +2901,13 @@ public class ServerGamePacketListenerImpl
@@ -2902,7 +2902,13 @@ public class ServerGamePacketListenerImpl
} // Folia end - rewrite login process - move connection ownership to global region
this.waitingForSwitchToConfig = true; // Folia - rewrite login process - fix bad ordering of this field write - moved down
this.send(ClientboundStartConfigurationPacket.INSTANCE);
@@ -188,7 +188,7 @@ index 0c5fb17e7cce18eac68183cc3b5de6fc6451dc50..1ea8e03a4dc39486505d21bff1d15cb2
}
@Override
@@ -3786,12 +3792,26 @@ public class ServerGamePacketListenerImpl
@@ -3787,12 +3793,26 @@ public class ServerGamePacketListenerImpl
}
final ServerConfigurationPacketListenerImpl listener = new ServerConfigurationPacketListenerImpl(this.server, this.connection, this.createCookie(this.player.clientInformation())); // Paper
@@ -253,12 +253,12 @@ index f2329d1a9d9d4bf4c9d771e25e54f2f9ef65a76c..deee051c103f9797f4612e06c12f293e
@Override
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index e7579a9873362317dd82b63306cf650af9472574..53449af103c1774f68cb0c296d47e7032e4e3843 100644
index 259eb7574841b1b885093b534440f8a40db4e8e2..2975a879320faed5f6591489f86d3f909072cbaa 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -237,9 +237,11 @@ public abstract class PlayerList {
// only after setting the connection listener to game type, add the connection to this regions list
level.getCurrentWorldData().connections.add(connection);
level.getCurrentWorldData().addConnection(player);
// Folia end - rewrite login process
+ if (!me.earthme.luminol.config.modules.optimizations.AsyncProtocolChangeConfig.enabled) { // Luminol - Async protocol switch // we will run async switch once these main thread logics became done
connection.setupInboundProtocol(
@@ -5,10 +5,10 @@ Subject: [PATCH] Add config for server mod name
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 7c67a8a6cf83ab80d3a8b37c5ff03e7a56497bc9..b2823c71ecb5e1f7a3c4c5b9f691d4cdb5419db3 100644
index 8bc18bf35537d5bbf2dacef34886b9a95d44a340..daf45761bdc88848ba81b7595b5abd5635dfd607 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -2072,7 +2072,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2085,7 +2085,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
public String getServerModName() {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config for vanilla random
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index df82f900580ad1b71960eab890a7a6215f578421..39f2b44846c02796a3671a5dec75b7b34d8c488e 100644
index 3b98ef4310d9f996437af9f12ab3de2cf6f4dd63..a7f4a9f8bca00fda1b57e2245c57726bb1ce41ed 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -298,7 +298,7 @@ public abstract class Entity
@@ -19,10 +19,10 @@ index 9b1dcfadd6d5ae868b087a18983d03e8bb86b56a..21f2b9866e1cf36421e10a945fb6fbaa
DefaultGameModeCommands.register(this.dispatcher);
//DialogCommand.register(this.dispatcher, context); // Folia - region threading - TODO
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index b2823c71ecb5e1f7a3c4c5b9f691d4cdb5419db3..a82cafadf2136d30ae7bca172062713a651373ac 100644
index daf45761bdc88848ba81b7595b5abd5635dfd607..b9ff4628421ba0c5bdaec13c9dc1b35e8d194d92 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -2415,6 +2415,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2428,6 +2428,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return this.reloadResources(packsToEnable, io.papermc.paper.event.server.ServerResourcesReloadedEvent.Cause.PLUGIN);
}
@@ -17,10 +17,10 @@ index 52dcbcf64c3a510d4a4524b7d0ee226d9a73511d..051d601e7e809518e8d82ae4ae325905
}
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index a82cafadf2136d30ae7bca172062713a651373ac..e43aa6daa8d4465764348be5b82be5f163ef0819 100644
index b9ff4628421ba0c5bdaec13c9dc1b35e8d194d92..ff6809944c2dd8a2cc7c11a8b05b0f7c17b5fb4c 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1743,7 +1743,46 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1742,7 +1742,46 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Folia end - region threading
//this.tickCount++; // Folia - region threading
//this.tickRateManager.tick(); // Folia - region threading
@@ -68,7 +68,7 @@ index a82cafadf2136d30ae7bca172062713a651373ac..e43aa6daa8d4465764348be5b82be5f1
this.lastServerStatus = nano;
this.status = this.buildServerStatus();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 0641b98ef3298eb682ceae83f60b730f3bf90103..cea4bc7036dfd8777c151a0dd811fc13579d6501 100644
index 1c01ec9597c47b7296f498a897f1fd2333c8c4d4..015f0521aa65201fab990177867d10e0ea0611d4 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1491,6 +1491,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -106,7 +106,7 @@ index 0641b98ef3298eb682ceae83f60b730f3bf90103..cea4bc7036dfd8777c151a0dd811fc13
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 00dfc496f4e437393f0fc5707f50783418f263f4..f4fb1f36527e7d29b2b4733bbc7309a162d6949d 100644
index 4c9915087798f6548bb22574051c7b0b5aed7732..21733beb07c0df3cf6872ce84a07e85dfe5ee3e9 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -441,7 +441,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -183,10 +183,10 @@ index f03fa06c0ba56f7f5e1e45bc1568a490751efde3..eee1c14249addbf4714df733870da974
+ // KioCG end
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 39f2b44846c02796a3671a5dec75b7b34d8c488e..fe0208815dbf53855d47956925b817570f6ae5b0 100644
index a7f4a9f8bca00fda1b57e2245c57726bb1ce41ed..84fe83f25e72e8ce257421f62e532d4203438d2b 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -6479,4 +6479,6 @@ public abstract class Entity
@@ -6475,4 +6475,6 @@ public abstract class Entity
return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition());
}
// Paper end
@@ -258,7 +258,7 @@ index f79353aa58b03d00839e4e95d1fd2480a635a592..0a43947bcc9f505ad9bc4d54c564709c
+ // KioCG end
}
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 2eb5fc819e2e17c69de87f8aa1a99e02bc5a62d5..a4bc767b799c050ce07a3685f655b4ba947d2466 100644
index 5ffcf20d06f8a0cc0394347d8ef4cfa1e89ebab2..a26025ec6c3c6fe84bfc598176a6d4ff49de4a41 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -170,6 +170,7 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -8,10 +8,10 @@ is for Anarchy servers or Crystal PVP servers this allows them to pvp
without stopping the item mid animation.
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 1ea8e03a4dc39486505d21bff1d15cb2339cafc2..a2146662c8ec83f62547bcd813c0e4dcb10efc07 100644
index 40b409ad07eaa03473712ba83bc4ccd9a5c0f932..95715be85fe2d35d219a496f6677732833d6b345 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2186,7 +2186,9 @@ public class ServerGamePacketListenerImpl
@@ -2187,7 +2187,9 @@ public class ServerGamePacketListenerImpl
this.player.sendSpawnProtectionMessage(pos);
} else if (this.awaitingPositionFromClient == null && (level.mayInteract(this.player, pos) || passthroughSignInteraction)) {
// Paper end - Allow using signs inside spawn protection
@@ -21,7 +21,7 @@ index 1ea8e03a4dc39486505d21bff1d15cb2339cafc2..a2146662c8ec83f62547bcd813c0e4dc
InteractionResult interactionResult = this.player.gameMode.useItemOn(this.player, level, itemStack, hand, blockHit);
if (interactionResult.consumesAction()) {
CriteriaTriggers.ANY_BLOCK_USE.trigger(this.player, blockHit.getBlockPos(), itemStack);
@@ -2385,9 +2387,13 @@ public class ServerGamePacketListenerImpl
@@ -2386,9 +2388,13 @@ public class ServerGamePacketListenerImpl
return;
}
// CraftBukkit end
@@ -5,7 +5,7 @@ Subject: [PATCH] Add missing teleportation event APIs for folia
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index f4fb1f36527e7d29b2b4733bbc7309a162d6949d..75a36bbd5671992e78fe36a9b3d946ba465919d5 100644
index 21733beb07c0df3cf6872ce84a07e85dfe5ee3e9..055911982349bab23ba8d6c88f06c01456a86167 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1803,6 +1803,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -19,10 +19,10 @@ index f4fb1f36527e7d29b2b4733bbc7309a162d6949d..75a36bbd5671992e78fe36a9b3d946ba
);
});
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfdb78094e0 100644
index 84fe83f25e72e8ce257421f62e532d4203438d2b..7b5fac05a53a80a7c9cdae4986f35c30285bcf81 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4553,6 +4553,31 @@ public abstract class Entity
@@ -4549,6 +4549,31 @@ public abstract class Entity
// Luminol end
// TODO any events that can modify go HERE
@@ -54,7 +54,7 @@ index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfd
// check for same region
if (destination == this.level()
@@ -4671,6 +4696,17 @@ public abstract class Entity
@@ -4667,6 +4692,17 @@ public abstract class Entity
case END: {
if (destination.getTypeKey() == net.minecraft.world.level.dimension.LevelStem.END) {
BlockPos targetPos = ServerLevel.END_SPAWN_POINT;
@@ -72,7 +72,7 @@ index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfd
// need to load chunks so we can create the platform
destination.moonrise$loadChunksAsync(
targetPos, 16, // load 16 blocks to be safe from block physics
@@ -4698,6 +4734,17 @@ public abstract class Entity
@@ -4694,6 +4730,17 @@ public abstract class Entity
);
} else {
BlockPos spawnPos = destination.getRespawnData().pos();
@@ -90,7 +90,7 @@ index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfd
// need to load chunk for heightmap
destination.moonrise$loadChunksAsync(
spawnPos, 0,
@@ -4755,7 +4802,17 @@ public abstract class Entity
@@ -4751,7 +4798,17 @@ public abstract class Entity
WorldBorder destinationBorder = destination.getWorldBorder();
double dimensionScale = net.minecraft.world.level.dimension.DimensionType.getTeleportationScale(origin.dimensionType(), destination.dimensionType());
BlockPos targetPos = destination.getWorldBorder().clampToBounds(this.getX() * dimensionScale, this.getY(), this.getZ() * dimensionScale);
@@ -108,7 +108,7 @@ index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfd
ca.spottedleaf.concurrentutil.completable.CallbackCompletable<BlockUtil.FoundRectangle> portalFound
= new ca.spottedleaf.concurrentutil.completable.CallbackCompletable<>();
@@ -4892,6 +4949,15 @@ public abstract class Entity
@@ -4888,6 +4945,15 @@ public abstract class Entity
if (!this.canPortalAsync(destination, takePassengers)) {
return false;
}
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Portal rate limiter
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index f32d118e1e925b2155cef3fcdcb1e194c541e242..2d5d4170e1f45ae9113c37623b4066861dc79d64 100644
index 981458f6697a79dbc9fc8cf41c088c98e556c6dd..4dbbe03d949811bf6140a35faa5e8cee8f7e28f0 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -157,6 +157,10 @@ public final class RegionizedWorldData {
@@ -154,6 +154,10 @@ public final class RegionizedWorldData {
for (final ChunkHolder chunkHolder : from.chunkHoldersToBroadcast) {
into.chunkHoldersToBroadcast.add(chunkHolder);
}
@@ -19,7 +19,7 @@ index f32d118e1e925b2155cef3fcdcb1e194c541e242..2d5d4170e1f45ae9113c37623b406686
}
@Override
@@ -322,6 +326,12 @@ public final class RegionizedWorldData {
@@ -316,6 +320,12 @@ public final class RegionizedWorldData {
into.chunkHoldersToBroadcast.add(chunkHolder);
}
}
@@ -32,7 +32,7 @@ index f32d118e1e925b2155cef3fcdcb1e194c541e242..2d5d4170e1f45ae9113c37623b406686
}
};
@@ -343,6 +353,35 @@ public final class RegionizedWorldData {
@@ -338,6 +348,35 @@ public final class RegionizedWorldData {
return this.isHandlingTick;
}
@@ -69,10 +69,10 @@ index f32d118e1e925b2155cef3fcdcb1e194c541e242..2d5d4170e1f45ae9113c37623b406686
// this is copy on write to allow packet processing to iterate safely
private final CopyOnWriteArrayList<ServerPlayer> localPlayers = new CopyOnWriteArrayList<>();
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index e43aa6daa8d4465764348be5b82be5f163ef0819..f4274e844018992bba7c32d2146198efc034631e 100644
index ff6809944c2dd8a2cc7c11a8b05b0f7c17b5fb4c..fe1b70edb24e2ded42f8ca1f5ddfbae7151b147a 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1973,6 +1973,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1978,6 +1978,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
//net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = level.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers // Folia - region threading
profiler.push(() -> level + " " + level.dimension().identifier());
profiler.push("tick");
@@ -82,7 +82,7 @@ index e43aa6daa8d4465764348be5b82be5f163ef0819..f4274e844018992bba7c32d2146198ef
try {
foliaProfiler.startTimer(level.tickTimerId); try { // Folia - profiler
@@ -1987,6 +1990,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1992,6 +1995,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
profiler.pop();
profiler.pop();
regionizedWorldData.explosionDensityCache.clear(); // Paper - Optimize explosions // Folia - region threading
@@ -93,7 +93,7 @@ index e43aa6daa8d4465764348be5b82be5f163ef0819..f4274e844018992bba7c32d2146198ef
//this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked // Folia - region threading
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index cea4bc7036dfd8777c151a0dd811fc13579d6501..402e2f01f2b3a8e9ce5c818f07581b4dab38fc26 100644
index 015f0521aa65201fab990177867d10e0ea0611d4..adde187ad84ad75047096736de6e51ef81897d61 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1536,8 +1536,15 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -18,10 +18,10 @@ index 409fcc5e95ca453fee7d3bd0375c910d79b507e6..5a5f7f7fefacaa0d77ec389d6eb332ef
WorldBorderCommand.register(this.dispatcher);
if (JvmProfiler.INSTANCE.isAvailable()) {
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index f4274e844018992bba7c32d2146198efc034631e..42ee15c813761702031d5a63f0d080b135be2e0f 100644
index fe1b70edb24e2ded42f8ca1f5ddfbae7151b147a..35aa8df4aecd91387997f01c258f0d549dfba0f8 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -3127,8 +3127,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -3140,8 +3140,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
level.players().forEach(playerx -> playerx.connection.send(packet)); // Paper - per-world game rules
} else if (rule == GameRules.LOCATOR_BAR) {
// this.getAllLevels().forEach(level -> { // Paper - per-world game rules
@@ -33,7 +33,7 @@ index f4274e844018992bba7c32d2146198efc034631e..42ee15c813761702031d5a63f0d080b1
level.players().forEach(waypointManager::updatePlayer);
} else {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 402e2f01f2b3a8e9ce5c818f07581b4dab38fc26..a1c3f3e5c7c3f32e0bdead33ebd72c7601295291 100644
index adde187ad84ad75047096736de6e51ef81897d61..303233dcb0b33bf874fd71ee953565886e990138 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -690,7 +690,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -63,7 +63,7 @@ index 7927769cf9bccb892745f4d1390eb83b2861d1bb..414c21345879f589fb61130180d0ca60
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index a1c3f3e5c7c3f32e0bdead33ebd72c7601295291..85eed61919b3c2ef93943e1c1b50fbcbca6fb319 100644
index 303233dcb0b33bf874fd71ee953565886e990138..1024e68e1e3344b02c6e37c501a4ac989f486463 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -639,6 +639,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -9,7 +9,7 @@ As part of: Leaf (https://github.com/Winds-Studio/Leaf/blob/7f3e240bbe0970683c40
Licensed under: MIT (https://github.com/Winds-Studio/Leaf/blob/7f3e240bbe0970683c40279a7a65f0fde47503b6/licenses/MIT.txt)
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 53449af103c1774f68cb0c296d47e7032e4e3843..a8f051e6aff31a723a3ba59842fac3a43f4911fe 100644
index 2975a879320faed5f6591489f86d3f909072cbaa..d1683d4853f0d0190d9eae31706c99001229c026 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -1294,22 +1294,26 @@ public abstract class PlayerList {
@@ -8,10 +8,10 @@ This is a part of Leaf(https://github.com/Winds-Studio/Leaf/blob/d0ed97cf45dfa94
Original license: https://github.com/Winds-Studio/Leaf/blob/d0ed97cf45dfa94f686ef32f0eea1ec7323f78d5/LICENSE.md
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 2d5d4170e1f45ae9113c37623b4066861dc79d64..48fea9051efe038a823d7c2c9ae3bf28078f2fcc 100644
index 4dbbe03d949811bf6140a35faa5e8cee8f7e28f0..ab607bcc767068c89bf034013652102c232d35a9 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -457,6 +457,7 @@ public final class RegionizedWorldData {
@@ -452,6 +452,7 @@ public final class RegionizedWorldData {
public final PathTypeCache pathTypesByPosCache = new PathTypeCache();
public final List<LevelChunk> temporaryChunkTickList = new java.util.ArrayList<>();
public final Set<ChunkHolder> chunkHoldersToBroadcast = new ReferenceLinkedOpenHashSet<>();
@@ -8,7 +8,7 @@ A part of Leaf(https://github.com/Winds-Studio/Leaf/blob/edb0504069139beaa6f39ef
License: https://github.com/Winds-Studio/Leaf/blob/edb0504069139beaa6f39efa4702370c2576b3fc/LICENSE.md
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 42ee15c813761702031d5a63f0d080b135be2e0f..1736816e26c255645d62696814cd539ee1ffed8d 100644
index 35aa8df4aecd91387997f01c258f0d549dfba0f8..908cff4caa1457e07d809fb793d00d367ae42320 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -217,7 +217,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -86,7 +86,7 @@ index 7443744e3f256983e52a1cefcaf66082e4a46a7b..b7553611723f7120c66e1f3e51d89df2
}
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index a8f051e6aff31a723a3ba59842fac3a43f4911fe..2939aa1ecd68504424198dd7c90c71c6c1aa4c80 100644
index d1683d4853f0d0190d9eae31706c99001229c026..a98c9b287885e2c353cf75dbb7f004cf67c0d802 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -134,6 +134,7 @@ public abstract class PlayerList {
@@ -8,7 +8,7 @@ As part of: Purpur (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18
Licensed under: MIT (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/LICENSE)
diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java
index f649c46cc9a34e646f8da3244866c6e011d30aa3..10715e891205eadd3774dc349c52963606ce1ab7 100644
index 0869ecb4b7fe07efa33d521bef2f525955bd3c30..3fa0ca479922a7c55625c5e7bcd25065210ea44e 100644
--- a/net/minecraft/world/entity/npc/villager/Villager.java
+++ b/net/minecraft/world/entity/npc/villager/Villager.java
@@ -190,6 +190,53 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MrHua269 <mrhua269@gmail.com>
Date: Fri, 1 May 2026 21:47:48 +0800
From: Bacteriawa <A3167717663@hotmail.com>
Date: Sat, 8 Aug 2026 01:31:30 +0800
Subject: [PATCH] Pufferfish: Reduce projectile chunk loading
A part of Pufferfish(https://github.com/Pufferfish-gg/Pufferfish)
@@ -9,10 +9,10 @@ Original patch: https://github.com/pufferfish-gg/Pufferfish/blob/ver/1.21/puffer
Original license(GPL-3.0): https://github.com/pufferfish-gg/Pufferfish/blob/ver/1.21/PATCH-LICENSE
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 48fea9051efe038a823d7c2c9ae3bf28078f2fcc..c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc 100644
index ab607bcc767068c89bf034013652102c232d35a9..0bf23b7ceacf7d962270cb513abce050670c172e 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -339,6 +339,10 @@ public final class RegionizedWorldData {
@@ -333,6 +333,10 @@ public final class RegionizedWorldData {
private RegionizedServer.WorldLevelData tickData;
@@ -21,8 +21,8 @@ index 48fea9051efe038a823d7c2c9ae3bf28078f2fcc..c9f2d54be6f0699c2bf922c66ba0bafc
+ public long pufferfish$loadedTick = 0L;
+ // Luminol end
// connections
public final List<Connection> connections = new ArrayList<>();
private static final Connection[] EMPTY_CONNECTION_ARRAY = new Connection[0];
private final ReferenceList<Connection> connections = new ReferenceList<>(EMPTY_CONNECTION_ARRAY);
diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java
index 721e3b083846fd363a31311196bc4c681969215c..81aafd64cc80038eaafba059373db3682afb8c2c 100644
--- a/net/minecraft/world/entity/projectile/Projectile.java
@@ -20,7 +20,7 @@ index ecaa296f576c5c90fda89e0406d6552628ef5de3..d2e9d46bbd9ee4ce45419b11499d7a7b
synchronized (PACKET_LIMIT_LOCK) {
if (this.allPacketCounts != null) {
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index a2146662c8ec83f62547bcd813c0e4dcb10efc07..31c6defd8941a2c9e55eca3c8ca5623111e98e51 100644
index 95715be85fe2d35d219a496f6677732833d6b345..1bd8ae7e1250a56cff636b010c371144adbb7ad0 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -892,7 +892,7 @@ public class ServerGamePacketListenerImpl
@@ -32,7 +32,7 @@ index a2146662c8ec83f62547bcd813c0e4dcb10efc07..31c6defd8941a2c9e55eca3c8ca56231
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Paper - add proper async disconnect
return;
}
@@ -2128,6 +2128,7 @@ public class ServerGamePacketListenerImpl
@@ -2129,6 +2129,7 @@ public class ServerGamePacketListenerImpl
private long lastLimitedPacket = -1;
private boolean checkLimit(long timestamp) {
@@ -40,7 +40,7 @@ index a2146662c8ec83f62547bcd813c0e4dcb10efc07..31c6defd8941a2c9e55eca3c8ca56231
if (!io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.incomingPacketThreshold.enabled()) {
return true;
}
@@ -2694,6 +2695,8 @@ public class ServerGamePacketListenerImpl
@@ -2695,6 +2696,8 @@ public class ServerGamePacketListenerImpl
// Spigot start - spam exclusions
private void detectRateSpam(final TickThrottler throttler, final String message) {
@@ -49,7 +49,7 @@ index a2146662c8ec83f62547bcd813c0e4dcb10efc07..31c6defd8941a2c9e55eca3c8ca56231
if (org.spigotmc.SpigotConfig.enableSpamExclusions) {
for (String exclude : org.spigotmc.SpigotConfig.spamExclusions) {
if (exclude != null && message.startsWith(exclude)) {
@@ -3492,7 +3495,7 @@ public class ServerGamePacketListenerImpl
@@ -3493,7 +3496,7 @@ public class ServerGamePacketListenerImpl
@Override
public void handlePlaceRecipe(final ServerboundPlaceRecipePacket packet) {
// Paper start - auto recipe limit
@@ -9,7 +9,7 @@ Origin patch link: https://github.com/LeavesMC/Leaves/blob/master/leaves-server/
Origin license: https://github.com/LeavesMC/Leaves/blob/master/LICENSE.md
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9c930ac97 100644
index 0bf23b7ceacf7d962270cb513abce050670c172e..9820d2e18cbcb5fbc07fe57dd93101809ed2727d 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -65,6 +65,10 @@ import java.util.Set;
@@ -56,7 +56,7 @@ index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9
// connections
for (final Connection conn : from.connections) {
into.connections.add(conn);
@@ -114,16 +144,22 @@ public final class RegionizedWorldData {
@@ -111,16 +141,22 @@ public final class RegionizedWorldData {
from.fluidLevelTicks.merge(into.fluidLevelTicks, fromRedstoneTimeOffset);
// tile entity ticking
@@ -83,7 +83,7 @@ index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9
if (tileEntity != null) {
tileEntity.updateTicks(fromTickOffset, fromRedstoneTimeOffset);
}
@@ -167,6 +203,37 @@ public final class RegionizedWorldData {
@@ -164,6 +200,37 @@ public final class RegionizedWorldData {
public void split(final RegionizedWorldData from, final int chunkToRegionShift,
final Long2ReferenceOpenHashMap<RegionizedWorldData> regionToData,
final ReferenceOpenHashSet<RegionizedWorldData> dataSet) {
@@ -121,7 +121,7 @@ index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9
// connections
for (final Connection conn : from.connections) {
final ServerPlayer player = conn.getPlayer();
@@ -243,8 +310,9 @@ public final class RegionizedWorldData {
@@ -237,8 +304,9 @@ public final class RegionizedWorldData {
from.fluidLevelTicks.split(chunkToRegionShift, levelTicksFluidRegionData);
// tile entity ticking
@@ -133,7 +133,7 @@ index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9
final int chunkX = pos.getX() >> 4;
final int chunkZ = pos.getZ() >> 4;
@@ -254,8 +322,9 @@ public final class RegionizedWorldData {
@@ -248,8 +316,9 @@ public final class RegionizedWorldData {
} // else: when a chunk unloads, it does not actually _remove_ the tile entity from the list, it just gets
// marked as removed. So if there is no section, it's probably removed!
}
@@ -145,7 +145,7 @@ index c9f2d54be6f0699c2bf922c66ba0bafc7fb83ccc..24e186d05aa0333885178f444fade3b9
final int chunkX = pos.getX() >> 4;
final int chunkZ = pos.getZ() >> 4;
@@ -488,6 +557,11 @@ public final class RegionizedWorldData {
@@ -483,6 +552,11 @@ public final class RegionizedWorldData {
public final io.papermc.paper.redstone.RedstoneWireTurbo turbo;
// Environment attribute system
public Reference2ObjectOpenHashMap<EnvironmentAttribute<?>, EnvironmentAttributeSystem.ValueSampler<?>> attributeSamplers;
@@ -240,7 +240,7 @@ index 6e08d50794c4af4405f3e164a3fd46f376b3f78f..dd2d0940eece3e85078e574f66f71a4c
int getContainerSize();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 90b5d7806af8913735c4105b6e347bfdb78094e0..0ba8f401c9cd0e15187b4faee78667c543fded92 100644
index 7b5fac05a53a80a7c9cdae4986f35c30285bcf81..77ff989f2d2c2705a82d0e99e532c7073eb42825 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -324,7 +324,7 @@ public abstract class Entity
@@ -252,7 +252,7 @@ index 90b5d7806af8913735c4105b6e347bfdb78094e0..0ba8f401c9cd0e15187b4faee78667c5
private final VecDeltaCodec packetPositionCodec = new VecDeltaCodec();
public boolean needsSync;
public boolean syncPosition;
@@ -4471,11 +4471,13 @@ public abstract class Entity
@@ -4467,11 +4467,13 @@ public abstract class Entity
}
protected Entity transformForAsyncTeleport(ServerLevel destination, Vec3 pos, Float yaw, Float pitch, Vec3 velocity) {
@@ -266,7 +266,7 @@ index 90b5d7806af8913735c4105b6e347bfdb78094e0..0ba8f401c9cd0e15187b4faee78667c5
if (copy instanceof net.minecraft.world.entity.boss.enderdragon.EnderDragon dragon) dragon.syncDragonPartsAfterTeleportTransform(); // Luminol - Sync dragon part when teleportation or firstly created
// vanilla code used to call remove _after_ copying, and some stuff is required to be after copy - so add hook here
// for example, clearing of inventory after switching dimensions
@@ -6151,8 +6153,29 @@ public abstract class Entity
@@ -6147,8 +6149,29 @@ public abstract class Entity
this.setBoundingBox(this.makeBoundingBox());
}
// Paper end - Block invalid positions and bounding box
@@ -8,7 +8,7 @@ As part of: Leaves (https://github.com/LeavesMC/Leaves/blob/f553c53e4230aa032e54
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 31c6defd8941a2c9e55eca3c8ca5623111e98e51..164e2101688a9f29ecfa83f62141d8cb9df22ed1 100644
index 1bd8ae7e1250a56cff636b010c371144adbb7ad0..6b0856e836f041aa8bfe274d0444d6ce3165b1ce 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -644,7 +644,7 @@ public class ServerGamePacketListenerImpl
@@ -29,7 +29,7 @@ index 31c6defd8941a2c9e55eca3c8ca5623111e98e51..164e2101688a9f29ecfa83f62141d8cb
fail = true;
LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", vehicle.getPlainTextName(), this.player.getPlainTextName(), Math.sqrt(movedDist));
}
@@ -1614,7 +1614,7 @@ public class ServerGamePacketListenerImpl
@@ -1615,7 +1615,7 @@ public class ServerGamePacketListenerImpl
if (this.shouldCheckPlayerMovement(isFallFlying)) {
float metersPerTick = isFallFlying ? 300.0F : 100.0F;
@@ -38,7 +38,7 @@ index 31c6defd8941a2c9e55eca3c8ca5623111e98e51..164e2101688a9f29ecfa83f62141d8cb
// CraftBukkit end
// Paper start - Add fail move event
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_TOO_QUICKLY,
@@ -1675,7 +1675,8 @@ public class ServerGamePacketListenerImpl
@@ -1676,7 +1676,8 @@ public class ServerGamePacketListenerImpl
zDist = targetZ - this.player.getZ();
movedDist = xDist * xDist + yDist * yDist + zDist * zDist;
boolean movedWrongly = false; // Paper - Add fail move event; rename
@@ -10,7 +10,7 @@ VMP (https://github.com/RelativityMC/VMP-fabric)
Licensed under: MIT (https://opensource.org/licenses/MIT)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 0ba8f401c9cd0e15187b4faee78667c543fded92..ae0504263666103a588b6855cb27304582c38938 100644
index 77ff989f2d2c2705a82d0e99e532c7073eb42825..3c3420c51d70eb9afb80db43635246a546d1562c 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1155,8 +1155,14 @@ public abstract class Entity
@@ -28,7 +28,7 @@ index 0ba8f401c9cd0e15187b4faee78667c543fded92..ae0504263666103a588b6855cb273045
final Vec3 originalMovement = delta; // Paper - Expose pre-collision velocity
// Paper start - detailed watchdog information
ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main");
@@ -5645,6 +5651,11 @@ public abstract class Entity
@@ -5641,6 +5647,11 @@ public abstract class Entity
}
public final void setBoundingBox(final AABB bb) {
@@ -57,7 +57,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 85eed61919b3c2ef93943e1c1b50fbcbca6fb319..3fda5043937af3d66ab44c41b7e76822a3ddf53b 100644
index 1024e68e1e3344b02c6e37c501a4ac989f486463..2e84df044e65d2f145a190d1bbbb7de205d85e77 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1059,7 +1059,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -20,7 +20,7 @@ As part of: Akarin (https://github.com/Akarin-project/Akarin)
Licensed under: GPL-3.0-only (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index ae0504263666103a588b6855cb27304582c38938..92cb0b1722bd5bcf9996c3f6b9b62c980b70e229 100644
index 3c3420c51d70eb9afb80db43635246a546d1562c..f38ce49165b6c46d039e82d676e24832e93a402e 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -2441,8 +2441,8 @@ public abstract class Entity
@@ -7,7 +7,7 @@ License: GPL-3.0-only (https://www.gnu.org/licenses/gpl-3.0.html)
Gale - https://github.com/GaleMC/Gale
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 92cb0b1722bd5bcf9996c3f6b9b62c980b70e229..43e07a3c98e80f874f55411beac39e215ffdc3cf 100644
index f38ce49165b6c46d039e82d676e24832e93a402e..0868c067c5a455d1984d59b22426c2f019b25c9f 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1302,8 +1302,17 @@ public abstract class Entity
@@ -27,7 +27,7 @@ As part of: JettPack (https://gitlab.com/Titaniumtown/JettPack)
Licensed under: GPL-3.0-only (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
index 8d9ce3d301d5f7e4106587ae00adb8dd5b8b6f88..dd8a4e445928d93667702dedbd35ab3e0f94f3be 100644
index 5b7ed8e5067683143c99473a126e17baa531903c..ece13c12b793ede92ec67850ab6d5a88fddb8afa 100644
--- a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
+++ b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
@@ -400,7 +400,6 @@ public final class ChunkEntitySlices {
@@ -137,7 +137,7 @@ index 2e71a1cbabf3405e3e4fd5349a1784d895e7e60c..42de919064680b1a464d813976ca5e69
if (!itemStack.isEmpty()) {
slots.add(Pair.of(slot, itemStack.copy()));
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 75a36bbd5671992e78fe36a9b3d946ba465919d5..e029278822f264bd0c66060cd0031a515d43e98f 100644
index 055911982349bab23ba8d6c88f06c01456a86167..82ffe2cd08f3187a69d81b65d6903c5b8deeba0d 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1424,7 +1424,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -150,10 +150,10 @@ index 75a36bbd5671992e78fe36a9b3d946ba465919d5..e029278822f264bd0c66060cd0031a51
this.getInventory().equipment.set(value, net.minecraft.world.item.ItemStack.EMPTY);
}
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 164e2101688a9f29ecfa83f62141d8cb9df22ed1..2a383eee714b7da08b552c5bfb3988fad3cadb93 100644
index 6b0856e836f041aa8bfe274d0444d6ce3165b1ce..4be8ef7acd34c4768a86422063eb07075d35583c 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3027,7 +3027,7 @@ public class ServerGamePacketListenerImpl
@@ -3028,7 +3028,7 @@ public class ServerGamePacketListenerImpl
// SPIGOT-7136 - Allays
if (target instanceof net.minecraft.world.entity.animal.allay.Allay || target instanceof net.minecraft.world.entity.animal.equine.AbstractHorse) { // Paper - Fix horse armor desync
ServerGamePacketListenerImpl.this.send(new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket(
@@ -287,7 +287,7 @@ index 9e4293c6df1851a852423b469577388d2254e169..952b09fba4cf7de90110a7aa4b96dc03
ItemStack itemStack = this.equipment.get(slot); // Paper
if (!itemStack.isEmpty() && !EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.PREVENT_EQUIPMENT_DROP)) {
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index a4bc767b799c050ce07a3685f655b4ba947d2466..a447b9fbb579591c62b3d8f8e2527796feefc4a0 100644
index a26025ec6c3c6fe84bfc598176a6d4ff49de4a41..5e4f2061aecef57d89acc456acfc347953a386aa 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -346,7 +346,7 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -26,7 +26,7 @@ index 47cd33bce908744e64356b585853d6a8ecf82443..bb4011d3c6a1d2a5aa66e68fe719cd5e
loadFromJson(stream, output);
} catch (IOException | JsonParseException e) {
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index a557d488e4e289a61aeb9aed0cc133a0a7ce8f8c..ca349619bcdd0682c9d66d54fc55cac268fc443b 100644
index 4385488983a7544eb6d9193d913dc55294f4620d..9269f9918c4f1eda8ae9cc487da2826ca09a10fb 100644
--- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java
@@ -167,6 +167,8 @@ public class Main {
@@ -8,7 +8,7 @@ As part of: Purpur (https://github.com/PurpurMC/Purpur/blob/dc46f46d28dcdcaf33bb
Licensed under: MIT (https://github.com/PurpurMC/Purpur/blob/dc46f46d28dcdcaf33bb533f9571a107db98c1d7/LICENSE)
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 2939aa1ecd68504424198dd7c90c71c6c1aa4c80..8b7e4814b00d6f6c9f25cce5186905f165b97c2f 100644
index a98c9b287885e2c353cf75dbb7f004cf67c0d802..1dcb4fe3e2c250554e4f065caf21b37ea659e621 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -961,6 +961,10 @@ public abstract class PlayerList {
@@ -23,7 +23,7 @@ index 2939aa1ecd68504424198dd7c90c71c6c1aa4c80..8b7e4814b00d6f6c9f25cce5186905f1
// Paper start - whitelist verify event / login event
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index a447b9fbb579591c62b3d8f8e2527796feefc4a0..9fdc8134fdde2cdd7724a459a29e51f4ad943403 100644
index 5e4f2061aecef57d89acc456acfc347953a386aa..e7b6c83a4e7bd83f6c5a1d772c42c51bf1d1bed1 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -175,6 +175,7 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to disable some check for operators
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 2a383eee714b7da08b552c5bfb3988fad3cadb93..6f5d5b123f69b7bdc3960e0ad216ec291aa100c3 100644
index 4be8ef7acd34c4768a86422063eb07075d35583c..57c2748dccf3bcb4f8464f3bc0fe3df39a2c8cb5 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -402,7 +402,7 @@ public class ServerGamePacketListenerImpl
@@ -35,7 +35,7 @@ index 2a383eee714b7da08b552c5bfb3988fad3cadb93..6f5d5b123f69b7bdc3960e0ad216ec29
fail = true;
LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", vehicle.getPlainTextName(), this.player.getPlainTextName(), Math.sqrt(movedDist));
}
@@ -1619,7 +1619,7 @@ public class ServerGamePacketListenerImpl
@@ -1620,7 +1620,7 @@ public class ServerGamePacketListenerImpl
// Paper start - Add fail move event
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_TOO_QUICKLY,
targetX, targetY, targetZ, targetYRot, targetXRot, true);
@@ -44,7 +44,7 @@ index 2a383eee714b7da08b552c5bfb3988fad3cadb93..6f5d5b123f69b7bdc3960e0ad216ec29
if (event.getLogWarning()) {
LOGGER.warn("{} moved too quickly! {},{},{}", this.player.getPlainTextName(), xDist, yDist, zDist);
}
@@ -1685,7 +1685,7 @@ public class ServerGamePacketListenerImpl
@@ -1686,7 +1686,7 @@ public class ServerGamePacketListenerImpl
// Paper start - Add fail move event
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_WRONGLY,
targetX, targetY, targetZ, targetYRot, targetXRot, true);
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable cross region damage trace
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index e029278822f264bd0c66060cd0031a515d43e98f..0a6c85ff078df07f80faf7cfb39d301d5788584e 100644
index 82ffe2cd08f3187a69d81b65d6903c5b8deeba0d..dcd1b874b68bc2e780f5a5a2ba8ac7a6a16a65f4 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1448,6 +1448,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -48,10 +48,10 @@ index 5a5f7f7fefacaa0d77ec389d6eb332eff519496a..f0f6175569100589102d9d76b3ff8f55
SaveOnCommand.register(this.dispatcher);
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 1736816e26c255645d62696814cd539ee1ffed8d..a0c285d2cb666d0f9bd0e859e0dac414254325c3 100644
index 908cff4caa1457e07d809fb793d00d367ae42320..143b7a167dcbf015a7318f2fe5e0798418fa2572 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1652,6 +1652,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1651,6 +1651,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Folia start - region threading
public void tickServer(final long startTime, final long scheduledEnd, final long targetBuffer,
final io.papermc.paper.threadedregions.TickRegions.TickRegionData region) {
@@ -5,10 +5,10 @@ Subject: [PATCH] Add config to enable raytracing tracker
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
index 163999d50213e0167eb09f0eae883388849f28fa..5196431f52e81608a5575f8a262cd5c855b06182 100644
index e9307ef10502856378d7831fb7800dd77230130c..6bca982627cf6a865820df75be2814a7289f98dc 100644
--- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java
@@ -1351,7 +1351,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
@@ -1375,7 +1375,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
double distanceSquared = deltaToPlayerX * deltaToPlayerX + deltaToPlayerZ * deltaToPlayerZ; // Paper
double rangeSquared = visibleRange * visibleRange;
// Paper start - Configurable entity tracking range by Y
@@ -18,7 +18,7 @@ index 163999d50213e0167eb09f0eae883388849f28fa..5196431f52e81608a5575f8a262cd5c8
double rangeY = level.paperConfig().entities.trackingRangeY.get(this.entity, -1);
if (rangeY != -1) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 43e07a3c98e80f874f55411beac39e215ffdc3cf..cddf44f5da5cba5603dcff4913b4658dcfcc48db 100644
index 0868c067c5a455d1984d59b22426c2f019b25c9f..b9f9dd85d259306db9eb9daf0a9ec36f27dfddb7 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -164,7 +164,7 @@ public abstract class Entity
@@ -30,7 +30,7 @@ index 43e07a3c98e80f874f55411beac39e215ffdc3cf..cddf44f5da5cba5603dcff4913b4658d
// CraftBukkit start
private static final int CURRENT_LEVEL = 2;
static boolean isLevelAtLeast(ValueInput input, int level) {
@@ -6590,4 +6590,48 @@ public abstract class Entity
@@ -6586,4 +6586,48 @@ public abstract class Entity
// Paper end
public boolean shouldTickHot() { return this.tickCount > 20 * 10 && this.isAlive(); } // KioCG
@@ -96,7 +96,7 @@ index 31619890f1bd4f458b6f9a31fac8cefaafe09e8e..50643bd0b546a1ff70031ea39e2610f2
public EntityType(
final EntityType.EntityFactory<T> factory,
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 9fdc8134fdde2cdd7724a459a29e51f4ad943403..c6fa9dff800b1491b1e0fc5d7e1dc16b99b8c7db 100644
index e7b6c83a4e7bd83f6c5a1d772c42c51bf1d1bed1..449a2904fb1190f68de72bc47eb8220f50002577 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -186,6 +186,25 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -5,7 +5,7 @@ Subject: [PATCH] Spawn invulnerable time
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 0a6c85ff078df07f80faf7cfb39d301d5788584e..729fc979fb313ddf2a5c6a04a9a0790440d15830 100644
index dcd1b874b68bc2e780f5a5a2ba8ac7a6a16a65f4..14eaa25d67e9dbaad5ae4c6d6be4ae640b2fc015 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -245,6 +245,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -38,10 +38,10 @@ index be357d315f5c83349a7f7287ff45e92137950a8c..a542e38ea6a1e8fc81466acbca071d89
if (count > maxAllowedCount) {
source.sendFailure(Component.translatable("commands.give.failed.toomanyitems", maxAllowedCount, prototypeItemStack.getDisplayName()));
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 6f5d5b123f69b7bdc3960e0ad216ec291aa100c3..f036ef938bdd66ab87610e76c8c878bf3d3c86b1 100644
index 57c2748dccf3bcb4f8464f3bc0fe3df39a2c8cb5..9907e58908eb17874cc938337888dfe4ad4c060f 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3232,7 +3232,7 @@ public class ServerGamePacketListenerImpl
@@ -3233,7 +3233,7 @@ public class ServerGamePacketListenerImpl
} else if (slot.mayPlace(cursor)) {
if (ItemStack.isSameItemSameComponents(clickedItem, cursor)) {
int toPlace = packet.buttonNum() == 0 ? cursor.getCount() : 1;
@@ -50,7 +50,7 @@ index 6f5d5b123f69b7bdc3960e0ad216ec291aa100c3..f036ef938bdd66ab87610e76c8c878bf
toPlace = Math.min(toPlace, slot.container.getMaxStackSize() - clickedItem.getCount());
if (toPlace == 1) {
action = InventoryAction.PLACE_ONE;
@@ -3268,7 +3268,7 @@ public class ServerGamePacketListenerImpl
@@ -3269,7 +3269,7 @@ public class ServerGamePacketListenerImpl
}
} else if (ItemStack.isSameItemSameComponents(cursor, clickedItem)) {
if (clickedItem.getCount() >= 0) {
@@ -59,7 +59,7 @@ index 6f5d5b123f69b7bdc3960e0ad216ec291aa100c3..f036ef938bdd66ab87610e76c8c878bf
// As of 1.5, this is result slots only
action = InventoryAction.PICKUP_ALL;
}
@@ -3485,6 +3485,7 @@ public class ServerGamePacketListenerImpl
@@ -3486,6 +3486,7 @@ public class ServerGamePacketListenerImpl
this.player.containerMenu.broadcastFullState();
} else {
this.player.containerMenu.broadcastChanges();
@@ -67,7 +67,7 @@ index 6f5d5b123f69b7bdc3960e0ad216ec291aa100c3..f036ef938bdd66ab87610e76c8c878bf
}
if (packet.buttonNum() == Inventory.SLOT_OFFHAND && this.player.containerMenu != this.player.inventoryMenu) this.player.containerSynchronizer.sendOffHandSlotChange(); // Paper - update offhand data when the player is clicking in an inventory not their own as the sychronizer does not include offhand slots
if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes.
@@ -3596,7 +3597,7 @@ public class ServerGamePacketListenerImpl
@@ -3597,7 +3598,7 @@ public class ServerGamePacketListenerImpl
}
boolean validSlot = packet.slotNum() >= 1 && packet.slotNum() <= 45;
@@ -76,7 +76,7 @@ index 6f5d5b123f69b7bdc3960e0ad216ec291aa100c3..f036ef938bdd66ab87610e76c8c878bf
if (drop || (validSlot && !ItemStack.matches(this.player.inventoryMenu.getSlot(packet.slotNum()).getItem(), packet.itemStack()))) { // Insist on valid slot
// CraftBukkit start - Call click event
org.bukkit.inventory.InventoryView inventory = this.player.inventoryMenu.getBukkitView();
@@ -3638,6 +3639,7 @@ public class ServerGamePacketListenerImpl
@@ -3639,6 +3640,7 @@ public class ServerGamePacketListenerImpl
this.player.inventoryMenu.getSlot(packet.slotNum()).setByPlayer(itemStack);
this.player.inventoryMenu.setRemoteSlot(packet.slotNum(), itemStack);
this.player.inventoryMenu.broadcastChanges();
@@ -36,10 +36,10 @@ index 08e253662a2c183c0ab53a51cc07485cff33bf2c..1bd678d668a1febc129f4cb4d0d95ea2
};
}
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index a0c285d2cb666d0f9bd0e859e0dac414254325c3..9614a22c4b67e5e3a46e46fa69d22c136d4beb4b 100644
index 143b7a167dcbf015a7318f2fe5e0798418fa2572..22ad0846be08292b07b363b6b96f7431f87a4f3d 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -2016,6 +2016,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2021,6 +2021,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
profiler.popPush("server gui refresh");
@@ -96,7 +96,7 @@ index 010180899d69d0457dcc9feee4f1c062c5354995..279b5072596c062a7c800510ed914a9d
bridge.removeChannel(channel);
}
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 8b7e4814b00d6f6c9f25cce5186905f165b97c2f..5bfc986f3d8dc81444be857c857bd91ada8c409d 100644
index 1dcb4fe3e2c250554e4f065caf21b37ea659e621..1f20671b8bc07c77e8a3e60414bb2c8255e37385 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -318,6 +318,8 @@ public abstract class PlayerList {
@@ -8,7 +8,7 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves/blob/9d2bd3f7b0a48f00d
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 3fda5043937af3d66ab44c41b7e76822a3ddf53b..7e362b71c629c75475016973a0181fce75a5156a 100644
index 2e84df044e65d2f145a190d1bbbb7de205d85e77..4396f58571f137e0d351c27c7bf452fbeded4abc 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -3136,7 +3136,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -21,7 +21,7 @@ index 3fda5043937af3d66ab44c41b7e76822a3ddf53b..7e362b71c629c75475016973a0181fce
}
// Paper end - Fix merchant inventory not closing on entity removal
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 5bfc986f3d8dc81444be857c857bd91ada8c409d..ebcd7ce794ca696b44ab75dbb177beb5f929adf0 100644
index 1f20671b8bc07c77e8a3e60414bb2c8255e37385..9d69106b5a1867af541c23dc92f63005315e27e2 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -557,7 +557,7 @@ public abstract class PlayerList {
@@ -23,7 +23,7 @@ index 8432d0ce22ddc9c9bfa98901e403697f40e53c99..9ec141359c4422c1574dac71a88b7f50
+ // Leaves end - servux
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 7e362b71c629c75475016973a0181fce75a5156a..cb11830c2f399c9706b20f8104686dc0d9b686f9 100644
index 4396f58571f137e0d351c27c7bf452fbeded4abc..f1cf0deebe8a0df6509d647e7590126ee02444b8 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2569,6 +2569,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -9,7 +9,7 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index f036ef938bdd66ab87610e76c8c878bf3d3c86b1..170ce02f1e93f3cb493e01d5464768e872bfb491 100644
index 9907e58908eb17874cc938337888dfe4ad4c060f..b180b65ab4de4ca6f28b22c8650e894c7d328b82 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -348,9 +348,12 @@ public class ServerGamePacketListenerImpl
@@ -8,7 +8,7 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index ebcd7ce794ca696b44ab75dbb177beb5f929adf0..ca1e635b0fdf3d0d17447b43a558fe030536d297 100644
index 9d69106b5a1867af541c23dc92f63005315e27e2..71988e11c512fcb391f845a1905411ea240479fa 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -1107,6 +1107,7 @@ public abstract class PlayerList {
@@ -9,10 +9,10 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 170ce02f1e93f3cb493e01d5464768e872bfb491..6b3d1cdfdee2a815807ac32a6fc2f353215a13ab 100644
index b180b65ab4de4ca6f28b22c8650e894c7d328b82..71433d0a09fd4e90254a2842addf989a257b3b50 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3906,7 +3906,7 @@ public class ServerGamePacketListenerImpl
@@ -3907,7 +3907,7 @@ public class ServerGamePacketListenerImpl
}
@Deprecated @io.papermc.paper.annotation.DoNotUse // Paper - Add PlayerLoadedWorldEvent
@@ -13,10 +13,10 @@ MasaGadget(https://github.com/plusls/MasaGadget)
litematica(https://github.com/maruohon/litematica)
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 6b3d1cdfdee2a815807ac32a6fc2f353215a13ab..77b9cd3d14eddc735d9131597916405fde4230ec 100644
index 71433d0a09fd4e90254a2842addf989a257b3b50..11d177e486958727f880f073550ae5db7e233dcd 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2175,7 +2175,7 @@ public class ServerGamePacketListenerImpl
@@ -2176,7 +2176,7 @@ public class ServerGamePacketListenerImpl
if (ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.player.level(), pos.getX() >> 4, pos.getZ() >> 4, 8) && this.player.isWithinBlockInteractionRange(pos, 1.0)) { // Folia - do not allow players to interact with blocks outside the current region
Vec3 distance = location.subtract(Vec3.atCenterOf(pos));
double limit = 1.0000001;
@@ -7,6 +7,19 @@ Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com>
As a part of : Leaves (https://github.com/LeavesMC/Leaves)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 9820d2e18cbcb5fbc07fe57dd93101809ed2727d..b7df2edf243448cc6342db9360e0458f58769a12 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -408,7 +408,7 @@ public final class RegionizedWorldData {
// Luminol end
// connections
private static final Connection[] EMPTY_CONNECTION_ARRAY = new Connection[0];
- private final ReferenceList<Connection> connections = new ReferenceList<>(EMPTY_CONNECTION_ARRAY);
+ public final ReferenceList<Connection> connections = new ReferenceList<>(EMPTY_CONNECTION_ARRAY); // Lophine - BotList Public
// misc. fields
private boolean isHandlingTick;
diff --git a/net/minecraft/advancements/triggers/SimpleCriterionTrigger.java b/net/minecraft/advancements/triggers/SimpleCriterionTrigger.java
index d76a338ab4f326e6105adc451eee3d4601403c98..b827d51d23ceaebef2191a9f349bbd346e73f1af 100644
--- a/net/minecraft/advancements/triggers/SimpleCriterionTrigger.java
@@ -33,7 +46,7 @@ index d2e9d46bbd9ee4ce45419b11499d7a7bc50f0219..848967dbe41694411603ef369cfdc3a0
private final java.util.concurrent.atomic.AtomicBoolean disconnectionHandled = new java.util.concurrent.atomic.AtomicBoolean(false); // Folia - region threading - may be called concurrently during configuration stage
private int receivedPackets;
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbcaed957b2 100644
index 22ad0846be08292b07b363b6b96f7431f87a4f3d..07add4a7a350ac61b7fa7797874ab24d5289b9b1 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -296,6 +296,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -45,7 +58,7 @@ index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbc
public static <S extends MinecraftServer> S spin(final Function<Thread, S> factory) {
ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system
AtomicReference<S> serverReference = new AtomicReference<>();
@@ -1195,6 +1197,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1194,6 +1196,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.halt(wait, false);
}
public void halt(final boolean wait, final boolean isRestarting) {
@@ -62,7 +75,7 @@ index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbc
this.isRestarting = isRestarting;
this.hasLoggedStop = true; // Paper - Debugging
if (this.isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging
@@ -1664,7 +1676,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1663,7 +1675,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
int emptyTickThreshold = this.pauseWhenEmptySeconds() * 20;
this.removeDisabledPluginsBlockingSleep(); // Paper - API to allow/disallow tick sleeping
if (false && emptyTickThreshold > 0) { // Folia - region threading - this is complicated to implement, and even if done correctly is messy
@@ -71,7 +84,7 @@ index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbc
this.emptyTicks++;
} else {
this.emptyTicks = 0;
@@ -1806,6 +1818,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1805,6 +1817,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.isSaving = true;
if (playerSaveInterval > 0) {
this.playerList.saveAll(playerSaveInterval);
@@ -79,7 +92,7 @@ index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbc
}
if (region == null && fullSave) { // Folia - region threading - don't auto save level data
this.saveGlobalData(false);
@@ -2044,6 +2057,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2057,6 +2070,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
protected void tickConnection() {
this.getConnection().tick();
@@ -87,7 +100,7 @@ index 9614a22c4b67e5e3a46e46fa69d22c136d4beb4b..5bc6baf2a13b78f65e5851a22ca79dbc
}
public void forceGameTimeSynchronization() {
@@ -3253,6 +3267,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -3266,6 +3280,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return this.debugSubscribers;
}
@@ -261,7 +274,7 @@ index 2dae0f4249eade60ac55c9fa289dd146dc3675e1..f70f6501254b40cf76dc7f9bcd621a1f
LOGGER.info("Default game type: {}", properties.gameMode.get());
// Paper start - Unix domain socket support
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
index 5196431f52e81608a5575f8a262cd5c855b06182..84c047ed0242778a9e6bca5e41561bd1bdcf633c 100644
index 6bca982627cf6a865820df75be2814a7289f98dc..b6f752a134ac7192375053d8bf93e39caf5f0c6f 100644
--- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java
@@ -972,7 +972,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
@@ -273,7 +286,7 @@ index 5196431f52e81608a5575f8a262cd5c855b06182..84c047ed0242778a9e6bca5e41561bd1
org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot
// Paper start - ignore and warn about illegal addEntity calls instead of crashing server
if (!entity.valid || entity.level() != this.level || entity.moonrise$getTrackedEntity() != null) { // Folia - region threading
@@ -1258,6 +1258,13 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
@@ -1282,6 +1282,13 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
ServerPlayer player = conn.getPlayer();
if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player)) {
this.removePlayer(player);
@@ -287,7 +300,7 @@ index 5196431f52e81608a5575f8a262cd5c855b06182..84c047ed0242778a9e6bca5e41561bd1
}
}
}
@@ -1389,6 +1396,13 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
@@ -1413,6 +1420,13 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
}
} else {
this.removePlayer(player);
@@ -302,7 +315,7 @@ index 5196431f52e81608a5575f8a262cd5c855b06182..84c047ed0242778a9e6bca5e41561bd1
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index cb11830c2f399c9706b20f8104686dc0d9b686f9..1c4c67410849f844946e4883585910fc8fe97048 100644
index f1cf0deebe8a0df6509d647e7590126ee02444b8..3e4b2f1fbe6864e40f1978c70d41773cde09fd17 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -243,6 +243,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -359,7 +372,7 @@ index cb11830c2f399c9706b20f8104686dc0d9b686f9..1c4c67410849f844946e4883585910fc
ServerLevel.this.updateSleepingPlayerList();
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 729fc979fb313ddf2a5c6a04a9a0790440d15830..a2e83ca70606a00f36f5b5cbac9f08baf8c5494a 100644
index 14eaa25d67e9dbaad5ae4c6d6be4ae640b2fc015..624f637e7a4fb8297d42e9944011e3c83245949e 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -232,7 +232,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -470,7 +483,7 @@ index 12190f2a2856b0d0cf95144d0b1622f1b9600bf6..be01f06d4ee02854345842c97382e8b6
// Paper start - utility method for common conversion back to the game profile
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index ca1e635b0fdf3d0d17447b43a558fe030536d297..ed50484ca24ef24b1e5bef9f6369dfa4b30c359c 100644
index 71988e11c512fcb391f845a1905411ea240479fa..a7a687c7a90bce1ad20d32241f0b4316fefc8f9d 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -320,6 +320,19 @@ public abstract class PlayerList {
@@ -557,7 +570,7 @@ index ca1e635b0fdf3d0d17447b43a558fe030536d297..ed50484ca24ef24b1e5bef9f6369dfa4
public @Nullable ServerPlayer getPlayer(final String playerName) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index cddf44f5da5cba5603dcff4913b4658dcfcc48db..9eaed81a330a22e7fd6585cd286ec61371e97272 100644
index b9f9dd85d259306db9eb9daf0a9ec36f27dfddb7..c3df068144c3af4b3700b104588970154837018d 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1263,7 +1263,7 @@ public abstract class Entity
@@ -634,7 +647,7 @@ index cb1589e3aa663ca058fb5c3a24da700d4482cf35..1de8eac336e2dd6335c433b7708ce6b6
if (!this.level().isClientSide()) {
boolean wasUsingItem = this.isUsingItem();
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index c6fa9dff800b1491b1e0fc5d7e1dc16b99b8c7db..f063e9b7601480d0e66da22ea8e5bec2e8619fee 100644
index 449a2904fb1190f68de72bc47eb8220f50002577..3f4cf6e0ddce45ca169a5fdfc54b25f609eba44b 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -156,7 +156,7 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -88,10 +88,10 @@ index 6c05b9276bdc267a36376f6c64592a50e4b2b36e..21d2c97b3d1e1d29c9de02b6acd58985
result.add(player);
if (result.size() >= limit) {
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 5bc6baf2a13b78f65e5851a22ca79dbcaed957b2..803faa6b80a42d16687ea8b109973938d02f4a36 100644
index 07add4a7a350ac61b7fa7797874ab24d5289b9b1..d1a0585e4a9fe85d8a99507bb8a55d175c1804e3 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1909,7 +1909,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1908,7 +1908,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
private ServerStatus.Players buildPlayerStatus() {
@@ -100,7 +100,7 @@ index 5bc6baf2a13b78f65e5851a22ca79dbcaed957b2..803faa6b80a42d16687ea8b109973938
int maxPlayers = this.getMaxPlayers();
if (this.hidesOnlinePlayers()) {
return new ServerStatus.Players(maxPlayers, players.size(), List.of());
@@ -2130,7 +2130,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2143,7 +2143,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@Override
public int getPlayerCount() {
@@ -109,7 +109,7 @@ index 5bc6baf2a13b78f65e5851a22ca79dbcaed957b2..803faa6b80a42d16687ea8b109973938
}
public String[] getPlayerNames() {
@@ -2347,7 +2347,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2360,7 +2360,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
int count = 0;
@@ -118,7 +118,7 @@ index 5bc6baf2a13b78f65e5851a22ca79dbcaed957b2..803faa6b80a42d16687ea8b109973938
player.getBukkitEntity().taskScheduler.schedule((ServerPlayer updatedPlayer) -> { // Folia - region threading
// Paper start - Expand PlayerGameModeChangeEvent
org.bukkit.event.player.PlayerGameModeChangeEvent event = updatedPlayer.setGameMode(gameType, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null); // Folia - region threading
@@ -2538,7 +2538,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2551,7 +2551,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
if (Thread.currentThread() != this.serverThread) return; // Paper
// Paper start - we don't need to save everything, just advancements
// this.getPlayerList().saveAll();
@@ -127,7 +127,7 @@ index 5bc6baf2a13b78f65e5851a22ca79dbcaed957b2..803faa6b80a42d16687ea8b109973938
player.getAdvancements().save();
}
// Paper end - we don't need to save everything, just advancements
@@ -2674,7 +2674,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2687,7 +2687,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
PlayerList playerList = this.getPlayerList();
UserWhiteList whiteList = playerList.getWhiteList();
@@ -289,7 +289,7 @@ index 37c9f983ae89c497f44a1b7967d741abf909e0a0..d7fb2505f2a86ca0d81f144624ef2e1a
this.setListData(players);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 1c4c67410849f844946e4883585910fc8fe97048..08a6fc0e58d61b1765e704c500b3aec635e69560 100644
index 3e4b2f1fbe6864e40f1978c70d41773cde09fd17..1dda86db63f47a6cccb8e144ae2c6d3b11043cb1 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -3078,7 +3078,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -311,7 +311,7 @@ index 1c4c67410849f844946e4883585910fc8fe97048..08a6fc0e58d61b1765e704c500b3aec6
}
// Leaves end - skip
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..575b4eabcaac48ae87b69dd037493ebfe0a1212c 100644
index a7a687c7a90bce1ad20d32241f0b4316fefc8f9d..7f3492a909536ca14577c3ec3aa511e98ca5551f 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -129,6 +129,7 @@ public abstract class PlayerList {
@@ -21,7 +21,7 @@ index 700c9c0d40dee1df6c97f7c63ad731f16bc5f3e7..b95c56e0699fbe16e65efcf010cd514f
} else {
this.followingPlayer = null;
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index f063e9b7601480d0e66da22ea8e5bec2e8619fee..d46abbea2153cac2d939416fafeac7f905fe0e02 100644
index 3f4cf6e0ddce45ca169a5fdfc54b25f609eba44b..8709dabd6d3574e53210543321ca88c778594afc 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -284,8 +284,8 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -5,10 +5,10 @@ Subject: [PATCH] Global Entities Counter
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 24e186d05aa0333885178f444fade3b9c930ac97..5724a276cf4fdd41f239c47e4352ec05736a5e49 100644
index b7df2edf243448cc6342db9360e0458f58769a12..6040a28aad7419d343feeb5aa97551591399dfd9 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -563,6 +563,9 @@ public final class RegionizedWorldData {
@@ -558,6 +558,9 @@ public final class RegionizedWorldData {
public final Map<Long, ChunkSectionItemEntityMovementTracker> itemEntityMovementTrackerMap = new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>();
// Luminol end
@@ -18,7 +18,7 @@ index 24e186d05aa0333885178f444fade3b9c930ac97..5724a276cf4fdd41f239c47e4352ec05
public final TickRegions.TickRegionData regionData;
public RegionizedWorldData(final ServerLevel world, final TickRegions.TickRegionData regionData) {
@@ -575,6 +578,15 @@ public final class RegionizedWorldData {
@@ -570,6 +573,15 @@ public final class RegionizedWorldData {
this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE);
this.regionData = regionData;
@@ -99,7 +99,7 @@ index 414c21345879f589fb61130180d0ca606e37a454..98284b695cec2fcd968b594d7944c635
NaturalSpawner.spawnForChunk(this.level, chunk, spawnCookie, spawningCategories);
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 08a6fc0e58d61b1765e704c500b3aec635e69560..ae88e57974f631ff2494c35d6e02049ba5d38014 100644
index 1dda86db63f47a6cccb8e144ae2c6d3b11043cb1..68db8f0b571778f9a1c3cb7b6faf1e271fedd304 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -823,6 +823,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -36,10 +36,10 @@ index 20fa23988efbfb50c664fa48cc823adbe8e6ce58..1a95ccd745f4789225d711ab6fe497c6
throw PacketUtils.makeReportedException(e, this.packet, this.listener);
}
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 803faa6b80a42d16687ea8b109973938d02f4a36..6c5cdfebb3a362c51b3b940397e10536dc67afc8 100644
index d1a0585e4a9fe85d8a99507bb8a55d175c1804e3..657801b605ff49af0a7b80e17bc45b89e243b35e 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1998,11 +1998,30 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2003,11 +2003,30 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
try {
foliaProfiler.startTimer(level.tickTimerId); try { // Folia - profiler
level.tick(haveTime, region); // Folia - region threading
@@ -74,7 +74,7 @@ index 803faa6b80a42d16687ea8b109973938d02f4a36..6c5cdfebb3a362c51b3b940397e10536
profiler.pop();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index ae88e57974f631ff2494c35d6e02049ba5d38014..6b8073023833fc9e99684944802dc5941833aa4c 100644
index 68db8f0b571778f9a1c3cb7b6faf1e271fedd304..ff146441b9665ae5f70e1f8acd8bd8fae52d810f 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -957,7 +957,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -98,7 +98,7 @@ index ae88e57974f631ff2494c35d6e02049ba5d38014..6b8073023833fc9e99684944802dc594
}
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index a2e83ca70606a00f36f5b5cbac9f08baf8c5494a..2c15275066923cb488be8e1d7777785466768332 100644
index 624f637e7a4fb8297d42e9944011e3c83245949e..ac6561a1552f7a2f724fefe0aa1507dbd9a703ef 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1111,6 +1111,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -115,7 +115,7 @@ index a2e83ca70606a00f36f5b5cbac9f08baf8c5494a..2c15275066923cb488be8e1d77777854
CrashReport report = CrashReport.forThrowable(t, "Ticking player");
CrashReportCategory category = report.addCategory("Player being ticked");
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 9eaed81a330a22e7fd6585cd286ec61371e97272..acc9caf8559cd341ea17d3b58f13cdac7de18564 100644
index c3df068144c3af4b3700b104588970154837018d..f15f0ca83ff2313d2e025db984c4fa1d492c5a70 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1522,8 +1522,18 @@ public abstract class Entity
@@ -5,10 +5,10 @@ Subject: [PATCH] Instant Block Updater
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 5724a276cf4fdd41f239c47e4352ec05736a5e49..3a50e625160d0dad6bd8fa534b719087dae7881d 100644
index 6040a28aad7419d343feeb5aa97551591399dfd9..f1234717c2626661a93f5a22358a41752c22df3d 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -509,7 +509,7 @@ public final class RegionizedWorldData {
@@ -504,7 +504,7 @@ public final class RegionizedWorldData {
public long lastMidTickExecuteFailure;
// From Level
public boolean populating;
@@ -17,7 +17,7 @@ index 5724a276cf4fdd41f239c47e4352ec05736a5e49..3a50e625160d0dad6bd8fa534b719087
public boolean captureBlockStates = false;
public boolean captureTreeGeneration = false;
public final Map<BlockPos, CraftBlockState> capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper
@@ -572,7 +572,11 @@ public final class RegionizedWorldData {
@@ -567,7 +567,11 @@ public final class RegionizedWorldData {
this.world = world;
this.blockLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, true);
this.fluidLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, false);
@@ -30,7 +30,7 @@ index 5724a276cf4fdd41f239c47e4352ec05736a5e49..3a50e625160d0dad6bd8fa534b719087
this.nearbyPlayers = new NearbyPlayers(world);
this.wireHandler = new alternate.current.wire.WireHandler(world);
this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE);
@@ -901,4 +905,4 @@ public final class RegionizedWorldData {
@@ -915,4 +919,4 @@ public final class RegionizedWorldData {
public int getChunkCount() {
return this.chunks.size();
}
@@ -38,7 +38,7 @@ index 5724a276cf4fdd41f239c47e4352ec05736a5e49..3a50e625160d0dad6bd8fa534b719087
\ No newline at end of file
+}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 6b8073023833fc9e99684944802dc5941833aa4c..132122f23a697109696852cf383fa1b0186e0210 100644
index ff146441b9665ae5f70e1f8acd8bd8fae52d810f..8eca4b0a82d738f873f9e01a7424aaf7ee3735a2 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -991,11 +991,15 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -128,7 +128,7 @@ index 8cc4fe9feb57902a4b9a6a26e6175ac00a2cef65..9ab1a812e43145120859734075e2ac99
// Paper start - fix converting txt to json file; moved from constructor
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 2c15275066923cb488be8e1d7777785466768332..9e8157e6a6df32d00fd1f689a6005ce0f7e0dfbd 100644
index ac6561a1552f7a2f724fefe0aa1507dbd9a703ef..d393f485965ddd960b4a3cb26ad7eb48deccb4ab 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -260,6 +260,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -173,10 +173,10 @@ index 2c15275066923cb488be8e1d7777785466768332..9e8157e6a6df32d00fd1f689a6005ce0
public ClientInformation clientInformation() {
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231a70ac08c 100644
index 11d177e486958727f880f073550ae5db7e233dcd..e489da1acbb77c003951b608856ea706570cbed6 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2091,7 +2091,15 @@ public class ServerGamePacketListenerImpl
@@ -2092,7 +2092,15 @@ public class ServerGamePacketListenerImpl
this.player.gameMode.capturedBlockEntity = false;
this.player.gameMode.captureSentBlockEntities = true;
// Paper end - Send block entities after destroy prediction
@@ -193,7 +193,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
this.ackBlockChangesUpTo(packet.getSequence());
// Paper start - Send block entities after destroy prediction
this.player.gameMode.captureSentBlockEntities = false;
@@ -2194,7 +2202,9 @@ public class ServerGamePacketListenerImpl
@@ -2195,7 +2203,9 @@ public class ServerGamePacketListenerImpl
if (!me.earthme.luminol.config.modules.fixes.ItemMultitaskConfig.enabled) { // Luminol - Add item multitask config
this.player.stopUsingItem(); // CraftBukkit - SPIGOT-4706
} // Luminol - Add item multitask config
@@ -204,7 +204,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
if (interactionResult.consumesAction()) {
CriteriaTriggers.ANY_BLOCK_USE.trigger(this.player, blockHit.getBlockPos(), itemStack);
}
@@ -2299,7 +2309,10 @@ public class ServerGamePacketListenerImpl
@@ -2300,7 +2310,10 @@ public class ServerGamePacketListenerImpl
}
// CraftBukkit end
@@ -216,7 +216,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
&& success.swingSource() == InteractionResult.SwingSource.SERVER) {
this.player.swing(hand, true);
}
@@ -2307,6 +2320,16 @@ public class ServerGamePacketListenerImpl
@@ -2308,6 +2321,16 @@ public class ServerGamePacketListenerImpl
}
}
@@ -233,7 +233,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
@Override
public void handleTeleportToEntityPacket(final ServerboundTeleportToEntityPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
@@ -2687,6 +2710,10 @@ public class ServerGamePacketListenerImpl
@@ -2688,6 +2711,10 @@ public class ServerGamePacketListenerImpl
if (true) throw new UnsupportedOperationException(); // Folia - region threading
final String conversationInput = rawMessage;
this.server.processQueue.add(() -> ServerGamePacketListenerImpl.this.getCraftPlayer().acceptConversationInput(conversationInput));
@@ -244,7 +244,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
} else if (this.player.getChatVisibility() == ChatVisiblity.SYSTEM) { // Re-add "Command Only" flag check
this.send(new ClientboundSystemChatPacket(Component.translatable("chat.cannotSend").withStyle(ChatFormatting.RED), false));
} else {
@@ -2699,6 +2726,9 @@ public class ServerGamePacketListenerImpl
@@ -2700,6 +2727,9 @@ public class ServerGamePacketListenerImpl
// Spigot start - spam exclusions
private void detectRateSpam(final TickThrottler throttler, final String message) {
@@ -254,7 +254,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
if (me.earthme.luminol.config.modules.misc.PaperPacketLimiterConfig.forceDisable) return; // Leaves - disable
// CraftBukkit start - replaced with thread safe throttle
if (org.spigotmc.SpigotConfig.enableSpamExclusions) {
@@ -3645,8 +3675,10 @@ public class ServerGamePacketListenerImpl
@@ -3646,8 +3676,10 @@ public class ServerGamePacketListenerImpl
if (org.leavesmc.leaves.util.ItemOverstackUtils.hasOverstackingItem()) this.player.containerMenu.sendSingleSlot(packet.slotNum(), itemStack); // Leaves - item over-stack util - force send carried item
if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes.
} else if (drop && validData) {
@@ -268,7 +268,7 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..52187fe9d2c907e31cf961a93f599231
} else {
LOGGER.warn("Player {} was dropping items too fast in creative mode, ignoring.", this.player.getPlainTextName());
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 575b4eabcaac48ae87b69dd037493ebfe0a1212c..516561a25d28f2c7bcc3e71c5f2f9da99c2899c3 100644
index 7f3492a909536ca14577c3ec3aa511e98ca5551f..2d6500eb0a01f455de8d7a627cabcc06bb60ca61 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -280,7 +280,7 @@ public abstract class PlayerList {
@@ -521,7 +521,7 @@ index d2ac2a0c5bb18c2bca18e5166ed65afd01166e04..6b3adf1af870c3d710494d34d2f25850
}
}
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index d46abbea2153cac2d939416fafeac7f905fe0e02..e224c1b8977cd97f2868f7db56c1df22a6820918 100644
index 8709dabd6d3574e53210543321ca88c778594afc..76af5d1aa163e399cd4b5ed1ffd0a03757e31555 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -560,7 +560,15 @@ public abstract class Player extends Avatar implements ContainerUser {
@@ -842,7 +842,7 @@ index b90077b44ce81d5d60f9d0ad2414f0b7c6b1e720..4f4512d30717e5e41bd98703574485c0
final ObjectArrayList<BlockPos> ret = new ObjectArrayList<>();
diff --git a/net/minecraft/world/level/block/CarvedPumpkinBlock.java b/net/minecraft/world/level/block/CarvedPumpkinBlock.java
index 4ed03c9bb81a903c6ec68efe72845f20b083f3ac..003c19d8cad2ae5af770923a76735e4944b24c28 100644
index 5a316fedee1992efd4a21c4678b659c4589d57ec..f0a46c30b3c446cdc52a8198608d7f60441b7d1b 100644
--- a/net/minecraft/world/level/block/CarvedPumpkinBlock.java
+++ b/net/minecraft/world/level/block/CarvedPumpkinBlock.java
@@ -59,7 +59,10 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
@@ -868,7 +868,7 @@ index 4ed03c9bb81a903c6ec68efe72845f20b083f3ac..003c19d8cad2ae5af770923a76735e49
}
private WeatheringCopper.WeatherState getWeatherStateFromPattern(final BlockPattern.BlockPatternMatch copperGolemMatch) {
@@ -159,6 +166,44 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
@@ -162,6 +169,44 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
builder.add(FACING);
}
@@ -8,16 +8,18 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves/blob/252a16955f6e1e31a
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/world/SimpleContainer.java b/net/minecraft/world/SimpleContainer.java
index 0f412551685a8ea76be3b389e0782e57d22bb87c..6da0fd10e1a4a346dc1b073563e9bd8cf9b3c76d 100644
index 0f412551685a8ea76be3b389e0782e57d22bb87c..b6154f677943e22ecb6dfdd6f9b8f867f1c7f09a 100644
--- a/net/minecraft/world/SimpleContainer.java
+++ b/net/minecraft/world/SimpleContainer.java
@@ -199,6 +199,11 @@ public class SimpleContainer implements Container, StackedContentsCompatible {
@@ -199,6 +199,13 @@ public class SimpleContainer implements Container, StackedContentsCompatible {
@Override
public void setChanged() {
+ // Leaves start - PCA sync protocol
+ if (fun.bm.lophine.config.modules.function.protocol.PcaSyncProtocolConfig.enabled && this.getOwner() instanceof org.bukkit.craftbukkit.entity.CraftEntity entity) {
+ org.leavesmc.leaves.protocol.PcaSyncProtocol.syncEntityToClient(entity.getHandle());
+ // The owner can be a destination-world clone while it is being restored during an async portal transfer.
+ // syncEntityToClient() performs the ownership check and must receive the raw handle to reach it.
+ org.leavesmc.leaves.protocol.PcaSyncProtocol.syncEntityToClient(entity.getHandleRaw());
+ }
+ // Leaves end - PCA sync protocol
}
@@ -21,7 +21,7 @@ index dd17339fe2f9d7660b20eed05b61d6231302aa82..d997e4f7ae6ee4e81f5fffe874f2895d
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 9e8157e6a6df32d00fd1f689a6005ce0f7e0dfbd..2da765eb74c4e84254857ad05b7af82eb8500fc3 100644
index d393f485965ddd960b4a3cb26ad7eb48deccb4ab..27a6970fe699b9346b7ca69e1cfa04833a1c0b57 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -2339,7 +2339,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -5,7 +5,7 @@ Subject: [PATCH] Restore vanilla ender pearl loading
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 2da765eb74c4e84254857ad05b7af82eb8500fc3..d0b9f4140952d0d0416b257077a885d352b40bd1 100644
index 27a6970fe699b9346b7ca69e1cfa04833a1c0b57..28ce624e9952e9d45930d4550ef80d1e788f5916 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -277,7 +277,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -66,7 +66,7 @@ index 2da765eb74c4e84254857ad05b7af82eb8500fc3..d0b9f4140952d0d0416b257077a885d3
public Set<ThrownEnderpearl> getEnderPearls() {
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 516561a25d28f2c7bcc3e71c5f2f9da99c2899c3..eb652157ef25e83b897f52aff3c49c09c6f656c8 100644
index 2d6500eb0a01f455de8d7a627cabcc06bb60ca61..2cfae6cb39fb4d2b24f6e773d9df1f24130bfbe3 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -749,11 +749,13 @@ public abstract class PlayerList {
@@ -9,10 +9,10 @@ This patch is used with permission from the original author.
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java
index 3a50e625160d0dad6bd8fa534b719087dae7881d..20439c632044ae9b4358bfba309b378b3de98601 100644
index f1234717c2626661a93f5a22358a41752c22df3d..a2187a61070a8dde2e457127394ce9eba44c0201 100644
--- a/io/papermc/paper/threadedregions/RegionizedWorldData.java
+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java
@@ -841,7 +841,7 @@ public final class RegionizedWorldData {
@@ -855,7 +855,7 @@ public final class RegionizedWorldData {
}
public void setTickingBlockEntities(final boolean to) {
@@ -33,10 +33,10 @@ index ea93ac07ec6d4e83d1d0904daf721132e2bbecc3..4252672ad2aaf03d50e5ea6a681e9964
public static class IntBounds {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index acc9caf8559cd341ea17d3b58f13cdac7de18564..489011f9af49fa3407038bd2f00439443307d179 100644
index f15f0ca83ff2313d2e025db984c4fa1d492c5a70..6d6b1024ef7467bc7f72693a655a25eeede1b0f8 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4851,7 +4851,7 @@ public abstract class Entity
@@ -4847,7 +4847,7 @@ public abstract class Entity
portalInfoCompletable.complete(
new TeleportTransition(destination, Vec3.atCenterOf(targetPos), Vec3.ZERO,
90.0f, 0.0f,
@@ -45,7 +45,7 @@ index acc9caf8559cd341ea17d3b58f13cdac7de18564..489011f9af49fa3407038bd2f0043944
);
return;
}
@@ -4863,7 +4863,7 @@ public abstract class Entity
@@ -4859,7 +4859,7 @@ public abstract class Entity
portalInfoCompletable.complete(
net.minecraft.world.level.block.NetherPortalBlock.createDimensionTransition(
destination, portal, originalPortalDirection, relativePos,
@@ -133,10 +133,10 @@ index fe0a6bd90cba4869a0ee11723832f2dee5039f62..53579b6faa9d55485088d59ec2fd1e42
throw new IllegalStateException("Negative reference count");
}
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 6c5cdfebb3a362c51b3b940397e10536dc67afc8..4a00b2399a190b609f7b0944e407f3b087e617b5 100644
index 657801b605ff49af0a7b80e17bc45b89e243b35e..b498cecb37cf83d31ad4a02bb1acecf7328e7aa6 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1756,6 +1756,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1755,6 +1755,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
foliaProfiler.stopTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.PASSENGER_DESYNC_CHECK);
}
// Folia end - fix passenger desync
@@ -9,7 +9,7 @@ This patch is used with permission from the original author.
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 132122f23a697109696852cf383fa1b0186e0210..619521d8ff74c92a822bde9c160931cdfdb7da43 100644
index 8eca4b0a82d738f873f9e01a7424aaf7ee3735a2..e94ea890c83e65d987519379ebe3b5134bb14b42 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -221,6 +221,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
@@ -29,10 +29,10 @@ index 132122f23a697109696852cf383fa1b0186e0210..619521d8ff74c92a822bde9c160931cd
// Folia start - region threading
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 489011f9af49fa3407038bd2f00439443307d179..340e6ad83ba93f3927a08a107e3c8dbafa546112 100644
index 6d6b1024ef7467bc7f72693a655a25eeede1b0f8..363dcad09e441ea8b4fd79fcb94432536783676c 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4870,10 +4870,10 @@ public abstract class Entity
@@ -4866,10 +4866,10 @@ public abstract class Entity
);
// kick off search for existing portal or creation
@@ -5,10 +5,10 @@ Subject: [PATCH] Luminol Config System
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 9d0dc8815842a0583b212891680bd0c6461c30b9..2f5a73ac33fbb47cc025fe2d7ad16a5c34c06944 100644
index 3fac32b420ce4ae74166eac43d38c51c1fd513cf..5409e2e6aef23dcf2ec2b0c3488a5cfdb8392277 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -3033,6 +3033,17 @@ public final class CraftServer implements Server {
@@ -3032,6 +3032,17 @@ public final class CraftServer implements Server {
this.console.addPluginAllowingSleep(plugin.getName(), value);
}
@@ -18,7 +18,7 @@ index 9661f033bbb2c00073f1c891e1411c2a9943a37a..4ecd9fe2f9ab4c7b456345665703256a
return;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 2f5a73ac33fbb47cc025fe2d7ad16a5c34c06944..407191ad9a7f31cc3317a7747ec3489804807b8e 100644
index 5409e2e6aef23dcf2ec2b0c3488a5cfdb8392277..e412b654df3f452ef21f9c68ef3c7c5643ed1d7b 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -302,7 +302,7 @@ public final class CraftServer implements Server {
@@ -13,7 +13,7 @@ Content-Transfer-Encoding: 8bit
由于世界卸载可能发生在玩家登录或者传送的过程中,所以我使用了引用计数器来避免这个竟态条件的发生
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 407191ad9a7f31cc3317a7747ec3489804807b8e..606235c9af5afce55be8bbc963e8af7291a050c5 100644
index e412b654df3f452ef21f9c68ef3c7c5643ed1d7b..9e40ea5f161eef4d74084c081d4df912cbe65548 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -276,7 +276,7 @@ public final class CraftServer implements Server {
@@ -25,7 +25,7 @@ index 407191ad9a7f31cc3317a7747ec3489804807b8e..606235c9af5afce55be8bbc963e8af72
private YamlConfiguration configuration;
private YamlConfiguration commandsConfiguration;
private final Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions()));
@@ -1198,7 +1198,8 @@ public final class CraftServer implements Server {
@@ -1197,7 +1197,8 @@ public final class CraftServer implements Server {
@Override
public World createWorld(WorldCreator creator) {
@@ -35,7 +35,7 @@ index 407191ad9a7f31cc3317a7747ec3489804807b8e..606235c9af5afce55be8bbc963e8af72
Preconditions.checkState(this.console.getAllLevels().iterator().hasNext(), "Cannot create additional worlds on STARTUP");
//Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot create a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes.
Preconditions.checkArgument(creator != null, "WorldCreator cannot be null");
@@ -1356,7 +1357,8 @@ public final class CraftServer implements Server {
@@ -1355,7 +1356,8 @@ public final class CraftServer implements Server {
@Override
public boolean unloadWorld(World world, boolean save) {
@@ -45,7 +45,7 @@ index 407191ad9a7f31cc3317a7747ec3489804807b8e..606235c9af5afce55be8bbc963e8af72
//Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot unload a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes.
if (world == null) {
return false;
@@ -1381,7 +1383,7 @@ public final class CraftServer implements Server {
@@ -1380,7 +1382,7 @@ public final class CraftServer implements Server {
return false;
}
@@ -54,7 +54,7 @@ index 407191ad9a7f31cc3317a7747ec3489804807b8e..606235c9af5afce55be8bbc963e8af72
if (save) {
handle.save(null, true, false); // Paper - Fix saving in unloadWorld
}
@@ -1393,10 +1395,70 @@ public final class CraftServer implements Server {
@@ -1392,10 +1394,70 @@ public final class CraftServer implements Server {
}
this.worlds.remove(world.getName().toLowerCase(Locale.ROOT));
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to disable async catchers
diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
index 6c74787321748702022787b65ff5465f8bcec4ad..8e5f470fd0b98d3894d7a5234386ff4cbe127f78 100644
index 72a3478a98912caae8899df37218dd2a628a6e05..faf4d9c6e421f29a2e862be9ea94ad6daa700dca 100644
--- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
@@ -48,14 +48,14 @@ public class TickThread extends Thread {
@@ -34,10 +34,10 @@ index 6ef0042a355c65262bdb89dcf151bd644653216d..8f0b7b2985d3aadaacd5313d52d48ac9
}
// Folia end - block plugins not marked as supported
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 55a095e00bfe15321d8a1d69beb232e9956b0df7..c189f583598f94fc7944afcabe130c5ee9504c0d 100644
index 804ea060fc5dc0d0ab89574a75604cdf911b4e6c..946fa5a718ff1243d665064a8920cd1a7aec5470 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -323,7 +323,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
@@ -393,7 +393,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
}
// Folia start - block plugins not marked as supported
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Bacteriawa <A3167717663@hotmail.com>
Date: Wed, 6 May 2026 18:27:15 +0800
Date: Sat, 8 Aug 2026 01:32:35 +0800
Subject: [PATCH] Add tpsbar with chunkhot membar and region bar
@@ -22,12 +22,12 @@ index f020f310c4bca49a23de91bea72ccd9941c0b03c..10b351d8bd6b0e117ecbe961ae2f1016
+ // KioCG end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index a3f2e97c1e0c9c2add3c5efd5a5cebe84ace78bf..d47c1b8cc17eb13669fbe21670c3a6eaaa995844 100644
index e20a66e56f2e4520b2708d6ebc377392e4362816..7bbadcab57d3a2dbba0a4c48de043966454a1d50 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3396,4 +3396,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
super.knockback(strength, directionX, directionZ);
this.entity.hurtMarked = true;
@@ -3420,4 +3420,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
this.getHandle().fixedPose = false;
this.getHandle().updatePlayerPose();
}
+
+ // KioCG start - ChunkHot
@@ -25,10 +25,10 @@ index 10b351d8bd6b0e117ecbe961ae2f101686a38fe4..fb89f6ef3adac92639d999f173383c3e
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 606235c9af5afce55be8bbc963e8af7291a050c5..8cfa8a077ffc4b297f802a63f1d414ad004e45b7 100644
index 9e40ea5f161eef4d74084c081d4df912cbe65548..685f69bf0adf4fe2ed03d94c9187d230fc9b67c8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1261,7 +1261,11 @@ public final class CraftServer implements Server {
@@ -1260,7 +1260,11 @@ public final class CraftServer implements Server {
.orElse(null);
RegistryAccess contextRegistryAccess = registryAccess;
if (worldGenSettings == null) {
@@ -244,10 +244,10 @@ index 26422904751647a061397ce978bba752149003cd..884ed63dab16acca83fe8f421762f256
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 8cfa8a077ffc4b297f802a63f1d414ad004e45b7..d61f38fdf84830c2e94dee8dd7c9a0400ec07318 100644
index 685f69bf0adf4fe2ed03d94c9187d230fc9b67c8..d290c5c873685f8b281b85d7a9af3a70b73e14b1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -3110,6 +3110,13 @@ public final class CraftServer implements Server {
@@ -3109,6 +3109,13 @@ public final class CraftServer implements Server {
}
// Luminol end - Config API
@@ -8,7 +8,7 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves/blob/3e7f4a313ff0d2469
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index d61f38fdf84830c2e94dee8dd7c9a0400ec07318..14a8a00d9c1fc7d49d6f870bf10b9a5e178b1189 100644
index d290c5c873685f8b281b85d7a9af3a70b73e14b1..be308fcc90df58993be31473f907dab4478290ad 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -479,6 +479,7 @@ public final class CraftServer implements Server {
@@ -53,7 +53,7 @@ index 3a47e4c633ee016d5deeb6a5ee9e2e26769d5193..efb47f914fd0c0e966c6921ed1b26c41
if (nmsEntity.level() != this.getHandle().getLevel()) {
throw new IllegalArgumentException(entity + " wasn't created with this world, you must create the entity with the world you want to add it to.");
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 14a8a00d9c1fc7d49d6f870bf10b9a5e178b1189..7fd08dac549261c50cf5723ef380ba90ea0da56f 100644
index be308fcc90df58993be31473f907dab4478290ad..7247666a8baee283f4d99a489e7a14fa9543f803 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -304,6 +304,7 @@ public final class CraftServer implements Server {
@@ -72,7 +72,7 @@ index 14a8a00d9c1fc7d49d6f870bf10b9a5e178b1189..7fd08dac549261c50cf5723ef380ba90
}
public boolean getCommandBlockOverride(String command) {
@@ -1380,7 +1382,7 @@ public final class CraftServer implements Server {
@@ -1379,7 +1381,7 @@ public final class CraftServer implements Server {
return false;
}
@@ -81,7 +81,7 @@ index 14a8a00d9c1fc7d49d6f870bf10b9a5e178b1189..7fd08dac549261c50cf5723ef380ba90
return false;
}
@@ -3119,6 +3121,13 @@ public final class CraftServer implements Server {
@@ -3118,6 +3120,13 @@ public final class CraftServer implements Server {
}
// Leaves end - Feature API
@@ -148,10 +148,10 @@ index f5373786032b3f1db8e6c0c928c781998b2fe194..ca6be9faab3f93da7e91bf73997111b7
CraftParticle.createParticleParam(particle, data), // Particle
force,
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 00749be3b16fd09c6b952c93631c808ff5657f20..0f6378ca80bea5d4d7f1cb7d788a57390bc27c59 100644
index 555f15b3abbd5ba2f4e6558a7c29cde109098a07..a812186b84ee188c6b2276f173bdded37791f593 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -130,6 +130,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -131,6 +131,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return new CraftHumanEntity(server, (net.minecraft.world.entity.player.Player) entity);
}
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
Date: Sun, 16 Nov 2025 15:55:47 +0800
From: Bacteriawa <A3167717663@hotmail.com>
Date: Sat, 8 Aug 2026 01:49:35 +0800
Subject: [PATCH] Leaves: Replay Mod API
Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com>
@@ -21,7 +21,7 @@ index 14fa5421107a571739f868eecb00d71dd3d29fef..0fce6dc8bffc341da2e7242422b4153b
}
// Leaves end - skip bot
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 7fd08dac549261c50cf5723ef380ba90ea0da56f..7cfa9a5a1629c3af1e1105b137cbfc4c0aabe86e 100644
index 7247666a8baee283f4d99a489e7a14fa9543f803..e8359235c5fa0681c2d0d12cf66d6abbc0fe4d97 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -305,6 +305,7 @@ public final class CraftServer implements Server {
@@ -41,23 +41,25 @@ index 7fd08dac549261c50cf5723ef380ba90ea0da56f..7cfa9a5a1629c3af1e1105b137cbfc4c
this.serverVersion = io.papermc.paper.ServerBuildInfo.buildInfo().asString(io.papermc.paper.ServerBuildInfo.StringRepresentation.VERSION_SIMPLE); // Paper - improve version
this.structureManager = new CraftStructureManager(console.getStructureManager(), console.registryAccess());
this.serverTickManager = new CraftServerTickManager(console.tickRateManager());
@@ -3192,4 +3193,11 @@ public final class CraftServer implements Server {
}
@@ -3127,6 +3128,13 @@ public final class CraftServer implements Server {
}
// Folia end - region TPS API
+
// Leaves end - Bot API
+ // Leaves start - replay mod api
+ @Override
+ public org.leavesmc.leaves.entity.photographer.CraftPhotographerManager getPhotographerManager() {
+ return photographerManager;
+ }
+ // Leaves end - replay mod api
}
+
// Folia start - region TPS API
/**
* Gets the TPS from the region which owns the specified location, or {@code null} if no region owns
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 0f6378ca80bea5d4d7f1cb7d788a57390bc27c59..610e19b82919f05b0ebf20854e0f9b4a77a2b063 100644
index a812186b84ee188c6b2276f173bdded37791f593..d51660ecccf8f1425ea1462ae7e1d455fd795451 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -131,6 +131,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -132,6 +132,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
if (entity instanceof org.leavesmc.leaves.bot.ServerBot bot) { return new org.leavesmc.leaves.entity.bot.CraftBot(server, bot); }
@@ -66,10 +68,10 @@ index 0f6378ca80bea5d4d7f1cb7d788a57390bc27c59..610e19b82919f05b0ebf20854e0f9b4a
// Special case complex part, since there is no extra entity type for them
if (entity instanceof EnderDragonPart complexPart) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index d47c1b8cc17eb13669fbe21670c3a6eaaa995844..0f522b90f300431f1d5daa62c9a3fd6d260e1feb 100644
index 7bbadcab57d3a2dbba0a4c48de043966454a1d50..9135327aacf818d3b80ec1102e2b11f40ac93261 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2084,7 +2084,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
@@ -2092,7 +2092,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
@Override
public boolean canSee(Player player) {
@@ -78,19 +80,6 @@ index d47c1b8cc17eb13669fbe21670c3a6eaaa995844..0f522b90f300431f1d5daa62c9a3fd6d
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index c189f583598f94fc7944afcabe130c5ee9504c0d..2e56d20d50d8a5d5630816b822b10a43ce3fa6c7 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -294,7 +294,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
Bukkit.getLogger().log(Level.SEVERE, "Error saving advancement " + key, ex);
}
- MinecraftServer.getServer().getPlayerList().getPlayers().forEach(player -> {
+ net.minecraft.server.MinecraftServer.getServer().getPlayerList().realPlayers.forEach(player -> { // Leaves - only real players
player.getAdvancements().reload(MinecraftServer.getServer().getAdvancements());
player.getAdvancements().flushDirty(player, false);
});
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java b/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java
index 15261d2e96347584e4baf65f12b336b73a68cd37..83af50de50a03e164d572f3c3466b6d0b42ed138 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java
@@ -75,6 +75,10 @@ public class ServerBotPacketListenerImpl extends ServerGamePacketListenerImpl {
public void tick() {
}
@Override
public void flushChannel() {
}
@Override
public boolean isConnected() {
return true;
@@ -0,0 +1,198 @@
{
"lophine.experiment.command.function_command_enabled.comment": "允許使用 function 指令",
"lophine.experiment.command.save_all_command.enabled.comment": "允許使用 save-all 指令",
"lophine.experiment.command.save_all_command.log_all_process.comment": "將 save-all 指令的完整過程記錄到主控台",
"lophine.experiment.command.save_all_command.save_all_command_timeout.comment": "區塊回報保存逾時前,允許的最大保存秒數。",
"lophine.experiment.command.scoreboard_command_enabled.comment": "允許使用 scoreboard 指令",
"lophine.experiment.command.trigger_command_enabled.comment": "允許使用 trigger 指令",
"lophine.experiment.entity_damage_source_trace.enabled.comment": "允許跨不同區域排程器追蹤傷害來源。",
"lophine.experiment.global_entities_counter.version.comment": "DISABLED\nDEFAULT_SYNC:使用同步計數器模組啟用原始版本的全域實體計數器。\nDEFAULT_ASYNC:使用非同步計數器模組啟用原始版本的全域實體計數器。\nPRECISE:使用增量計數方式啟用精確的生物上限計算,以事件驅動的即時更新取代週期性全量掃描。\n\n你需要在 paper-world-defaults.yml 或 paper-world.yml 中將 per-player-mob-spawns 設為 false",
"lophine.fixes.update-suppression-crash-fix.enabled.comment": "是否要防止因更新抑制(update suppression)導致的當機?",
"lophine.fixes.vanilla-like-experience.enabled.comment": "略過部分 Paper 的安全性與行為變更,還原更接近原版的技術性遊戲體驗。",
"lophine.function.container_expansion.barrel_rows.comment": "範圍:1~6",
"lophine.function.container_expansion.enderchest_rows.comment": "範圍:1~6",
"lophine.function.container_expansion.shulker_box.shulker_stackable_count.comment": "範圍:1~64",
"lophine.function.fakeplayer.always-send-data.comment": "一律為假人傳送資料",
"lophine.function.fakeplayer.cache-skin.comment": "為假人使用皮膚(外觀)快取",
"lophine.function.fakeplayer.enable-locator-bar.comment": "為假人啟用定位列",
"lophine.function.fakeplayer.enabled.comment": "啟用假人功能(/bot 指令)",
"lophine.function.fakeplayer.limit.comment": "允許的假人數量上限",
"lophine.function.fakeplayer.manual-save-and-load.comment": "允許手動儲存與載入假人",
"lophine.function.fakeplayer.modify-config.comment": "允許修改假人設定",
"lophine.function.fakeplayer.open-action-gui.comment": "允許開啟假人動作 GUI,\n若已啟用「開啟物品欄」GUI,則需要蹲下才能開啟",
"lophine.function.fakeplayer.prefix.comment": "假人名稱的前綴",
"lophine.function.fakeplayer.regen-amount.comment": "假人的生命恢復量",
"lophine.function.fakeplayer.simulation-distance.comment": "假人的模擬距離(-1 表示使用預設值)",
"lophine.function.fakeplayer.skip-sleep-check.comment": "跳過假人的睡眠檢查",
"lophine.function.fakeplayer.spawn-phantom.comment": "允許為假人生成夜魅",
"lophine.function.fakeplayer.suffix.comment": "假人名稱的後綴",
"lophine.function.fakeplayer.unable-fakeplayer-names.comment": "無法用於假人的名稱清單",
"lophine.function.fakeplayer.use-action.comment": "允許假人執行動作",
"lophine.function.language.allow_auto_reset_comments.comment": "如果安裝包中包含對應語言的設定檔註解檔案,\n就會自動使用其內容重新載入設定檔的註解。\n\n警告:這會刪除原有的註解!",
"lophine.function.language.full_blocking_load.comment": "是否允許在載入本地化語言時封鎖伺服器載入流程。\n如果你希望終端機只顯示本地化語言的內容,\n就需要啟用此項。\n\n警告:這可能會拖慢啟動速度!",
"lophine.function.language.lang.comment": "請使用 https://zh.minecraft.wiki/w/Language 頁面中列出的語言代碼\n格式範例:en_us zh_cn zh_hk zh_tw\n注意:如果你想修改 carpet 系統的語言,\n請在 carpet 設定檔中修改。",
"lophine.function.protocol.alternative_block_placement.enabled.comment": "指定精準放置協定的類型\nNONE 停用精準放置協定\nCARPET 精準放置協定第 2 版\nCARPET_FIX 加強版精準放置協定第 2 版(需要在客戶端安裝 MasaGadget\nLITEMATICA 精準放置協定第 3 版",
"lophine.function.protocol.appleskin.enabled.comment": "啟用 AppleSkin 協定支援",
"lophine.function.protocol.appleskin.sync-tick-interval.comment": "設定 AppleSkin 的同步頻率(單位:遊戲刻)",
"lophine.function.protocol.bbor.enabled.comment": "啟用 BBOR 協定支援",
"lophine.function.protocol.jade.enabled.comment": "啟用 Jade 協定支援",
"lophine.function.protocol.pca.enabled.comment": "啟用 PCA 同步協定支援",
"lophine.function.protocol.pca.sync-player-entity.comment": "控制哪些玩家實體可以透過 PCA 同步協定被觀察。\nNOBODY:永遠不同步玩家實體\nBOT:只同步 Lophine 假人\nOPS:同步假人,並允許管理員同步真實玩家\nOPS_AND_SELF:同步假人、管理員,以及玩家自己的實體\nEVERYONE:允許所有玩家實體",
"lophine.function.protocol.rei.enabled.comment": "啟用 Roughly Enough ItemsREI)協定支援",
"lophine.function.protocol.servux.litematics.litematics-print-max-delay-ticks.comment": "列印投影結構(Litematica print)的最大延遲刻數,設為 -1 表示停用",
"lophine.function.protocol.syncmatica.enabled.comment": "啟用 Syncmatica 協定支援",
"lophine.function.protocol.syncmatica.quota-Limit.comment": "投影檔案的大小上限(位元組)",
"lophine.function.protocol.syncmatica.useQuota.comment": "是否限制投影檔案的大小?",
"lophine.function.protocol.xaero-map.enabled.comment": "啟用 Xaero 世界地圖協定支援",
"lophine.function.redstone.shears_rotate.comment": "允許使用剪刀右鍵旋轉方塊。",
"lophine.function.replay-api.cache-photographer-size.comment": "攝影師(Photographer)快取的最大保留數量",
"lophine.function.replay-api.cache-photographer-time.comment": "攝影師(Photographer)檔案的快取保留時間(秒)",
"lophine.misc.disable-check.disable-op-fly-check.comment": "停用對管理員飛行的檢查",
"lophine.misc.disable-check.disable-op-move-check.comment": "停用對管理員移動的檢查",
"lophine.misc.item-entity.follow-tick-sequence-merge.comment": "由於 Paper 修改了合併半徑的判定方式,\n當合併半徑較大、且包含大量物品的堆疊卡在非預期的位置時,\n單一物品可能永遠無法到達目的地。\n新增此設定項即為修正這個行為。",
"lophine_carpet.carpet.fakeplayer.commandPlayer.comment": "啟用 /player 指令(未重新映射)。\n如果你想啟用 bot 指令,請參閱 Lophine 全域設定。",
"lophine_carpet.carpet.fakeplayer.comment": "將 Carpet 假人相容規則對應到 Lophine 假人。\ncommandPlayer 目前是由 Lophine 的 /bot 指令介面提供支援。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoFish.comment": "讓手持釣竿的假人自動拋竿並收竿。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplaceTool.comment": "切換假人的自動更換工具功能。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishment.comment": "切換假人的自動補貨功能。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishmentFormShulkerBox.comment": "讓假人補貨時可以從物品欄中的界伏盒(Shulker Box)取出對應物品。",
"lophine_carpet.carpet.fakeplayer.fakePlayerDefaultSurvivalMode.comment": "強制新建立的假人以生存模式開始,而不是使用伺服器預設的遊戲模式。",
"lophine_carpet.carpet.fakeplayer.fakePlayerInteractLikeClient.comment": "讓假人的實體互動更貼近客戶端的回退(fallback)行為。",
"lophine_carpet.carpet.fakeplayer.fakePlayerReloadAction.comment": "在儲存與重新載入之間保留假人排隊中的動作。",
"lophine_carpet.carpet.fakeplayer.fakePlayerResident.comment": "讓假人在卸載與重新啟動後依然常駐。",
"lophine_carpet.carpet.fakeplayer.fakePlayerTicksLikeRealPlayer.comment": "在網路階段對假人執行 tick,以更貼近真實玩家的時序。",
"lophine_carpet.carpet.fakeplayer.openFakePlayerInventory.comment": "允許開啟假人的物品欄。",
"lophine_carpet.carpet.general.amsUpdateSuppressionCrashFix.comment": "更新抑制當機防護。",
"lophine_carpet.carpet.general.antiSpamDisabled.comment": "停用原版/Spigot 內建、用於限制聊天與創造模式丟棄物品洗版速度的節流機制。",
"lophine_carpet.carpet.general.bambooModelNoOffset.comment": "移除竹子與竹筍模型的隨機水平偏移。",
"lophine_carpet.carpet.general.betterCraftableBoneBlock.comment": "新增 AMS 的替代骨塊配方,可用 9 個骨頭合成 3 個骨塊。",
"lophine_carpet.carpet.general.betterCraftableDispenser.comment": "新增 AMS 使用投擲器(Dropper)合成發射器的替代配方。",
"lophine_carpet.carpet.general.blockPlacementIgnoreEntity.comment": "允許創造模式玩家在不檢查實體碰撞的情況下放置方塊。",
"lophine_carpet.carpet.general.carpetAlwaysSetDefault.comment": "Lophine 設定載入器的相容旗標;它在預先載入階段就已經把預設值寫入相容設定中。",
"lophine_carpet.carpet.general.clientSettingsLostOnRespawnFix.comment": "在重生後重新套用玩家上一次已知的客戶端設定。",
"lophine_carpet.carpet.general.commandTick.comment": "啟用 tick 指令支援。",
"lophine_carpet.carpet.general.comment": "由現有 Lophine 功能提供支援的 Carpet/AMS/TIS/Org 相容規則。\n這裡只會顯示已經有可用伺服器端實作的規則。",
"lophine_carpet.carpet.general.creativeNoClip.comment": "是否啟用創造模式飛行穿牆(no clip)。\n啟用後,創造模式玩家飛行時不會與方塊碰撞。\n這讓他們可以無阻礙地穿過方塊。",
"lophine_carpet.carpet.general.creativeNoItemCooldown.comment": "略過對創造模式玩家套用物品冷卻。",
"lophine_carpet.carpet.general.creativeOneHitKill.comment": "允許創造模式玩家瞬間擊殺可攻擊、且非創造/旁觀模式的實體。\n蹲下時效果會擴大為小範圍攻擊。",
"lophine_carpet.carpet.general.creativeOpenContainerForcibly.comment": "允許創造模式玩家強制開啟被阻擋的箱子、終界箱(Ender Chest)與界伏盒(Shulker Box)。",
"lophine_carpet.carpet.general.ctrlQCraftingFix.comment": "相容旗標,對應上游合成結果欄位的 Ctrl+Q 修正,該修正已存在於目前的選單程式碼中。",
"lophine_carpet.carpet.general.defaultLoggers.comment": "Carpet 風格的玩家預設 logger 訂閱。\n範例:[\"tps\", \"mob_caps\", \"counter white\"]",
"lophine_carpet.carpet.general.disableBlazeFire.comment": "停用烈焰使者火球造成的燃燒。",
"lophine_carpet.carpet.general.disableGhastFire.comment": "停用地獄幽靈(Ghast)火球造成的燃燒。",
"lophine_carpet.carpet.general.dustTrapdoorReintroduced.comment": "是否要重新引入 1.20 之前的機制:\n開啟狀態地板門上的紅石粉不會連接到相鄰的紅石粉\n1.20.2 之前的機制:紅石粉、紅石中繼器、\n紅石比較器在接收來自下方的狀態更新時,不會檢查附著狀態。",
"lophine_carpet.carpet.general.entityInstantDeathRemoval.comment": "移除生物實體死亡後、正常需要等待的 20 遊戲刻(20gt)延遲,改為立即移除。",
"lophine_carpet.carpet.general.explosionNoBlockDamage.comment": "讓爆炸只傷害實體,不破壞方塊。",
"lophine_carpet.carpet.general.farmlandTrampledDisabled.comment": "防止耕地因實體落地踩踏而變回泥土。",
"lophine_carpet.carpet.general.fastRedstoneDust.comment": "讓紅石粉的更新改走 Alternate Current 快速更新後端。",
"lophine_carpet.carpet.general.hopperNoItemCost.comment": "在漏斗上方放置羊毛方塊時,將已傳輸出去的物品堆疊恢復回漏斗中。",
"lophine_carpet.carpet.general.instantBlockUpdaterReintroduced.comment": "瞬時方塊更新器。",
"lophine_carpet.carpet.general.interactionUpdates.comment": "控制玩家互動造成的方塊變化是否會發出正常的方塊更新。\n設為 false 可在方塊使用與破壞時,抑制鄰居更新與形狀更新。",
"lophine_carpet.carpet.general.lagFreeSpawning.comment": "在自然生成檢查中,使用輕量碰撞判定與預先準備好的生物生成路徑。",
"lophine_carpet.carpet.general.language.comment": "Carpet 的語言設定值。\n注意:此設定目前不會同步更新到 Lophine 全域設定!",
"lophine_carpet.carpet.general.microTiming.comment": "相容旗標,對應 Folia/Moonrise 內建的區域效能分析與計時偵測功能。",
"lophine_carpet.carpet.general.noCreeperBlockBreaking.comment": "停用苦力怕爆炸破壞方塊。",
"lophine_carpet.carpet.general.noGhastBlockBreaking.comment": "停用地獄幽靈(Ghast)火球爆炸破壞方塊。",
"lophine_carpet.carpet.general.observerNoDetection.comment": "完全停用偵測器的偵測脈衝。",
"lophine_carpet.carpet.general.optimizedDragonRespawn.comment": "啟用優化過的終界龍(Ender Dragon)重生流程。",
"lophine_carpet.carpet.general.optimizedFastEntityMovement.comment": "相容旗標,對應恆常啟用的 Moonrise/Paper 快速實體移動碰撞流程。",
"lophine_carpet.carpet.general.optimizedHardHitBoxEntityCollision.comment": "相容旗標,對應恆常啟用的 Moonrise/Paper 硬碰撞箱實體碰撞最佳化。",
"lophine_carpet.carpet.general.optimizedTNTHighPriority.comment": "相容旗標,對應目前執行環境中已經最佳化過的伺服器爆炸處理路徑。",
"lophine_carpet.carpet.general.placementRotationFix.comment": "以玩家身體的朝向來判定放置方向,而不是使用內插後的頭部偏航角(yaw)。",
"lophine_carpet.carpet.general.powerfulExpMending.comment": "讓拾取的經驗值修復玩家物品欄中所有具備經驗修補、且已受損的物品,而不只是已裝備的裝備。",
"lophine_carpet.carpet.general.preventEndSpikeRespawn.comment": "在終界龍(Ender Dragon)重生時,略過黑曜石尖塔的重新生成。",
"lophine_carpet.carpet.general.sensibleEnderman.comment": "限制終界使者(Enderman)只能拾取南瓜與西瓜。",
"lophine_carpet.carpet.general.shulkerBoxCCEReintroduced.comment": "使用 ClassCastException 來實現更新抑制。",
"lophine_carpet.carpet.general.shulkerGolem.comment": "允許在界伏盒(Shulker Box)上方放置雕刻南瓜,藉此召喚界伏蚌(Shulker)。",
"lophine_carpet.carpet.general.simpleInGameCalculator.comment": "將以 `=` 開頭的聊天訊息當作簡易計算機表達式求值,並私訊回覆結果。",
"lophine_carpet.carpet.general.syncServerMsptMetricsData.comment": "透過原生 TISCM 協定通道廣播即時的 MSPT 取樣資料。",
"lophine_carpet.carpet.general.tickCommandPermission.comment": "覆寫 `/tick` 指令的權限等級。\n可接受 0 到 4 之間的數值,其中 2 對應舊版 Carpet 的行為,3 則維持原版行為。",
"lophine_carpet.carpet.general.tickFreezeCommandToggleable.comment": "當伺服器已處於凍結狀態時再次執行 `/tick freeze`,會切換回運行狀態。",
"lophine_carpet.carpet.general.tiscmNetworkProtocol.comment": "在 `tiscm:network/v1` 上啟用原生的 Carpet TIS Addition 網路通道。",
"lophine_carpet.carpet.general.tntDoNotUpdate.comment": "防止 TNT 在剛放置時檢查紅石訊號。",
"lophine_carpet.carpet.general.tntDupingFix.comment": "切換原版 TNT 複製裝置所利用的活塞不同步路徑。",
"lophine_carpet.carpet.general.tntFuseDuration.comment": "覆寫已點燃 TNT 的預設引信時長(單位:遊戲刻)。\n可接受 0 到 32767 之間的數值。",
"lophine_carpet.carpet.general.tntIgnoreRedstoneSignal.comment": "在判斷 TNT 是否應該自動點燃時,忽略紅石訊號。",
"lophine_carpet.carpet.general.tntPrimerMomentumRemoved.comment": "移除剛點燃的 TNT 隨機獲得的水平發射動量。",
"lophine_carpet.carpet.general.totallyNoBlockUpdate.comment": "全域抑制方塊變化所引發的鄰居更新與形狀更新。",
"lophine_carpet.carpet.general.viewDistance.comment": "以 Carpet 相容數值覆寫專用伺服器啟動時的視距。",
"lophine_carpet.carpet.general.xpNoCooldown.comment": "允許玩家在同一遊戲刻內連續吸收多顆經驗球,不受拾取延遲限制。",
"lophine_carpet.carpet.general.yeetOutOfOrderChatKick.comment": "忽略順序錯亂的安全聊天鏈檢查,不再讓聊天工作階段(session)失效。",
"lophine_carpet.carpet.general.yeetUpdateSuppressionCrash.comment": "移除更新抑制導致的當機。",
"lophine_carpet.carpet.hopper_counter.comment": "漏斗計數器功能。",
"lophine_carpet.carpet.hopper_counter.hopperCounters.comment": "啟用現有的羊毛漏斗計數器實作。",
"lophine_carpet.carpet.hopper_counter.hopperCountersUnlimitedSpeed.comment": "移除計數器漏斗的傳輸速度限制。\n僅在啟用 hopperCounters 時生效。",
"luminol.experiment.command.enable_command_block.comment": "強制啟用指令方塊。\n注意:可能因為執行緒相關問題導致伺服器當機!!!\n除非你清楚自己在做什麼,否則請不要啟用!!!",
"luminol.experiment.command.enable_waypoints_and_waypoint_command.comment": "啟用路徑點功能與 waypoint 指令。\n警告:仍在測試階段",
"luminol.experiment.disable_async_catchers.enabled.comment": "停用非同步例外攔截器(async catcher),以防止部分聲稱支援 Folia、但邏輯本身有問題的插件導致當機。\n注意:如果 getChunkAt 被錯誤呼叫,可能會導致區域死結(deadlock)!\n參見:https://github.com/PaperMC/Folia/issues/280,該問題已在 Folia 中修復(https://github.com/PaperMC/Folia/commit/2e7bc0721af95196c85500c7bb136aeea0bc12ce\n除非你清楚自己在做什麼,否則請不要啟用!!!",
"luminol.experiment.disable_entity_exception_catchers.enabled.comment": "啟用此設定後,實體 tick 發生錯誤時伺服器會直接當機,而不是移除該實體以維持伺服器運行。\n這可以防止實體無故消失,但可能導致伺服器更常當機。\n除非你清楚自己在做什麼,否則請不要啟用!!!",
"luminol.fixes.allow_unsafe_teleportation.enabled.comment": "啟用後,允許非玩家實體進入終界傳送門。\n如果你想使用刷沙(sand duping),請開啟此項。\n警告:這可能導致一些不安全的問題,詳情可參閱:https://github.com/PaperMC/Folia/issues/297",
"luminol.fixes.collision_behavior.mode.comment": "決定要使用哪一種碰撞邏輯(Moonrise 與 Paper 為了最佳化修改了這部分,但同時也會破壞部分原版行為)。\n對修正部分大型紅石機械的異常行為會有幫助\n可用值:\nVANILLA\nBLOCK_SHAPE_VANILLA\nPAPER",
"luminol.fixes.fix_high_velocity_issue.enabled.comment": "針對 Folia 上某個問題的簡易修復\n(有時實體會產生跨越不同 tick 區域的巨大動量,\n進而導致伺服器當機)\n但這個修復有時可能不會生效",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.comment": "此設定是針對每個生物的「記憶(memory)」中,歸屬資料不正確問題所做的暫時性修復,詳情可參閱 https://github.com/PaperMC/Folia/issues/203",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_block_pos.comment": "啟用後,實體的大腦(Brain)會清除型別為 block_pos、且不屬於目前 tick 區域的記憶",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_entity.comment": "啟用後,實體的大腦(Brain)會清除型別為 entity、且不屬於目前 tick 區域的記憶",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_position_tracker.comment": "啟用後,實體的大腦(Brain)會清除型別為 position_tracker、且不屬於目前 tick 區域的記憶",
"luminol.fixes.item_multitask.enabled.comment": "防止伺服器在方塊互動或快捷欄欄位切換時,\n中斷物品的狀態。",
"luminol.fixes.long_command_support.enabled.comment": "部分過長的指令可以透過 dialog 指令產生的介面執行,\n但 Paper 已禁止這麼做。\n啟用此項可以修正這個問題。",
"luminol.fixes.pathfinding_fixes.break_down_pathfinding_when_out_of_region.comment": "當尋路觸碰到目前 tick 區域之外的方塊時,重新計算路徑或停止尋路",
"luminol.fixes.pathfinding_fixes.do_not_pathfind_to_not_owned_targets.comment": "當目標位於目前 tick 區域之外時,略過對該目標的尋路",
"luminol.fixes.poi_range_fixes.do_not_compete_poi_if_unloaded.comment": "如果 POI 尚未載入,就不要與其他實體競爭該 POI\n相關內容:https://github.com/PaperMC/Folia/issues/292",
"luminol.fixes.prevent_incorrect_teleport_async_calls_during_move_event.enabled.comment": "啟用後,伺服器會在移動事件(move event)期間拒絕部分不正確的 teleportAsync 呼叫。\n這可以減少由某些插件(如 Residence)造成的當機。\n但請注意,這可能會破壞與部分插件的相容性。",
"luminol.fixes.use_vanilla_random_source.enable_for_player_entity.comment": "與 RNG(隨機數產生器)破解相關",
"luminol.function.membar.display.comment": "可用的顯示方式:BOSS_BAR、ACTION_BAR、TAB_LIST",
"luminol.function.portal_rate_limit.enable.comment": "是否要在實體進入傳送門時限制傳送速率",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick.comment": "決定單一 tick 區域內,每個 tick 最多可處理多少次傳送門傳送;超過時,\n該次傳送會被延後到下一個 tick 處理\n\n注意:設為 -1 可改用自訂表達式",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick_expression.comment": "如果固定上限不敷使用,你可以自訂表達式來動態限制傳送門速率。\n\n可用變數(皆為目前 tick 區域的數值):eticking_entity_count,正在 tick 的實體數)\ncticking_chunk_count,正在 tick 的區塊數)\npplayer_count,玩家數)\n範例:50 * (1 + sqrt(x/1000) + c/200 + p/5)",
"luminol.function.region_format.blinear_io_flush_delay_ms.comment": "決定在連續 n(預設為 3000)毫秒沒有寫入操作後,才將資料刷新(flush)到區域檔案(僅適用於 B_LINEAR",
"luminol.function.region_format.blinear_io_thread_count.comment": "決定 buffered linear 的工作執行緒數量(僅適用於 B_LINEAR",
"luminol.function.region_format.format.comment": "可用選項:MCA、LINEAR_V2、B_LINEAR",
"luminol.function.region_format.linear_compression_level.comment": "決定區域檔案的壓縮等級(僅適用於 LINEAR_V2 與 B_LINEAR",
"luminol.function.region_format.linear_io_flush_delay_ms.comment": "決定被標記為待儲存的資料在經過 n(預設為 100)毫秒後才刷新(flush)到區域檔案(僅適用於 LINEAR_V2",
"luminol.function.region_format.linear_io_thread_count.comment": "決定 linear 的工作執行緒數量(僅適用於 LINEAR_V2",
"luminol.function.region_format.linear_use_virtual_thread.comment": "決定 linear 格式是否可以使用虛擬執行緒(僅適用於 LINEAR_V2",
"luminol.function.regionbar.display.comment": "可用的顯示方式:BOSS_BAR、ACTION_BAR、TAB_LIST",
"luminol.function.secure_seed.enabled.comment": "啟用安全種子(secure seed)後,所有礦物與結構都會改用 1024 位元種子生成,\n而不是原版的 64 位元種子,讓傳統的種子破解方式無法使用。\n注意:如果使用 V1,仍容易受到地形高度攻擊。\n***** 警告:如果你的舊世界原本就在使用安全種子,請務必保持啟用!否則會毀損你的存檔 *****",
"luminol.function.secure_seed.salt.comment": "為 V2 加密運算自動產生的 256 位元 salt。\n僅在伺服器第一次啟動時產生一次──請勿分享或修改這個值(修改後會導致區塊錯誤)!\n會與 Blake3 keyed hash 搭配使用,讓種子無法被逆推。",
"luminol.function.secure_seed.version.comment": "版本 1:Blake2b(不安全,若熵值足夠,透過 GPU/ASIC 叢集可在數分鐘內逆推)\n版本 2:搭配 salt 金鑰衍生的 Blake3(建議使用,無法逆推)\n***** 警告:切換版本會導致區塊錯誤! *****",
"luminol.function.tpsbar.display.comment": "可用的顯示方式:BOSS_BAR、ACTION_BAR、TAB_LIST",
"luminol.function.tpsbar.precision_of_mspt_value.comment": "範例(若 mspt 為 20.00000000)(數值 -> 結果):2 -> 20.001 -> 20.0",
"luminol.function.tpsbar.precision_of_tps_value.comment": "範例(若 tps 為 20.00000000)(數值 -> 結果):2 -> 20.001 -> 20.0",
"luminol.function.tripwire_dupe.behavior_mode.comment": "可用值:\nVANILLA20\nVANILLA21\nMIXED",
"luminol.misc.auto_update.allow_prerelease.comment": "選擇更新版本時,是否允許使用 GitHub 上的搶先版(prerelease)發布。",
"luminol.misc.auto_update.check_times.comment": "每日檢查更新的時間清單,格式為 HH:mm,以伺服器所在的本地時區為準。",
"luminol.misc.auto_update.comment": "定期檢查 GitHub Releases 上是否有更新版本的 jar 檔。\n下載的檔案會暫存於 auto_update/lophine,並寫入 auto_update/core.path\nClip 會在下次重新啟動時讀取並套用。\n如果設定了 target_jar_path,伺服器也會嘗試直接替換該啟動器 jar 檔。",
"luminol.misc.auto_update.enabled.comment": "伺服器是否應該自動檢查更新。",
"luminol.misc.auto_update.target_jar_path.comment": "下載成功後,要替換的啟動器 jar 路徑(選填)。\n留空則會將下載的 jar 保持暫存在 auto_update/lophine\n並讓 Clip 在重新啟動時透過 auto_update/core.path 切換過去。",
"luminol.misc.disable_warning.disable_heightmap_warning.comment": "停用高度圖(heightmap)檢查的警告",
"luminol.misc.disable_warning.disable_moved_wrongly_threshold_warning.comment": "停用異常移動的警告與檢查",
"luminol.misc.disable_warning.disable_offline_mode_warning.comment": "停用伺服器啟動時,記錄檔中彈出的離線模式警告",
"luminol.misc.folia_watchdog.tick_region_time_out_ms.comment": "決定 watchdog 印出卡住的 tick 區域執行緒傾印(thread dump)的間隔時間",
"luminol.misc.force_disable_packet_limiter_of_paper.comment": "強制完全停用 Paper 所有的封包限制器;該機制原本是為了避免因使用快速合成類模組而被踢出,但停用它會對安全性造成負面影響",
"luminol.misc.save_portal_tickets.do_save.comment": "伺服器停止時是否要儲存傳送門憑證(portal ticket);啟用後行為會類似 1.21.5 之前的 MC,\n且伺服器再次啟動時,不會自動啟動傳送門的區塊載入器。",
"luminol.misc.sentry.dsn.comment": "用於強化錯誤記錄的 Sentry DSN,留空即可停用,\n可以從 https://sentry.io/ 取得",
"luminol.misc.sentry.log_level.comment": "等級高於或等於此設定值的記錄(log)才會被記錄下來。",
"luminol.misc.sentry.only_log_thrown.comment": "啟用後,只有附帶 Throwable 的記錄才會被記錄下來。",
"luminol.misc.server_mod_name.name.comment": "決定 F3 除錯畫面中顯示的伺服器模組(mod)名稱。",
"luminol.misc.server_mod_name.vanilla_spoof.comment": "忽略任何插件的修改,以及此設定區塊中設定的伺服器模組名稱,\n強制只傳送原版的品牌名稱(brand name",
"luminol.misc.username_checks.allow_old_player_join.comment": "在使用者名稱正規表達式變更後,仍允許舊玩家加入伺服器,\n即使他們的名稱不符合新規則也一樣。",
"luminol.misc.username_checks.enabled.comment": "決定是否啟用使用者名稱檢查,\n如果你的玩家使用中文使用者名稱,可以停用此項,\n但請注意停用後可能帶來的安全性影響",
"luminol.misc.username_checks.enforce_skull_validation.comment": "強制進行頭顱驗證,避免帶有無效名稱的頭顱導致客戶端斷線。",
"luminol.misc.username_checks.username_check_regex.comment": "使用正規表達式驗證使用者名稱,\n只允許正規表達式中指定的字元。",
"luminol.misc.verify_publickey_only_in_online_mode.comment": "只在正版驗證模式(online mode)下驗證公鑰;在搭配 MultiLogin 等使用自訂驗證伺服器的插件時可能會有幫助",
"luminol.optimizations.cpu_affinity.enabled_for_tickregion.comment": "啟用後,可以將 tick 區域排程器的執行緒(以下皆同)固定到下方 'tickregion_affinity' 設定中列出的 CPU 核心,\n這對具有 P 核心與 E 核心的 CPU(例如第 12/13/14 代 Intel Core 系列等)特別有幫助。",
"luminol.optimizations.cpu_affinity.tickregion_affinity.comment": "你希望 tick 區域執行緒綁定的核心編號",
"luminol.optimizations.lithium_sleeping_block_entity.enabled.comment": "使用來自 Lithium 的方塊實體休眠最佳化;\n在 Luminol 上,Paper 原有的漏斗最佳化已完全移除,改由 Lithium 的實作取代,\n且預設為啟用狀態",
"luminol.optimizations.lobotomize_villager.check_interval.comment": "檢查村民是否進入簡化 AI(lobotomize)狀態的間隔(單位:遊戲刻)",
"luminol.optimizations.lobotomize_villager.comment": "當村民無法移動時,將其 AI 簡化(lobotomize)(不會停用交易功能)",
"luminol.optimizations.lobotomize_villager.wait_until_trade_locked.comment": "等到村民被交易過後,才將其 AI 簡化",
"luminol.optimizations.projectile.max-loads-per-projectile.comment": "控制一個投射物在其生命週期內最多可以載入多少個區塊,超過後會被自動移除。",
"luminol.optimizations.projectile.max-loads-per-tick.comment": "控制每個遊戲刻內,投射物最多可以同步載入多少個區塊。",
"luminol.optimizations.reduce_sensor_work.comment": "啟用後,會降低視線快取被清除的頻率,並使用更快速的鄰近比較演算法。",
"luminol.optimizations.reduce_sensor_work.enabled.comment": "每個實體清除快取的間隔(單位:遊戲刻)",
"luminol.optimizations.throttle_goal_selector_tick_in_inactive_tick.comment": "在實體處於非活躍 tick 時,限制其 AI 目標選擇器(goal selector)的執行頻率。\n這可以提升幾個百分點的效能,但會帶來輕微的遊戲行為影響。",
"luminol.optimizations.use_async_protocol_switching.enabled.comment": "為 MC 使用非同步協定準備(async protocol preparation)。\n警告:由於此最佳化會改變封包順序,\n可能與部分插件(如 ViaVersion)不相容。",
"luminol.optimizations.variable_entity_waking_up.entity_wakeup_duration_ratio_standard_deviation.comment": "如果此數值設為任何大於 0 的值,非活躍實體的甦醒時間就會分散在一段時間內,而不是大量實體同時甦醒,讓實體的行為看起來更自然。\n這個設定值是不活躍時長的變異係數(coefficient of variation),也就是 σ/μ(標準差與平均值的比值)。\n\n換句話說,這個設定值就是 σ,最終的不活躍時長會等於原本的時長乘上常態分布 normal_distribution(μ = 1, σ) 所得到的係數。\n如果設定值 ≤ 0,則會停用可變的實體甦醒機制。",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_leaves.comment": "停用對 Leaves 插件的 folia-supported 檢查。\n注意:啟用此項後將不提供任何支援。",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_paper.comment": "停用對 Spigot/Bukkit/Paper 插件的 folia-supported 檢查。\n注意:啟用此項後將不提供任何支援。"
}