Compare commits

..

65 Commits

680 changed files with 4727 additions and 2285 deletions
+33 -9
View File
@@ -26,7 +26,7 @@
- Get Java 17: https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
- Get [MongoDB Community Server](https://www.mongodb.com/try/download/community)
- Get game version REL3.7 (3.7 client can be found here if you don't have it): https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/3.7.0.md
- Get game version REL4.0.x (4.0.x client can be found here if you don't have it): https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/4.0.0.md
- Download the [latest Cultivation version](https://github.com/Grasscutters/Cultivation/releases/latest). Use the `.msi` installer.
- After opening Culivation (as admin), press the download button in the upper right corner.
@@ -46,25 +46,49 @@ Grasscutter uses Gradle to handle dependencies & building.
**Requirements:**
- [Java SE Development Kits - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) or higher
- [Java Development Kit 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) or higher
- [Git](https://git-scm.com/downloads)
- [NodeJS](https://nodejs.org/en/download) (Optional, for building the handbook)
##### Windows
##### Clone
```shell
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
.\gradlew.bat # Setting up environments
.\gradlew jar # Compile
```
##### Linux (GNU)
##### Compile
**Note**: Handbook generation may fail on some systems. To disable the handbook generation, append `-PskipHandbook=1` to the `gradlew jar` command.
Windows:
```shell
.\gradlew.bat # Setting up environments
.\gradlew jar
```
Linux (GNU):
```bash
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
chmod +x gradlew
./gradlew jar # Compile
./gradlew jar
```
##### Compiling the Handbook (Manually)
With Gradle:
```shell
./gradlew generateHandbook
```
With NPM:
```shell
cd src/handbook
npm install
npm run build
```
You can find the output jar in the root of the project folder.
+9 -1
View File
@@ -58,7 +58,7 @@ sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
group = 'io.grasscutter'
version = '1.7.0'
version = '1.7.1'
java {
withJavadocJar()
@@ -311,6 +311,8 @@ javadoc {
// Add this to avoid warning caused by lack of comments in proto generated java files
options.addStringOption('Xdoclint:none', '-quiet')
exclude '**/*.md'
exclude 'src/handbook/**/*.*'
exclude 'src/generated/**/*.*'
}
tasks.register('injectGitHash') {
@@ -384,6 +386,12 @@ tasks.register('generateHandbook') {
return
}
// Install dependencies before building.
exec {
workingDir 'src/handbook'
commandLine npm, 'install'
}
// Build the handbook.
exec {
workingDir 'src/handbook'
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**תשומת לב בבקשה:** אנחנו מקבלים עזרה בפיתוח התוכנה. לפני שאתם תורמים לפרויקט בבקשה תקראו את [תנאי השימוש](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Aantekening:** We verwelkomen altijd bijdragers aan het project. Lees onze [Gedragscode](https://github.com/Grasscutters/Grasscutter/blob/development/README_NL.md#bijdragen-aan-het-project) zorgvuldig door voordat u uw bijdrage toevoegt.
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Atención:** Siempre damos la bienvenida a contribuidores del proyecto. Antes de añadir tu contribución, por favor lee cuidadosamente nuestro [Código de conducta](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Atensyon:** Ang mga kontributor ay laging welcome sa proyektong ito. Bago mag-bigay ng kontribusyon, basahin muna ng mabuti ang [Code of Conduct](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+2 -2
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Attention:** De nouveaux contributeurs sont toujours les bienvenus. Avant d'ajouter votre contribution, veuillez lire le [code de conduite](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
@@ -71,4 +71,4 @@ Vous pouvez trouver le jar de sortie dans la racine du dossier du projet.
### Dépanage
Pour une liste des problèmes communs et leur solution et pour demander de l'aide, veuillez rejoindre [notre serveur Discord](https://discord.gg/T5vZU6UyeG) (en anglais) et dirigez vous vers le salon de support.
Pour une liste des problèmes communs et leur solution et pour demander de l'aide, veuillez rejoindre [notre serveur Discord](https://discord.gg/T5vZU6UyeG) (en anglais) et dirigez vous vers le salon de support.
+78
View File
@@ -0,0 +1,78 @@
![Grasscutter](https://socialify.git.ci/Grasscutters/Grasscutter/image?description=1&forks=1&issues=1&language=1&logo=https%3A%2F%2Fs2.loli.net%2F2022%2F04%2F25%2FxOiJn7lCdcT5Mw1.png&name=1&owner=1&pulls=1&stargazers=1&theme=Light)
<div align="center"><img alt="Documentation" src="https://img.shields.io/badge/Wiki-Grasscutter-blue?style=for-the-badge&link=https://github.com/Grasscutters/Grasscutter/wiki&link=https://github.com/Grasscutters/Grasscutter/wiki"> <img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/Grasscutters/Grasscutter?logo=java&style=for-the-badge"> <img alt="GitHub" src="https://img.shields.io/github/license/Grasscutters/Grasscutter?style=for-the-badge"> <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/Grasscutters/Grasscutter?style=for-the-badge"> <img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/Grasscutters/Grasscutter/build.yml?branch=development&logo=github&style=for-the-badge"></div>
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](README.md) | [简中](docs/README_zh-CN.md) | [繁中](docs/README_zh-TW.md) | [FR](docs/README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**ध्यान:** हम हमेशा परियोजना में योगदानकर्ताओं का स्वागत करते हैं।. अपना योगदान जोड़ने से पहले कृपया हमारा ध्यानपूर्वक पढ़ें [आचार संहिता](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
## वर्तमान सुविधाएँ
* लॉग इन करना
* युद्ध
* मित्रों की सूची
* टेलीपोर्टेशन
* गाचा प्रणाली
* सह-ऑप * आंशिक रूप से * काम करता है
* कंसोल के माध्यम से राक्षसों को जन्म देना
* इन्वेंट्री सुविधाएँ (आइटम / वर्ण प्राप्त करना, आइटम / वर्णों को अपग्रेड करना, आदि)
## त्वरित सेटअप गाइड
**टिप्पणी**: समर्थन के लिए कृपया हमसे जुड़ें [Discord](https://discord.gg/T5vZU6UyeG).
### त्वरित प्रारंभ (स्वचालित)
- Get Java 17: https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
**ध्यान दें:** बस **सर्वर शुरू करने** के लिए, आपको बस **jre** की आवश्यकता है।
- Get [MongoDB Community Server](https://www.mongodb.com/try/download/community)
* प्रॉक्सी: मिटमडंप (अनुशंसित), मिटमप्रॉक्सी, फिडलर क्लासिक, आदि।
- गेम संस्करण REL3.7 प्राप्त करें (यदि आपके पास 3.7 क्लाइंट नहीं है तो उसे यहां पाया जा सकता है):: https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/3.7.0.md
- डाउनलोड करें [latest Cultivation version](https://github.com/Grasscutters/Cultivation/releases/latest). उपयोग `.msi` इंस्टालरr.
- कलिवेशन (एडमिन के रूप में) खोलने के बाद, ऊपरी दाएं कोने में डाउनलोड बटन दबाएं।
- `डाउनलोड ऑल-इन-वन` पर क्लिक करें
- ऊपरी दाएं कोने में गियर पर क्लिक करें
- गेम इंस्टॉल पथ को उस स्थान पर सेट करें जहां आपका गेम स्थित है.
- कस्टम जावा पथ को इस पर सेट करें `C:\Program Files\Java\jdk-17\bin\java.exe`
- अन्य सभी सेटिंग्स को डिफ़ॉल्ट पर छोड़ दें
- लॉन्च करने के लिए आगे छोटे बटन पर क्लिक करें.
- लॉन्च बटन पर क्लिक करें.
- आप जो भी उपयोगकर्ता नाम चाहते हैं उसके साथ लॉग इन करें। पासवर्ड कोई मायने नहीं रखता.
### इमारत
ग्रासकटर निर्भरता और निर्माण को संभालने के लिए ग्रैडल का उपयोग करता है।
**आवश्यकताएं:**
- [Java SE Development Kits - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) or higher
- [Git](https://git-scm.com/downloads)
##### विंडोज
```shell
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
.\gradlew.bat # Setting up environments
.\gradlew jar # Compile
```
##### लिनक्स (जीएनयू)
```bash
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
chmod +x gradlew
./gradlew jar # Compile
```
आप आउटपुट जार को प्रोजेक्ट फ़ोल्डर के रूट में पा सकते हैं।.
### समस्या निवारण
सामान्य मुद्दों और समाधानों की सूची और सहायता मांगने के लिए कृपया शामिल हों [our Discord server](https://discord.gg/T5vZU6UyeG) और सपोर्ट चैनल पर जाएं.
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Perhatian:** Kami selalu menyambut kontributor untuk proyek ini. Sebelum menambahkan kontribusi Anda, harap baca [Kode Etik](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md) kami.
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Attenzione:** Diamo sempre il benvenuto ai contributori del progetto. Prima di contribuire, leggi attentamente il nostro [Codice di condotta](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
***:** 私たちはプロジェクトへの貢献者をいつでも歓迎します。貢献を追加する前に、我々の [行動規範](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)をよくお読みください。
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**주의 :** 우리는 항상 프로젝트에 기여하는 사람들을 환영합니다. 기여를 하기 전, [행동 지침](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)을 주의 깊게 읽어주세요.
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Uwaga:** Zawsze jesteśmy otwarci na wasz wkład w projekt. Przed zaproponowaniem zmian przeczytaj [zasady postępowania (ENG)](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Внимание:** Мы всегда рады новому вкладу в проект. Однако, перед тем, как сделать свой вклад, пожалуйста, прочтите наш [кодекс делового поведения](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**Chú ý:** Chúng tôi luôn chào đón những người đóng góp cho dự án. Trước khi đóng góp, xin vui lòng đọc kỹ ["các quy tắc" (Code of Conduct)](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md) của chúng tôi .
+2 -2
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**注意:** 我们始终欢迎项目的贡献者。但在做贡献之前,请仔细阅读我们的[代码规范](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)。
@@ -26,7 +26,7 @@
- 获取Java 17https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
- 获取[MongoDB社区版](https://www.mongodb.com/try/download/community)
- 获取游戏3.7正式版 (如果你没有3.7的客户端,可以在这里找到):https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/3.7.0.md)
- 获取游戏4.0正式版 (如果你没有4.0的客户端,可以在这里找到):https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/4.0.0.md)
- 下载[最新的Cultivation版本](https://github.com/Grasscutters/Cultivation/releases/latest)(使用以“.msi”为后缀的安装包)。
- 以管理员身份打开Culivation,按右上角的下载按钮。
+1 -1
View File
@@ -3,7 +3,7 @@
<div align="center"><a href="https://discord.gg/T5vZU6UyeG"><img alt="Discord - Grasscutter" src="https://img.shields.io/discord/965284035985305680?label=Discord&logo=discord&style=for-the-badge"></a></div>
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md)
[EN](../README.md) | [简中](README_zh-CN.md) | [繁中](README_zh-TW.md) | [FR](README_fr-FR.md) | [ES](README_es-ES.md) | [HE](README_HE.md) | [RU](README_ru-RU.md) | [PL](README_pl-PL.md) | [ID](README_id-ID.md) | [KR](README_ko-KR.md) | [FIL/PH](README_fil-PH.md) | [NL](README_NL.md) | [JP](README_ja-JP.md) | [IT](README_it-IT.md) | [VI](README_vi-VN.md) | [हिंदी](README_hn-IN.md)
**請注意:** 歡迎成為本專案的貢獻者。在提交 PR 之前, 請仔細閱讀[程式碼規範](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)。
@@ -36,21 +36,21 @@ public final class HomePlantSubFieldDataOuterClass {
int getEntityIdList(int index);
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The enum numeric value on the wire for cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The enum numeric value on the wire for status.
*/
int getCAKDDMKAIMDValue();
int getStatusValue();
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The status.
*/
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getCAKDDMKAIMD();
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getStatus();
/**
* <code>uint32 JHFNDBIHLNB = 8;</code>
* @return The jHFNDBIHLNB.
* <code>uint32 seed_id = 8;</code>
* @return The seedId.
*/
int getJHFNDBIHLNB();
int getSeedId();
/**
* <code>fixed32 end_time = 14;</code>
@@ -59,10 +59,10 @@ public final class HomePlantSubFieldDataOuterClass {
int getEndTime();
/**
* <code>uint32 KHFGOPCOAGM = 3;</code>
* @return The kHFGOPCOAGM.
* <code>uint32 gather_point_type = 3;</code>
* @return The gatherPointType.
*/
int getKHFGOPCOAGM();
int getGatherPointType();
}
/**
* <pre>
@@ -82,7 +82,7 @@ public final class HomePlantSubFieldDataOuterClass {
}
private HomePlantSubFieldData() {
entityIdList_ = emptyIntList();
cAKDDMKAIMD_ = 0;
status_ = 0;
}
@java.lang.Override
@@ -118,7 +118,7 @@ public final class HomePlantSubFieldDataOuterClass {
break;
case 24: {
kHFGOPCOAGM_ = input.readUInt32();
gatherPointType_ = input.readUInt32();
break;
}
case 48: {
@@ -145,12 +145,12 @@ public final class HomePlantSubFieldDataOuterClass {
case 56: {
int rawValue = input.readEnum();
cAKDDMKAIMD_ = rawValue;
status_ = rawValue;
break;
}
case 64: {
jHFNDBIHLNB_ = input.readUInt32();
seedId_ = input.readUInt32();
break;
}
case 117: {
@@ -221,34 +221,34 @@ public final class HomePlantSubFieldDataOuterClass {
}
private int entityIdListMemoizedSerializedSize = -1;
public static final int CAKDDMKAIMD_FIELD_NUMBER = 7;
private int cAKDDMKAIMD_;
public static final int STATUS_FIELD_NUMBER = 7;
private int status_;
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The enum numeric value on the wire for cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The enum numeric value on the wire for status.
*/
@java.lang.Override public int getCAKDDMKAIMDValue() {
return cAKDDMKAIMD_;
@java.lang.Override public int getStatusValue() {
return status_;
}
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The status.
*/
@java.lang.Override public emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getCAKDDMKAIMD() {
@java.lang.Override public emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getStatus() {
@SuppressWarnings("deprecation")
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus result = emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.valueOf(cAKDDMKAIMD_);
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus result = emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.valueOf(status_);
return result == null ? emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.UNRECOGNIZED : result;
}
public static final int JHFNDBIHLNB_FIELD_NUMBER = 8;
private int jHFNDBIHLNB_;
public static final int SEED_ID_FIELD_NUMBER = 8;
private int seedId_;
/**
* <code>uint32 JHFNDBIHLNB = 8;</code>
* @return The jHFNDBIHLNB.
* <code>uint32 seed_id = 8;</code>
* @return The seedId.
*/
@java.lang.Override
public int getJHFNDBIHLNB() {
return jHFNDBIHLNB_;
public int getSeedId() {
return seedId_;
}
public static final int END_TIME_FIELD_NUMBER = 14;
@@ -262,15 +262,15 @@ public final class HomePlantSubFieldDataOuterClass {
return endTime_;
}
public static final int KHFGOPCOAGM_FIELD_NUMBER = 3;
private int kHFGOPCOAGM_;
public static final int GATHER_POINT_TYPE_FIELD_NUMBER = 3;
private int gatherPointType_;
/**
* <code>uint32 KHFGOPCOAGM = 3;</code>
* @return The kHFGOPCOAGM.
* <code>uint32 gather_point_type = 3;</code>
* @return The gatherPointType.
*/
@java.lang.Override
public int getKHFGOPCOAGM() {
return kHFGOPCOAGM_;
public int getGatherPointType() {
return gatherPointType_;
}
private byte memoizedIsInitialized = -1;
@@ -288,8 +288,8 @@ public final class HomePlantSubFieldDataOuterClass {
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
getSerializedSize();
if (kHFGOPCOAGM_ != 0) {
output.writeUInt32(3, kHFGOPCOAGM_);
if (gatherPointType_ != 0) {
output.writeUInt32(3, gatherPointType_);
}
if (getEntityIdListList().size() > 0) {
output.writeUInt32NoTag(50);
@@ -298,11 +298,11 @@ public final class HomePlantSubFieldDataOuterClass {
for (int i = 0; i < entityIdList_.size(); i++) {
output.writeUInt32NoTag(entityIdList_.getInt(i));
}
if (cAKDDMKAIMD_ != emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.HOME_FIELD_STATUE_NONE.getNumber()) {
output.writeEnum(7, cAKDDMKAIMD_);
if (status_ != emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.HOME_FIELD_STATUE_NONE.getNumber()) {
output.writeEnum(7, status_);
}
if (jHFNDBIHLNB_ != 0) {
output.writeUInt32(8, jHFNDBIHLNB_);
if (seedId_ != 0) {
output.writeUInt32(8, seedId_);
}
if (endTime_ != 0) {
output.writeFixed32(14, endTime_);
@@ -316,9 +316,9 @@ public final class HomePlantSubFieldDataOuterClass {
if (size != -1) return size;
size = 0;
if (kHFGOPCOAGM_ != 0) {
if (gatherPointType_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(3, kHFGOPCOAGM_);
.computeUInt32Size(3, gatherPointType_);
}
{
int dataSize = 0;
@@ -334,13 +334,13 @@ public final class HomePlantSubFieldDataOuterClass {
}
entityIdListMemoizedSerializedSize = dataSize;
}
if (cAKDDMKAIMD_ != emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.HOME_FIELD_STATUE_NONE.getNumber()) {
if (status_ != emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.HOME_FIELD_STATUE_NONE.getNumber()) {
size += com.google.protobuf.CodedOutputStream
.computeEnumSize(7, cAKDDMKAIMD_);
.computeEnumSize(7, status_);
}
if (jHFNDBIHLNB_ != 0) {
if (seedId_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(8, jHFNDBIHLNB_);
.computeUInt32Size(8, seedId_);
}
if (endTime_ != 0) {
size += com.google.protobuf.CodedOutputStream
@@ -363,13 +363,13 @@ public final class HomePlantSubFieldDataOuterClass {
if (!getEntityIdListList()
.equals(other.getEntityIdListList())) return false;
if (cAKDDMKAIMD_ != other.cAKDDMKAIMD_) return false;
if (getJHFNDBIHLNB()
!= other.getJHFNDBIHLNB()) return false;
if (status_ != other.status_) return false;
if (getSeedId()
!= other.getSeedId()) return false;
if (getEndTime()
!= other.getEndTime()) return false;
if (getKHFGOPCOAGM()
!= other.getKHFGOPCOAGM()) return false;
if (getGatherPointType()
!= other.getGatherPointType()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@@ -385,14 +385,14 @@ public final class HomePlantSubFieldDataOuterClass {
hash = (37 * hash) + ENTITY_ID_LIST_FIELD_NUMBER;
hash = (53 * hash) + getEntityIdListList().hashCode();
}
hash = (37 * hash) + CAKDDMKAIMD_FIELD_NUMBER;
hash = (53 * hash) + cAKDDMKAIMD_;
hash = (37 * hash) + JHFNDBIHLNB_FIELD_NUMBER;
hash = (53 * hash) + getJHFNDBIHLNB();
hash = (37 * hash) + STATUS_FIELD_NUMBER;
hash = (53 * hash) + status_;
hash = (37 * hash) + SEED_ID_FIELD_NUMBER;
hash = (53 * hash) + getSeedId();
hash = (37 * hash) + END_TIME_FIELD_NUMBER;
hash = (53 * hash) + getEndTime();
hash = (37 * hash) + KHFGOPCOAGM_FIELD_NUMBER;
hash = (53 * hash) + getKHFGOPCOAGM();
hash = (37 * hash) + GATHER_POINT_TYPE_FIELD_NUMBER;
hash = (53 * hash) + getGatherPointType();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
@@ -532,13 +532,13 @@ public final class HomePlantSubFieldDataOuterClass {
super.clear();
entityIdList_ = emptyIntList();
bitField0_ = (bitField0_ & ~0x00000001);
cAKDDMKAIMD_ = 0;
status_ = 0;
jHFNDBIHLNB_ = 0;
seedId_ = 0;
endTime_ = 0;
kHFGOPCOAGM_ = 0;
gatherPointType_ = 0;
return this;
}
@@ -572,10 +572,10 @@ public final class HomePlantSubFieldDataOuterClass {
bitField0_ = (bitField0_ & ~0x00000001);
}
result.entityIdList_ = entityIdList_;
result.cAKDDMKAIMD_ = cAKDDMKAIMD_;
result.jHFNDBIHLNB_ = jHFNDBIHLNB_;
result.status_ = status_;
result.seedId_ = seedId_;
result.endTime_ = endTime_;
result.kHFGOPCOAGM_ = kHFGOPCOAGM_;
result.gatherPointType_ = gatherPointType_;
onBuilt();
return result;
}
@@ -634,17 +634,17 @@ public final class HomePlantSubFieldDataOuterClass {
}
onChanged();
}
if (other.cAKDDMKAIMD_ != 0) {
setCAKDDMKAIMDValue(other.getCAKDDMKAIMDValue());
if (other.status_ != 0) {
setStatusValue(other.getStatusValue());
}
if (other.getJHFNDBIHLNB() != 0) {
setJHFNDBIHLNB(other.getJHFNDBIHLNB());
if (other.getSeedId() != 0) {
setSeedId(other.getSeedId());
}
if (other.getEndTime() != 0) {
setEndTime(other.getEndTime());
}
if (other.getKHFGOPCOAGM() != 0) {
setKHFGOPCOAGM(other.getKHFGOPCOAGM());
if (other.getGatherPointType() != 0) {
setGatherPointType(other.getGatherPointType());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
@@ -755,87 +755,87 @@ public final class HomePlantSubFieldDataOuterClass {
return this;
}
private int cAKDDMKAIMD_ = 0;
private int status_ = 0;
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The enum numeric value on the wire for cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The enum numeric value on the wire for status.
*/
@java.lang.Override public int getCAKDDMKAIMDValue() {
return cAKDDMKAIMD_;
@java.lang.Override public int getStatusValue() {
return status_;
}
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @param value The enum numeric value on the wire for cAKDDMKAIMD to set.
* <code>.HomePlantFieldStatus status = 7;</code>
* @param value The enum numeric value on the wire for status to set.
* @return This builder for chaining.
*/
public Builder setCAKDDMKAIMDValue(int value) {
public Builder setStatusValue(int value) {
cAKDDMKAIMD_ = value;
status_ = value;
onChanged();
return this;
}
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @return The cAKDDMKAIMD.
* <code>.HomePlantFieldStatus status = 7;</code>
* @return The status.
*/
@java.lang.Override
public emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getCAKDDMKAIMD() {
public emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus getStatus() {
@SuppressWarnings("deprecation")
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus result = emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.valueOf(cAKDDMKAIMD_);
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus result = emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.valueOf(status_);
return result == null ? emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus.UNRECOGNIZED : result;
}
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* @param value The cAKDDMKAIMD to set.
* <code>.HomePlantFieldStatus status = 7;</code>
* @param value The status to set.
* @return This builder for chaining.
*/
public Builder setCAKDDMKAIMD(emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus value) {
public Builder setStatus(emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.HomePlantFieldStatus value) {
if (value == null) {
throw new NullPointerException();
}
cAKDDMKAIMD_ = value.getNumber();
status_ = value.getNumber();
onChanged();
return this;
}
/**
* <code>.HomePlantFieldStatus CAKDDMKAIMD = 7;</code>
* <code>.HomePlantFieldStatus status = 7;</code>
* @return This builder for chaining.
*/
public Builder clearCAKDDMKAIMD() {
public Builder clearStatus() {
cAKDDMKAIMD_ = 0;
status_ = 0;
onChanged();
return this;
}
private int jHFNDBIHLNB_ ;
private int seedId_ ;
/**
* <code>uint32 JHFNDBIHLNB = 8;</code>
* @return The jHFNDBIHLNB.
* <code>uint32 seed_id = 8;</code>
* @return The seedId.
*/
@java.lang.Override
public int getJHFNDBIHLNB() {
return jHFNDBIHLNB_;
public int getSeedId() {
return seedId_;
}
/**
* <code>uint32 JHFNDBIHLNB = 8;</code>
* @param value The jHFNDBIHLNB to set.
* <code>uint32 seed_id = 8;</code>
* @param value The seedId to set.
* @return This builder for chaining.
*/
public Builder setJHFNDBIHLNB(int value) {
public Builder setSeedId(int value) {
jHFNDBIHLNB_ = value;
seedId_ = value;
onChanged();
return this;
}
/**
* <code>uint32 JHFNDBIHLNB = 8;</code>
* <code>uint32 seed_id = 8;</code>
* @return This builder for chaining.
*/
public Builder clearJHFNDBIHLNB() {
public Builder clearSeedId() {
jHFNDBIHLNB_ = 0;
seedId_ = 0;
onChanged();
return this;
}
@@ -871,33 +871,33 @@ public final class HomePlantSubFieldDataOuterClass {
return this;
}
private int kHFGOPCOAGM_ ;
private int gatherPointType_ ;
/**
* <code>uint32 KHFGOPCOAGM = 3;</code>
* @return The kHFGOPCOAGM.
* <code>uint32 gather_point_type = 3;</code>
* @return The gatherPointType.
*/
@java.lang.Override
public int getKHFGOPCOAGM() {
return kHFGOPCOAGM_;
public int getGatherPointType() {
return gatherPointType_;
}
/**
* <code>uint32 KHFGOPCOAGM = 3;</code>
* @param value The kHFGOPCOAGM to set.
* <code>uint32 gather_point_type = 3;</code>
* @param value The gatherPointType to set.
* @return This builder for chaining.
*/
public Builder setKHFGOPCOAGM(int value) {
public Builder setGatherPointType(int value) {
kHFGOPCOAGM_ = value;
gatherPointType_ = value;
onChanged();
return this;
}
/**
* <code>uint32 KHFGOPCOAGM = 3;</code>
* <code>uint32 gather_point_type = 3;</code>
* @return This builder for chaining.
*/
public Builder clearKHFGOPCOAGM() {
public Builder clearGatherPointType() {
kHFGOPCOAGM_ = 0;
gatherPointType_ = 0;
onChanged();
return this;
}
@@ -969,12 +969,12 @@ public final class HomePlantSubFieldDataOuterClass {
static {
java.lang.String[] descriptorData = {
"\n\033HomePlantSubFieldData.proto\032\032HomePlant" +
"FieldStatus.proto\"\227\001\n\025HomePlantSubFieldD" +
"ata\022\026\n\016entity_id_list\030\006 \003(\r\022*\n\013CAKDDMKAI" +
"MD\030\007 \001(\0162\025.HomePlantFieldStatus\022\023\n\013JHFND" +
"BIHLNB\030\010 \001(\r\022\020\n\010end_time\030\016 \001(\007\022\023\n\013KHFGOP" +
"COAGM\030\003 \001(\rB\033\n\031emu.grasscutter.net.proto" +
"b\006proto3"
"FieldStatus.proto\"\224\001\n\025HomePlantSubFieldD" +
"ata\022\026\n\016entity_id_list\030\006 \003(\r\022%\n\006status\030\007 " +
"\001(\0162\025.HomePlantFieldStatus\022\017\n\007seed_id\030\010 " +
"\001(\r\022\020\n\010end_time\030\016 \001(\007\022\031\n\021gather_point_ty" +
"pe\030\003 \001(\rB\033\n\031emu.grasscutter.net.protob\006p" +
"roto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
@@ -986,7 +986,7 @@ public final class HomePlantSubFieldDataOuterClass {
internal_static_HomePlantSubFieldData_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_HomePlantSubFieldData_descriptor,
new java.lang.String[] { "EntityIdList", "CAKDDMKAIMD", "JHFNDBIHLNB", "EndTime", "KHFGOPCOAGM", });
new java.lang.String[] { "EntityIdList", "Status", "SeedId", "EndTime", "GatherPointType", });
emu.grasscutter.net.proto.HomePlantFieldStatusOuterClass.getDescriptor();
}
@@ -25,10 +25,10 @@ public final class HomeTransferReqOuterClass {
int getGuid();
/**
* <code>bool JFEOCNJLCLG = 5;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 5;</code>
* @return The isTransferToMainHousePoint.
*/
boolean getJFEOCNJLCLG();
boolean getIsTransferToMainHousePoint();
/**
* <code>bool is_transfer_to_safe_point = 3;</code>
@@ -93,7 +93,7 @@ public final class HomeTransferReqOuterClass {
}
case 40: {
jFEOCNJLCLG_ = input.readBool();
isTransferToMainHousePoint_ = input.readBool();
break;
}
case 96: {
@@ -144,15 +144,15 @@ public final class HomeTransferReqOuterClass {
return guid_;
}
public static final int JFEOCNJLCLG_FIELD_NUMBER = 5;
private boolean jFEOCNJLCLG_;
public static final int IS_TRANSFER_TO_MAIN_HOUSE_POINT_FIELD_NUMBER = 5;
private boolean isTransferToMainHousePoint_;
/**
* <code>bool JFEOCNJLCLG = 5;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 5;</code>
* @return The isTransferToMainHousePoint.
*/
@java.lang.Override
public boolean getJFEOCNJLCLG() {
return jFEOCNJLCLG_;
public boolean getIsTransferToMainHousePoint() {
return isTransferToMainHousePoint_;
}
public static final int IS_TRANSFER_TO_SAFE_POINT_FIELD_NUMBER = 3;
@@ -183,8 +183,8 @@ public final class HomeTransferReqOuterClass {
if (isTransferToSafePoint_ != false) {
output.writeBool(3, isTransferToSafePoint_);
}
if (jFEOCNJLCLG_ != false) {
output.writeBool(5, jFEOCNJLCLG_);
if (isTransferToMainHousePoint_ != false) {
output.writeBool(5, isTransferToMainHousePoint_);
}
if (guid_ != 0) {
output.writeUInt32(12, guid_);
@@ -202,9 +202,9 @@ public final class HomeTransferReqOuterClass {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(3, isTransferToSafePoint_);
}
if (jFEOCNJLCLG_ != false) {
if (isTransferToMainHousePoint_ != false) {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(5, jFEOCNJLCLG_);
.computeBoolSize(5, isTransferToMainHousePoint_);
}
if (guid_ != 0) {
size += com.google.protobuf.CodedOutputStream
@@ -227,8 +227,8 @@ public final class HomeTransferReqOuterClass {
if (getGuid()
!= other.getGuid()) return false;
if (getJFEOCNJLCLG()
!= other.getJFEOCNJLCLG()) return false;
if (getIsTransferToMainHousePoint()
!= other.getIsTransferToMainHousePoint()) return false;
if (getIsTransferToSafePoint()
!= other.getIsTransferToSafePoint()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
@@ -244,9 +244,9 @@ public final class HomeTransferReqOuterClass {
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + GUID_FIELD_NUMBER;
hash = (53 * hash) + getGuid();
hash = (37 * hash) + JFEOCNJLCLG_FIELD_NUMBER;
hash = (37 * hash) + IS_TRANSFER_TO_MAIN_HOUSE_POINT_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
getJFEOCNJLCLG());
getIsTransferToMainHousePoint());
hash = (37 * hash) + IS_TRANSFER_TO_SAFE_POINT_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
getIsTransferToSafePoint());
@@ -390,7 +390,7 @@ public final class HomeTransferReqOuterClass {
super.clear();
guid_ = 0;
jFEOCNJLCLG_ = false;
isTransferToMainHousePoint_ = false;
isTransferToSafePoint_ = false;
@@ -421,7 +421,7 @@ public final class HomeTransferReqOuterClass {
public emu.grasscutter.net.proto.HomeTransferReqOuterClass.HomeTransferReq buildPartial() {
emu.grasscutter.net.proto.HomeTransferReqOuterClass.HomeTransferReq result = new emu.grasscutter.net.proto.HomeTransferReqOuterClass.HomeTransferReq(this);
result.guid_ = guid_;
result.jFEOCNJLCLG_ = jFEOCNJLCLG_;
result.isTransferToMainHousePoint_ = isTransferToMainHousePoint_;
result.isTransferToSafePoint_ = isTransferToSafePoint_;
onBuilt();
return result;
@@ -474,8 +474,8 @@ public final class HomeTransferReqOuterClass {
if (other.getGuid() != 0) {
setGuid(other.getGuid());
}
if (other.getJFEOCNJLCLG() != false) {
setJFEOCNJLCLG(other.getJFEOCNJLCLG());
if (other.getIsTransferToMainHousePoint() != false) {
setIsTransferToMainHousePoint(other.getIsTransferToMainHousePoint());
}
if (other.getIsTransferToSafePoint() != false) {
setIsTransferToSafePoint(other.getIsTransferToSafePoint());
@@ -540,33 +540,33 @@ public final class HomeTransferReqOuterClass {
return this;
}
private boolean jFEOCNJLCLG_ ;
private boolean isTransferToMainHousePoint_ ;
/**
* <code>bool JFEOCNJLCLG = 5;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 5;</code>
* @return The isTransferToMainHousePoint.
*/
@java.lang.Override
public boolean getJFEOCNJLCLG() {
return jFEOCNJLCLG_;
public boolean getIsTransferToMainHousePoint() {
return isTransferToMainHousePoint_;
}
/**
* <code>bool JFEOCNJLCLG = 5;</code>
* @param value The jFEOCNJLCLG to set.
* <code>bool is_transfer_to_main_house_point = 5;</code>
* @param value The isTransferToMainHousePoint to set.
* @return This builder for chaining.
*/
public Builder setJFEOCNJLCLG(boolean value) {
public Builder setIsTransferToMainHousePoint(boolean value) {
jFEOCNJLCLG_ = value;
isTransferToMainHousePoint_ = value;
onChanged();
return this;
}
/**
* <code>bool JFEOCNJLCLG = 5;</code>
* <code>bool is_transfer_to_main_house_point = 5;</code>
* @return This builder for chaining.
*/
public Builder clearJFEOCNJLCLG() {
public Builder clearIsTransferToMainHousePoint() {
jFEOCNJLCLG_ = false;
isTransferToMainHousePoint_ = false;
onChanged();
return this;
}
@@ -668,10 +668,11 @@ public final class HomeTransferReqOuterClass {
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\025HomeTransferReq.proto\"W\n\017HomeTransferR" +
"eq\022\014\n\004guid\030\014 \001(\r\022\023\n\013JFEOCNJLCLG\030\005 \001(\010\022!\n" +
"\031is_transfer_to_safe_point\030\003 \001(\010B\033\n\031emu." +
"grasscutter.net.protob\006proto3"
"\n\025HomeTransferReq.proto\"k\n\017HomeTransferR" +
"eq\022\014\n\004guid\030\014 \001(\r\022\'\n\037is_transfer_to_main_" +
"house_point\030\005 \001(\010\022!\n\031is_transfer_to_safe" +
"_point\030\003 \001(\010B\033\n\031emu.grasscutter.net.prot" +
"ob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
@@ -682,7 +683,7 @@ public final class HomeTransferReqOuterClass {
internal_static_HomeTransferReq_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_HomeTransferReq_descriptor,
new java.lang.String[] { "Guid", "JFEOCNJLCLG", "IsTransferToSafePoint", });
new java.lang.String[] { "Guid", "IsTransferToMainHousePoint", "IsTransferToSafePoint", });
}
// @@protoc_insertion_point(outer_class_scope)
@@ -37,10 +37,10 @@ public final class TryEnterHomeReqOuterClass {
int getTargetPoint();
/**
* <code>bool JFEOCNJLCLG = 12;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 12;</code>
* @return The isTransferToMainHousePoint.
*/
boolean getJFEOCNJLCLG();
boolean getIsTransferToMainHousePoint();
}
/**
* <pre>
@@ -109,7 +109,7 @@ public final class TryEnterHomeReqOuterClass {
}
case 96: {
jFEOCNJLCLG_ = input.readBool();
isTransferToMainHousePoint_ = input.readBool();
break;
}
default: {
@@ -177,15 +177,15 @@ public final class TryEnterHomeReqOuterClass {
return targetPoint_;
}
public static final int JFEOCNJLCLG_FIELD_NUMBER = 12;
private boolean jFEOCNJLCLG_;
public static final int IS_TRANSFER_TO_MAIN_HOUSE_POINT_FIELD_NUMBER = 12;
private boolean isTransferToMainHousePoint_;
/**
* <code>bool JFEOCNJLCLG = 12;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 12;</code>
* @return The isTransferToMainHousePoint.
*/
@java.lang.Override
public boolean getJFEOCNJLCLG() {
return jFEOCNJLCLG_;
public boolean getIsTransferToMainHousePoint() {
return isTransferToMainHousePoint_;
}
private byte memoizedIsInitialized = -1;
@@ -211,8 +211,8 @@ public final class TryEnterHomeReqOuterClass {
if (isTransferToSafePoint_ != false) {
output.writeBool(9, isTransferToSafePoint_);
}
if (jFEOCNJLCLG_ != false) {
output.writeBool(12, jFEOCNJLCLG_);
if (isTransferToMainHousePoint_ != false) {
output.writeBool(12, isTransferToMainHousePoint_);
}
unknownFields.writeTo(output);
}
@@ -235,9 +235,9 @@ public final class TryEnterHomeReqOuterClass {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(9, isTransferToSafePoint_);
}
if (jFEOCNJLCLG_ != false) {
if (isTransferToMainHousePoint_ != false) {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(12, jFEOCNJLCLG_);
.computeBoolSize(12, isTransferToMainHousePoint_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
@@ -260,8 +260,8 @@ public final class TryEnterHomeReqOuterClass {
!= other.getIsTransferToSafePoint()) return false;
if (getTargetPoint()
!= other.getTargetPoint()) return false;
if (getJFEOCNJLCLG()
!= other.getJFEOCNJLCLG()) return false;
if (getIsTransferToMainHousePoint()
!= other.getIsTransferToMainHousePoint()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@@ -280,9 +280,9 @@ public final class TryEnterHomeReqOuterClass {
getIsTransferToSafePoint());
hash = (37 * hash) + TARGET_POINT_FIELD_NUMBER;
hash = (53 * hash) + getTargetPoint();
hash = (37 * hash) + JFEOCNJLCLG_FIELD_NUMBER;
hash = (37 * hash) + IS_TRANSFER_TO_MAIN_HOUSE_POINT_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
getJFEOCNJLCLG());
getIsTransferToMainHousePoint());
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
@@ -427,7 +427,7 @@ public final class TryEnterHomeReqOuterClass {
targetPoint_ = 0;
jFEOCNJLCLG_ = false;
isTransferToMainHousePoint_ = false;
return this;
}
@@ -458,7 +458,7 @@ public final class TryEnterHomeReqOuterClass {
result.targetUid_ = targetUid_;
result.isTransferToSafePoint_ = isTransferToSafePoint_;
result.targetPoint_ = targetPoint_;
result.jFEOCNJLCLG_ = jFEOCNJLCLG_;
result.isTransferToMainHousePoint_ = isTransferToMainHousePoint_;
onBuilt();
return result;
}
@@ -516,8 +516,8 @@ public final class TryEnterHomeReqOuterClass {
if (other.getTargetPoint() != 0) {
setTargetPoint(other.getTargetPoint());
}
if (other.getJFEOCNJLCLG() != false) {
setJFEOCNJLCLG(other.getJFEOCNJLCLG());
if (other.getIsTransferToMainHousePoint() != false) {
setIsTransferToMainHousePoint(other.getIsTransferToMainHousePoint());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
@@ -641,33 +641,33 @@ public final class TryEnterHomeReqOuterClass {
return this;
}
private boolean jFEOCNJLCLG_ ;
private boolean isTransferToMainHousePoint_ ;
/**
* <code>bool JFEOCNJLCLG = 12;</code>
* @return The jFEOCNJLCLG.
* <code>bool is_transfer_to_main_house_point = 12;</code>
* @return The isTransferToMainHousePoint.
*/
@java.lang.Override
public boolean getJFEOCNJLCLG() {
return jFEOCNJLCLG_;
public boolean getIsTransferToMainHousePoint() {
return isTransferToMainHousePoint_;
}
/**
* <code>bool JFEOCNJLCLG = 12;</code>
* @param value The jFEOCNJLCLG to set.
* <code>bool is_transfer_to_main_house_point = 12;</code>
* @param value The isTransferToMainHousePoint to set.
* @return This builder for chaining.
*/
public Builder setJFEOCNJLCLG(boolean value) {
public Builder setIsTransferToMainHousePoint(boolean value) {
jFEOCNJLCLG_ = value;
isTransferToMainHousePoint_ = value;
onChanged();
return this;
}
/**
* <code>bool JFEOCNJLCLG = 12;</code>
* <code>bool is_transfer_to_main_house_point = 12;</code>
* @return This builder for chaining.
*/
public Builder clearJFEOCNJLCLG() {
public Builder clearIsTransferToMainHousePoint() {
jFEOCNJLCLG_ = false;
isTransferToMainHousePoint_ = false;
onChanged();
return this;
}
@@ -738,11 +738,11 @@ public final class TryEnterHomeReqOuterClass {
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\025TryEnterHomeReq.proto\"s\n\017TryEnterHomeR" +
"eq\022\022\n\ntarget_uid\030\004 \001(\r\022!\n\031is_transfer_to" +
"_safe_point\030\t \001(\010\022\024\n\014target_point\030\005 \001(\r\022" +
"\023\n\013JFEOCNJLCLG\030\014 \001(\010B\033\n\031emu.grasscutter." +
"net.protob\006proto3"
"\n\025TryEnterHomeReq.proto\"\207\001\n\017TryEnterHome" +
"Req\022\022\n\ntarget_uid\030\004 \001(\r\022!\n\031is_transfer_t" +
"o_safe_point\030\t \001(\010\022\024\n\014target_point\030\005 \001(\r" +
"\022\'\n\037is_transfer_to_main_house_point\030\014 \001(" +
"\010B\033\n\031emu.grasscutter.net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
@@ -753,7 +753,7 @@ public final class TryEnterHomeReqOuterClass {
internal_static_TryEnterHomeReq_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_TryEnterHomeReq_descriptor,
new java.lang.String[] { "TargetUid", "IsTransferToSafePoint", "TargetPoint", "JFEOCNJLCLG", });
new java.lang.String[] { "TargetUid", "IsTransferToSafePoint", "TargetPoint", "IsTransferToMainHousePoint", });
}
// @@protoc_insertion_point(outer_class_scope)
+25 -1
View File
@@ -1,8 +1,32 @@
# Handbook Data
Use Grasscutter's dumpers to generate the data to put here.
# Generating Data
When you have Grasscutter set up, you can use the following commands to generate the data:
- Commands - `grasscutter.jar -dump=commands,en-us`
- Items - `grasscutter.jar -dump=items,EN`
- Avatars - `grasscutter.jar -dump=avatars,EN`
- Quests - `grasscutter.jar -dump=quests,EN`
- Entities - `grasscutter.jar -dump=entities,en-us`
- Areas - `grasscutter.jar -dump=areas,EN`
- Scenes - `grasscutter.jar -dump=scenes,en-us`
Grasscutter being "set up" means:
- A Java runtime is installed
- Resources are provided in the working directory
## Language Locales
You can replace `en-us` or `EN` using the language locale which matches the format.
| Grasscutter Language Locale | Handbook Language Locale |
|-----------------------------|--------------------------|
| en-us | EN |
## Files Required
- `mainquests.csv'
- `mainquests.csv`
- `commands.json`
- `entities.csv`
- `avatars.csv`
@@ -182,12 +182,18 @@ public final class Grasscutter {
// Hook into shutdown event.
Runtime.getRuntime().addShutdownHook(new Thread(Grasscutter::onShutdown));
// Start database heartbeat.
Database.startSaveThread();
// Open console.
Grasscutter.startConsole();
}
/** Server shutdown event. */
private static void onShutdown() {
// Save all data.
Database.saveAll();
// Disable all plugins.
if (pluginManager != null) pluginManager.disablePlugins();
// Shutdown the game server.
@@ -197,25 +203,21 @@ public final class Grasscutter {
// Wait for Grasscutter's thread pool to finish.
var executor = Grasscutter.getThreadPool();
executor.shutdown();
if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
if (!executor.awaitTermination(1, TimeUnit.MINUTES)) {
executor.shutdownNow();
}
// Wait for database operations to finish.
var dbExecutor = DatabaseHelper.getEventExecutor();
dbExecutor.shutdown();
if (!dbExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
if (!dbExecutor.awaitTermination(2, TimeUnit.MINUTES)) {
dbExecutor.shutdownNow();
}
} catch (InterruptedException ignored) {
}
}
/**
* Utility method for starting the:
* - SDK server
* - Dispatch server
*/
/** Utility method for starting the: - SDK server - Dispatch server */
public static void startDispatch() throws Exception {
httpServer.start(); // Start the SDK/HTTP server.
@@ -4,9 +4,8 @@ import emu.grasscutter.game.Account;
import emu.grasscutter.server.http.objects.*;
import emu.grasscutter.utils.DispatchUtils;
import io.javalin.http.Context;
import lombok.*;
import javax.annotation.Nullable;
import lombok.*;
/** Defines an authenticator for the server. Can be changed by plugins. */
public interface AuthenticationSystem {
@@ -1,13 +1,13 @@
package emu.grasscutter.auth;
import static emu.grasscutter.config.Configuration.ACCOUNT;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.auth.DefaultAuthenticators.*;
import emu.grasscutter.game.Account;
import emu.grasscutter.server.http.objects.*;
import static emu.grasscutter.config.Configuration.ACCOUNT;
import static emu.grasscutter.utils.lang.Language.translate;
/**
* The default Grasscutter authentication implementation. Allows all users to access any account.
*/
@@ -1,5 +1,8 @@
package emu.grasscutter.auth;
import static emu.grasscutter.config.Configuration.ACCOUNT;
import static emu.grasscutter.utils.lang.Language.translate;
import at.favre.lib.crypto.bcrypt.BCrypt;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerRunMode;
@@ -10,16 +13,12 @@ import emu.grasscutter.server.dispatch.*;
import emu.grasscutter.server.http.objects.*;
import emu.grasscutter.utils.*;
import io.javalin.http.ContentType;
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.concurrent.*;
import static emu.grasscutter.config.Configuration.ACCOUNT;
import static emu.grasscutter.utils.lang.Language.translate;
import javax.crypto.Cipher;
/** A class containing default authenticators. */
public final class DefaultAuthenticators {
@@ -1,13 +1,12 @@
package emu.grasscutter.command;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.game.ReceiveCommandFeedbackEvent;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
public interface CommandHandler {
/**
@@ -1,9 +1,9 @@
package emu.grasscutter.command;
import javax.annotation.Nonnull;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.*;
import javax.annotation.Nonnull;
public class CommandHelpers {
public static final Pattern lvlRegex =
@@ -1,15 +1,14 @@
package emu.grasscutter.command;
import static emu.grasscutter.config.Configuration.SERVER;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.game.ExecuteCommandEvent;
import it.unimi.dsi.fastutil.objects.*;
import org.reflections.Reflections;
import java.util.*;
import static emu.grasscutter.config.Configuration.SERVER;
import org.reflections.Reflections;
@SuppressWarnings({"UnusedReturnValue", "unused"})
public final class CommandMap {
@@ -1,5 +1,7 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import at.favre.lib.crypto.bcrypt.BCrypt;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
@@ -7,12 +9,9 @@ import emu.grasscutter.config.Configuration;
import emu.grasscutter.database.*;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import java.util.List;
import java.util.stream.Collectors;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "account",
usage = {
@@ -5,7 +5,6 @@ import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.achievement.AchievementData;
import emu.grasscutter.game.achievement.*;
import emu.grasscutter.game.player.Player;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketServerAnnounceNotify;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "announce",
usage = {"<content>", "refresh", "(tpl|revoke) <templateId>"},
@@ -4,7 +4,6 @@ import emu.grasscutter.command.*;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.game.GameSession;
import java.util.List;
@Command(
@@ -1,16 +1,15 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.command.CommandHelpers.*;
import emu.grasscutter.command.*;
import emu.grasscutter.game.inventory.*;
import emu.grasscutter.game.player.Player;
import lombok.Setter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import static emu.grasscutter.command.CommandHelpers.*;
import lombok.Setter;
@Command(
label = "clear",
@@ -3,7 +3,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
@Command(
@@ -3,9 +3,8 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketCutsceneBeginNotify;
import lombok.val;
import java.util.List;
import lombok.val;
@Command(
label = "cutscene",
@@ -3,7 +3,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
@Command(
@@ -1,12 +1,11 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "enter_dungeon",
aliases = {"enterdungeon", "dungeon"},
@@ -34,7 +33,7 @@ public final class EnterDungeonCommand implements CommandHandler {
targetPlayer
.getServer()
.getDungeonSystem()
.enterDungeon(targetPlayer.getSession().getPlayer(), 0, dungeonId);
.enterDungeon(targetPlayer.getSession().getPlayer(), 0, dungeonId, true);
if (!result) {
CommandHandler.sendMessage(
@@ -1,5 +1,8 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.command.CommandHelpers.*;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.player.Player;
@@ -7,14 +10,10 @@ import emu.grasscutter.game.props.*;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.server.event.entity.EntityDamageEvent;
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
import lombok.Setter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static emu.grasscutter.command.CommandHelpers.*;
import static emu.grasscutter.utils.lang.Language.translate;
import lombok.Setter;
@Command(
label = "entity",
@@ -1,5 +1,8 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.GameConstants.*;
import static emu.grasscutter.command.CommandHelpers.*;
import emu.grasscutter.command.*;
import emu.grasscutter.data.*;
import emu.grasscutter.data.excels.ItemData;
@@ -9,14 +12,10 @@ import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.inventory.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.*;
import lombok.Setter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static emu.grasscutter.GameConstants.*;
import static emu.grasscutter.command.CommandHelpers.*;
import lombok.Setter;
@Command(
label = "give",
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.SceneGroupInstance;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "group",
aliases = {"gr"},
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.server.packet.send.*;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "heal",
aliases = {"h"},
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "help",
usage = {"[<command>]"},
@@ -50,8 +50,8 @@ public final class InfoCommand implements CommandHandler {
Player Count: %d
Questing Enabled: %s
Scripts Enabled: %s
Operating System: %s
Using Fast Require: %s
Operating System: %s
Resource Information: %s
discord.gg/T5vZU6UyeG"""
@@ -2,7 +2,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
@Command(
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.Scene;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "killall",
usage = {"[<sceneId>]"},
@@ -1,15 +1,14 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.*;
import emu.grasscutter.server.packet.send.*;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "killCharacter",
aliases = {"suicide", "kill"},
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.utils.Utils;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "language",
usage = {"[<language code>]"},
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "list",
aliases = {"players"},
@@ -1,15 +1,14 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.command.Command.TargetRequirement;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "permission",
usage = {"add <permission>", "remove <permission>", "clear", "list"},
@@ -3,7 +3,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.Position;
import java.util.List;
@Command(
@@ -1,15 +1,14 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.enums.*;
import java.util.*;
import java.util.stream.Collectors;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "quest",
aliases = {"q"},
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "reload",
permission = "server.reload",
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "resetConst",
aliases = {"resetconstellation"},
@@ -1,12 +1,11 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "resetShopLimit",
aliases = {"resetshop"},
@@ -1,15 +1,14 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.mail.Mail;
import emu.grasscutter.game.player.Player;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@SuppressWarnings("ConstantConditions")
@Command(
label = "sendMail",
@@ -4,7 +4,6 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.command.Command.TargetRequirement;
import emu.grasscutter.game.player.Player;
import java.util.List;
@Command(
@@ -6,7 +6,6 @@ import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.*;
import emu.grasscutter.server.packet.send.PacketSceneEntityAppearNotify;
import java.util.List;
@Command(
@@ -1,15 +1,14 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketAvatarFetterDataNotify;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "setFetterLevel",
usage = {"<level>"},
@@ -6,7 +6,6 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.tower.TowerLevelRecord;
import emu.grasscutter.server.packet.send.*;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.IntStream;
@@ -0,0 +1,105 @@
package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.scene.SceneTagData;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.*;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.*;
import lombok.val;
@Command(
label = "setSceneTag",
aliases = {"tag"},
usage = {"<add|remove|unlockall> <sceneTagId>"},
permission = "player.setscenetag",
permissionTargeted = "player.setscenetag.others")
public final class SetSceneTagCommand implements CommandHandler {
private final Int2ObjectMap<SceneTagData> sceneTagData = GameData.getSceneTagDataMap();
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
if (args.size() == 0) {
sendUsageMessage(sender);
return;
}
val actionStr = args.get(0).toLowerCase();
var value = -1;
if (args.size() > 1) {
try {
value = Integer.parseInt(args.get(1));
} catch (NumberFormatException ignored) {
CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error");
return;
}
} else {
if (actionStr.equals("unlockall")) {
unlockAllSceneTags(targetPlayer);
return;
} else {
CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error");
return;
}
}
val userVal = value;
var sceneData =
sceneTagData.values().stream().filter(sceneTag -> sceneTag.getId() == userVal).findFirst();
if (sceneData == null) {
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.id");
return;
}
int scene = sceneData.get().getSceneId();
switch (actionStr) {
case "add", "set" -> addSceneTag(targetPlayer, scene, value);
case "remove", "del" -> removeSceneTag(targetPlayer, scene, value);
default -> CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error");
}
CommandHandler.sendTranslatedMessage(sender, "commands.generic.set_to", value, actionStr);
}
private void addSceneTag(Player targetPlayer, int scene, int value) {
targetPlayer.getProgressManager().addSceneTag(scene, value);
}
private void removeSceneTag(Player targetPlayer, int scene, int value) {
targetPlayer.getProgressManager().delSceneTag(scene, value);
}
private void unlockAllSceneTags(Player targetPlayer) {
var allData = sceneTagData.values();
// Add all SceneTags
allData.stream()
.toList()
.forEach(
sceneTag -> {
if (targetPlayer.getSceneTags().get(sceneTag.getSceneId()) == null) {
targetPlayer.getSceneTags().put(sceneTag.getSceneId(), new HashSet<>());
}
targetPlayer.getSceneTags().get(sceneTag.getSceneId()).add(sceneTag.getId());
});
// Remove default SceneTags, as most are "before" or "locked" states
allData.stream()
.filter(sceneTag -> sceneTag.isDefaultValid())
// Only remove for big world as some other scenes only have defaults
.filter(sceneTag -> sceneTag.getSceneId() == 3)
.forEach(
sceneTag -> {
targetPlayer.getSceneTags().get(sceneTag.getSceneId()).remove(sceneTag.getId());
});
this.setSceneTags(targetPlayer);
}
private void setSceneTags(Player targetPlayer) {
targetPlayer.sendPacket(new PacketPlayerWorldSceneInfoListNotify(targetPlayer));
}
}
@@ -6,7 +6,6 @@ import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
import java.util.*;
@Command(
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.server.packet.send.PacketScenePlayerSoundNotify;
import lombok.val;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
import lombok.val;
@Command(
label = "sound",
@@ -1,5 +1,9 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.command.CommandHelpers.*;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.*;
@@ -8,15 +12,10 @@ import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.*;
import emu.grasscutter.game.world.*;
import lombok.Setter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static emu.grasscutter.command.CommandHelpers.*;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import static emu.grasscutter.utils.lang.Language.translate;
import lombok.Setter;
@Command(
label = "spawn",
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "stop",
aliases = {"shutdown"},
@@ -6,7 +6,6 @@ import emu.grasscutter.data.excels.avatar.AvatarSkillDepotData;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.utils.lang.Language;
import java.util.List;
@Command(
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import java.util.*;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
@Command(
label = "team",
usage = {"add <avatarId,...>", "(remove|set) [index|first|last|index-index,...]"},
@@ -1,13 +1,12 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "teleportAll",
aliases = {"tpall"},
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "teleport",
aliases = {"tp"},
@@ -1,16 +1,15 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.game.activity.trialavatar.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.server.packet.send.PacketActivityInfoNotify;
import emu.grasscutter.utils.JsonUtils;
import java.util.List;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "trialAvatarActivity",
aliases = {"taa"},
@@ -3,7 +3,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import java.util.List;
@Command(
@@ -1,14 +1,13 @@
package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.player.*;
import emu.grasscutter.server.packet.send.PacketOpenStateChangeNotify;
import java.util.*;
import static emu.grasscutter.utils.lang.Language.translate;
@Command(
label = "unlockall",
usage = {""},
@@ -3,7 +3,6 @@ package emu.grasscutter.command.commands;
import emu.grasscutter.command.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ClimateType;
import java.util.List;
@Command(
@@ -33,9 +33,11 @@ public class ConfigContainer {
* Lua script require system if performance is a concern.
* Version 12 - 'http.startImmediately' was added to control whether the
* HTTP server should start immediately.
* Version 13 - 'game.useUniquePacketKey' was added to control whether the
* encryption key used for packets is a constant or randomly generated.
*/
private static int version() {
return 12;
return 13;
}
/**
@@ -68,7 +70,7 @@ public class ConfigContainer {
}
}); updated.version = version();
try { // Save configuration & reload.
try { // Save configuration and reload.
Grasscutter.saveConfig(updated);
Grasscutter.loadConfig();
} catch (Exception exception) {
@@ -169,6 +171,9 @@ public class ConfigContainer {
/* This is the port used in the default region. */
public int accessPort = 0;
/* Enabling this will generate a unique packet encryption key for each player. */
public boolean useUniquePacketKey = true;
/* Entities within a certain range will be loaded for the player */
public int loadEntitiesForPlayerRange = 300;
/* Start in 'unstable-quests', Lua scripts will be enabled by default. */
@@ -1,12 +1,11 @@
package emu.grasscutter.config;
import emu.grasscutter.utils.FileUtils;
import static emu.grasscutter.Grasscutter.config;
import emu.grasscutter.utils.FileUtils;
import java.nio.file.Path;
import java.util.Locale;
import static emu.grasscutter.Grasscutter.config;
/**
* A data container for the server's configuration.
*
@@ -4,11 +4,10 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.server.http.handlers.GachaHandler;
import emu.grasscutter.tools.Tools;
import emu.grasscutter.utils.*;
import lombok.val;
import java.io.*;
import java.nio.file.*;
import java.util.*;
import lombok.val;
public class DataLoader {
@@ -4,34 +4,54 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.*;
import emu.grasscutter.data.binout.config.*;
import emu.grasscutter.data.binout.routes.Route;
import emu.grasscutter.data.custom.*;
import emu.grasscutter.data.custom.TrialAvatarActivityCustomData;
import emu.grasscutter.data.custom.TrialAvatarCustomData;
import emu.grasscutter.data.excels.*;
import emu.grasscutter.data.excels.achievement.*;
import emu.grasscutter.data.excels.activity.*;
import emu.grasscutter.data.excels.achievement.AchievementData;
import emu.grasscutter.data.excels.achievement.AchievementGoalData;
import emu.grasscutter.data.excels.activity.ActivityCondExcelConfigData;
import emu.grasscutter.data.excels.activity.ActivityData;
import emu.grasscutter.data.excels.activity.ActivityShopData;
import emu.grasscutter.data.excels.activity.ActivityWatcherData;
import emu.grasscutter.data.excels.avatar.*;
import emu.grasscutter.data.excels.codex.*;
import emu.grasscutter.data.excels.dungeon.*;
import emu.grasscutter.data.excels.giving.*;
import emu.grasscutter.data.excels.monster.*;
import emu.grasscutter.data.excels.quest.*;
import emu.grasscutter.data.excels.reliquary.*;
import emu.grasscutter.data.excels.giving.GivingData;
import emu.grasscutter.data.excels.giving.GivingGroupData;
import emu.grasscutter.data.excels.monster.MonsterCurveData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.data.excels.monster.MonsterDescribeData;
import emu.grasscutter.data.excels.monster.MonsterSpecialNameData;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.data.excels.quest.QuestGlobalVarData;
import emu.grasscutter.data.excels.reliquary.ReliquaryAffixData;
import emu.grasscutter.data.excels.reliquary.ReliquaryLevelData;
import emu.grasscutter.data.excels.reliquary.ReliquaryMainPropData;
import emu.grasscutter.data.excels.reliquary.ReliquarySetData;
import emu.grasscutter.data.excels.scene.*;
import emu.grasscutter.data.excels.tower.*;
import emu.grasscutter.data.excels.tower.TowerFloorData;
import emu.grasscutter.data.excels.tower.TowerLevelData;
import emu.grasscutter.data.excels.tower.TowerScheduleData;
import emu.grasscutter.data.excels.trial.*;
import emu.grasscutter.data.excels.weapon.*;
import emu.grasscutter.data.excels.world.*;
import emu.grasscutter.data.excels.weapon.WeaponCurveData;
import emu.grasscutter.data.excels.weapon.WeaponLevelData;
import emu.grasscutter.data.excels.weapon.WeaponPromoteData;
import emu.grasscutter.data.excels.world.WeatherData;
import emu.grasscutter.data.excels.world.WorldAreaData;
import emu.grasscutter.data.excels.world.WorldLevelData;
import emu.grasscutter.data.server.*;
import emu.grasscutter.game.dungeons.DungeonDropEntry;
import emu.grasscutter.game.quest.*;
import emu.grasscutter.game.quest.QuestEncryptionKey;
import emu.grasscutter.game.quest.RewindData;
import emu.grasscutter.game.quest.TeleportData;
import emu.grasscutter.game.quest.enums.QuestCond;
import emu.grasscutter.game.world.GroupReplacementData;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.*;
import lombok.*;
import javax.annotation.Nullable;
import java.lang.reflect.Field;
import java.util.*;
import javax.annotation.Nullable;
import lombok.*;
@SuppressWarnings({"unused", "MismatchedQueryAndUpdateOfCollection"})
public final class GameData {
@@ -258,10 +278,18 @@ public final class GameData {
private static final Int2ObjectMap<GuideTriggerData> guideTriggerDataMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<HomeWorldAnimalData> homeWorldAnimalDataMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<HomeWorldBgmData> homeWorldBgmDataMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<HomeWorldEventData> homeWorldEventDataMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<HomeWorldLevelData> homeWorldLevelDataMap =
new Int2ObjectOpenHashMap<>();
@@ -7,9 +7,8 @@ import emu.grasscutter.game.managers.blossom.BlossomConfig;
import emu.grasscutter.game.world.SpawnDataEntry;
import emu.grasscutter.utils.objects.WeightedList;
import it.unimi.dsi.fastutil.ints.*;
import lombok.*;
import java.util.*;
import lombok.*;
public class GameDepot {
public static final int[] BLOCK_SIZE = new int[] {50, 500}; // Scales
@@ -1,5 +1,8 @@
package emu.grasscutter.data;
import static emu.grasscutter.utils.FileUtils.*;
import static emu.grasscutter.utils.lang.Language.translate;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import emu.grasscutter.Grasscutter;
@@ -20,9 +23,6 @@ import emu.grasscutter.scripts.*;
import emu.grasscutter.utils.*;
import it.unimi.dsi.fastutil.Pair;
import it.unimi.dsi.fastutil.ints.*;
import lombok.*;
import javax.script.*;
import java.io.*;
import java.nio.file.*;
import java.util.*;
@@ -30,9 +30,8 @@ import java.util.Map.Entry;
import java.util.concurrent.*;
import java.util.regex.Pattern;
import java.util.stream.*;
import static emu.grasscutter.utils.FileUtils.*;
import static emu.grasscutter.utils.lang.Language.translate;
import javax.script.*;
import lombok.*;
public final class ResourceLoader {
@@ -3,7 +3,6 @@ package emu.grasscutter.data.binout;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.AbilityLocalIdGenerator;
import emu.grasscutter.game.ability.AbilityLocalIdGenerator.ConfigAbilitySubContainerType;
import java.util.*;
public class AbilityData {
@@ -3,7 +3,6 @@ package emu.grasscutter.data.binout;
import com.google.gson.*;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.io.Serializable;
import java.util.*;
@@ -3,9 +3,8 @@ package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.common.DynamicFloat;
import emu.grasscutter.game.props.ElementType;
import lombok.ToString;
import java.io.Serializable;
import lombok.ToString;
public class AbilityModifier implements Serializable {
private static final long serialVersionUID = -2001232313615923575L;
@@ -274,18 +273,20 @@ public class AbilityModifier implements Serializable {
@SerializedName(
value = "amount",
alternate = {"PDLLIFICICJ", "cdRatio"})
alternate = {"LNFMOCKIAGK", "PDLLIFICICJ", "cdRatio"})
public DynamicFloat amount = DynamicFloat.ZERO;
@SerializedName(value = "amountByTargetCurrentHPRatio")
@SerializedName(
value = "amountByTargetCurrentHPRatio",
alternate = {"GMFELAKANEF"})
public DynamicFloat amountByCasterAttackRatio = DynamicFloat.ZERO;
@SerializedName(value = "unused")
@SerializedName(value = "unknown2")
public DynamicFloat amountByCasterCurrentHPRatio = DynamicFloat.ZERO;
@SerializedName(
value = "unknown",
alternate = {"HFNJHOGGFKB", "GEJGGCIOLKN"})
value = "amountByCasterMaxHPRatio",
alternate = {"PKPBLCNMPIG", "HFNJHOGGFKB", "GEJGGCIOLKN"})
public DynamicFloat amountByCasterMaxHPRatio = DynamicFloat.ZERO;
public DynamicFloat amountByGetDamage = DynamicFloat.ZERO;
@@ -293,7 +294,7 @@ public class AbilityModifier implements Serializable {
@SerializedName(value = "amountByTargetMaxHPRatio")
public DynamicFloat amountByTargetCurrentHPRatio = DynamicFloat.ZERO;
@SerializedName(value = "amountByCasterMaxHPRatio")
@SerializedName(value = "unknown1", alternate = "GGLMMJHNGMO")
public DynamicFloat amountByTargetMaxHPRatio = DynamicFloat.ZERO;
public DynamicFloat limboByTargetMaxHPRatio = DynamicFloat.ZERO;
@@ -1,7 +1,6 @@
package emu.grasscutter.data.binout;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import java.util.*;
public class AbilityModifierEntry {
@@ -1,10 +1,9 @@
package emu.grasscutter.data.binout;
import javax.annotation.Nullable;
import lombok.*;
import lombok.experimental.FieldDefaults;
import javax.annotation.Nullable;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ConfigGadget {
@@ -2,11 +2,10 @@ package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.game.world.Position;
import java.util.List;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.List;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class HomeworldDefaultSaveData {
@@ -3,9 +3,8 @@ package emu.grasscutter.data.binout;
import dev.morphia.annotations.Entity;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.quest.enums.QuestType;
import lombok.Data;
import java.util.*;
import lombok.Data;
public class MainQuestData {
private int id;
@@ -1,7 +1,6 @@
package emu.grasscutter.data.binout;
import emu.grasscutter.data.ResourceLoader.OpenConfigData;
import java.util.*;
public class OpenConfigEntry {
@@ -3,11 +3,10 @@ package emu.grasscutter.data.binout;
import com.github.davidmoten.rtreemulti.RTree;
import com.github.davidmoten.rtreemulti.geometry.Geometry;
import emu.grasscutter.scripts.data.SceneGroup;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import lombok.*;
import lombok.experimental.FieldDefaults;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@@ -2,11 +2,10 @@ package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.game.world.Position;
import java.util.List;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.List;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class SceneNpcBornEntry {
@@ -1,9 +1,8 @@
package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.util.*;
import lombok.Data;
@Data
public class ScriptSceneData {
@@ -2,7 +2,6 @@ package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.common.DynamicFloat;
import java.io.Serializable;
public class TalentData implements Serializable {
@@ -1,10 +1,9 @@
package emu.grasscutter.data.binout.config;
import emu.grasscutter.data.binout.config.fields.*;
import lombok.Data;
import javax.annotation.Nullable;
import java.util.Collection;
import javax.annotation.Nullable;
import lombok.Data;
@Data
public class ConfigEntityBase {
@@ -1,8 +1,7 @@
package emu.grasscutter.data.binout.config;
import lombok.Data;
import java.util.List;
import lombok.Data;
@Data
public class ConfigGlobalCombat {
@@ -1,9 +1,8 @@
package emu.grasscutter.data.binout.config;
import emu.grasscutter.data.binout.config.fields.ConfigAbilityData;
import lombok.Getter;
import java.util.List;
import lombok.Getter;
public class ConfigLevelEntity {
@@ -1,8 +1,7 @@
package emu.grasscutter.data.binout.config.fields;
import lombok.Data;
import java.util.*;
import lombok.Data;
/** Contains information about the entities SGVs */
@Data
@@ -1,10 +1,9 @@
package emu.grasscutter.data.binout.routes;
import javax.annotation.Nullable;
import lombok.*;
import lombok.experimental.FieldDefaults;
import javax.annotation.Nullable;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class SceneRoutes {
@@ -4,9 +4,8 @@ import emu.grasscutter.data.excels.ProudSkillData;
import emu.grasscutter.game.ability.Ability;
import it.unimi.dsi.fastutil.floats.FloatArrayList;
import it.unimi.dsi.fastutil.objects.*;
import lombok.*;
import java.util.*;
import lombok.*;
@Getter
public class DynamicFloat {
@@ -1,9 +1,8 @@
package emu.grasscutter.data.custom;
import emu.grasscutter.data.common.BaseTrialActivityData;
import lombok.Data;
import java.util.List;
import lombok.Data;
@Data
public class TrialAvatarActivityCustomData implements BaseTrialActivityData {
@@ -1,8 +1,7 @@
package emu.grasscutter.data.custom;
import lombok.Data;
import java.util.List;
import lombok.Data;
@Data
public class TrialAvatarCustomData {
@@ -1,9 +1,8 @@
package emu.grasscutter.data.excels;
import emu.grasscutter.data.*;
import lombok.Getter;
import java.util.List;
import lombok.Getter;
@Getter
@ResourceType(name = "BargainExcelConfigData.json")
@@ -3,10 +3,9 @@ package emu.grasscutter.data.excels;
import emu.grasscutter.data.*;
import emu.grasscutter.game.props.*;
import emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.MissionStatus;
import lombok.Getter;
import java.util.*;
import java.util.stream.Collectors;
import lombok.Getter;
@ResourceType(name = {"BattlePassMissionExcelConfigData.json"})
@Getter

Some files were not shown because too many files have changed in this diff Show More