537 Commits

Author SHA1 Message Date
031f3bcd25 Revert "Fix issues with regions (#2177)" (#2178)
This reverts commit 50db3a20f5.
2023-06-01 01:54:47 -04:00
50db3a20f5 Fix issues with regions (#2177)
Luckily, SceneRegion and TriggerExcelConfigData both have group numbers, so we can use those to differentiate regions!
2023-06-01 01:54:21 -04:00
19fa9deae7 Revert "Potentially fix issues with regions"
This reverts commit 84e3823695.
2023-05-31 23:46:12 -04:00
6950e14ec4 Download additional handbook data 2023-05-31 23:37:40 -04:00
eaff698b7a Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 23:35:57 -04:00
84e3823695 Potentially fix issues with regions 2023-05-31 23:34:43 -04:00
53d8bdce40 Format code [skip actions] 2023-06-01 03:24:28 +00:00
083e9ba422 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 23:23:08 -04:00
28cb202d2b Update GitHub actions 2023-05-31 23:22:54 -04:00
e0a2ccf49c Re-add hack to fix 35303 2023-05-31 23:22:41 -04:00
55a0719c12 Format code [skip actions] 2023-06-01 03:07:37 +00:00
fc79c72d48 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 23:06:16 -04:00
8e333b35dc Optimize player kicking on server close 2023-05-31 23:06:05 -04:00
6d831a8859 fix the stupidest bug ive ever seen 2023-05-31 23:05:51 -04:00
2e6bfbb749 Format code [skip actions] 2023-06-01 02:46:57 +00:00
8e9121c962 Fix ignored open states from being set 2023-05-31 22:44:42 -04:00
7458d4369e Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/game/ability/actions/ActionAvatarSkillStart.java
#	src/main/java/emu/grasscutter/game/entity/EntityAvatar.java
2023-05-31 22:41:00 -04:00
5430956744 Remove existing hack for 35303 2023-05-31 22:38:15 -04:00
6448bb1b9b Quick fix for questing, needs more investigation
This would make the questing work again
2023-05-31 22:30:49 -04:00
9bd833c6e7 Format code [skip actions] 2023-06-01 02:30:23 +00:00
8840e2b574 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 22:29:09 -04:00
3e2607af4c Add default open state ignore list 2023-05-31 22:28:25 -04:00
e7f30f4d43 Require plugins to specify an API version and match with the server 2023-05-31 22:20:01 -04:00
44a557a1dc Load activity config on server startup 2023-05-31 22:11:58 -04:00
4113b42707 Fix issue with 35303 being un-completable & Try to fix fulfilled quest conditions being met 2023-05-31 22:11:45 -04:00
b1b8abc627 Format code [skip actions] 2023-06-01 01:06:12 +00:00
73c23707b4 Fix new avatar weapons being null 2023-05-31 21:04:38 -04:00
bcf54dd6ba Format code [skip actions] 2023-05-31 23:57:51 +00:00
77a70c7880 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/game/entity/EntityWeapon.java
2023-05-31 19:56:14 -04:00
8e11f53a2e Implement handbook request limiting 2023-05-31 19:55:13 -04:00
a575a2b7f6 Fix unnecessary warning for first-time setup 2023-05-31 19:40:09 -04:00
28da66fff4 Remove deprecated API & Fix resource checking 2023-05-31 19:38:12 -04:00
7db45a0a12 Fix EntityWeapon 2023-05-31 19:29:26 -04:00
36dee424ee Format code [skip actions] 2023-05-31 23:26:53 +00:00
815ba3e3e3 Fix something and implement weapon entities 2023-05-31 19:25:26 -04:00
16ec2e3d40 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java
#	src/main/java/emu/grasscutter/game/ability/AbilityManager.java
2023-05-31 19:18:13 -04:00
25b75b9691 more trace 2023-05-31 19:17:41 -04:00
36a5661a21 Format code [skip actions] 2023-05-31 22:20:31 +00:00
1269a0430e Move more logs to trace 2023-05-31 18:18:06 -04:00
07205d9a3a Format code [skip actions] 2023-05-31 06:12:06 +00:00
f277f59725 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 02:10:35 -04:00
ff421c01f9 Use the headers provided by a context to get the IP address
should acknowledge #1975
2023-05-31 02:10:25 -04:00
c719076f87 Format code [skip actions] 2023-05-31 05:36:13 +00:00
3563d05685 Lint Code [skip actions] 2023-05-31 05:35:46 +00:00
6c97da3715 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-31 01:35:00 -04:00
d6d854cdd3 Fix handbook server details 2023-05-31 01:32:23 -04:00
006490a540 Format code [skip actions] 2023-05-31 04:54:33 +00:00
959f0ad261 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/server/http/documentation/HandbookHandler.java
2023-05-31 00:51:39 -04:00
bef455d50c Fix game-related data not saving 2023-05-30 18:47:05 -04:00
31a02050cf Add system for setting handbook address and port 2023-05-30 17:38:13 -04:00
bdbfb733a0 Format code [skip actions] 2023-05-30 20:55:44 +00:00
9f3d859817 Lint Code [skip actions] 2023-05-30 20:55:09 +00:00
25b126f468 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-30 16:54:13 -04:00
a35ce5fecb Add system for setting handbook address and port 2023-05-30 16:53:57 -04:00
c69a889e66 Format code [skip actions] 2023-05-30 19:40:39 +00:00
36a35c11aa Use thread executors to speed up the database loading process 2023-05-30 15:38:26 -04:00
2009a90e66 Change the way HTML is served after authentication 2023-05-30 14:29:55 -04:00
a3bbfd4c5d Add properties to AbilityModifier 2023-05-30 13:56:21 -04:00
c6869aaaa2 HACK: Return the avatar which holds the weapon when the weapon is referred to by ID 2023-05-30 13:56:06 -04:00
a2eba7b795 Implement completely useless global value copying 2023-05-30 13:55:30 -04:00
999d3c739f Default debug to false; enable with -debug 2023-05-30 13:28:43 -04:00
385b6fbd7c Remove protocol definitions from Spotless 2023-05-30 13:19:24 -04:00
01dfebf681 Format some code 2023-05-30 13:07:49 -04:00
c780fb7934 Add system for sending messages between servers 2023-05-30 13:06:50 -04:00
a3c56dff7e Format code [skip actions] 2023-05-30 06:43:54 +00:00
f00c54cb95 Implement a proper ability system (#2166)
* Apply fix `21dec2fe`

* Apply fix `89d01d5f`

* Apply fix `d900f154`

this one was already implemented; updated to use call from previous commit

* Ability changing commit

TODO: change info to debug

* Remove use of deprecated methods/fields

* Temp commit v2
(Adding LoseHP and some fixes)

* Oopsie

* Probably fix monster battle

* Fix issue with reflecting into fields

* Fix some things

* Fix ability names for 3.6 resources

* Improve logging

---------

Co-authored-by: StartForKiller <jesussanz2003@gmail.com>
2023-05-30 02:40:02 -04:00
9b58105120 Fully fix fairy clock for real this time (#2167)
* Fully fix fairy clock For real this time

* Make it so relogging keeps the time lock state.

* Refactor out questLockTime

* Per Hartie, the client packet needs to be changed too

* Update src/main/java/emu/grasscutter/game/world/World.java

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>

* Update src/main/java/emu/grasscutter/server/packet/recv/HandlerClientLockGameTimeNotify.java

* Remove all code not needed to get clock working

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
2023-05-30 02:39:34 -04:00
911993084e Format code [skip actions] 2023-05-30 05:53:50 +00:00
bcf15eb715 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/data/excels/MonsterSpecialNameData.java
2023-05-30 01:48:50 -04:00
ec1a6881ce Fix merge import 2023-05-30 01:34:32 -04:00
d5905d6ad8 Format code [skip actions] 2023-05-30 05:02:07 +00:00
2b13ea2a82 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-30 00:58:53 -04:00
d6b16f2111 Merge branch 'development' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/data/GameData.java
#	src/main/java/emu/grasscutter/data/excels/monster/MonsterData.java
#	src/main/java/emu/grasscutter/data/excels/monster/MonsterDescribeData.java
#	src/main/java/emu/grasscutter/game/entity/EntityMonster.java
2023-05-30 00:58:41 -04:00
7b3419b1d2 Implement some lua variables for less console spam (#2172)
* Implement some lua variables for less console spam

* Add GetHostQuestState

This fixes some chapter 3 stuff.
2023-05-30 00:57:45 -04:00
43a09ace2b Format code [skip actions] 2023-05-29 07:50:43 +00:00
be9fc452fa Fix protocol definitions 2023-05-29 03:45:55 -04:00
4fd617cebd Remove outdated packet 2023-05-29 03:08:37 -04:00
3a9caf2cae Add/update all/more protocol definitions 2023-05-29 01:48:55 -04:00
3a8a13c5be Add/update all/more protocol definitions 2023-05-29 00:44:17 -04:00
37215254c7 Rename fields (might be wrong) 2023-05-27 00:54:54 -04:00
980905817b Run spotlessApply 2023-05-27 00:40:07 -04:00
d0dde9bc2f Update to REL3.7 2023-05-27 00:34:42 -04:00
d1f774892c Fix event calling & canceling 2023-05-26 23:26:49 -04:00
9d4cb733e2 Fix GitHub actions 2023-05-26 14:57:20 -04:00
1fef3f8a05 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-26 14:52:39 -04:00
d35777d969 Implement fetching a player across servers & Add a chainable JsonObject
useful for plugins! might be used in grasscutter eventually
2023-05-26 14:52:22 -04:00
273dadd4ba Fix target destination for the Gradle-built handbook 2023-05-26 14:25:29 -04:00
5f6766305d Lint Code [skip actions] 2023-05-26 18:21:59 +00:00
b0714f209c Fix the 'finer details' with the handbook UI 2023-05-26 13:49:10 -04:00
77796aa8b6 Build the handbook with Gradle 2023-05-26 13:48:52 -04:00
2107866787 Add _some_ scaling to the home buttons and its text 2023-05-26 12:03:25 -04:00
60d4211887 Change scrollbar to a vibrant color 2023-05-26 12:02:56 -04:00
9f6f8bef79 Implement hiding widgets 2023-05-26 12:02:43 -04:00
be588de92f Change HTML spacing to 2 spaces 2023-05-26 12:02:28 -04:00
cf4389cd1d Fix the background color leaking from the character widget 2023-05-26 11:22:54 -04:00
77fa859caa Fix protocol definitions
thank you Nazrin! (+ hiro for raw definitions)
2023-05-26 11:10:58 -04:00
883dcef054 instantiate personalLineList (#2165) 2023-05-25 10:19:21 -04:00
a4ef130923 Format code [skip actions] 2023-05-23 23:38:49 +00:00
c0ad1bf75b Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-23 19:35:51 -04:00
f1baaf5869 Add dumper for world areas 2023-05-23 19:35:05 -04:00
1d884dd05e Don't overdefine variables in extended classes (#2163) 2023-05-23 07:47:15 -07:00
6cf9e03ead Format code [skip actions] 2023-05-22 08:26:39 +00:00
9f393916e8 Add world areas to the textmap cache 2023-05-22 04:23:57 -04:00
a48bc24aae Remove manual autofinish for main quests. (#2162) 2023-05-22 03:58:47 -04:00
4ca172bf42 Format code [skip actions] 2023-05-22 07:47:38 +00:00
1de1f42abc Fix event invokes 2023-05-22 03:44:04 -04:00
4c0ce8e20e Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-22 03:15:18 -04:00
acf56fc432 Optimize event calls 2023-05-22 03:15:05 -04:00
d8ad10e22d Add PlayerEnterAreaEvent 2023-05-22 02:57:59 -04:00
ec55b2ec22 Run spotlessApply on definitions 2023-05-21 22:46:14 -04:00
a190536149 Remove deprecated fields from GetShopRsp 2023-05-21 22:45:47 -04:00
49483dd607 Make more fields in excels accessible 2023-05-21 21:32:48 -04:00
f66408fd3c Add documentation about WorldAreaConfigData 2023-05-20 23:13:19 -04:00
0cad9a90c0 Enable debug mode for plugin loggers if enabled for the primary logger 2023-05-20 23:13:01 -04:00
e05a29ecf1 Format code [skip actions] 2023-05-21 02:02:00 +00:00
b88b3717c3 Add initial startup message
this is so the server appears like its preparing to start
2023-05-20 21:08:59 -04:00
43ab558735 Add EntityCreationEvent 2023-05-20 21:08:35 -04:00
1515d62aa6 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-20 21:05:54 -04:00
80dabd08d3 Disable SNI for the HTTPS server 2023-05-20 17:23:11 -04:00
3c84d22dc4 Bring back period lol (#2160) 2023-05-20 11:50:59 -04:00
6d845e1cc6 Format code [skip actions] 2023-05-20 15:45:17 +00:00
4e8726d29e Partially fix Chasing Shadows (#2159)
* Partially fix Chasing Shadows

* Go ahead and move it before the return before Magix tells me to.
2023-05-20 11:42:26 -04:00
9b83ea9072 Format code [skip actions] 2023-05-20 08:05:42 +00:00
9eddd87095 fix NPC talk triggering main quest in 46101 (#2158)
Make it so that only talks where the param matches the talkId are checked.
2023-05-20 04:03:00 -04:00
bbd201c90e Format code [skip actions] 2023-05-20 07:47:53 +00:00
44d467b5d6 Lint Code [skip actions] 2023-05-20 07:45:52 +00:00
d5de603d76 Fix changing target UID when talking to the server 2023-05-20 03:03:13 -04:00
cad6e90c90 Revert Multi-threaded resource loading 2023-05-20 02:55:33 -04:00
1a6fa43367 Clean up .utils 2023-05-20 02:25:49 -04:00
51c5cb5c62 Add defaults to Position 2023-05-19 19:52:55 -04:00
858c512f22 Add PlayerChatEvent 2023-05-19 19:49:29 -04:00
a2400541b5 Remove legacy documentation from PlayerMoveEvent 2023-05-19 19:38:06 -04:00
d89517f58e Add PlayerEnterDungeonEvent 2023-05-19 19:37:53 -04:00
c5c2db96f8 Add static methods to register an event handler 2023-05-19 19:32:32 -04:00
8210fe6485 Add methods to get players from the server 2023-05-19 19:32:20 -04:00
8b9ca5ec7e Add PlayerOpenChestEvent 2023-05-19 19:32:07 -04:00
bda963adca Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-19 19:26:01 -04:00
27e8d1fc93 Fix being unable to attack (#2157) 2023-05-20 00:27:13 +02:00
648fd68851 Re-add BeginCameraSceneLookNotify 2023-05-18 22:30:10 -04:00
68b269d7c0 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-18 22:28:41 -04:00
f6326d6e4b Remove banned packets
client modifications already perform the job of blocking malicious packets from being executed, no point in having this if self-windy is wanted
2023-05-18 22:28:37 -04:00
5605163607 Add/fix colors
also fix tailwind
2023-05-18 22:20:38 -04:00
d9d7bff8f3 Add quests page (basic impl.) 2023-05-18 22:20:13 -04:00
900d7fa200 Add quest widgets 2023-05-18 22:19:45 -04:00
33ba227982 Format code [skip actions] 2023-05-18 07:59:07 +00:00
b6b9d3d744 Multi-threaded resource loading 2023-05-18 03:56:38 -04:00
48959d54c5 More player property documentation 2023-05-18 03:15:52 -04:00
0047bb2e8d Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-18 03:00:52 -04:00
87ffbdd0f1 Format code [skip actions] 2023-05-18 06:59:08 +00:00
0c45a548cc Pause in-game time when the world is paused 2023-05-18 02:58:08 -04:00
c80e0f0572 Clean up logger more 2023-05-18 02:56:40 -04:00
13f055035f Use removeItemById for deleting items via quests 2023-05-18 02:56:12 -04:00
427cb039cf Move more logs to trace 2023-05-18 02:55:02 -04:00
8438e94c6e Fix player pausing 2023-05-18 02:54:47 -04:00
bb693cd222 Move warns for groups to debug 2023-05-18 01:29:28 -04:00
25d582f41e Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-18 01:29:04 -04:00
655a634ba3 Fix cooking packet definitions
thanks nick!
2023-05-17 23:44:53 -04:00
efde83c042 Format code [skip actions] 2023-05-18 03:14:07 +00:00
3779ac6bf1 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-17 21:28:59 -04:00
64e0379ca5 Update player properties 2023-05-17 21:16:10 -04:00
67364dc867 Format code [skip actions] 2023-05-18 00:55:57 +00:00
18bc68774c Fix game time locking 2023-05-17 20:53:32 -04:00
69fadff479 Format code [skip actions] 2023-05-17 05:02:10 +00:00
cc94a21ca9 Fix player level up not displaying on the client properly 2023-05-17 00:57:01 -04:00
2a683a0e36 Add handbook IP authentication in hybrid mode 2023-05-17 00:37:37 -04:00
ca5e33c781 Move more group loading to trace 2023-05-17 00:31:33 -04:00
6a0cb2732c Fix logic of SetPlayerPropReq 2023-05-17 00:24:40 -04:00
4e0274cfc3 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-16 21:20:48 -04:00
26564b841e Fix force pushing to branches after linting 2023-05-16 21:19:29 -04:00
e63a94bf19 Format code [skip actions] 2023-05-17 00:08:26 +00:00
38b7c2d0d3 Change colors to fit _something suitable_ 2023-05-16 20:04:31 -04:00
919f533ed7 Add quest data dumping for the handbook 2023-05-16 19:46:18 -04:00
a377fe2107 Format code [skip actions] 2023-05-16 06:47:42 +00:00
2800cce15a Implement proper handbook authentication (pt. 2) 2023-05-16 02:45:00 -04:00
f1cf6da178 Implement proper handbook authentication (pt. 1) 2023-05-16 02:38:01 -04:00
79d417c3ca format imports
this is really just to see if build handbook works kek
2023-05-15 04:00:34 -04:00
c07c7701dd Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-15 03:57:13 -04:00
2fb03b4186 Download data for the build, not for the lint 2023-05-15 03:57:05 -04:00
01edea175e Lint Code [skip actions] 2023-05-15 07:56:21 +00:00
4647d528e2 Gm handbook lmao (#2149)
* Fix font issue

* Fix avatars

* Fix text overflow in commands

* Fix virtualized lists and items page 😭😭

* magix why 💀

* use hover style in all minicards

* button

* remove console.log

* lint

* Add icons

* magix asked

* Fix overflow padding issue

* Fix achievement text overflow

* remove icons from repo

* Change command icon

* Add the wiki page as a submodule

* total magix moment

* fix text overflow in commands

* Fix discord button

* Make text scale on Minicard

* import icons and font from another source

* Add hover effects to siebar buttons

* move font and readme to submodule repo

* Make data folder a submodule

* import icons and font from data submodule

* Update README.md

* total magix moment

* magix moment v2

* submodule change

* Import `.webp` files

* Resize `HomeButton`

* Fix 'Copy Command' reappearing after changing pages

---------

Co-authored-by: KingRainbow44 <kobedo11@gmail.com>
2023-05-15 03:55:44 -04:00
964cc8143b Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-15 03:46:29 -04:00
386ad9aa66 Update GitHub Actions to use 'download-file' over 'wget' 2023-05-15 03:46:23 -04:00
44003f4ee6 Format code [skip actions] 2023-05-15 07:39:29 +00:00
8ecb890fbe Separate the dispatch and game servers (pt. 3)
implement handbook across servers!
2023-05-15 03:37:07 -04:00
639cbb481d Set default avatar talent level to 10 2023-05-15 03:26:29 -04:00
8be18a6460 Add description for '/troubleshoot' 2023-05-15 02:37:55 -04:00
15b1718052 Separate the dispatch and game servers (pt. 2)
this commit fixes the gacha page
2023-05-15 02:37:35 -04:00
e079eebc0f Format code [skip actions] 2023-05-15 04:45:40 +00:00
bcc9ae10cd Separate the dispatch and game servers (pt. 1)
gacha is still broken, handbook still needs to be done
2023-05-15 00:43:16 -04:00
97fbbdca84 Update translation (#2150)
* Update translation

* Update translation
2023-05-14 12:05:02 -04:00
652c416423 Format code [skip actions] 2023-05-14 07:42:41 +00:00
d80ce0b093 Add the wiki page as a submodule 2023-05-14 03:40:27 -04:00
2ff5dbbc1c Add call for Facebook logins 2023-05-14 00:45:01 -04:00
418422577a Download data required for building artifacts 2023-05-14 00:43:06 -04:00
3cc034ef12 Format code [skip actions] 2023-05-13 21:41:44 +00:00
9d4d4e6494 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-13 17:39:25 -04:00
0d733e3abf Run spotlessApply 2023-05-13 17:39:02 -04:00
8c54950af0 Fix forge queue data protocol definition 2023-05-13 17:38:52 -04:00
8fb26744a1 Remove artifact signatures from VCS 2023-05-13 17:38:35 -04:00
57d98f1da7 Format code [skip actions] 2023-05-13 21:13:46 +00:00
c1139ca04c Add temporary backwards compatability for ServerHelper 2023-05-13 17:11:03 -04:00
d20f63e835 Fix gacha mappings static file issue 2023-05-13 17:05:07 -04:00
155ca8cddd Upgrade logging libraries 2023-05-13 16:45:59 -04:00
9322c288ac Upgrade Javalin to 5.5.0 & Fix project warnings 2023-05-13 16:40:15 -04:00
5755aa4e6c Format code [skip actions] 2023-05-13 04:59:12 +00:00
7b097e879e Change the way existing hooks work 2023-05-13 00:57:17 -04:00
c21f95928b Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-13 00:42:59 -04:00
98cb2f3a57 Format code [skip actions] 2023-05-13 04:41:58 +00:00
954939744c Lint Code [skip actions] 2023-05-13 04:40:24 +00:00
be560e4754 Make descriptions of objects scrollable 2023-05-13 00:39:48 -04:00
dc4d081e08 Add support for 'plain text' mode 2023-05-13 00:39:32 -04:00
254c96c2c0 Add setting level to entity card 2023-05-13 00:04:15 -04:00
1c91a776ed Implement entity spawning 2023-05-12 23:50:28 -04:00
10adc756d7 Fix going back returning a blank screen 2023-05-12 23:40:29 -04:00
5f9d5dd33f Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-12 23:25:38 -04:00
ff124095bb Format code [skip actions] 2023-05-13 03:20:49 +00:00
b55cbbc507 Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-12 23:20:26 -04:00
ebc6d9a06e Remove 'Mechanicus' entities from the list of entities 2023-05-12 23:20:19 -04:00
6e1617e621 Make clickable buttons appear clickable 2023-05-12 23:20:00 -04:00
98b834cdcd Lint Code [skip actions] 2023-05-13 03:18:45 +00:00
8c0045a8d7 Add color change to Join the Community! 2023-05-12 21:49:13 -04:00
8a2b860932 Fix listener ConcurrentModificationException issue 2023-05-12 20:19:30 -04:00
78ee3e8db1 Implement handbook teleporting
also a few formatting changes and sort data by logical sense
2023-05-12 20:18:53 -04:00
f8054a82a9 Add basic troubleshooting command 2023-05-12 19:38:46 -04:00
63488f826a Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-12 19:05:18 -04:00
e3accdad1b Fix character names rendering incorrectly 2023-05-11 23:05:36 -04:00
757dc9f261 Lint Code [skip actions] 2023-05-12 02:54:36 +00:00
564e4e496b Check if a command should be copied or HTTP should be used 2023-05-11 22:52:09 -04:00
ef263cb326 unload scene when there are no players (#2147)
* unload scene when there are no players

* Update src/main/java/emu/grasscutter/game/world/Scene.java

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
2023-05-11 22:04:43 -04:00
c425fb12c4 Format code [skip actions] 2023-05-12 02:03:50 +00:00
2017bc57a0 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/game/talk/TalkManager.java
2023-05-11 22:01:28 -04:00
6516e4be1e NPCs are not spawned server side; change logic to handle it 2023-05-11 21:17:08 -04:00
3f4578c0ba Format code [skip actions] 2023-05-12 01:13:53 +00:00
db1cc788b4 Validate the NPC being talked to 2023-05-11 21:11:10 -04:00
9c0b9afae2 Make KcpTunnel public 2023-05-11 21:10:38 -04:00
0fb0b590e1 Move invalid ability action to trace 2023-05-11 21:09:49 -04:00
82b193945e Add more information to the 'unknown condition handler' message 2023-05-11 21:08:33 -04:00
02a9c55b0f Move 'invalid gather object' to trace 2023-05-11 21:08:14 -04:00
6d3dc1ad70 Format code [skip actions] 2023-05-11 23:56:24 +00:00
780674e8de Use Lombok's EqualsAndHashCode for comparing scene regions 2023-05-11 19:54:04 -04:00
45f4a9233d Format code [skip actions] 2023-05-11 23:46:37 +00:00
e514095e8a Fix region removal checking 2023-05-11 19:43:52 -04:00
5cd9d3a26d Initialize the script loader in ResourceLoader#loadAll 2023-05-11 19:41:50 -04:00
4eaaa507ae Merge remote-tracking branch 'origin/unstable' into unstable 2023-05-11 00:52:06 -04:00
77e048b36b Format code [skip actions] 2023-05-11 04:52:00 +00:00
de5fd49d93 Re-add call to Player#updatePlayerGameTime 2023-05-11 00:51:57 -04:00
5e3acab116 Fully fix fairy clock (#2146)
* Fix scene transition

* fully fix fairy clock
2023-05-11 00:49:21 -04:00
c78f9f2801 Format code [skip actions] 2023-05-11 04:27:51 +00:00
42e6e4c44d Fix delay with server tasks 2023-05-11 00:25:09 -04:00
f9906c4492 Format code [skip actions] 2023-05-11 02:23:43 +00:00
f51fd55cb5 Fix worktop options not appearing 2023-05-10 22:21:16 -04:00
e32aea4d0b Remove more scene synchronized 2023-05-10 22:21:13 -04:00
1719c08eb0 Remove debug calls when teleporting 2023-05-10 22:21:10 -04:00
c0381d3795 Prevent updating player game time 2023-05-10 22:21:03 -04:00
d2203cc511 Merge pull request #2107 from Grasscutters/unstable-quests
Merge `unstable-quests` into `unstable`
2023-05-10 19:14:22 -07:00
07e038343d Fix teleporting errors 2023-05-10 20:54:25 -04:00
510e6bfa78 Add account list command 2023-05-10 20:53:20 -04:00
7c065b33d6 Re-apply changes which were discarded from running Spotless 2023-05-10 19:22:32 -04:00
f9a7eecc1a Don't load garbages 2023-05-09 22:46:43 -04:00
f7b25df91c Handle ClientLockGameTimeNotify over sending it 2023-05-09 17:09:42 -04:00
061782f555 Revert "Move time lock check"
This reverts commit acc69a33cc.
2023-05-09 01:42:16 -04:00
13d95c5c84 Remove setting the dungeon ID
dungeon ID and dungeon enter will break things
2023-05-09 01:41:13 -04:00
acc69a33cc Move time lock check 2023-05-08 02:25:57 -04:00
0b2e471f9b Fix time locking 2023-05-08 02:24:05 -04:00
b5c80764de Move check_code to unstable only 2023-05-08 01:55:55 -04:00
3049cdafc1 Add icon to ItemData 2023-05-08 01:50:01 -04:00
79e4268d39 Fix usage of onMethod 2023-05-08 01:49:50 -04:00
489f504593 Add handbook config options 2023-05-08 01:44:51 -04:00
2578eb4f0f Fix code format action to push to target branch 2023-05-08 01:42:08 -04:00
3e183ff9d1 Merge branch 'unstable' into unstable-quests
# Conflicts:
#	.gitignore
#	src/generated/main/java/emu/grasscutter/net/proto/ABJDNCBDEKIOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AKFPAANICKGOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityActionGenerateElemBallOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAppliedAbilityOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAppliedModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAttachedModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityControlBlockOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityEmbryoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityIdentifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvocationsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeArgumentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeEntryHeadOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaAddAbilityOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaModifierChangeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaModifierDurabilityChangeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaReInitOverrideMapOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMixinRecoverInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityScalarTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityScalarValueEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityStringOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilitySyncStateInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityPushTipsDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityPushTipsStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityScheduleInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityScheduleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityShopSheetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityTakeWatcherRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityTakeWatcherRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityUpdateWatcherNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityWatcherInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddBackupAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddBackupAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddNoGachaAvatarCardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddNoGachaAvatarCardTransferItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddQuestContentProgressReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddQuestContentProgressRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AdjustTrackingInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiSkillCdInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiSyncInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiThreatInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AkaFesDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AllWidgetDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnchorPointDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnimatorParameterValueInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnimatorParameterValueInfoPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnnounceDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AntiAddictNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ArenaChallengeActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ArenaChallengeMonsterLevelOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterLargeDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterLittleDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterLittleStageStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterMidCampInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterMidDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AsterProgressDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AttackHitEffectResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AttackResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarAddNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeElementTypeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeElementTypeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDieAnimationEndReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDieAnimationEndRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEnterSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipAffixInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipAffixStartNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExcelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionCallBackReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionCallBackRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionGetRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionGetRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterLevelRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterLevelRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFightPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFightPropUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFlycloakChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFollowRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarGainCostumeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarGainFlycloakNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarLifeStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarRenameInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarRenameInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSatiationDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSatiationDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillDepotChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillMaxChargeCountNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamResonanceInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUnlockTalentNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarWearFlycloakReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarWearFlycloakRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BEAMFIKPMLEOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BartenderActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BartenderLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BartenderTaskInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BatchBuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BatchBuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassCurScheduleUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassCycleOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassRewardTagOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassRewardTakeOptionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassScheduleOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassUnlockStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BirthdayOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlessingActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlitzRushActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlitzRushStageOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlockInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomBriefInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomBriefInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomChestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusOpActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BossChestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BounceConjuringActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BounceConjuringChapterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutActionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutBrickInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutElementReactionCounterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutPhysicalObjectModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutPhysicalObjectOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSnapShotOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSpawnPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSyncConnectUidInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutVector2OuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BrickBreakerActivityStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BrickBreakerDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BrickBreakerLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuoyantCombatDailyInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuoyantCombatDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyBattlePassLevelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyBattlePassLevelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyResinReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyResinRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CFFFGFFKINKOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CKMJBOGJFMBOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CalcWeaponUpgradeReturnItemsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CalcWeaponUpgradeReturnItemsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CanUseSkillNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CancelFinishParentQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CardProductRewardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeFinishTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeEnergyReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeGameTimeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeGameTimeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeHpReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMailStarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMpTeamAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMpTeamAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeTeamNameReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeTeamNameRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannelerSlabActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannelerSlabCampOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannelerSlabChallengeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannelerSlabChallengeStageOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannelerSlabOneoffDungeonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabAssistInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabBuffInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabBuffSchemeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabLoopDungeonInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabLoopDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabLoopDungeonStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChapterStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChapterStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CharAmusementAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CharAmusementDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CharAmusementStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChatEmojiCollectionDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChatInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckAddItemExceedLimitNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckUgcStateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckUgcStateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckUgcUpdateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckUgcUpdateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChessActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChildQuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChooseCurAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChooseCurAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CityReputationQuestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAIStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAbilityChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAbilityInitFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientCollectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientInputTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientLoadingCostumeVerificationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientLockGameTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CloseCommonTipsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClosedItemNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexDataFullNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexDataUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexTypeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectOperatorInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectTeamAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectTeamInfoDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatInvocationsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatTypeArgumentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundBoostTakeStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundQueueDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookRecipeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookRecipeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoopCgOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoopChapterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoopPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoopRewardOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateVehicleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateVehicleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrucibleActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrucibleBattleUidInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkBuffInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkDungeonAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkDungeonSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkTeamInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CurVehicleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomCommonNodeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomDungeonFinishTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomGadgetTreeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CutSceneBeginNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CutSceneExtraParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DKFDACEPNALOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyDungeonEntryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskFilterCityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskFilterCityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskProgressNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskUnlockedCitiesNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DataResVersionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendResultTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelBackupAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelBackupAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelMailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelMailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeliveryActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeshretObeliskGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DestroyMaterialReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DestroyMaterialRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DigActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DigMarkPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoGachaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoGachaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoSetPlayerBornDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DragonSpineActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DragonSpineChapterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropHintNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DuelHeartDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DuelHeartLevelDifficultyInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DuelHeartLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonCandidateTeamChangeAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonCandidateTeamChangeAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonChallengeBeginNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonChallengeFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEnterPosInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryPointInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonPlayerDieNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonPlayerDieReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonPlayerDieRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSettleExhibitionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonShowReminderNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSlipRevivePointActivateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSlipRevivePointActivateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointActivateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointActivateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EchoShellDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EchoShellInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyChallengeDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyChallengeV2DetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyChallengeV2LevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyChallengeV2SettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyDailyInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ElectroherculesBattleDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ElectroherculesBattleLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ElectroherculesBattleStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EndCameraSceneLookNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneDoneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneDoneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterScenePeerNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneReadyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneReadyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTransPointRegionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTrialAvatarActivityDungeonReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTrialAvatarActivityDungeonRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterWorldAreaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterWorldAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAbilityInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAiSyncNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAuthorityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityClientDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityClientExtraInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityEnvironmentInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityFightPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityFightPropUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityMoveInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityRendererChangedInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipRoguelikeRuneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipRoguelikeRuneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAiSyncCombatThreatInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAiSyncSkillCdNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAnimatorParameterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarLockChairReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarLockChairRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarSitDownNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarStandUpNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtBeingHitInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtCreateGadgetNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtDestroyGadgetNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtDoSkillSuccNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtEntityRenderersChangedNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExecuteGadgetLuaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExecuteGadgetLuaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExhibitionDisplayInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExitTransPointRegionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExpeditionActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExpeditionChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExpeditionPathInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExpeditionStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FEEHAOJCNCGOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FeatureBlockInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FetterDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FightPropPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlAcceptQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlDayContentInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlFinishSecondQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FinishedParentQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FinishedParentQuestUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FishPoolInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FishtankFishInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairBalloonInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairChapterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairDungeonSectionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairFallInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMinigameInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameSettleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameSettleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2DetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2MusicGameInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2PacmanInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2PhotoInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2PhotoPosDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairV2StageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FlightActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FlightDailyRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForceUpdateInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeGetQueueDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeGetQueueDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForwardTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FoundationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FoundationStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendEnterHomeOptionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendOnlineStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusFighterDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusFighterMonsterDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusFighterV2DetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusFighterV2LevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusFighterV2SettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusPlotStageDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusTrainingDungeonDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusTrainingMonsterPreviewDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusTrainingPoolPreviewDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FungusTrainingProgressDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureCurModuleArrangeCountNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeBeHelpedDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeBeHelpedNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeCancelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeCancelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeMakeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeSlotOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GCGFestivalDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GCGTCTavernChallengeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GCGTCTavernChallengeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaOpenWishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaTransferItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaUpInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaWishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaWishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetAutoPickDropInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetBornTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetCrucibleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetGeneralRewardInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetInteractReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetInteractRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetPlayInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GalleryStopReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationElementReliquaryRequestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationElementReliquaryResponseOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryMainPropDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryRequestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryResponseOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GatherGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GearActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GearLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityShopSheetInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityShopSheetInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllH5ActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllH5ActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllUnlockNameCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllUnlockNameCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAuthkeyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAuthkeyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetBlossomBriefInfoListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetBlossomBriefInfoListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetChatEmojiCollectionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetChatEmojiCollectionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetCompoundDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetCompoundDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetDailyDungeonEntryInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetDailyDungeonEntryInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowAvatarInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowAvatarInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowNameCardInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowNameCardInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFurnitureCurModuleArrangeCountReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetGachaInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetGachaInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetHomeExchangeWoodInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetHomeLevelUpRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetHomeLevelUpRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetInvestigationMonsterReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetInvestigationMonsterRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMailItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMailItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMapAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOpActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOpActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetParentQuestVideoKeyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetParentQuestVideoKeyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerAskFriendListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerAskFriendListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerBlacklistRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerFriendListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerFriendListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerHomeCompInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerSocialDetailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerSocialDetailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerTokenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerTokenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestLackingResourceReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestLackingResourceRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestTalkHistoryReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestTalkHistoryRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetRegionSearchReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetSceneAreaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetSceneAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetScenePointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetScenePointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopmallDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopmallDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcBriefInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcBriefInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWidgetSlotReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWidgetSlotRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWorldMpInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWorldMpInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceCampInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceCampStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceCarveInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceCarveStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocencePhotoInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocencePhotoObjectInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocencePhotoStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceRaceInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GravenInnocenceRaceLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GroupSuiteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GroupUnloadNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/H5ActivityIdsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/H5ActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HDOMFAKCLHGOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HOKJIFJPJLBOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HachiActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HachiStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HideAndSeekActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HideAndSeekMapInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitColliderTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitCollisionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitTreeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeAllUnlockedBgmIdListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeAnimalDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBasicInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBasicInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockArrangementInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockDotPatternOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockFieldDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockSubFieldDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeEditModeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeEditModeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeModuleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeModuleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChooseModuleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChooseModuleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeComfortInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeCustomFurnitureInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeCustomFurnitureInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEditCustomFurnitureReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEditCustomFurnitureRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEnterEditModeFinishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEnterEditModeFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureCustomSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureGroupDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetArrangementInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetArrangementInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetBasicInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetOnlineStatusReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetOnlineStatusRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGroupPlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopBuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopBuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointFurnitureDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointNPCDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointSceneDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleComfortInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleSeenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleSeenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeNewUnlockedBgmIdListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeNpcDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomePlantFieldStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomePreChangeEditModeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeFetterExpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeFetterExpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeHomeCoinReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeHomeCoinRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneArrangementInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneInitFinishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneInitFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneJumpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneJumpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureAllRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureGalleryScoreNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureOneRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurniturePlayerScoreOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeUpdateArrangementInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeUpdateArrangementInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HostPlayerNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InferencePageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InfernceWordInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayDungeonSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayTeamInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InterOpTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InteractTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationMonsterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationMonsterUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationQuestDailyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationReadQuestDailyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationTargetOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEntranceDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEntranceInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEquipCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEquipCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessMapDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessMonsterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriFlowerDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriMasterLevelDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriMasterLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriPoetryDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriPoetryThemeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IslandPartyDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IslandPartyStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemAddHintNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemCdGroupTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemGivingReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemGivingRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemHintOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemRenameAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemRenameAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/JAAACKLMLHIOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/JILBANAJEEFOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/JKFJFNMCNDNOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/JNMLLBGCBOBOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/JigsawPictureDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LCMFDAHJIBKOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LLBFJGELKIBOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternProjectionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternProjectionLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LevelupCityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LifeStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LockedPersonallineDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LuminanceStoneChallengeActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteAreaInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteHintPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteHintPointTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteHintStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunchBoxDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MPLevelEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailCollectStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailTextContentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapAreaInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkFromTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkPointTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkMapReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkMapRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkNewNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkTargetInvestigationMonsterNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MassivePropParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MassivePropSyncInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteReturnNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteReturnTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MathQuaternionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/McoinExchangeHcoinReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/McoinExchangeHcoinRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MichiaeMatsuriActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MichiaeMatsuriChallengePositionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MichiaeMatsuriChestPositionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MichiaeMatsuriStageOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MiracleRingDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MiracleRingDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MistTrialActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MistTrialBestAvatarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MistTrialLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierActionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierDurabilityOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierPropertyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterAIConfigHashNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterBornTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterPointArrayRouteUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterRouteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MoonfinTrialActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MoonfinTrialLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MotionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MotionStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MovingPlatformTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MpPlayRewardInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MpSettingTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MuqadasPotionActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MuqadasPotionDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MuqadasPotionLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameSettleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameSettleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NightCrowGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NpcTalkReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NpcTalkRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ObstacleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ObstacleModifyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OfferingInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OfficialCustomDungeonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OneoffGatherPointDetectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OnlinePlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpenStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpenStateUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PGHIDDKHGALOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PIHDFMDILLFOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PSPlayerApplyEnterMpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PSPlayerApplyEnterMpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PacmanSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParamListOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestInferenceDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestRandomInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParkourLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PathfindingEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PathfindingEnterSceneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalLineAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalLineAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalSceneJumpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalSceneJumpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PhotoActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PhotoPosDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PingReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PingRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlantFlowerActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformChangeRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformStartRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformStopRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayTeamEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialBoostReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialBoostRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookArgsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookArgsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerDieTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterDungeonReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterDungeonRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterSceneInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterSceneNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerForceExitRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGameTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGetForceQuitBanInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGetForceQuitBanInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerHomeCompInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerHomeCompInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerInvestigationAllInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerInvestigationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerInvestigationTargetNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLevelRewardUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLoginReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLoginRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerQuitDungeonReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerRTTInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerSetPauseReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerSetPauseRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerStoreNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWidgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldSceneInfoListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PostEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PostEnterSceneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PrivateChatNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProfilePictureChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProfilePictureOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropChangeReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropValueOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProtEntityTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProudSkillChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProudSkillExtraLevelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullPrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullPrivateChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullRecentChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullRecentChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCodexMonsterBeKilledNumReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCodexMonsterBeKilledNumRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCurrRegionHttpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryFilterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryPathReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryPathRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryRegionListHttpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestCreateEntityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestCreateEntityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyEntityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyEntityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyNpcReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyNpcRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestGlobalVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestGlobalVarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestListUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestProgressUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestRenameAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestRenameAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestTransmitReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestTransmitRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestTimeVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestVarOpOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuickUseWidgetRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReadMailNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReadPrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReceivedTrialAvatarActivityRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReceivedTrialAvatarActivityRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RecordUsageOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RegionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RegionSimpleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryDecomposeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryDecomposeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryFilterStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryFilterStateSaveNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResVersionConfigOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResinChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResinCostTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RobotPushPlayerDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RockBoardExploreDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RockBoardExploreStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryAvatarDisableStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryDungeonRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryProgressOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueShowAvatarTeamInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeDungeonActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeDungeonSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeRuneRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeSettleCoinInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeShikigamiRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RouteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoutePointChangeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoutePointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageBundleChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageScoreChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SandwormCannonDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SaveUgcReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SaveUgcRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAreaUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAreaWeatherNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAudioNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAvatarStaminaStepReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityAiInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityAppearNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDisappearNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDrownReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDrownRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityMoveNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneFishInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneForceLockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneForceUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneGalleryHomeSeekFurnitureInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneInitFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneKickPlayerReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneKickPlayerRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneMonsterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneNpcInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerLocationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerSoundNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePointUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneReliquaryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneRouteChangeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneRouteChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTeamAvatarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTeamUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTransToPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTransToPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneWeaponInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScreenInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampContributeItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampContributeItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampSectionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3CampInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3CampStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3DetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3RaceInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3RaceLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3ShadowInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3ShadowLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampV3ShadowStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeeMonsterReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SelectWorktopOptionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SelectWorktopOptionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServantInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerAnnounceNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerAnnounceRevokeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerBuffChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerBuffOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerCondMeetQuestListUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerGlobalValueChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetBattlePassViewedReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetBattlePassViewedRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetChatEmojiCollectionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetChatEmojiCollectionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEntityClientDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEquipLockStateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEquipLockStateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetFriendEnterHomeOptionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetFriendEnterHomeOptionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetIsAutoUnlockSpecificEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetIsAutoUnlockSpecificEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetNameCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetNameCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetOpenStateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetOpenStateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBirthdayReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBirthdayRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBornDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBornDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerHeadImageReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerHeadImageRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerNameReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerNameRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerPropReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerPropRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerSignatureReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerSignatureRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpLunchBoxWidgetReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpLunchBoxWidgetRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetWidgetSlotReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetWidgetSlotRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopCardProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopConcertProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopGoodsOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopMcoinProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShortAbilityHashPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowClientGuideNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowCommonTipsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowEquipOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkipPlayerGameTimeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkipPlayerGameTimeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkyCrystalDetectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkyCrystalDetectorQuickUseResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SocialDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SocialShowAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SorushTrialDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SpiceActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SpiceStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StatueGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StopServerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreItemChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreItemDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreWeightLimitNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StrengthenPointDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeDungeonInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeSprintBoatInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeSprintBoatRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeV2BoatStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeV2DetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeV2DungeonSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SummerTimeV2DungeonStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoTeamDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SyncScenePlayTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SyncTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementGoalRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementGoalRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBackGivingItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBackGivingItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassMissionPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassMissionPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCityReputationParentQuestReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCityReputationParentQuestRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCompoundOutputReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCompoundOutputRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeFurnitureMakeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeFurnitureMakeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeInvestigationRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeInvestigationRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeInvestigationTargetRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeInvestigationTargetRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeMaterialDeleteReturnReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeMaterialDeleteReturnRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakePlayerLevelRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakePlayerLevelRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeoffEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeoffEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TanukiTravelActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TanukiTravelFinishGuideQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TanukiTravelLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamChainChooseAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamChainDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamChainSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamChainStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamEnterSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonQueryPathReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonQueryPathRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerBriefDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerCurLevelRecordChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerCurLevelRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerEnterLevelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerEnterLevelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerFloorRecordChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerFloorRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelEndNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelStarCondDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelStarCondNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerMiddleLevelChangeTeamNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerMonthlyBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamSelectReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamSelectRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrackingIOInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapBonusChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapRegionInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapRegionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureSeelieActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureSeelieRegionDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarActivityRewardDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarFirstPassDungeonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarGrantRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarInDungeonIndexNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TriggerCreateGadgetToEquipPartNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TryEnterHomeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TryEnterHomeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicBriefInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicNoteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicTrackOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/Uint32PairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnionCmdNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnionCmdOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockAvatarTalentReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockAvatarTalentRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockNameCardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockPersonalLineReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockPersonalLineRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockTransPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockTransPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockedFurnitureFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockedFurnitureSuiteDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdateAbilityCreatedMovingPlatformNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowAvatarListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowAvatarListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowNameCardListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowNameCardListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UseItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UseItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/Vector3IntOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VectorOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VectorPlaneOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleMemberOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleStaminaNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageBoothUsedItemDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageCampChallengeLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageCampChallengeStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageHuntingStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketDealInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketStoreInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketTraderInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintagePresentLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintagePresentStageDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VisionTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WaterSpiritActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponAwakenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponAwakenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WearEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WearEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeatherInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeatherWizardDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeekendDjinnInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeeklyBossResinDiscountInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCoolDownDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCoolDownNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreateLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreatorInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreatorOpTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetDoBagReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetDoBagRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotOpOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotTagOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindFieldDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindFieldDungeonFailReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindFieldDungeonSettleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindFieldStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindSeedClientNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindSeedType1NotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptAllGiveItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptAllGiveItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptGiveItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptGiveItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptItemResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetCanGiveFriendItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetCanGiveFriendItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetRecvItemListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetRecvItemListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGiveFriendItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGiveFriendItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampRaceStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampRecvItemDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampRecvItemNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorktopInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorktopOptionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldChestOpenNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldOwnerBlossomBriefInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldOwnerDailyTaskNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerDieNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerLocationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerRTTNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerReviveReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerReviveRspOuterClass.java
#	src/main/java/emu/grasscutter/GameConstants.java
#	src/main/java/emu/grasscutter/Grasscutter.java
#	src/main/java/emu/grasscutter/command/commands/SetPropCommand.java
#	src/main/java/emu/grasscutter/config/ConfigContainer.java
#	src/main/java/emu/grasscutter/config/Configuration.java
#	src/main/java/emu/grasscutter/data/excels/ItemData.java
#	src/main/java/emu/grasscutter/data/excels/SceneData.java
#	src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java
#	src/main/java/emu/grasscutter/game/managers/ResinManager.java
#	src/main/java/emu/grasscutter/game/player/Player.java
#	src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java
#	src/main/java/emu/grasscutter/server/http/dispatch/RegionHandler.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerCombatInvocationsNotify.java
#	src/main/java/emu/grasscutter/tools/Dumpers.java
#	src/main/java/emu/grasscutter/utils/Crypto.java
#	src/main/java/emu/grasscutter/utils/FileUtils.java
#	src/main/java/emu/grasscutter/utils/Language.java
#	src/main/java/emu/grasscutter/utils/StartupArguments.java
#	src/main/java/emu/grasscutter/utils/Utils.java
2023-05-08 01:34:16 -04:00
a4f5d3286d Implement game time locking
implement for quests
2023-05-08 00:11:29 -04:00
d32f6982be Run spotlessApply
also set line endings to native, no more line conflict errors!
2023-05-07 22:53:55 -04:00
4f1136ce2d Merge remote-tracking branch 'origin/unstable-quests' into unstable-quests 2023-05-07 17:57:24 -04:00
24ad6bf478 Add the dungeon ID to the transfer scene packet 2023-05-07 02:57:06 -04:00
c832c1cac0 Revert final's added by 15e2f3ca34 (#2144)
* Revert final's added by 15e2f3ca34

* Apply suggestions from code review

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
2023-05-07 02:39:16 -04:00
935de3f8e7 Remove worktop if handler returns 2023-05-06 18:44:42 -04:00
d18b4ffdd4 Add unstable and unstable-quests to the build.yml action & Add a Spotless format action 2023-05-05 18:51:45 -04:00
f0a11c1b4e Partially fix fairy clock (#2143)
updatePlayerGameTime() expects time since game start not since day start.
2023-05-05 18:36:55 -04:00
48e233eb9b Update game time changing (triggers quests and updates properly) 2023-05-04 21:41:41 -04:00
0b87485bdf Clean up entity regions 2023-05-04 21:28:45 -04:00
8ee3dec5df Re-generate textmap cache if an error occurs 2023-05-04 11:26:19 -04:00
8bb7ae22d0 Fix changing time + Trigger time change condition 2023-05-04 01:05:03 -04:00
312c98ee19 Use a Set over an IntSet for worktops 2023-05-04 00:58:09 -04:00
afd22a9bcd Prevent blank text when logging in 2023-05-04 00:09:57 -04:00
2d12e0a4d9 Add check for scripts before quests are enabled 2023-05-04 00:06:54 -04:00
2c55b5b3da Set default value for paramStr 2023-05-03 23:54:06 -04:00
4d63fce783 Remove extra debugging information on accepted quests 2023-05-03 23:45:25 -04:00
6805c74bfc Remove questing (or questingEnabled) from the config, replace with questOptions or questing 2023-05-03 23:42:26 -04:00
dae2ad394c Revert change made to ContentCompleteTalk 2023-05-03 23:41:15 -04:00
f85a7cbe59 Add alternates for quest field names without underscores 2023-05-03 23:40:18 -04:00
3df5f79ebf Revert "Run spotlessApply"
This reverts commit d67e2d0c5e.
2023-05-03 10:48:00 -04:00
40a7d088d0 Bump server supported game version to 3.6.0 2023-05-03 02:34:02 -04:00
d67e2d0c5e Run spotlessApply 2023-05-02 23:21:17 -04:00
b877ca9fce Add new protocol definitions 2023-05-02 23:19:02 -04:00
1ac84293e9 Update protocol to REL3.6 2023-05-02 23:18:30 -04:00
1634a5c696 Clean-up (while attempting to fix) 2023-05-02 22:45:27 -04:00
760ea456ec Change level of quest trigger log 2023-05-02 22:45:06 -04:00
fb78df0caa Attempt to fix region issue 2023-05-02 22:44:13 -04:00
d3c7377946 Add triggers list for quest debugging 2023-05-02 22:43:37 -04:00
1c2bdff9dc Fix talking not progressing quests & Add talk execution handlers 2023-05-02 22:13:30 -04:00
3ffa0a7478 Remove talk executions on finish which are null 2023-05-02 21:35:42 -04:00
93a3276f75 Implement hiding in-game icons
this will also enable exception showing if 'DEBUG' is enabled
2023-05-02 21:35:17 -04:00
c464396d10 Fix build problem (deprecation) 2023-05-02 21:12:51 -04:00
fdd6820a8f Merge pull request Grasscutter-Quests#53
'Updated with how talks are handle' by `mjolsic`
2023-05-02 20:16:55 -04:00
6c654ce0c3 Properly add end quest IDs to the endQuestChapterMap 2023-05-01 22:54:25 -04:00
864298f3b1 Fix NullPointerException with Player#playerProgress 2023-05-01 22:54:00 -04:00
d2f9f6f05b Make logged quests easier to find 2023-05-01 22:53:32 -04:00
a579243e51 Use config over newScene#getScriptManager 2023-05-01 22:53:07 -04:00
c3f944da44 Move more logging from debug to trace 2023-05-01 22:52:24 -04:00
8b84360724 Invoke the 'not equal' events 2023-05-01 21:45:56 -04:00
b0605f6ac2 Add condition info to debug quest logging 2023-05-01 21:45:30 -04:00
b808e7e4ff Add sub-command to /quest which allows for quests to be added/removed from the logger 2023-05-01 19:45:32 -04:00
581df066e7 Add questing debug; which is enabled by default 2023-05-01 19:43:13 -04:00
e350cd42f9 "implement" ContentEnterMyWorld, with debugging information attached 2023-05-01 19:42:35 -04:00
1786169782 Mark dungeons as completed and trigger the event
the event & completion were moved to the same location
2023-05-01 19:42:12 -04:00
62f7fa639a Remove cause of threadlock on first dragon fight (#2137) 2023-05-01 10:08:10 -04:00
60afba7e15 Fix typo in last commit (#2138) 2023-05-01 10:07:51 -04:00
916db0f408 Implement dungeon completion 2023-05-01 01:10:15 -04:00
aadbc05061 Fix issue with resetting team with a full party 2023-05-01 01:09:55 -04:00
b5515b9e3a Temporarily move ability action from debug to trace 2023-05-01 01:09:33 -04:00
eba6c5051c Add debug subcommand for listing completed dungeons 2023-05-01 01:09:15 -04:00
0cbf02259d Merge branch 'development' into unstable
# Conflicts:
#	build.gradle
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityActionGenerateElemBallOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAppliedAbilityOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAppliedModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityAttachedModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityControlBlockOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityEmbryoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityIdentifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvocationsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeArgumentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeEntryHeadOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaModifierChangeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMetaReInitOverrideMapOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityMixinRecoverInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityScalarTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityScalarValueEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilityStringOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AbilitySyncStateInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AchievementUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityPushTipsDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityPushTipsStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityScheduleInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityScheduleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityShopSheetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityTakeWatcherRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityTakeWatcherRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityUpdateWatcherNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ActivityWatcherInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddBackupAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddBackupAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddNoGachaAvatarCardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddNoGachaAvatarCardTransferItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddQuestContentProgressReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AddQuestContentProgressRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AdjustTrackingInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiSkillCdInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiSyncInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AiThreatInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AllWidgetDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnchorPointDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnimatorParameterValueInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnimatorParameterValueInfoPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AnnounceDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AskAddFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AttackHitEffectResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AttackResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarAddNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeCostumeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeElementTypeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarChangeElementTypeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDieAnimationEndReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarDieAnimationEndRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEnterSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipAffixInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipAffixStartNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarEquipChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExcelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionCallBackReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionCallBackRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionGetRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionGetRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarExpeditionStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterLevelRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFetterLevelRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFightPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFightPropUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFlycloakChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarFollowRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarGainCostumeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarGainFlycloakNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarLifeStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarRenameInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarRenameInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSatiationDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSatiationDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillDepotChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillMaxChargeCountNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarSkillUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamResonanceInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTeamUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUnlockTalentNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarWearFlycloakReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarWearFlycloakRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BatchBuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BatchBuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassCurScheduleUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassCycleOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassMissionUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassRewardTagOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassRewardTakeOptionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassScheduleOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BattlePassUnlockStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BirthdayOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlockInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomBriefInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomBriefInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BlossomChestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BonusOpActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BossChestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutActionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutBrickInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutElementReactionCounterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutPhysicalObjectModifierOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutPhysicalObjectOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSnapShotOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSpawnPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutSyncConnectUidInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BreakoutVector2OuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyBattlePassLevelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyBattlePassLevelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/BuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CalcWeaponUpgradeReturnItemsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CalcWeaponUpgradeReturnItemsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CanUseSkillNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CancelFinishParentQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CardProductRewardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChallengeFinishTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeEnergyReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeGameTimeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeGameTimeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeHpReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMailStarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMpTeamAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeMpTeamAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeTeamNameReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChangeTeamNameRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChannellerSlabLoopDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChapterStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChapterStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CharAmusementAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChatEmojiCollectionDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChatInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CheckAddItemExceedLimitNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChildQuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChooseCurAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ChooseCurAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CityReputationQuestInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAIStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAbilityChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientAbilityInitFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientCollectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientInputTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientLoadingCostumeVerificationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClientLockGameTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ClosedItemNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexDataFullNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexDataUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexTypeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CodexTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectOperatorInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CoinCollectTeamAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatInvocationsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombatTypeArgumentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CombineRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundBoostTakeStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CompoundQueueDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookRecipeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CookRecipeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateVehicleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CreateVehicleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CrystalLinkDungeonAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CurVehicleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomCommonNodeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomDungeonFinishTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CustomGadgetTreeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CutSceneBeginNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/CutSceneExtraParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyDungeonEntryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskFilterCityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskFilterCityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskProgressNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DailyTaskUnlockedCitiesNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendResultTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DealAddFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelBackupAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelBackupAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelMailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelMailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DelTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeleteFriendRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DeshretObeliskGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DestroyMaterialReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DestroyMaterialRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoGachaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoGachaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DoSetPlayerBornDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropHintNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DropItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonCandidateTeamChangeAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonCandidateTeamChangeAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonChallengeBeginNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonChallengeFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEnterPosInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonEntryPointInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonShowReminderNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSlipRevivePointActivateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonSlipRevivePointActivateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointActivateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointActivateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/DungeonWayPointNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EchoShellInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EffigyChallengeDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EndCameraSceneLookNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneDoneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneDoneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterScenePeerNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneReadyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterSceneReadyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTransPointRegionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterWorldAreaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EnterWorldAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAbilityInvokeEntryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAiSyncNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityAuthorityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityClientDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityClientExtraInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityEnvironmentInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityFightPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityFightPropUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityMoveInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EntityRendererChangedInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipRoguelikeRuneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EquipRoguelikeRuneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAiSyncCombatThreatInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAiSyncSkillCdNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAnimatorParameterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarLockChairReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarLockChairRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarSitDownNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtAvatarStandUpNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtBeingHitInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtCreateGadgetNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtDestroyGadgetNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtDoSkillSuccNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/EvtEntityRenderersChangedNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ExitTransPointRegionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FeatureBlockInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FetterDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FightPropPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlAcceptQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FindHilichurlFinishSecondQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FinishedParentQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FinishedParentQuestUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FishPoolInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FishtankFishInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameSettleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameSettleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FleurFairMusicGameStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForceUpdateInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeGetQueueDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeGetQueueDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeQueueManipulateTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForgeStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ForwardTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FoundationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FoundationStatusOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendEnterHomeOptionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FriendOnlineStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureCurModuleArrangeCountNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeBeHelpedDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeBeHelpedNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeCancelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeCancelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeFinishNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeHelpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeMakeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeSlotOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureMakeStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/FurnitureOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GCGTCTavernChallengeDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaTransferItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaUpInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaWishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GachaWishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetAutoPickDropInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetBornTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetCrucibleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetGeneralRewardInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetInteractReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetInteractRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetPlayInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GadgetStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GalleryStopReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationElementReliquaryRequestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationElementReliquaryResponseOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryMainPropDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryRequestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GameplayRecommendationReliquaryResponseOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GatherGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityShopSheetInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetActivityShopSheetInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllH5ActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllH5ActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllMailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllUnlockNameCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAllUnlockNameCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAuthkeyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetAuthkeyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetBlossomBriefInfoListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetBlossomBriefInfoListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetChatEmojiCollectionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetChatEmojiCollectionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetCompoundDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetCompoundDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetDailyDungeonEntryInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetDailyDungeonEntryInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowAvatarInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowAvatarInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowNameCardInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFriendShowNameCardInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetFurnitureCurModuleArrangeCountReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetGachaInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetGachaInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetHomeLevelUpRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetHomeLevelUpRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetInvestigationMonsterReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetInvestigationMonsterRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMailItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMailItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetMapAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOnlinePlayerListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOpActivityInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetOpActivityInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetParentQuestVideoKeyReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetParentQuestVideoKeyRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerAskFriendListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerAskFriendListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerBlacklistRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerFriendListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerFriendListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerHomeCompInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerSocialDetailReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerSocialDetailRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerTokenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetPlayerTokenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestLackingResourceReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestLackingResourceRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestTalkHistoryReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetQuestTalkHistoryRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetRegionSearchReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetSceneAreaReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetSceneAreaRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetScenePointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetScenePointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopmallDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetShopmallDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetUgcTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWidgetSlotReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWidgetSlotRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWorldMpInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GetWorldMpInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GroupSuiteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/GroupUnloadNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/H5ActivityIdsNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/H5ActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitColliderTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitCollisionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HitTreeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeAllUnlockedBgmIdListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeAnimalDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBasicInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBasicInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockArrangementInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockDotPatternOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockFieldDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeBlockSubFieldDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeBgmRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeEditModeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeEditModeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeModuleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChangeModuleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChooseModuleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeChooseModuleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeComfortInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeCustomFurnitureInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeCustomFurnitureInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEditCustomFurnitureReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEditCustomFurnitureRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEnterEditModeFinishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeEnterEditModeFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureCustomSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureGroupDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeFurnitureSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetArrangementInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetArrangementInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetBasicInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetOnlineStatusReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGetOnlineStatusRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeGroupPlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopBuyGoodsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopBuyGoodsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopGoodsOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeLimitedShopOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointFurnitureDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointNPCDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointSceneDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeMarkPointSuiteDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleComfortInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleSeenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleSeenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeModuleUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeNewUnlockedBgmIdListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeNpcDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomePreChangeEditModeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeFetterExpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeFetterExpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeHomeCoinReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeResourceTakeHomeCoinRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneArrangementInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneInitFinishReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneInitFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneJumpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSceneJumpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureAllRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureGalleryScoreNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurnitureOneRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeSeekFurniturePlayerScoreOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeUpdateArrangementInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HomeUpdateArrangementInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/HostPlayerNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InferencePageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InfernceWordInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InstableSprayAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InterOpTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InteractTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationMonsterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationMonsterUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationQuestDailyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/InvestigationReadQuestDailyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEquipCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/IrodoriChessEquipCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemAddHintNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemCdGroupTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemGivingReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemGivingRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemHintOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemRenameAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ItemRenameAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternProjectionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternProjectionLevelInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LanternRiteFireworksStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LevelupCityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LifeStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LockedPersonallineDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunaRiteHintStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/LunchBoxDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MPLevelEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailCollectStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailItemOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MailTextContentOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapAreaInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkFromTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkPointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MapMarkPointTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkMapReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkMapRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkNewNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MarkTargetInvestigationMonsterNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MassivePropParamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MassivePropSyncInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteReturnNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteReturnTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialDeleteUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MaterialOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MathQuaternionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/McoinExchangeHcoinReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/McoinExchangeHcoinRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MiracleRingDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MiracleRingDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MistTrialBestAvatarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MistTrialLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierActionOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierDurabilityOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ModifierPropertyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterAIConfigHashNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterBornTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterPointArrayRouteUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MonsterRouteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MotionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MotionStateOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MovingPlatformTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MpPlayRewardInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MpSettingTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MuqadasPotionDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameActivityDetailInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameSettleReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameSettleRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameStartReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/MusicGameStartRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NightCrowGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NpcTalkReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/NpcTalkRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ObstacleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ObstacleModifyNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OfferingInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OneoffGatherPointDetectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OnlinePlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpenStateChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/OpenStateUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PSPlayerApplyEnterMpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PSPlayerApplyEnterMpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParamListOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestInferenceDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ParentQuestRandomInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PathfindingEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PathfindingEnterSceneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalLineAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalLineAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalSceneJumpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PersonalSceneJumpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PingReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PingRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformChangeRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformStartRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformStopRouteNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlatformTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayTeamEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpResultRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerApplyEnterMpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialBoostReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialBoostRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCompoundMaterialRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookArgsReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookArgsRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerCookRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerDieTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterDungeonReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterDungeonRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterSceneInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerEnterSceneNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerForceExitRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGameTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGetForceQuitBanInfoReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerGetForceQuitBanInfoRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerHomeCompInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerHomeCompInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLevelRewardUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLoginReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerLoginRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropChangeReasonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerPropNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerQuitDungeonReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerRTTInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerSetPauseReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerSetPauseRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerStoreNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWidgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldSceneInfoListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PlayerWorldSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PostEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PostEnterSceneRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PotionDungeonResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PrivateChatNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProfilePictureChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProfilePictureOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropChangeReasonOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PropValueOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProtEntityTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProudSkillChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ProudSkillExtraLevelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullPrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullPrivateChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullRecentChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/PullRecentChatRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCodexMonsterBeKilledNumReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCodexMonsterBeKilledNumRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryCurrRegionHttpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryFilterOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryPathReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryPathRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QueryRegionListHttpRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestCreateEntityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestCreateEntityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyEntityReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyEntityRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyNpcReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestDestroyNpcRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestGlobalVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestGlobalVarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestListNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestListUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestProgressUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestRenameAvatarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestRenameAvatarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestTransmitReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestTransmitRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestTimeVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestUpdateQuestVarRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuestVarOpOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/QuickUseWidgetRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReadMailNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReadPrivateChatReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RecordUsageOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RegionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RegionSimpleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryDecomposeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryDecomposeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryFilterStateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryFilterStateSaveNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ReliquaryUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResVersionConfigOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResinChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ResinCostTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RobotPushPlayerDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueDiaryDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RogueShowAvatarTeamInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoguelikeGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RouteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoutePointChangeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/RoutePointOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalesmanStatusTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageBundleChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageScoreChallengeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SalvageStageInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAreaUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAreaWeatherNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneAvatarStaminaStepReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityAiInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityAppearNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDisappearNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDrownReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityDrownRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneEntityMoveNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneFishInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneForceLockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneForceUnlockNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneGalleryHomeSeekFurnitureInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneInitFinishRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneKickPlayerReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneKickPlayerRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneMonsterInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneNpcInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePlayerLocationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneReliquaryInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneRouteChangeInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneRouteChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTeamAvatarOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTeamUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTransToPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneTransToPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SceneWeaponInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ScreenInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampActivityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampContributeItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampContributeItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeaLampSectionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SeeMonsterReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SelectWorktopOptionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SelectWorktopOptionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServantInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerAnnounceNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerAnnounceRevokeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerBuffChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerBuffOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerCondMeetQuestListUpdateNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerGlobalValueChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ServerTimeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetBattlePassViewedReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetBattlePassViewedRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetChatEmojiCollectionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetChatEmojiCollectionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEntityClientDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEquipLockStateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetEquipLockStateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetFriendEnterHomeOptionReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetFriendEnterHomeOptionRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetIsAutoUnlockSpecificEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetIsAutoUnlockSpecificEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetNameCardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetNameCardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetOpenStateReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetOpenStateRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBirthdayReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBirthdayRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBornDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerBornDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerHeadImageReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerHeadImageRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerNameReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerNameRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerPropReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerPropRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerSignatureReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetPlayerSignatureRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpAvatarTeamReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpAvatarTeamRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpLunchBoxWidgetReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetUpLunchBoxWidgetRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetWidgetSlotReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SetWidgetSlotRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopCardProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopConcertProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopGoodsOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopMcoinProductOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShopOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShortAbilityHashPairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ShowEquipOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkipPlayerGameTimeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkipPlayerGameTimeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkyCrystalDetectorDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SkyCrystalDetectorQuickUseResultOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SocialDetailOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SocialShowAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StatueGadgetInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StopServerInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreItemChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreItemDelNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StoreWeightLimitNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/StrengthenPointDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SumoDungeonSettleNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SyncScenePlayTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/SyncTeamEntityNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementGoalRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementGoalRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeAchievementRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBackGivingItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBackGivingItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassMissionPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassMissionPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeBattlePassRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCityReputationParentQuestReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCityReputationParentQuestRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCompoundOutputReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeCompoundOutputRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeFurnitureMakeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeFurnitureMakeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeMaterialDeleteReturnReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeMaterialDeleteReturnRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakePlayerLevelRewardReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakePlayerLevelRewardRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeoffEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TakeoffEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TanukiTravelFinishGuideQuestNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TanukiTravelLevelDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamChainChooseAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamEnterSceneInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TeamEntityInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonEnterSceneReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonQueryPathReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/ToTheMoonQueryPathRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerAllDataReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerAllDataRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerCurLevelRecordChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerCurLevelRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerEnterLevelReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerEnterLevelRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerFloorRecordChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerFloorRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelEndNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelStarCondDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerLevelStarCondNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerMiddleLevelChangeTeamNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerMonthlyBriefOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamSelectReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TowerTeamSelectRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrackingIOInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapRegionInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TreasureMapRegionInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarFirstPassDungeonNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarGrantRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TrialAvatarInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TriggerCreateGadgetToEquipPartNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TryEnterHomeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/TryEnterHomeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicBriefInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicNoteOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicRecordOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcMusicTrackOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UgcTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/Uint32PairOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnionCmdNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnionCmdOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockAvatarTalentReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockAvatarTalentRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockNameCardNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockPersonalLineReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockPersonalLineRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockTransPointReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockTransPointRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockedFurnitureFormulaDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UnlockedFurnitureSuiteDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdateAbilityCreatedMovingPlatformNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowAvatarListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowAvatarListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowNameCardListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UpdatePlayerShowNameCardListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UseItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/UseItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/Vector3IntOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VectorOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VectorPlaneOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleInteractTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleMemberOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VehicleStaminaNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageBoothUsedItemDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketDeliverItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VintageMarketDeliverItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/VisionTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponAwakenReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponAwakenRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponPromoteReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponPromoteRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponUpgradeReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeaponUpgradeRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WearEquipReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WearEquipRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeatherInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeatherWizardDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeekendDjinnInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WeeklyBossResinDiscountInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCoolDownDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCoolDownNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreateLocationInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreatorInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetCreatorOpTypeOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetDoBagReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetDoBagRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetAllDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetGadgetDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotChangeNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotOpOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WidgetSlotTagOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WindSeedClientNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptAllGiveItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptAllGiveItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptGiveItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptGiveItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampAcceptItemResultInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetCanGiveFriendItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetCanGiveFriendItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetRecvItemListReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGetRecvItemListRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGiveFriendItemReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampGiveFriendItemRspOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampRecvItemDataOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WinterCampRecvItemNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorktopInfoOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorktopOptionNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldChestOpenNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldDataNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldOwnerBlossomBriefInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldOwnerDailyTaskNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerDieNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerInfoNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerLocationNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerRTTNotifyOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerReviveReqOuterClass.java
#	src/generated/main/java/emu/grasscutter/net/proto/WorldPlayerReviveRspOuterClass.java
#	src/main/java/emu/grasscutter/GameConstants.java
#	src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java
#	src/main/java/emu/grasscutter/utils/Language.java
2023-04-30 23:08:05 -04:00
e524926ae0 Slight change on synchronization method. (#2135) 2023-04-30 22:05:15 -04:00
b2c5ae93d2 Fix language lint error 2023-04-30 22:04:48 -04:00
47a5aa4b59 Update quest line documentation 2023-04-30 21:15:49 -04:00
c2d9adb904 Fix quest command translation issue 2023-04-30 21:15:36 -04:00
d01ba08f26 Fix double adding of avatar entities 2023-04-30 20:58:31 -04:00
3f51db47c4 Move more logs from debug to trace 2023-04-30 20:57:03 -04:00
bb2255b9a0 Prevent game main quest from potentially firing twice 2023-04-30 20:56:38 -04:00
400a670856 Load talks from MainQuestData 2023-04-30 20:56:09 -04:00
6869008bcc Add quest debugging commands 2023-04-30 20:53:23 -04:00
cf56d032de Move constant debug spam to trace 2023-04-30 01:28:52 -04:00
48dd1685a2 Check current character index 2023-04-30 00:30:03 -04:00
9b507a6ec3 Add support for legacy and newer quest excels 2023-04-29 21:35:49 -04:00
ed3186a2b2 Fix trial avatar removal
it is still *sort of* broken when combined with early leaving a domain
2023-04-29 21:21:58 -04:00
b77c75a296 Check if a sub-quest's data exists before invoking it 2023-04-29 20:40:33 -04:00
9bbdc11334 Validate EntityAvatar scene before invoking 2023-04-29 20:39:57 -04:00
dd2d1dc7e2 Move activity resource loading to debug and warn 2023-04-29 20:38:49 -04:00
7a2d5ba11a Add notes; format; clean-up 2023-04-29 14:07:47 -04:00
76251c6718 Fix invalid gadget info for worktops 2023-04-29 14:07:22 -04:00
404ff9233a Fix removing trial avatars
this prevents exceptions from being thrown. see questing thread for more information.
2023-04-29 14:05:38 -04:00
5f4f220eab Fix NPEs when player leaves world 2023-04-29 14:04:26 -04:00
02653620d4 Implement hack for event source in triggers 2023-04-29 13:01:33 -04:00
df1b65b8a8 Check active team size, rather than using a 4 constant 2023-04-29 02:10:14 -04:00
5fcfea2b11 Merge remote-tracking branch 'origin/unstable-quests' into unstable-quests 2023-04-29 02:01:20 -04:00
0beb9b6d0b Add hotswap-agent.properties to .gitignore 2023-04-29 02:01:12 -04:00
391903ac0e Fix some behavior of trial avatars
investigation is required on the exceptions thrown
2023-04-29 02:01:00 -04:00
d5f75e1889 Attempt to correct PlayerSetPauseReq
this is still broken; further investigation is required
2023-04-29 02:00:13 -04:00
7efa6d1b78 Fix potential NPE
this can occur if the player disconnects before logging in
2023-04-29 01:59:45 -04:00
c2e9bdd261 Fix new account time 2023-04-29 01:59:18 -04:00
be2eef410a fix /give avatars - currentTalentLevel cannot be negative (#2132) 2023-04-26 23:15:35 -04:00
4109cb0625 Remove garbages from Scene.java (#2131) 2023-04-24 21:00:34 -04:00
34c3c6229f Merge branch 'development' into unstable-quests
# Conflicts:
#	src/main/java/emu/grasscutter/command/commands/SetPropCommand.java
2023-04-24 21:00:03 -04:00
18124bd053 Merge branch 'development' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/command/commands/SetPropCommand.java
2023-04-24 20:58:14 -04:00
52ac9cd75e Remove obsolete code 2023-04-24 20:56:20 -04:00
3e6b38c407 Catch LuaError when loading scene groups 2023-04-24 03:11:47 -04:00
9c77ddc42e Move cache hit to trace 2023-04-24 03:11:26 -04:00
66b0e6f3c6 Fix issue with serialized GridPositions 2023-04-24 03:11:09 -04:00
25c72a19e0 Fix main quest data loading issue 2023-04-24 03:10:22 -04:00
486582b81c Revert previous; fix data parsing issue 2023-04-24 02:26:00 -04:00
fb686b2afc Add sub-quest data only in BinOutput
could fix things sometimes
2023-04-24 02:01:17 -04:00
1a8d7e901a Apply additional data from specific main quest lines 2023-04-24 01:44:58 -04:00
0d680a6310 Fix quest domains not showing up 2023-04-24 00:09:59 -04:00
40b23ec4a4 Add new protocol definitions 2023-04-23 23:12:20 -04:00
e85d269518 Run spotlessApply on previous commit 2023-04-23 23:12:01 -04:00
c9d6225194 Apply changes from #63 (Anime-Game-Servers/Grasscutter-Quests) 2023-04-23 22:51:08 -04:00
d608831594 Update quest line documentation 2023-04-20 01:12:25 -04:00
375bb77abe Attempt to keep parity with Grasscutter-Quests & Fix add trial avatar issue 2023-04-20 00:58:23 -04:00
ae45177ed5 Fixing the starting world time
the proper start time should be 9 game hours
2023-04-20 00:40:13 -04:00
84c5a76e5d Fix quests always showing dungeon IDs 2023-04-20 00:26:35 -04:00
a53328346a Fix avatar trial status being saved to the database 2023-04-20 00:22:29 -04:00
de19116191 Check for custom server resources 2023-04-18 17:43:10 -04:00
ee298235c2 Run spotlessApply 2023-04-18 17:17:55 -04:00
75f163f704 Fix avatar type values 2023-04-18 16:01:29 -04:00
de0217f435 Send avatar type to client
also switch to lambda reference
2023-04-18 15:56:19 -04:00
361620de6d Merge branch 'development' into unstable-quests
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePointUnlockNotifyOuterClass.java
#	src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerCombatInvocationsNotify.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerDungeonEntryInfoReq.java
2023-04-18 15:36:29 -04:00
c11b8a53a3 Merge branch 'development' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerCombatInvocationsNotify.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerDungeonEntryInfoReq.java
2023-04-18 15:32:50 -04:00
0dd41f9350 implement getCachePath (#2121)
* implement getCachePath

for further use like grids cache.

* Update src/main/java/emu/grasscutter/utils/FileUtils.java

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
2023-04-18 15:19:29 -04:00
6989d49080 Remove the first area from being auto-unlocked when questing is enabled 2023-04-15 13:33:30 -04:00
c672a2d9cb Move gadget controller loaded message to debug 2023-04-15 13:17:09 -04:00
d8f90b26cf Fix entity controllers not loading
elemental monuments should now work
2023-04-15 01:41:19 -04:00
2b4feba86f Fix issue with Amber not being added
the field for an item's `useOnGain` was final!
2023-04-15 01:23:32 -04:00
f2019aa88a Fix drop system error 2023-04-15 00:50:03 -04:00
f08ba95071 Remove forEach on group replacements 2023-04-14 23:56:42 -04:00
fcc68891be Remove .gitattributes
this should fix some line separator issues
2023-04-14 23:33:54 -04:00
55118c802d Load custom server resources 2023-04-14 23:27:08 -04:00
a8a78547a1 Fix level entity data loading 2023-04-14 22:59:57 -04:00
6b492656a1 Set dungeon manager when entering a dungeon 2023-04-14 22:44:59 -04:00
e93175621b Use the player's selected main character when setOwner is called 2023-04-14 22:01:09 -04:00
7bdcf4e0d2 Merge packet handlers from quests/quests 2023-04-14 21:59:15 -04:00
b5190bca45 Update quest line documentation 2023-04-14 02:39:15 -04:00
c08633aa46 Fix issue with trial teams 2023-04-14 02:37:15 -04:00
ae56b33265 Fix avatar skill behavior when changing elements 2023-04-14 01:54:43 -04:00
3224bbeb4f Fix setOrFetch on 0 values 2023-04-14 01:02:11 -04:00
2a5c7bf75c Temporarily fix issue with all quests being added at once 2023-04-14 00:35:16 -04:00
6c1cff38b4 Fix default Traveler 2023-04-14 00:31:46 -04:00
8687e60b92 Merge branch 'development' into unstable
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/ScenePointUnlockNotifyOuterClass.java
2023-04-13 22:45:15 -04:00
af01282594 Add data for new drop system 2023-04-13 22:44:50 -04:00
84713d9b2e Set CRLF as the default line separator
this will be changed back to LF after unstable-quests is finished
2023-04-13 22:43:46 -04:00
f71b29c00a Implement a new item drops system (#2112)
* 1

* Delete .gitattributes

* implement

* Update PacketDropHintNotify.java

* Update PacketWorldChestOpenNotify.java

* Update FileUtils.java

* Update PacketDropHintNotify.java

* Update WorldDataSystem.java

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
2023-04-13 22:28:54 -04:00
eda5e8c5e0 Fix #2114 (metaMonster can be null) 2023-04-13 21:47:47 -04:00
55a7c0314d Merge remote-tracking branch 'origin/unstable-quests' into unstable-quests 2023-04-13 21:34:55 -04:00
22fd7ab619 Fix potential NPR 2023-04-13 21:22:21 -04:00
b9a2694ea7 Fix Lua exec call (#2115)
* Fix Lua exec call

## Description
fix 352 should not have any slime spawns, its 353 and 351 has a single slime spawn

Please carefully read the [Contributing note](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md) and [Code of conduct](https://github.com/Grasscutters/Grasscutter/blob/development/CODE_OF_CONDUCT.md) before making any pull requests.

## Issues fixed by this PR

<!--- Put the links of issues that may be fixed by this PR here (if any). -->
## Type of changes

<!--- Put an `x` in all the boxes that apply your changes. -->

- [x] Bug fix
- [ ] New feature 
- [ ] Enhancement
- [ ] Documentation

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] My pull request is unique and no other pull requests have been opened for these changes
- [x] I have read the [Contributing note](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md) and [Code of conduct](https://github.com/Grasscutters/Grasscutter/blob/development/CODE_OF_CONDUCT.md)
- [x] I am responsible for any copyright issues with my code if it occurs in the future.

* Update ExecNotifyGroupLua.java

* Update ExecNotifyGroupLua.java

* Update ExecNotifyGroupLua.java

* new ScriptArgs(groupId, eventType, quest.getSubQuestId())          .setEventSource(String.valueOf(quest.getSubQuestId()));
2023-04-13 21:21:43 -04:00
c71386c69e Implement quest data field: gainItems 2023-04-13 20:33:31 -04:00
29501bcd81 Add flyable status to /prop 2023-04-13 18:06:35 -04:00
47cdfe5c14 Handle quest execute which sets the player's flying state 2023-04-13 18:00:25 -04:00
64eb6ee325 Add correct player defaults when questing is enabled 2023-04-13 17:55:47 -04:00
38ba9771ec Remove default Anemo skill depot from a Traveler when questing is enabled 2023-04-13 17:53:18 -04:00
ecd0ea7a8c Auto-enable questing in the config 2023-04-13 17:37:32 -04:00
d6efaaea86 Call Player#onPlayerBorn when the player is created 2023-04-13 17:34:04 -04:00
41be058509 Update documentation to match current state of codebase 2023-04-13 17:21:00 -04:00
55b61a93c6 Convert prologue table to a markdown table 2023-04-13 17:02:49 -04:00
6819ef6bdc line separators?? 2023-04-13 15:49:38 -04:00
349f76b7d8 Merge remote-tracking branch 'origin/unstable-quests' into unstable-quests 2023-04-13 15:47:32 -04:00
4251b53d75 Fix boss name display. (#2111) 2023-04-13 00:59:40 -04:00
b42d8b67ed Fix quest progression when entering a domain 2023-04-12 02:59:44 -04:00
60eb62fa42 Spawn the player at the scene's start position when sent to a dungeon 2023-04-12 02:34:13 -04:00
0de69cd1fa Show available story dungeons to the player 2023-04-12 02:01:22 -04:00
b0ab0c68ad Fix hanging on scene creation
Invoke `SceneScriptManager#init` in a thread.
2023-04-11 23:11:23 -04:00
7bac95098a Optimize 71a8ca2a 2023-04-11 21:09:52 -04:00
97f74d9d55 Move persistant logger calls to trace 2023-04-11 21:07:50 -04:00
71a8ca2a8a Implement scripting: SetEntityServerGlobalValueByConfigId
w/ help from: Moistcrafter#9172
2023-04-11 21:07:29 -04:00
c1ea2b04ec Add wiki content from Grasscutter-Quests to documentation 2023-04-11 18:13:35 -04:00
68561369f3 Move services loggers to 'debug-all' 2023-04-11 17:58:57 -04:00
5851761d59 Enable 'big world scripts' by default
this uses significantly more system resources, but in turn allows for the *quest* system to work!
2023-04-11 02:12:33 -04:00
76be70d4a8 Fix grid parsing
now compatiable with Yukki's resources!
2023-04-11 02:05:38 -04:00
990b36cbce Move scripting-related logger messages to debug 2023-04-11 02:05:12 -04:00
54b7d1251e Fix order of logging scene group loading errors 2023-04-10 23:44:22 -04:00
06cbae31fa Fix player fields not being set
line seps r weird
2023-04-10 22:46:19 -04:00
92afa64629 Merge remote-tracking branch 'origin/unstable' into unstable 2023-04-10 22:23:19 -04:00
5e56b5e3a8 Merge branch 'development' into unstable-quests
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/ResinChangeNotifyOuterClass.java
#	src/main/java/emu/grasscutter/game/managers/ResinManager.java
#	src/main/java/emu/grasscutter/game/player/Player.java
#	src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseAddItem.java
#	src/main/java/emu/grasscutter/server/http/dispatch/RegionHandler.java
#	src/main/java/emu/grasscutter/server/packet/send/PacketResinChangeNotify.java
#	src/main/java/emu/grasscutter/utils/Crypto.java
2023-04-10 22:13:50 -04:00
559261963d Merge branch 'development' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/server/http/dispatch/RegionHandler.java
#	src/main/java/emu/grasscutter/utils/Crypto.java
2023-04-10 22:11:51 -04:00
3d87ba7f09 Lint Code [skip actions] 2023-04-11 02:08:02 +00:00
a96506ccf9 Merge remote-tracking branch 'origin/unstable' into unstable 2023-04-10 22:07:19 -04:00
7a178a7d3d Add the compiled handbook to .gitignore 2023-04-10 22:07:09 -04:00
ff2e74de68 Implement give item (frontend) 2023-04-10 22:05:06 -04:00
1661c42def Implement give item & Implement configurable handbook endpoints 2023-04-10 22:04:47 -04:00
eff01b6cea Move illegal/invalid item IDs to GameConstants 2023-04-10 22:03:27 -04:00
afce31e53b Lint Code [skip actions] 2023-04-10 07:24:16 +00:00
8cc725e45c Implement handbook SDK for commands (avatars) 2023-04-10 03:23:07 -04:00
2bd992592d Implement server API for handbook controls (avatar) 2023-04-10 03:22:48 -04:00
62fd82fa54 Add packet for WindSeedClientNotify
still a blacklisted packet however
2023-04-10 02:15:08 -04:00
c66b920068 Merge remote-tracking branch 'origin/unstable' into unstable 2023-04-10 01:50:55 -04:00
7ad6c892ce Merge branch 'development' into unstable
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/ResinChangeNotifyOuterClass.java
#	src/main/java/emu/grasscutter/game/managers/ResinManager.java
#	src/main/java/emu/grasscutter/game/player/Player.java
#	src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseAddItem.java
#	src/main/java/emu/grasscutter/server/packet/send/PacketResinChangeNotify.java
2023-04-10 01:49:12 -04:00
d348146928 Lint Code [skip actions] 2023-04-10 05:44:09 +00:00
18c143e12f Fix base route navigation 2023-04-10 01:16:53 -04:00
5ac93645e4 Lint Code [skip actions] 2023-04-10 05:06:53 +00:00
65532ffd90 Merge remote-tracking branch 'origin/unstable' into unstable
# Conflicts:
#	src/handbook/src/backend/types.ts
#	src/handbook/src/ui/pages/ItemsPage.tsx
#	src/handbook/src/ui/widgets/MiniCard.tsx
2023-04-10 01:06:06 -04:00
5d90dd2827 Add a dumper for entity info 2023-04-10 00:59:31 -04:00
16875e85ac Implement the entities page 2023-04-10 00:59:01 -04:00
1239bc05b2 Lint Code [skip actions] 2023-04-10 00:59:40 +00:00
127d45f21f Implement the scenes page 2023-04-09 20:58:03 -04:00
e5efe00285 Parse scene info 2023-04-09 20:38:19 -04:00
a8289b782f Add a dumper for scene info 2023-04-09 20:34:04 -04:00
faadffda21 Fix homepage disclaimer 2023-04-09 19:45:29 -04:00
efcf124003 Fix descriptions on cards 2023-04-09 19:27:42 -04:00
d4936abb37 Remove testing/CN items from the item dump 2023-04-09 18:51:54 -04:00
3557981b4a Add 'Add to Inventory' item card widget 2023-04-09 18:50:32 -04:00
bc3310ae29 Add card for item information 2023-04-09 17:47:56 -04:00
219d9f28e1 Add spot to input game UID 2023-04-09 17:46:29 -04:00
e20c7c151b Lint code 2023-04-09 14:50:59 -04:00
bb6569b736 Add language keys for new commands 2023-04-09 14:46:55 -04:00
644f1b3ab9 Continue merging quests (pt. 2) 2023-04-09 14:35:45 -04:00
97ee71bcf4 Continue merging quests (pt. 1)
Finished last at: `World.java`, line `player.setAvatarsAbilityForScene(newScene);`
2023-04-09 13:25:16 -04:00
4231b26eea Fix route -> page binding 2023-04-08 23:52:54 -04:00
8f74168a23 Fix issue with default 1080p 100% scaling
we need an autoscaler!
2023-04-08 23:50:55 -04:00
25d38344b0 Lint Code [skip actions] 2023-04-09 03:48:05 +00:00
82e43d9072 Force npm install for handbook actions 2023-04-08 23:47:19 -04:00
f483fb6ea8 Remove duplicate item entries
This filters items by name and ID.
2023-04-08 23:46:54 -04:00
32f11e29b1 Load items faster 2023-04-08 23:35:20 -04:00
6c2f66fa2d Fix item icons to be more accurate
Project Amber is now the primary icon source!
2023-04-08 21:58:46 -04:00
2a5abc1dcb Add icons to item data 2023-04-08 21:56:51 -04:00
a27f7e0373 Implement part of the items page 2023-04-08 01:19:35 -04:00
b2f15066be Add more TypeScript aliases 2023-04-08 00:18:21 -04:00
181eb56471 Sort item data 2023-04-08 00:18:06 -04:00
74cff61824 Add "react-virtualized"
automatically patch it to remove unnecessary import
2023-04-08 00:17:23 -04:00
b683f75cfa Lint Code [skip actions] 2023-04-07 04:17:07 +00:00
155e5be8a7 Create basic items page 2023-04-07 00:09:29 -04:00
f594e8918b Center avatar labels 2023-04-06 23:59:45 -04:00
757d682cd6 Implement avatars/characters page
Handle edge-cases for avatar image rendering
2023-04-06 23:54:15 -04:00
1f27f83616 Merge remote-tracking branch 'origin/unstable' into unstable 2023-04-06 22:34:25 -04:00
0a26de7136 Fix linting script
(forgot that actions are in `src/handbook` already)
2023-04-06 22:34:19 -04:00
845c7cb457 Implement the commands page
additionally, clean-up imports
2023-04-06 22:31:13 -04:00
db8aa3f6f1 Add override for the scrollbar 2023-04-06 22:30:49 -04:00
ce27b005f8 Add function for getting a list of commands 2023-04-06 22:30:34 -04:00
44b90612f2 Fix data parsing with CSVs 2023-04-06 18:55:10 -04:00
5fe304d2e8 Change avatar data to a CSV file 2023-04-06 18:45:47 -04:00
bb20d0fd80 Add linter script
Fix issue with running `cd src/handbook` while in the handbook directory for building
2023-04-06 18:42:38 -04:00
4664a21fab Parse data into types 2023-04-06 22:13:17 +00:00
a12bcef065 Go home when title is clicked 2023-04-06 22:03:16 +00:00
314c8771da Attempt to fix handbook actions
clearly running cd prior to setting up node doesnt work
2023-04-06 04:56:39 -04:00
12898f6228 Implement loading dumped data for the handbook 2023-04-06 04:54:10 -04:00
7c4186f5df Create initial handbook data dumpers
these can be accessed by using `-dump=commands,en-us` or `-dump=avatars/items,EN` (all languages supported)
2023-04-05 22:43:19 -04:00
c64cc7d5e2 Merge branch 'development' into unstable-quests
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeRspOuterClass.java
2023-04-05 21:28:52 -04:00
c40908c5eb Format updated protocol classes 2023-04-05 21:27:35 -04:00
ea91bf9eb7 Fix switched fields (#2098) 2023-04-05 21:27:24 -04:00
ac7b4d1238 Format updated protocol classes 2023-04-05 21:25:44 -04:00
4345a0dffa Merge branch 'development' into unstable
# Conflicts:
#	src/generated/main/java/emu/grasscutter/net/proto/AvatarUpgradeRspOuterClass.java
2023-04-05 21:21:18 -04:00
6e3e770f79 Add basis of commands page 2023-04-05 21:20:48 -04:00
c86d538597 Add character widget 2023-04-04 23:42:35 -04:00
b17f97def6 Fix initial issues with navigation system 2023-04-04 22:44:17 -04:00
e0b1f275dd Implement navigation and the page system 2023-04-04 22:30:49 -04:00
30c8d01c9e Implement handbook sidebar
only works on desktops atm, mobile support is non-existant
2023-04-04 21:42:24 -04:00
1d03100dcc Add building for handbook
also implement linting, ci for handbook, and change `.editorconfig` to do 2-line for .yml
2023-04-04 21:41:06 -04:00
a4c3f90388 Add credits section to home page 2023-04-04 20:33:41 -04:00
b78f7f393e Add more home buttons & Add content disclaimer
i added a place to add credits; will do next probs
2023-04-04 19:36:32 -04:00
f5a012edad Merge branch 'development' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java
#	src/main/java/emu/grasscutter/utils/Utils.java
2023-04-03 23:45:28 -04:00
8f468ed0c9 Add basis of the content panel
- Home buttons
- Implement sidebar
- Add home title
2023-04-03 23:39:45 -04:00
9bb87ff60d Scaffold class-based React + Tailwind project
now configured with TypeScript aliases!
2023-04-03 22:33:53 -04:00
c0c60b5e4e Scaffold vite-react project 2023-04-03 22:23:03 -04:00
a3970f8e43 Format code 2023-04-02 21:34:07 -04:00
b03870ab48 Merge branch 'development' into unstable-quests
# Conflicts:
#	src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java
#	src/main/java/emu/grasscutter/utils/Utils.java
2023-04-02 21:33:33 -04:00
b2c9e8de3e Merge branch 'unstable' into unstable-quests 2023-04-02 21:31:39 -04:00
d77ded560a Merge branch 'development' into unstable 2023-04-02 21:31:00 -04:00
95e1d77b65 Merge branch 'fixmail' into unstable
# Conflicts:
#	src/main/java/emu/grasscutter/game/mail/Mail.java
#	src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java
#	src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailReq.java
#	src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java
#	src/main/java/emu/grasscutter/utils/Utils.java
2023-04-02 21:30:52 -04:00
90fb606f68 Simplify the mail handler 2023-04-02 21:23:02 -04:00
8b4471ee54 Check if the scene has a config 2023-04-02 20:42:12 -04:00
ddafeb9ed3 fix: mail 2023-04-03 00:18:48 +09:00
9fbb7fb3be Continue updating/refactoring classes
Most code is matched from `Grasscutter-Quests`.
2023-04-01 22:17:10 -04:00
772532515e Comment-out unknown packet handlers/encoders
These are mostly related to the teapot, music game, and custom teams
2023-04-01 20:00:08 -04:00
3e6aa79eb8 Add additional protocol classes
Using `gc-quest-fix`
2023-04-01 19:54:11 -04:00
29956421f0 Fix existing protocol classes
Using `gc-quest-fix`
2023-04-01 19:53:46 -04:00
daa51e53b7 Copy some files from Grasscutter-Quests
NOT completely finished, nor is it completely done. Protocol issues remain! (including lack of packet IDs)
2023-04-01 18:06:30 -04:00
262ee38ded Create files from Grasscutter-Quests
these files are NOT directly compatible with Grasscutter, and require additional modifications to the codebase to work.
2023-03-31 23:58:12 -04:00
86aad96125 Add task for gradle test 2023-03-31 23:37:50 -04:00
c8288d1446 Add the improved KCP library 2023-03-31 23:37:25 -04:00
e636fda14f Run Spotless on src/test 2023-03-31 22:34:19 -04:00
6d9a81ba1c Run Spotless on src/generated 2023-03-31 22:32:25 -04:00
fc05602128 Run Spotless on src/main 2023-03-31 22:30:45 -04:00
99822b0e22 Remove reflowLongStrings
Causes an issue with Spotless!
2023-03-31 22:25:47 -04:00
877937bfbb Create a basic test for Grasscutter's HTTP server 2023-03-31 22:15:28 -04:00
2081087c76 Format build.gradle and add dependency for JUnit tests 2023-03-31 22:14:56 -04:00
bbe51fb945 Add support for unit testing
- Add argument `-testing`, which allows for a threaded console
2023-03-31 22:13:58 -04:00
31465c0172 Force Git to use LF for line separation 2023-03-31 17:19:46 -04:00
15e2f3ca34 Run IntelliJ IDEA code formatter 2023-03-31 17:19:26 -04:00
5bf5fb07a2 Move scripts away from the root directory 2023-03-31 17:05:12 -04:00
108 changed files with 602 additions and 2405 deletions

View File

@ -4,6 +4,7 @@ on:
pull_request_target:
types:
- opened
- reopened
branches:
- development
paths:

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>
@ -22,23 +22,51 @@
**Note**: For support please join our [Discord](https://discord.gg/T5vZU6UyeG).
### Quick Start (automatic)
### Requirements
- 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)
* [Java SE - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) or higher
- 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.
- Click `Download All-in-One`
- Click the gear in the upper right corner
- Set the game Install path to where your game is located.
- Set the Custom Java Path to `C:\Program Files\Java\jdk-17\bin\java.exe`
- Leave all other settings on default
**Note:** If you just want to **run it**, then **jre** only is fine.
- Click the small button next to launch.
- Click the launch button.
- Log in with whatever username you want. Password doesn't matter.
* [MongoDB](https://www.mongodb.com/try/download/community) (recommended 4.0+)
* Proxy Daemon: [mitmproxy](https://mitmproxy.org/) (mitmdump, recommended), [Fiddler Classic](https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe), etc.
### Running
**Note:** If you updated from an older version, delete `config.json` to regenerate it.
1. Get `grasscutter.jar`
- Download from [releases](https://github.com/Grasscutters/Grasscutter/releases/latest) or [actions](https://github.com/Grasscutters/Grasscutter/actions/workflows/build.yml) or [build the server by yourself](#building).
2. Create a `resources` folder in the directory where grasscutter.jar is located and move your `BinOutput, ExcelBinOutput, Readables, Scripts, Subtitle, TextMap` folders there *(Check the [wiki](https://github.com/Grasscutters/Grasscutter/wiki) for more details how to get those.)*
3. Run Grasscutter with `java -jar grasscutter.jar`. **Make sure mongodb service is running as well.**
### Connecting with the client
½. Create an account in the server console using this [command](https://github.com/Grasscutters/Grasscutter/wiki/Commands#:~:text=account%20%3Ccreate|delete%3E%20%3Cusername%3E%20[UID]).
1. Redirect traffic: (choose one only)
- mitmdump: `mitmdump -s proxy.py -k`
- Trust CA certificate:
- The CA certificate is usually stored in `%USERPROFILE%\.mitmproxy`, double click `mitmproxy-ca-cert.cer` to [install](https://docs.microsoft.com/en-us/skype-sdk/sdn/articles/installing-the-trusted-root-certificate#installing-a-trusted-root-certificate) or...
- Via command line *(needs administration privileges)*
```shell
certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
```
- Fiddler Classic: Run Fiddler Classic, turn on `Decrypt HTTPS traffic` in (Tools -> Options -> HTTPS) and change the default port in (Tools -> Options -> Connections) to anything other than `8888`, load [this script](https://github.com/Grasscutters/Grasscutter/wiki/Resources#fiddler-classic-jscript) (copy and paste the script in the `FiddlerScript` tab) and click the `Save Script` button.
- [Hosts file](https://github.com/Grasscutters/Grasscutter/wiki/Resources#hosts-file)
2. Set network proxy to `127.0.0.1:8080` or the proxy port you specified.
- For mitmproxy: After setting up the network proxy and installing the certificate, check http://mitm.it/ if traffic is passing through mitmproxy.
**You can also use `start.cmd` to start servers and proxy daemons automatically, but you have to set up `JAVA_HOME` environment and configure the `start_config.cmd` file.**
### Building
@ -52,7 +80,7 @@ Grasscutter uses Gradle to handle dependencies & building.
##### Windows
```shell
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
git clone --recurse-submodules -b unstable https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
.\gradlew.bat # Setting up environments
.\gradlew jar # Compile
@ -61,7 +89,7 @@ cd Grasscutter
##### Linux (GNU)
```bash
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
git clone --recurse-submodules -b unstable https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
chmod +x gradlew
./gradlew jar # Compile

View File

@ -57,7 +57,7 @@ sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
group = 'io.grasscutter'
version = '1.6.1'
version = '2.0.0-unstable'
java {
withJavadocJar()
@ -335,48 +335,18 @@ tasks.register('generateHandbook') {
return
}
def npmVersion = {
def nodeVersion = {
try {
return 'npm --version'.execute().text.trim()
return 'node --version'.execute().text.trim()
} catch (ignored) {
return 'NPM_NOT_FOUND'
return 'NODE_NOT_FOUND'
}
}
// Check if Node is installed.
if (npmVersion() == 'NPM_NOT_FOUND') {
println('NPM is not installed. Skipping handbook generation.')
if (nodeVersion() == 'NODE_NOT_FOUND') {
println('Node is not installed. Skipping handbook generation.')
} else {
// Check if the handbook resources are present.
if (!file('src/handbook/data/commands.json')) {
println('Command data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/avatars.csv')) {
println('Avatar data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/entities.csv')) {
println('Entity data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/items.csv')) {
println('Item data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/mainquests.csv')) {
println('Main quest data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/quests.csv')) {
println('Quest data was not found. Skipping handbook generation.')
return
}
if (!file('src/handbook/data/scenes.csv')) {
println('Scene data was not found. Skipping handbook generation.')
return
}
// Build the handbook.
var npm = 'npm'
if (Os.isFamily(Os.FAMILY_WINDOWS))

View File

@ -1,5 +1,5 @@
![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="Documention" 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"><img alt="Documention" 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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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="Documention" 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"><img alt="Documention" 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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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="Documention" 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"><img alt="Documention" 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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,5 +1,5 @@
![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"><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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,11 +1,11 @@
![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"><img alt="Documention" 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/workflow/status/Grasscutters/Grasscutter/Build?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) | [简中](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)
**注意:** 我们始终欢迎项目的贡献者。但在做贡献之前,请仔细阅读我们的[代码规范](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)。
**注意:** 欢迎成为本项目的贡献者。但在提交 PR 之前, 请仔细阅读 [代码规范](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md)。
## 当前功能
@ -16,59 +16,92 @@
* 祈愿
* 多人游戏 *部分* 可用
* 从控制台生成魔物
* 背包功能(接收或升级物品、角色等)。
* 物品 (接收或升级角色、武器等)
## 快速安装指南
## 快速设置指南
**注意:** 如需帮助请加入我们的[Discord](https://discord.gg/T5vZU6UyeG)
**注意:** 如需帮助请加入 [Discord](https://discord.gg/T5vZU6UyeG)
### 快速开始(全自动)
### 环境需求
- 获取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)
* [Java SE - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
- 下载[最新的Cultivation版本](https://github.com/Grasscutters/Cultivation/releases/latest)(使用以“.msi”为后缀的安装包
- 以管理员身份打开Culivation按右上角的下载按钮。
- 点击“下载 Grasscutter 一体化”
- 点击右上角的齿轮
- 将游戏安装路径设置为你游戏所在的位置。
- 将自定义Java路径设置为`C:\Program Files\Java\jdk-17\bin\java.exe`
- 保持所有其它设置为默认值
**注意:** 如果想仅**运行服务端**, 只下载 **jre** 即可
- 点击“启动”按钮旁边的小按钮。
- 点击“启动”按钮。
- 随便想一个用户名登录,不需要密码。
* [MongoDB](https://www.mongodb.com/try/download/community) (推荐 4.0+)
* 代理程序: [mitmproxy](https://mitmproxy.org/) (仅需 mitmdump推荐使用), [Fiddler Classic](https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe) 等
### 运行服务端
**注意:** 从旧版本升级到新版本, 需要删除 `config.json` 使其重新生成
1. 获取 `grasscutter.jar`
- 从 [actions](https://github.com/Grasscutters/Grasscutter/actions) 下载,或 [自行编译](#构建)
2. 在 JAR 文件根目录中创建 `resources` 文件夹并复制 `BinOutput``ExcelBinOutput` *(查看 [Wiki](https://github.com/Grasscutters/Grasscutter/wiki) 了解更多)*
3. **确认 MongoDB 服务运行正常后**,使用命令行 `java -jar grasscutter.jar` 运行 Grasscutter。
### 客户端连接
½. 在服务器控制台 [创建账户](https://github.com/Grasscutters/Grasscutter/wiki/Commands#targeting)
1. 重定向流量: (选择其中一个)
- mitmdump: `mitmdump -s proxy.py -k`
信任 CA 证书:
**注意:** mitmproxy 的 CA 证书通常存放在 `%USERPROFILE%\ .mitmproxy`, 或者从 `http://mitm.it` 下载证书
双击 [安装根证书](https://docs.microsoft.com/en-us/skype-sdk/sdn/articles/installing-the-trusted-root-certificate#installing-a-trusted-root-certificate)或者...
- 使用命令行
```shell
certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
```
- Fiddler Classic: 运行 Fiddler Classic, 在设置中开启 `解密 https 通信` 并将端口设为除 `8888` 以外的任意端口 (工具 -> 选项 -> 连接) 并加载 [此脚本](https://github.lunatic.moe/fiddlerscript)
- [Hosts 文件](https://github.com/Grasscutters/Grasscutter/wiki/Running#traffic-route-map)
2. 设置代理为 `127.0.0.1:8080` 或你设置的端口
**也可直接运行 `start.cmd` 一键启动服务端并设置代理, 但设置 `JAVA_HOME` 环境变量并配置 `start_config.cmd`**
### 构建
Grasscutter使用Gradle来处理依赖和构建
Grasscutter 使用 Gradle 来处理依赖及编译
**前置**
**前置依赖:**
- [Java SE Development Kits - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)或更高版本
- [Java SE Development Kits - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
- [Git](https://git-scm.com/downloads)
##### Windows
```shell
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
git clone https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
.\gradlew.bat # 设置开发环境
.\gradlew.bat # 建立开发环境
.\gradlew jar # 编译
```
##### LinuxGNU
##### Linux
```bash
git clone --recurse-submodules https://github.com/Grasscutters/Grasscutter.git
git clone https://github.com/Grasscutters/Grasscutter.git
cd Grasscutter
chmod +x gradlew
./gradlew jar # 编译
```
你可以在项目的根目录找到输出的jar。
* 编译后的 JAR 文件会在源码根目录生成
### 故障排除
### 命令列表请到 [wiki](https://github.com/Grasscutters/Grasscutter/wiki/Commands) 查看
获取常见问题的解决方案或寻求帮助,请加入[我们的Discord服务器](https://discord.gg/T5vZU6UyeG)并进入“support”频道。
# 快速问题排除
* 如果编译失败, 请检查 JDK 安装是否正确 (需要 JDK 17 并确认 JDK 的 bin 文件夹处于环境变量 `PATH` 中)
* 客户端无法登录、连接、错误 4206 等其他问题... - 大部分情况是因为代理设置出现了*问题*。
如果使用 Fiddler请确认 Fiddler 监听端口不是 `8888`
* 启动顺序: MongoDB > Grasscutter > 代理程序 (mitmdump, Fiddler 等) > 客户端

View File

@ -1,5 +1,5 @@
![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="Documention" 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"><img alt="Documention" 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/workflow/status/Grasscutters/Grasscutter/Build?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>

View File

@ -1,539 +0,0 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: AbilityActionSetRandomOverrideMapValue.proto
package emu.grasscutter.net.proto;
public final class AbilityActionSetRandomOverrideMapValueOuterClass {
private AbilityActionSetRandomOverrideMapValueOuterClass() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface AbilityActionSetRandomOverrideMapValueOrBuilder extends
// @@protoc_insertion_point(interface_extends:AbilityActionSetRandomOverrideMapValue)
com.google.protobuf.MessageOrBuilder {
/**
* <code>float random_value = 1;</code>
* @return The randomValue.
*/
float getRandomValue();
}
/**
* Protobuf type {@code AbilityActionSetRandomOverrideMapValue}
*/
public static final class AbilityActionSetRandomOverrideMapValue extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:AbilityActionSetRandomOverrideMapValue)
AbilityActionSetRandomOverrideMapValueOrBuilder {
private static final long serialVersionUID = 0L;
// Use AbilityActionSetRandomOverrideMapValue.newBuilder() to construct.
private AbilityActionSetRandomOverrideMapValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private AbilityActionSetRandomOverrideMapValue() {
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new AbilityActionSetRandomOverrideMapValue();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private AbilityActionSetRandomOverrideMapValue(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 13: {
randomValue_ = input.readFloat();
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.internal_static_AbilityActionSetRandomOverrideMapValue_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.internal_static_AbilityActionSetRandomOverrideMapValue_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.class, emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.Builder.class);
}
public static final int RANDOM_VALUE_FIELD_NUMBER = 1;
private float randomValue_;
/**
* <code>float random_value = 1;</code>
* @return The randomValue.
*/
@java.lang.Override
public float getRandomValue() {
return randomValue_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (randomValue_ != 0F) {
output.writeFloat(1, randomValue_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (randomValue_ != 0F) {
size += com.google.protobuf.CodedOutputStream
.computeFloatSize(1, randomValue_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue other = (emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue) obj;
if (java.lang.Float.floatToIntBits(getRandomValue())
!= java.lang.Float.floatToIntBits(
other.getRandomValue())) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + RANDOM_VALUE_FIELD_NUMBER;
hash = (53 * hash) + java.lang.Float.floatToIntBits(
getRandomValue());
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code AbilityActionSetRandomOverrideMapValue}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:AbilityActionSetRandomOverrideMapValue)
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValueOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.internal_static_AbilityActionSetRandomOverrideMapValue_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.internal_static_AbilityActionSetRandomOverrideMapValue_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.class, emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.Builder.class);
}
// Construct using emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
randomValue_ = 0F;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.internal_static_AbilityActionSetRandomOverrideMapValue_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue getDefaultInstanceForType() {
return emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue build() {
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue buildPartial() {
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue result = new emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue(this);
result.randomValue_ = randomValue_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue) {
return mergeFrom((emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue other) {
if (other == emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue.getDefaultInstance()) return this;
if (other.getRandomValue() != 0F) {
setRandomValue(other.getRandomValue());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private float randomValue_ ;
/**
* <code>float random_value = 1;</code>
* @return The randomValue.
*/
@java.lang.Override
public float getRandomValue() {
return randomValue_;
}
/**
* <code>float random_value = 1;</code>
* @param value The randomValue to set.
* @return This builder for chaining.
*/
public Builder setRandomValue(float value) {
randomValue_ = value;
onChanged();
return this;
}
/**
* <code>float random_value = 1;</code>
* @return This builder for chaining.
*/
public Builder clearRandomValue() {
randomValue_ = 0F;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:AbilityActionSetRandomOverrideMapValue)
}
// @@protoc_insertion_point(class_scope:AbilityActionSetRandomOverrideMapValue)
private static final emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue();
}
public static emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<AbilityActionSetRandomOverrideMapValue>
PARSER = new com.google.protobuf.AbstractParser<AbilityActionSetRandomOverrideMapValue>() {
@java.lang.Override
public AbilityActionSetRandomOverrideMapValue parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new AbilityActionSetRandomOverrideMapValue(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<AbilityActionSetRandomOverrideMapValue> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<AbilityActionSetRandomOverrideMapValue> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_AbilityActionSetRandomOverrideMapValue_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_AbilityActionSetRandomOverrideMapValue_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n,AbilityActionSetRandomOverrideMapValue" +
".proto\">\n&AbilityActionSetRandomOverride" +
"MapValue\022\024\n\014random_value\030\001 \001(\002B\033\n\031emu.gr" +
"asscutter.net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_AbilityActionSetRandomOverrideMapValue_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_AbilityActionSetRandomOverrideMapValue_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_AbilityActionSetRandomOverrideMapValue_descriptor,
new java.lang.String[] { "RandomValue", });
}
// @@protoc_insertion_point(outer_class_scope)
}

View File

@ -1,545 +0,0 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: AbilityMetaSetKilledState.proto
package emu.grasscutter.net.proto;
public final class AbilityMetaSetKilledStateOuterClass {
private AbilityMetaSetKilledStateOuterClass() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface AbilityMetaSetKilledStateOrBuilder extends
// @@protoc_insertion_point(interface_extends:AbilityMetaSetKilledState)
com.google.protobuf.MessageOrBuilder {
/**
* <code>bool killed = 6;</code>
* @return The killed.
*/
boolean getKilled();
}
/**
* <pre>
* Handcrafted by Magix!
* </pre>
*
* Protobuf type {@code AbilityMetaSetKilledState}
*/
public static final class AbilityMetaSetKilledState extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:AbilityMetaSetKilledState)
AbilityMetaSetKilledStateOrBuilder {
private static final long serialVersionUID = 0L;
// Use AbilityMetaSetKilledState.newBuilder() to construct.
private AbilityMetaSetKilledState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private AbilityMetaSetKilledState() {
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new AbilityMetaSetKilledState();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private AbilityMetaSetKilledState(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 48: {
killed_ = input.readBool();
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.internal_static_AbilityMetaSetKilledState_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.internal_static_AbilityMetaSetKilledState_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.class, emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.Builder.class);
}
public static final int KILLED_FIELD_NUMBER = 6;
private boolean killed_;
/**
* <code>bool killed = 6;</code>
* @return The killed.
*/
@java.lang.Override
public boolean getKilled() {
return killed_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (killed_ != false) {
output.writeBool(6, killed_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (killed_ != false) {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(6, killed_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState other = (emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState) obj;
if (getKilled()
!= other.getKilled()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + KILLED_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
getKilled());
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* <pre>
* Handcrafted by Magix!
* </pre>
*
* Protobuf type {@code AbilityMetaSetKilledState}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:AbilityMetaSetKilledState)
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledStateOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.internal_static_AbilityMetaSetKilledState_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.internal_static_AbilityMetaSetKilledState_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.class, emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.Builder.class);
}
// Construct using emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
killed_ = false;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.internal_static_AbilityMetaSetKilledState_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState getDefaultInstanceForType() {
return emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState build() {
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState buildPartial() {
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState result = new emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState(this);
result.killed_ = killed_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState) {
return mergeFrom((emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState other) {
if (other == emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState.getDefaultInstance()) return this;
if (other.getKilled() != false) {
setKilled(other.getKilled());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private boolean killed_ ;
/**
* <code>bool killed = 6;</code>
* @return The killed.
*/
@java.lang.Override
public boolean getKilled() {
return killed_;
}
/**
* <code>bool killed = 6;</code>
* @param value The killed to set.
* @return This builder for chaining.
*/
public Builder setKilled(boolean value) {
killed_ = value;
onChanged();
return this;
}
/**
* <code>bool killed = 6;</code>
* @return This builder for chaining.
*/
public Builder clearKilled() {
killed_ = false;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:AbilityMetaSetKilledState)
}
// @@protoc_insertion_point(class_scope:AbilityMetaSetKilledState)
private static final emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState();
}
public static emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<AbilityMetaSetKilledState>
PARSER = new com.google.protobuf.AbstractParser<AbilityMetaSetKilledState>() {
@java.lang.Override
public AbilityMetaSetKilledState parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new AbilityMetaSetKilledState(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<AbilityMetaSetKilledState> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<AbilityMetaSetKilledState> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_AbilityMetaSetKilledState_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_AbilityMetaSetKilledState_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\037AbilityMetaSetKilledState.proto\"+\n\031Abi" +
"lityMetaSetKilledState\022\016\n\006killed\030\006 \001(\010B\033" +
"\n\031emu.grasscutter.net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_AbilityMetaSetKilledState_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_AbilityMetaSetKilledState_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_AbilityMetaSetKilledState_descriptor,
new java.lang.String[] { "Killed", });
}
// @@protoc_insertion_point(outer_class_scope)
}

View File

@ -19,11 +19,11 @@ public final class AvatarUpgradeRspOuterClass {
com.google.protobuf.MessageOrBuilder {
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
int getOldFightPropMapCount();
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
boolean containsOldFightPropMap(
int key);
@ -34,19 +34,19 @@ public final class AvatarUpgradeRspOuterClass {
java.util.Map<java.lang.Integer, java.lang.Float>
getOldFightPropMap();
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
java.util.Map<java.lang.Integer, java.lang.Float>
getOldFightPropMapMap();
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
float getOldFightPropMapOrDefault(
int key,
float defaultValue);
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
float getOldFightPropMapOrThrow(
@ -65,11 +65,11 @@ public final class AvatarUpgradeRspOuterClass {
int getCurLevel();
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
int getCurFightPropMapCount();
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
boolean containsCurFightPropMap(
int key);
@ -80,19 +80,19 @@ public final class AvatarUpgradeRspOuterClass {
java.util.Map<java.lang.Integer, java.lang.Float>
getCurFightPropMap();
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
java.util.Map<java.lang.Integer, java.lang.Float>
getCurFightPropMapMap();
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
float getCurFightPropMapOrDefault(
int key,
float defaultValue);
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
float getCurFightPropMapOrThrow(
@ -177,19 +177,6 @@ public final class AvatarUpgradeRspOuterClass {
break;
}
case 98: {
if (!((mutable_bitField0_ & 0x00000002) != 0)) {
curFightPropMap_ = com.google.protobuf.MapField.newMapField(
CurFightPropMapDefaultEntryHolder.defaultEntry);
mutable_bitField0_ |= 0x00000002;
}
com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Float>
curFightPropMap__ = input.readMessage(
CurFightPropMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
curFightPropMap_.getMutableMap().put(
curFightPropMap__.getKey(), curFightPropMap__.getValue());
break;
}
case 106: {
if (!((mutable_bitField0_ & 0x00000001) != 0)) {
oldFightPropMap_ = com.google.protobuf.MapField.newMapField(
OldFightPropMapDefaultEntryHolder.defaultEntry);
@ -202,6 +189,19 @@ public final class AvatarUpgradeRspOuterClass {
oldFightPropMap__.getKey(), oldFightPropMap__.getValue());
break;
}
case 106: {
if (!((mutable_bitField0_ & 0x00000002) != 0)) {
curFightPropMap_ = com.google.protobuf.MapField.newMapField(
CurFightPropMapDefaultEntryHolder.defaultEntry);
mutable_bitField0_ |= 0x00000002;
}
com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Float>
curFightPropMap__ = input.readMessage(
CurFightPropMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
curFightPropMap_.getMutableMap().put(
curFightPropMap__.getKey(), curFightPropMap__.getValue());
break;
}
case 112: {
curLevel_ = input.readUInt32();
@ -236,9 +236,9 @@ public final class AvatarUpgradeRspOuterClass {
protected com.google.protobuf.MapField internalGetMapField(
int number) {
switch (number) {
case 13:
return internalGetOldFightPropMap();
case 12:
return internalGetOldFightPropMap();
case 13:
return internalGetCurFightPropMap();
default:
throw new RuntimeException(
@ -253,7 +253,7 @@ public final class AvatarUpgradeRspOuterClass {
emu.grasscutter.net.proto.AvatarUpgradeRspOuterClass.AvatarUpgradeRsp.class, emu.grasscutter.net.proto.AvatarUpgradeRspOuterClass.AvatarUpgradeRsp.Builder.class);
}
public static final int OLD_FIGHT_PROP_MAP_FIELD_NUMBER = 13;
public static final int OLD_FIGHT_PROP_MAP_FIELD_NUMBER = 12;
private static final class OldFightPropMapDefaultEntryHolder {
static final com.google.protobuf.MapEntry<
java.lang.Integer, java.lang.Float> defaultEntry =
@ -280,7 +280,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetOldFightPropMap().getMap().size();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -298,7 +298,7 @@ public final class AvatarUpgradeRspOuterClass {
return getOldFightPropMapMap();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -306,7 +306,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetOldFightPropMap().getMap();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -319,7 +319,7 @@ public final class AvatarUpgradeRspOuterClass {
return map.containsKey(key) ? map.get(key) : defaultValue;
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -356,7 +356,7 @@ public final class AvatarUpgradeRspOuterClass {
return curLevel_;
}
public static final int CUR_FIGHT_PROP_MAP_FIELD_NUMBER = 12;
public static final int CUR_FIGHT_PROP_MAP_FIELD_NUMBER = 13;
private static final class CurFightPropMapDefaultEntryHolder {
static final com.google.protobuf.MapEntry<
java.lang.Integer, java.lang.Float> defaultEntry =
@ -383,7 +383,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetCurFightPropMap().getMap().size();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -401,7 +401,7 @@ public final class AvatarUpgradeRspOuterClass {
return getCurFightPropMapMap();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -409,7 +409,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetCurFightPropMap().getMap();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -422,7 +422,7 @@ public final class AvatarUpgradeRspOuterClass {
return map.containsKey(key) ? map.get(key) : defaultValue;
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -485,14 +485,14 @@ public final class AvatarUpgradeRspOuterClass {
com.google.protobuf.GeneratedMessageV3
.serializeIntegerMapTo(
output,
internalGetCurFightPropMap(),
CurFightPropMapDefaultEntryHolder.defaultEntry,
internalGetOldFightPropMap(),
OldFightPropMapDefaultEntryHolder.defaultEntry,
12);
com.google.protobuf.GeneratedMessageV3
.serializeIntegerMapTo(
output,
internalGetOldFightPropMap(),
OldFightPropMapDefaultEntryHolder.defaultEntry,
internalGetCurFightPropMap(),
CurFightPropMapDefaultEntryHolder.defaultEntry,
13);
if (curLevel_ != 0) {
output.writeUInt32(14, curLevel_);
@ -518,16 +518,6 @@ public final class AvatarUpgradeRspOuterClass {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(10, retcode_);
}
for (java.util.Map.Entry<java.lang.Integer, java.lang.Float> entry
: internalGetCurFightPropMap().getMap().entrySet()) {
com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Float>
curFightPropMap__ = CurFightPropMapDefaultEntryHolder.defaultEntry.newBuilderForType()
.setKey(entry.getKey())
.setValue(entry.getValue())
.build();
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(12, curFightPropMap__);
}
for (java.util.Map.Entry<java.lang.Integer, java.lang.Float> entry
: internalGetOldFightPropMap().getMap().entrySet()) {
com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Float>
@ -536,7 +526,17 @@ public final class AvatarUpgradeRspOuterClass {
.setValue(entry.getValue())
.build();
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(13, oldFightPropMap__);
.computeMessageSize(12, oldFightPropMap__);
}
for (java.util.Map.Entry<java.lang.Integer, java.lang.Float> entry
: internalGetCurFightPropMap().getMap().entrySet()) {
com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Float>
curFightPropMap__ = CurFightPropMapDefaultEntryHolder.defaultEntry.newBuilderForType()
.setKey(entry.getKey())
.setValue(entry.getValue())
.build();
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(13, curFightPropMap__);
}
if (curLevel_ != 0) {
size += com.google.protobuf.CodedOutputStream
@ -713,9 +713,9 @@ public final class AvatarUpgradeRspOuterClass {
protected com.google.protobuf.MapField internalGetMapField(
int number) {
switch (number) {
case 13:
return internalGetOldFightPropMap();
case 12:
return internalGetOldFightPropMap();
case 13:
return internalGetCurFightPropMap();
default:
throw new RuntimeException(
@ -726,9 +726,9 @@ public final class AvatarUpgradeRspOuterClass {
protected com.google.protobuf.MapField internalGetMutableMapField(
int number) {
switch (number) {
case 13:
return internalGetMutableOldFightPropMap();
case 12:
return internalGetMutableOldFightPropMap();
case 13:
return internalGetMutableCurFightPropMap();
default:
throw new RuntimeException(
@ -927,7 +927,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetOldFightPropMap().getMap().size();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -945,7 +945,7 @@ public final class AvatarUpgradeRspOuterClass {
return getOldFightPropMapMap();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -953,7 +953,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetOldFightPropMap().getMap();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -966,7 +966,7 @@ public final class AvatarUpgradeRspOuterClass {
return map.containsKey(key) ? map.get(key) : defaultValue;
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
@java.lang.Override
@ -987,7 +987,7 @@ public final class AvatarUpgradeRspOuterClass {
return this;
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
public Builder removeOldFightPropMap(
@ -1006,7 +1006,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetMutableOldFightPropMap().getMutableMap();
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
public Builder putOldFightPropMap(
int key,
@ -1018,7 +1018,7 @@ public final class AvatarUpgradeRspOuterClass {
return this;
}
/**
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 13;</code>
* <code>map&lt;uint32, float&gt; old_fight_prop_map = 12;</code>
*/
public Builder putAllOldFightPropMap(
@ -1117,7 +1117,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetCurFightPropMap().getMap().size();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -1135,7 +1135,7 @@ public final class AvatarUpgradeRspOuterClass {
return getCurFightPropMapMap();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -1143,7 +1143,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetCurFightPropMap().getMap();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -1156,7 +1156,7 @@ public final class AvatarUpgradeRspOuterClass {
return map.containsKey(key) ? map.get(key) : defaultValue;
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
@java.lang.Override
@ -1177,7 +1177,7 @@ public final class AvatarUpgradeRspOuterClass {
return this;
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
public Builder removeCurFightPropMap(
@ -1196,7 +1196,7 @@ public final class AvatarUpgradeRspOuterClass {
return internalGetMutableCurFightPropMap().getMutableMap();
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
public Builder putCurFightPropMap(
int key,
@ -1208,7 +1208,7 @@ public final class AvatarUpgradeRspOuterClass {
return this;
}
/**
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 12;</code>
* <code>map&lt;uint32, float&gt; cur_fight_prop_map = 13;</code>
*/
public Builder putAllCurFightPropMap(
@ -1357,10 +1357,10 @@ public final class AvatarUpgradeRspOuterClass {
static {
java.lang.String[] descriptorData = {
"\n\026AvatarUpgradeRsp.proto\"\326\002\n\020AvatarUpgra" +
"deRsp\022B\n\022old_fight_prop_map\030\r \003(\0132&.Avat" +
"deRsp\022B\n\022old_fight_prop_map\030\014 \003(\0132&.Avat" +
"arUpgradeRsp.OldFightPropMapEntry\022\023\n\013ava" +
"tar_guid\030\010 \001(\004\022\021\n\tcur_level\030\016 \001(\r\022B\n\022cur" +
"_fight_prop_map\030\014 \003(\0132&.AvatarUpgradeRsp" +
"_fight_prop_map\030\r \003(\0132&.AvatarUpgradeRsp" +
".CurFightPropMapEntry\022\017\n\007retcode\030\n \001(\005\022\021" +
"\n\told_level\030\004 \001(\r\0326\n\024OldFightPropMapEntr" +
"y\022\013\n\003key\030\001 \001(\r\022\r\n\005value\030\002 \001(\002:\0028\001\0326\n\024Cur" +

View File

@ -224,123 +224,6 @@ public final class ChatInfoOuterClass {
emu.grasscutter.net.proto.ChatInfoOuterClass.ChatInfo.class, emu.grasscutter.net.proto.ChatInfoOuterClass.ChatInfo.Builder.class);
}
/**
* Protobuf enum {@code ChatInfo.SystemHintType}
*/
public enum SystemHintType
implements com.google.protobuf.ProtocolMessageEnum {
/**
* <code>SYSTEM_HINT_TYPE_CHAT_NONE = 0;</code>
*/
SYSTEM_HINT_TYPE_CHAT_NONE(0),
/**
* <code>SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD = 1;</code>
*/
SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD(1),
/**
* <code>SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD = 2;</code>
*/
SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD(2),
UNRECOGNIZED(-1),
;
/**
* <code>SYSTEM_HINT_TYPE_CHAT_NONE = 0;</code>
*/
public static final int SYSTEM_HINT_TYPE_CHAT_NONE_VALUE = 0;
/**
* <code>SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD = 1;</code>
*/
public static final int SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD_VALUE = 1;
/**
* <code>SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD = 2;</code>
*/
public static final int SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD_VALUE = 2;
public final int getNumber() {
if (this == UNRECOGNIZED) {
throw new java.lang.IllegalArgumentException(
"Can't get the number of an unknown enum value.");
}
return value;
}
/**
* @param value The numeric wire value of the corresponding enum entry.
* @return The enum associated with the given numeric wire value.
* @deprecated Use {@link #forNumber(int)} instead.
*/
@java.lang.Deprecated
public static SystemHintType valueOf(int value) {
return forNumber(value);
}
/**
* @param value The numeric wire value of the corresponding enum entry.
* @return The enum associated with the given numeric wire value.
*/
public static SystemHintType forNumber(int value) {
switch (value) {
case 0: return SYSTEM_HINT_TYPE_CHAT_NONE;
case 1: return SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD;
case 2: return SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD;
default: return null;
}
}
public static com.google.protobuf.Internal.EnumLiteMap<SystemHintType>
internalGetValueMap() {
return internalValueMap;
}
private static final com.google.protobuf.Internal.EnumLiteMap<
SystemHintType> internalValueMap =
new com.google.protobuf.Internal.EnumLiteMap<SystemHintType>() {
public SystemHintType findValueByNumber(int number) {
return SystemHintType.forNumber(number);
}
};
public final com.google.protobuf.Descriptors.EnumValueDescriptor
getValueDescriptor() {
if (this == UNRECOGNIZED) {
throw new java.lang.IllegalStateException(
"Can't get the descriptor of an unrecognized enum value.");
}
return getDescriptor().getValues().get(ordinal());
}
public final com.google.protobuf.Descriptors.EnumDescriptor
getDescriptorForType() {
return getDescriptor();
}
public static final com.google.protobuf.Descriptors.EnumDescriptor
getDescriptor() {
return emu.grasscutter.net.proto.ChatInfoOuterClass.ChatInfo.getDescriptor().getEnumTypes().get(0);
}
private static final SystemHintType[] VALUES = values();
public static SystemHintType valueOf(
com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
if (desc.getType() != getDescriptor()) {
throw new java.lang.IllegalArgumentException(
"EnumValueDescriptor is not for this type.");
}
if (desc.getIndex() == -1) {
return UNRECOGNIZED;
}
return VALUES[desc.getIndex()];
}
private final int value;
private SystemHintType(int value) {
this.value = value;
}
// @@protoc_insertion_point(enum_scope:ChatInfo.SystemHintType)
}
public interface SystemHintOrBuilder extends
// @@protoc_insertion_point(interface_extends:ChatInfo.SystemHint)
com.google.protobuf.MessageOrBuilder {
@ -2024,16 +1907,13 @@ public final class ChatInfoOuterClass {
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\016ChatInfo.proto\"\317\002\n\010ChatInfo\022\014\n\004time\030\007 " +
"\n\016ChatInfo.proto\"\317\001\n\010ChatInfo\022\014\n\004time\030\007 " +
"\001(\r\022\016\n\006to_uid\030\006 \001(\r\022\017\n\007is_read\030\004 \001(\010\022\013\n\003" +
"uid\030\005 \001(\r\022\020\n\010sequence\030\014 \001(\r\022\017\n\004text\030\230\003 \001" +
"(\tH\000\022\017\n\004icon\030\234\n \001(\rH\000\022,\n\013system_hint\030\246\001 " +
"\001(\0132\024.ChatInfo.SystemHintH\000\032\032\n\nSystemHin" +
"t\022\014\n\004type\030\r \001(\r\"~\n\016SystemHintType\022\036\n\032SYS" +
"TEM_HINT_TYPE_CHAT_NONE\020\000\022%\n!SYSTEM_HINT" +
"_TYPE_CHAT_ENTER_WORLD\020\001\022%\n!SYSTEM_HINT_" +
"TYPE_CHAT_LEAVE_WORLD\020\002B\t\n\007contentB\033\n\031em" +
"u.grasscutter.net.protob\006proto3"
"t\022\014\n\004type\030\r \001(\rB\t\n\007contentB\033\n\031emu.grassc" +
"utter.net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,

View File

@ -8,7 +8,7 @@ import emu.grasscutter.auth.*;
import emu.grasscutter.command.*;
import emu.grasscutter.config.ConfigContainer;
import emu.grasscutter.data.ResourceLoader;
import emu.grasscutter.database.*;
import emu.grasscutter.database.DatabaseManager;
import emu.grasscutter.plugin.PluginManager;
import emu.grasscutter.plugin.api.ServerHelper;
import emu.grasscutter.server.dispatch.DispatchServer;
@ -183,25 +183,6 @@ public final class Grasscutter {
private static void onShutdown() {
// Disable all plugins.
if (pluginManager != null) pluginManager.disablePlugins();
// Shutdown the game server.
if (gameServer != null) gameServer.onServerShutdown();
try {
// Wait for Grasscutter's thread pool to finish.
var executor = Grasscutter.getThreadPool();
executor.shutdown();
if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
executor.shutdownNow();
}
// Wait for database operations to finish.
var dbExecutor = DatabaseHelper.getEventExecutor();
dbExecutor.shutdown();
if (!dbExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
dbExecutor.shutdownNow();
}
} catch (InterruptedException ignored) {
}
}
/*

View File

@ -5,7 +5,8 @@ import static emu.grasscutter.config.Configuration.SERVER;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.player.Player;
import it.unimi.dsi.fastutil.objects.*;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import java.util.*;
import org.reflections.Reflections;

View File

@ -11,8 +11,8 @@ import lombok.val;
label = "cutscene",
aliases = {"c"},
usage = {"[<cutsceneId>]"},
permission = "player.cutscene",
permissionTargeted = "player.cutscene.others")
permission = "player.group",
permissionTargeted = "player.group.others")
public final class CutsceneCommand implements CommandHandler {
@Override

View File

@ -12,7 +12,7 @@ import java.util.Map;
@Command(
label = "list",
aliases = {"players"},
usage = {"[uid]"},
usage = {"[<UID>]"},
targetRequirement = Command.TargetRequirement.NONE)
public final class ListCommand implements CommandHandler {

View File

@ -2,23 +2,23 @@ package emu.grasscutter.command.commands;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.command.*;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.quest.GameQuest;
import java.util.List;
import java.util.stream.Collectors;
@Command(
label = "quest",
aliases = {"q"},
usage = {"(add|finish|running|talking|debug|triggers|grouptriggers) [<questId>]", "dungeons"},
usage = {"(add|finish) [<questId>]"},
permission = "player.quest",
permissionTargeted = "player.quest.others")
public final class QuestCommand implements CommandHandler {
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
if (args.size() != 2 || (args.size() == 1 && !args.get(0).toLowerCase().equals("dungeons"))) {
if (args.size() != 2) {
sendUsageMessage(sender);
return;
}
@ -112,7 +112,7 @@ public final class QuestCommand implements CommandHandler {
var shouldAdd = !loggedQuests.contains(questId);
if (shouldAdd) loggedQuests.add(questId);
else loggedQuests.remove(loggedQuests.indexOf(questId));
else loggedQuests.remove(questId);
CommandHandler.sendMessage(
sender,
@ -131,22 +131,6 @@ public final class QuestCommand implements CommandHandler {
"Triggers registered for %s: %s."
.formatted(questId, String.join(", ", quest.getTriggers().keySet())));
}
case "grouptriggers" -> {
var scene = targetPlayer.getScene();
var scriptManager = scene.getScriptManager();
var group = scriptManager.getGroupById(questId);
if (group == null) {
CommandHandler.sendMessage(sender, "The group does not exist.");
return;
}
CommandHandler.sendMessage(
sender,
group.triggers.entrySet().stream()
.map(entry -> "%s: %s".formatted(entry.getKey(), entry.getValue()))
.collect(Collectors.joining(", ")));
}
default -> this.sendUsageMessage(sender);
}
}

View File

@ -12,7 +12,6 @@ import emu.grasscutter.server.packet.send.PacketScenePointUnlockNotify;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.IntStream;
@Command(
@ -108,7 +107,6 @@ public final class SetPropCommand implements CommandHandler {
case "on", "true" -> 1;
case "off", "false" -> 0;
case "toggle" -> -1;
case "all" -> -2;
default -> Integer.parseInt(valueStr);
};
} catch (NumberFormatException ignored) {
@ -128,7 +126,7 @@ public final class SetPropCommand implements CommandHandler {
sender, targetPlayer, prop.pseudoProp, value);
case SET_OPENSTATE -> this.setOpenState(targetPlayer, value, 1);
case UNSET_OPENSTATE -> this.setOpenState(targetPlayer, value, 0);
case UNLOCK_MAP -> unlockMap(targetPlayer, value);
case UNLOCK_MAP -> unlockMap(targetPlayer);
default -> targetPlayer.setProperty(prop.prop, value);
};
@ -219,30 +217,13 @@ public final class SetPropCommand implements CommandHandler {
return true;
}
private boolean unlockMap(Player targetPlayer, int value) {
private boolean unlockMap(Player targetPlayer) {
// Unlock.
GameData.getScenePointsPerScene()
.forEach(
(sceneId, scenePoints) -> {
if (value == -2) {
// Unlock trans points.
targetPlayer.getUnlockedScenePoints(sceneId).addAll(scenePoints);
} else {
var scenePointsBackup = new CopyOnWriteArrayList<>(scenePoints);
for (var p : scenePointsBackup) {
var scenePointEentry = GameData.getScenePointEntryById(sceneId, p);
var pointData = scenePointEentry.getPointData();
boolean forbidSimpleUnlock = pointData.isForbidSimpleUnlock();
boolean sceneBuildingPointLocked =
pointData.getType().equals("SceneBuildingPoint") && !pointData.isUnlocked();
if (forbidSimpleUnlock || sceneBuildingPointLocked) scenePointsBackup.remove(p);
}
// Unlock trans points.
targetPlayer.getUnlockedScenePoints(sceneId).addAll(scenePointsBackup);
}
// Unlock map areas.
targetPlayer.getUnlockedSceneAreas(sceneId).addAll(sceneAreas);

View File

@ -14,8 +14,8 @@ import lombok.val;
label = "sound",
aliases = {"s", "audio"},
usage = {"[<audioname>] [<x><y><z>]"},
permission = "player.sound",
permissionTargeted = "player.sound.others")
permission = "player.group",
permissionTargeted = "player.group.others")
public final class SoundCommand implements CommandHandler {
@Override

View File

@ -27,11 +27,9 @@ public class ConfigContainer {
* Version 8 - 'server' is being added for enforcing handbook server
* addresses.
* Version 9 - 'limits' was added for handbook requests.
* Version 10 - 'trialCostumes' was added for enabling costumes
* on trial avatars.
*/
private static int version() {
return 10;
return 9;
}
/**
@ -257,8 +255,6 @@ public class ConfigContainer {
public boolean staminaUsage = true;
public boolean energyUsage = true;
public boolean fishhookTeleport = true;
public boolean trialCostumes = false;
@SerializedName(value = "questing", alternate = "questOptions")
public Questing questing = new Questing();
public ResinOptions resinOptions = new ResinOptions();

View File

@ -37,11 +37,8 @@ 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.ActivityCondGroup;
import emu.grasscutter.data.server.DropSubfieldMapping;
import emu.grasscutter.data.server.DropTableExcelConfigData;
import emu.grasscutter.data.server.GadgetMapping;
import emu.grasscutter.data.server.MonsterMapping;
import emu.grasscutter.data.server.SubfieldMapping;
import emu.grasscutter.game.dungeons.DungeonDropEntry;
import emu.grasscutter.game.quest.QuestEncryptionKey;
import emu.grasscutter.game.quest.RewindData;
@ -454,18 +451,6 @@ public final class GameData {
private static final Int2ObjectMap<GadgetMapping> gadgetMappingMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<SubfieldMapping> subfieldMappingMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<DropSubfieldMapping> dropSubfieldMappingMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<DropTableExcelConfigData> dropTableExcelConfigDataMap =
new Int2ObjectOpenHashMap<>();
@Getter
private static final Int2ObjectMap<MonsterMapping> monsterMappingMap =
new Int2ObjectOpenHashMap<>();

View File

@ -116,7 +116,6 @@ public final class ResourceLoader {
loadConfigLevelEntityData();
loadQuestShareConfig();
loadGadgetMappings();
loadSubfieldMappings();
loadMonsterMappings();
loadActivityCondGroups();
loadGroupReplacements();
@ -806,51 +805,6 @@ public final class ResourceLoader {
}
}
private static void loadSubfieldMappings() {
try {
val subfieldMap = GameData.getSubfieldMappingMap();
try {
JsonUtils.loadToList(getResourcePath("Server/SubfieldMapping.json"), SubfieldMapping.class)
.forEach(entry -> subfieldMap.put(entry.getEntityId(), entry));
;
} catch (IOException | NullPointerException ignored) {
}
Grasscutter.getLogger().debug("Loaded {} subfield mappings.", subfieldMap.size());
} catch (Exception e) {
Grasscutter.getLogger().error("Unable to load subfield mappings.", e);
}
try {
val dropSubfieldMap = GameData.getDropSubfieldMappingMap();
try {
JsonUtils.loadToList(
getResourcePath("Server/DropSubfieldMapping.json"), DropSubfieldMapping.class)
.forEach(entry -> dropSubfieldMap.put(entry.getDropId(), entry));
;
} catch (IOException | NullPointerException ignored) {
}
Grasscutter.getLogger().debug("Loaded {} drop subfield mappings.", dropSubfieldMap.size());
} catch (Exception e) {
Grasscutter.getLogger().error("Unable to load drop subfield mappings.", e);
}
try {
val dropTableExcelConfigDataMap = GameData.getDropTableExcelConfigDataMap();
try {
JsonUtils.loadToList(
getResourcePath("Server/DropTableExcelConfigData.json"),
DropTableExcelConfigData.class)
.forEach(entry -> dropTableExcelConfigDataMap.put(entry.getId(), entry));
;
} catch (IOException | NullPointerException ignored) {
}
Grasscutter.getLogger()
.debug("Loaded {} drop table configs.", dropTableExcelConfigDataMap.size());
} catch (Exception e) {
Grasscutter.getLogger().error("Unable to load drop table config data.", e);
}
}
private static void loadMonsterMappings() {
try {
var monsterMap = GameData.getMonsterMappingMap();

View File

@ -87,10 +87,7 @@ public class AbilityData {
}
private void initializeModifiers() {
if (modifiers == null) {
this.modifiers = new HashMap<>();
return;
}
if (modifiers == null) return;
var _modifiers =
modifiers.entrySet().stream()

View File

@ -323,28 +323,9 @@ public class AbilityModifier implements Serializable {
public int skillID;
public AbilityModifierAction[] actions;
public AbilityModifierAction[] successActions;
public AbilityModifierAction[] failActions;
public DropType dropType = DropType.LevelControl;
public DynamicFloat baseEnergy;
public DynamicFloat ratio = DynamicFloat.ONE;
public int configID;
public DynamicFloat valueRangeMin;
public DynamicFloat valueRangeMax;
public String overrideMapKey;
public int param1;
public int param2;
public int param3;
public enum DropType {
LevelControl,
BigWorldOnly,
ForceDrop
}
}
// The following should be implemented into DynamicFloat if older resource formats need to be

View File

@ -11,6 +11,4 @@ public class ConfigLevelEntity {
@Getter private List<ConfigAbilityData> avatarAbilities;
@Getter private List<ConfigAbilityData> teamAbilities;
@Getter private List<Integer> preloadMonsterEntityIDs;
@Getter private String dropElemControlType;
}

View File

@ -19,8 +19,6 @@ public final class PointData {
@Getter private Position pos;
@Getter private Position rot;
@Getter private Position size;
@Getter private boolean forbidSimpleUnlock;
@Getter private boolean unlocked;
@SerializedName(
value = "dungeonIds",

View File

@ -1,10 +1,12 @@
package emu.grasscutter.data.excels;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.*;
import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.game.talk.TalkExec;
import java.util.List;
import lombok.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ResourceType(name = "TalkExcelConfigData.json")
@EqualsAndHashCode(callSuper = false)
@ -36,11 +38,6 @@ public final class TalkConfigData extends GameResource {
this.finishExec == null
? List.of()
: this.finishExec.stream().filter(x -> x.getType() != null).toList();
if (this.questId <= 0) {
var id = String.valueOf(this.getId());
this.questId = Integer.parseInt(id.length() < 5 ? "0" : id.substring(0, 3));
}
}
@Data

View File

@ -32,7 +32,6 @@ public class DungeonData extends GameResource {
@Getter private int passRewardPreviewID;
@Getter private int statueCostID;
@Getter private int statueCostCount;
@Getter private int statueDrop;
// not part of DungeonExcelConfigData
@Getter private RewardPreviewData rewardPreviewData;

View File

@ -1,10 +0,0 @@
package emu.grasscutter.data.server;
import lombok.Data;
@Data
public final class DropSubfieldMapping {
private int dropId;
private int levelLimit;
private int itemId;
}

View File

@ -1,24 +0,0 @@
package emu.grasscutter.data.server;
import lombok.Data;
@Data
public final class DropTableExcelConfigData {
private int id;
private int randomType;
private int dropLevel;
private DropVectorEntry[] dropVec;
private int nodeType;
private boolean fallToGround;
private int sourceType;
private int everydayLimit;
private int historyLimit;
private int activityLimit;
@Data
public static class DropVectorEntry {
private int itemId;
private String countRange;
private int weight;
}
}

View File

@ -1,15 +0,0 @@
package emu.grasscutter.data.server;
import lombok.Data;
@Data
public final class SubfieldMapping {
private int entityId;
private SubfieldMappingEntry[] subfields;
@Data
public static class SubfieldMappingEntry {
private String subfieldName;
private int drop_id;
}
}

View File

@ -2,9 +2,11 @@ package emu.grasscutter.database;
import static com.mongodb.client.model.Filters.eq;
import dev.morphia.query.*;
import dev.morphia.query.FindOptions;
import dev.morphia.query.Sort;
import dev.morphia.query.experimental.filters.Filters;
import emu.grasscutter.*;
import emu.grasscutter.GameConstants;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.achievement.Achievements;
import emu.grasscutter.game.activity.PlayerActivityData;
@ -24,10 +26,8 @@ import io.netty.util.concurrent.FastThreadLocalThread;
import java.util.List;
import java.util.concurrent.*;
import java.util.stream.Stream;
import lombok.Getter;
public final class DatabaseHelper {
@Getter
private static final ExecutorService eventExecutor =
new ThreadPoolExecutor(
6,

View File

@ -30,50 +30,30 @@ public class AbilityLocalIdGenerator {
}
public void initializeActionLocalIds(
AbilityModifierAction actions[], Map<Integer, AbilityModifierAction> localIdToAction) {
this.initializeActionLocalIds(actions, localIdToAction, false);
}
public void initializeActionLocalIds(
AbilityModifierAction[] actions,
Map<Integer, AbilityModifierAction> localIdToAction,
boolean preserveActionIndex) {
AbilityModifierAction[] actions, Map<Integer, AbilityModifierAction> localIdToAction) {
if (actions == null) return;
if (!preserveActionIndex) this.actionIndex = 0;
for (int i = 0; i < actions.length; i++) {
this.actionIndex++;
var id = GetLocalId();
localIdToAction.put((int) id, actions[i]);
if (actions[i].actions != null)
this.initializeActionLocalIds(actions[i].actions, localIdToAction, true);
else {
if (actions[i].successActions != null)
this.initializeActionLocalIds(
actions[i].successActions,
localIdToAction,
true); // Need to check this specific order
if (actions[i].failActions != null)
this.initializeActionLocalIds(actions[i].failActions, localIdToAction, true);
}
actionIndex = 0;
for (AbilityModifierAction action : actions) {
actionIndex++;
long id = GetLocalId();
localIdToAction.put((int) id, action);
}
if (!preserveActionIndex) actionIndex = 0;
actionIndex = 0;
}
public void initializeMixinsLocalIds(
AbilityMixinData[] mixins, Map<Integer, AbilityMixinData> localIdToAction) {
if (mixins == null) return;
this.mixinIndex = 0;
for (var mixin : mixins) {
var id = GetLocalId();
mixinIndex = 0;
for (AbilityMixinData mixin : mixins) {
long id = GetLocalId();
localIdToAction.put((int) id, mixin);
this.mixinIndex++;
mixinIndex++;
}
this.mixinIndex = 0;
mixinIndex = 0;
}
public long GetLocalId() {

View File

@ -9,12 +9,10 @@ import emu.grasscutter.game.ability.actions.*;
import emu.grasscutter.game.ability.mixins.*;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.game.player.*;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.net.proto.AbilityInvokeEntryOuterClass.AbilityInvokeEntry;
import emu.grasscutter.net.proto.AbilityMetaAddAbilityOuterClass.AbilityMetaAddAbility;
import emu.grasscutter.net.proto.AbilityMetaModifierChangeOuterClass.AbilityMetaModifierChange;
import emu.grasscutter.net.proto.AbilityMetaReInitOverrideMapOuterClass.AbilityMetaReInitOverrideMap;
import emu.grasscutter.net.proto.AbilityMetaSetKilledStateOuterClass.AbilityMetaSetKilledState;
import emu.grasscutter.net.proto.AbilityScalarTypeOuterClass.AbilityScalarType;
import emu.grasscutter.net.proto.AbilityScalarValueEntryOuterClass.AbilityScalarValueEntry;
import emu.grasscutter.net.proto.ModifierActionOuterClass.ModifierAction;
@ -176,7 +174,6 @@ public final class AbilityManager extends BasePlayerManager {
case ABILITY_INVOKE_ARGUMENT_META_MODIFIER_DURABILITY_CHANGE -> this
.handleModifierDurabilityChange(invoke);
case ABILITY_INVOKE_ARGUMENT_META_ADD_NEW_ABILITY -> this.handleAddNewAbility(invoke);
case ABILITY_INVOKE_ARGUMENT_META_SET_KILLED_SETATE -> this.handleKillState(invoke);
default -> {}
}
}
@ -538,25 +535,6 @@ public final class AbilityManager extends BasePlayerManager {
entity.getInstancedAbilities().size());
}
private void handleKillState(AbilityInvokeEntry invoke) throws InvalidProtocolBufferException {
var scene = this.getPlayer().getScene();
var entity = scene.getEntityById(invoke.getEntityId());
if (entity == null) {
Grasscutter.getLogger()
.trace("Entity of ID {} was not found in the scene.", invoke.getEntityId());
return;
}
var killState = AbilityMetaSetKilledState.parseFrom(invoke.getAbilityData());
if (killState.getKilled()) {
scene.killEntity(entity);
} else if (!entity.isAlive()) {
entity.setFightProperty(
FightProperty.FIGHT_PROP_CUR_HP,
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP));
}
}
public void addAbilityToEntity(GameEntity entity, String name) {
AbilityData data = GameData.getAbilityData(name);
if (data != null) addAbilityToEntity(entity, data);

View File

@ -3,7 +3,7 @@ package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.entity.GameEntity;
@AbilityAction(AbilityModifierAction.Type.ExecuteGadgetLua)
public class ActionExecuteGadgetLua extends AbilityActionHandler {

View File

@ -1,100 +0,0 @@
package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction.DropType;
import emu.grasscutter.data.binout.config.ConfigLevelEntity;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.entity.EntityItem;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.net.proto.AbilityActionGenerateElemBallOuterClass.AbilityActionGenerateElemBall;
@AbilityAction(AbilityModifierAction.Type.GenerateElemBall)
public final class ActionGenerateElemBall extends AbilityActionHandler {
@Override
public boolean execute(
Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) {
GameEntity owner = ability.getOwner();
AbilityActionGenerateElemBall generateElemBall;
try {
generateElemBall = AbilityActionGenerateElemBall.parseFrom(abilityData);
} catch (InvalidProtocolBufferException e) {
return false;
}
// Check if we should allow elem ball generation
if (action.dropType == DropType.LevelControl) {
String levelEntityConfig = owner.getScene().getSceneData().getLevelEntityConfig();
ConfigLevelEntity config = GameData.getConfigLevelEntityDataMap().get(levelEntityConfig);
if (config != null
&& config.getDropElemControlType() != null
&& config.getDropElemControlType().compareTo("None") == 0) {
Grasscutter.getLogger().warn("This level config don't allow element balls");
return true;
}
} else if (action.dropType == DropType.BigWorldOnly) {
if (owner.getScene().getSceneData().getSceneType() != SceneType.SCENE_WORLD) {
Grasscutter.getLogger().warn("This level config only allows element balls on big world");
return true;
}
} // Else the drop is forced
var energy = action.baseEnergy.get(ability) * action.ratio.get(ability);
if (energy <= 0.0) return true;
var itemData = GameData.getItemDataMap().get(action.configID);
if (itemData == null) {
Grasscutter.getLogger().warn("configID {} not found", action.configID);
return false;
}
if (itemData.getItemUse() == null || itemData.getItemUse().isEmpty()) {
Grasscutter.getLogger().warn("Item {} has no item use array", action.configID);
return true;
}
var itemUse = itemData.getItemUse().get(0);
double requiredEnergy;
switch (itemUse.getUseOp()) {
case ITEM_USE_ADD_ELEM_ENERGY:
requiredEnergy = Integer.parseInt(itemUse.getUseParam()[1]);
break;
case ITEM_USE_ADD_ALL_ENERGY:
requiredEnergy = Integer.parseInt(itemUse.getUseParam()[0]);
break;
default:
Grasscutter.getLogger().warn("UseOp not implemented", itemUse.getUseOp());
return false;
}
var amountGenerated = (int) Math.ceil(energy / requiredEnergy);
if (amountGenerated >= 21) {
Grasscutter.getLogger()
.warn("Attempt to generate more than 20 element balls {}", amountGenerated);
return false;
}
Grasscutter.getLogger()
.debug("Generating {} of {} element balls", amountGenerated, action.configID);
for (int i = 0; i < amountGenerated; i++) {
EntityItem energyBall =
new EntityItem(
owner.getScene(),
(owner instanceof EntityAvatar avatar) ? avatar.getPlayer() : null,
itemData,
new Position(generateElemBall.getPos()),
new Position(generateElemBall.getRot()),
1);
owner.getScene().addEntity(energyBall);
}
return true;
}
}

View File

@ -1,7 +1,6 @@
package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.GameEntity;
@ -11,14 +10,9 @@ public final class ActionKillSelf extends AbilityActionHandler {
@Override
public boolean execute(
Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) {
// KillSelf should not have a target field, so target it's the actual entity to be applied.
// TODO: Check if this is always true.
if (target == null) {
Grasscutter.getLogger().warn("Tried killing null target");
return false;
}
GameEntity owner = ability.getOwner();
owner.getScene().killEntity(owner);
target.getScene().killEntity(target);
return true;
}
}

View File

@ -1,10 +1,11 @@
package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.entity.EntityClientGadget;
import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.game.entity.GameEntity;
@AbilityAction(AbilityModifierAction.Type.SetGlobalValueToOverrideMap)
public class ActionSetGlobalValueToOverrideMap extends AbilityActionHandler {
@ -22,20 +23,15 @@ public class ActionSetGlobalValueToOverrideMap extends AbilityActionHandler {
var globalValueKey = action.globalValueKey;
var abilityFormula = action.abilityFormula;
if (!entity.getGlobalAbilityValues().containsKey(globalValueKey)) {
Grasscutter.getLogger().debug("Action does not contains {} global key", globalValueKey);
return true;
}
if (!entity.getGlobalAbilityValues().containsKey(globalValueKey)) return false;
var globalValue = entity.getGlobalAbilityValues().getOrDefault(globalValueKey, 0.0f);
if (abilityFormula.compareTo("DummyThrowSpeed") == 0) {
globalValue = ((globalValue * 30.0f) / ((float) Math.sin(0.9424778) * 100.0f)) - 1.0f;
}
entity.getGlobalAbilityValues().put(globalValueKey, globalValue); // Research if this is needed.
ability
.getAbilitySpecials()
.put(action.overrideMapKey, globalValue.floatValue()); // Override our own.
entity.getGlobalAbilityValues().put(globalValueKey, globalValue);
entity.onAbilityValueUpdate();
// TODO: ChangeServerGlobalValueNotify

View File

@ -1,41 +0,0 @@
package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue;
@AbilityAction(AbilityModifierAction.Type.SetRandomOverrideMapValue)
public class ActionSetRandomOverrideMapValue extends AbilityActionHandler {
@Override
public boolean execute(
Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) {
AbilityActionSetRandomOverrideMapValue valueProto;
try {
valueProto = AbilityActionSetRandomOverrideMapValue.parseFrom(abilityData);
} catch (InvalidProtocolBufferException e) {
return false;
}
float value = valueProto.getRandomValue();
float valueRangeMin = action.valueRangeMin.get(ability);
float valueRangeMax = action.valueRangeMax.get(ability);
if (value < valueRangeMin || value > valueRangeMax) {
Grasscutter.getLogger()
.warn(
"Tried setting value out of range: {} inside [{}, {}]",
value,
valueRangeMin,
valueRangeMax);
return true;
}
ability.getAbilitySpecials().put(action.overrideMapKey, value);
return true;
}
}

View File

@ -1243,7 +1243,6 @@ public class Avatar {
});
// Add costume if avatar has a costume.
if (GAME_OPTIONS.trialCostumes) {
GameData.getAvatarCostumeDataItemIdMap()
.values()
.forEach(
@ -1252,7 +1251,6 @@ public class Avatar {
this.setCostume(costumeData.getId());
});
}
}
/** Equips the items applied from {@link Avatar#applyTrialItems()}. */
public void equipTrialItems() {

View File

@ -80,14 +80,6 @@ public final class DropSystem extends BaseGameSystem {
return dropData.getDropId();
}
public List<GameItem> handleDungeonRewardDrop(int dropId, boolean doubleReward) {
if (!dropTable.containsKey(dropId)) return List.of();
var dropData = dropTable.get(dropId);
List<GameItem> items = new ArrayList<>();
processDrop(dropData, doubleReward ? 2 : 1, items);
return items;
}
public boolean handleMonsterDrop(EntityMonster monster) {
int dropId;
int level = monster.getLevel();

View File

@ -134,16 +134,7 @@ public final class DungeonManager {
}
// Get and roll rewards.
List<GameItem> rewards =
player
.getServer()
.getDropSystem()
.handleDungeonRewardDrop(dungeonData.getStatueDrop(), useCondensed);
if (rewards.isEmpty()) {
// fallback to legacy drop system
Grasscutter.getLogger().debug("dungeon drop failed for {}", dungeonData.getId());
rewards = new ArrayList<>(this.rollRewards(useCondensed));
}
List<GameItem> rewards = new ArrayList<>(this.rollRewards(useCondensed));
// Add rewards to player and send notification.
player.getInventory().addItems(rewards, ActionReason.DungeonStatueDrop);
player.sendPacket(new PacketGadgetAutoPickDropInfoNotify(rewards));
@ -196,7 +187,7 @@ public final class DungeonManager {
amount += Utils.drawRandomListElement(candidateAmounts, entry.getProbabilities());
}
// Double rewards in multiply mode, if specified.
// Double rewards in multiplay mode, if specified.
if (entry.isMpDouble() && this.getScene().getPlayerCount() > 1) {
amount *= 2;
}

View File

@ -8,9 +8,11 @@ import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.game.entity.gadget.*;
import emu.grasscutter.game.entity.gadget.platform.BaseRoute;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.*;
import emu.grasscutter.game.world.*;
import emu.grasscutter.net.proto.*;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.game.world.SceneGroupInstance;
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
@ -18,21 +20,31 @@ import emu.grasscutter.net.proto.EntityClientDataOuterClass.EntityClientData;
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo;
import emu.grasscutter.net.proto.PlatformInfoOuterClass;
import emu.grasscutter.net.proto.PropPairOuterClass.PropPair;
import emu.grasscutter.net.proto.ProtEntityTypeOuterClass.ProtEntityType;
import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
import emu.grasscutter.net.proto.VisionTypeOuterClass;
import emu.grasscutter.scripts.EntityControllerScriptManager;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.data.*;
import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.scripts.data.SceneGadget;
import emu.grasscutter.scripts.data.ScriptArgs;
import emu.grasscutter.server.packet.send.PacketGadgetStateNotify;
import emu.grasscutter.server.packet.send.PacketPlatformStartRouteNotify;
import emu.grasscutter.server.packet.send.PacketPlatformStopRouteNotify;
import emu.grasscutter.server.packet.send.PacketSceneTimeNotify;
import emu.grasscutter.utils.helpers.ProtoHelper;
import it.unimi.dsi.fastutil.ints.*;
import java.util.*;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ToString(callSuper = true)
public class EntityGadget extends EntityBaseGadget {

View File

@ -37,30 +37,14 @@ public class EntityItem extends EntityBaseGadget {
this(scene, player, itemData, pos, count, true);
}
public EntityItem(
Scene scene, Player player, ItemData itemData, Position pos, Position rotation, int count) {
this(scene, player, itemData, pos, rotation, count, true);
}
public EntityItem(
Scene scene, Player player, ItemData itemData, Position pos, int count, boolean share) {
this(scene, player, itemData, pos, null, count, share);
}
// In official game, some drop items are shared to all players, and some other items are
// independent to all players
// For example, if you killed a monster in MP mode, all players could get drops but rarity and
// number of them are different
// but if you broke regional mine, when someone picked up the drop then it disappeared
public EntityItem(
Scene scene,
Player player,
ItemData itemData,
Position pos,
Position rotation,
int count,
boolean share) {
super(scene, pos, rotation);
Scene scene, Player player, ItemData itemData, Position pos, int count, boolean share) {
super(scene, pos, null);
this.id = getScene().getWorld().getNextEntityId(EntityIdType.GADGET);
this.guid =
player == null ? scene.getWorld().getHost().getNextGameGuid() : player.getNextGameGuid();

View File

@ -113,13 +113,7 @@ public class EntityMonster extends GameEntity {
if(monster != null) affixes = monster.affix;
}
if (monsterData != null) {
// TODO: Research if group affixes goes first
if (affixes == null) affixes = monsterData.getAffix();
else affixes.addAll(monsterData.getAffix());
}
if(affixes != null) {
if (affixes != null) {
for(var affixId : affixes) {
var affix = GameData.getMonsterAffixDataMap().get(affixId.intValue());
if (!affix.isPreAdd()) continue;

View File

@ -1,6 +1,5 @@
package emu.grasscutter.game.entity;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.ability.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.*;
@ -52,8 +51,8 @@ public abstract class GameEntity {
public abstract void initAbilities();
public EntityType getEntityType() {
return EntityIdType.toEntityType(this.getId() >> 24);
public int getEntityType() {
return this.getId() >> 24;
}
public abstract int getEntityTypeId();
@ -227,82 +226,6 @@ public abstract class GameEntity {
public void onRemoved() {}
private int[] parseCountRange(String range) {
var split = range.split(";");
if (split.length == 1)
return new int[] {Integer.parseInt(split[0]), Integer.parseInt(split[0])};
return new int[] {Integer.parseInt(split[0]), Integer.parseInt(split[1])};
}
public boolean dropSubfieldItem(int dropId) {
var drop = GameData.getDropSubfieldMappingMap().get(dropId);
if (drop == null) return false;
var dropTableEntry = GameData.getDropTableExcelConfigDataMap().get(drop.getItemId());
if (dropTableEntry == null) return false;
Int2ObjectMap<Integer> itemsToDrop = new Int2ObjectOpenHashMap<>();
switch (dropTableEntry.getRandomType()) {
case 0: // select one
{
int weightCount = 0;
for (var entry : dropTableEntry.getDropVec()) weightCount += entry.getWeight();
int randomValue = new Random().nextInt(weightCount);
weightCount = 0;
for (var entry : dropTableEntry.getDropVec()) {
if (randomValue >= weightCount && randomValue < (weightCount + entry.getWeight())) {
var countRange = parseCountRange(entry.getCountRange());
itemsToDrop.put(
entry.getItemId(),
Integer.valueOf((new Random().nextBoolean() ? countRange[0] : countRange[1])));
}
}
}
break;
case 1: // Select various
{
for (var entry : dropTableEntry.getDropVec()) {
if (entry.getWeight() < new Random().nextInt(10000)) {
var countRange = parseCountRange(entry.getCountRange());
itemsToDrop.put(
entry.getItemId(),
Integer.valueOf((new Random().nextBoolean() ? countRange[0] : countRange[1])));
}
}
}
break;
}
for (var entry : itemsToDrop.int2ObjectEntrySet()) {
var item =
new EntityItem(
scene,
null,
GameData.getItemDataMap().get(entry.getIntKey()),
getPosition().nearby2d(1f).addY(0.5f),
entry.getValue(),
true);
scene.addEntity(item);
}
return true;
}
public boolean dropSubfield(String subfieldName) {
var subfieldMapping = GameData.getSubfieldMappingMap().get(getEntityTypeId());
if (subfieldMapping == null || subfieldMapping.getSubfields() == null) return false;
for (var entry : subfieldMapping.getSubfields()) {
if (entry.getSubfieldName().compareTo(subfieldName) == 0) {
return dropSubfieldItem(entry.getDrop_id());
}
}
return false;
}
public void onTick(int sceneTime) {
if (entityController != null) {
entityController.onTimer(this, sceneTime);

View File

@ -75,7 +75,6 @@ public class GadgetChest extends GadgetContent {
} else if (chest.chest_drop_id != 0) {
status = dropSystem.handleChestDrop(chest.chest_drop_id, chest.drop_count, getGadget());
}
if (status) {
getGadget().updateState(ScriptGadgetState.ChestOpened);
player.sendPacket(

View File

@ -14,8 +14,6 @@ import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.GatherGadgetInfoOuterClass.GatherGadgetInfo;
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.data.ScriptArgs;
import emu.grasscutter.server.packet.send.PacketGadgetInteractRsp;
import emu.grasscutter.utils.Utils;
@ -59,13 +57,6 @@ public final class GadgetGatherObject extends GadgetContent {
GameItem item = new GameItem(itemData, 1);
player.getInventory().addItem(item, ActionReason.Gather);
getGadget()
.getScene()
.getScriptManager()
.callEvent(
new ScriptArgs(
getGadget().getGroupId(), EventType.EVENT_GATHER, getGadget().getConfigId()));
getGadget()
.getScene()
.broadcastPacket(

View File

@ -133,9 +133,13 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
for (var item : items) {
if (item.getItemId() == 0) continue;
GameItem result = null;
try {
// putItem might throw exception
// ignore that exception and continue
result = putItem(item);
} catch (Exception e) {
e.printStackTrace();
}
if (result != null) {
this.triggerAddItemEvents(result);
changedItems.add(result);
@ -151,33 +155,22 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
}
private void triggerAddItemEvents(GameItem result) {
try {
getPlayer()
.getBattlePassManager()
.triggerMission(
WatcherTriggerType.TRIGGER_OBTAIN_MATERIAL_NUM,
result.getItemId(),
result.getCount());
WatcherTriggerType.TRIGGER_OBTAIN_MATERIAL_NUM, result.getItemId(), result.getCount());
getPlayer()
.getQuestManager()
.queueEvent(
QuestContent.QUEST_CONTENT_OBTAIN_ITEM, result.getItemId(), result.getCount());
} catch (Exception e) {
Grasscutter.getLogger().debug("triggerAddItemEvents failed", e);
}
.queueEvent(QuestContent.QUEST_CONTENT_OBTAIN_ITEM, result.getItemId(), result.getCount());
}
private void triggerRemItemEvents(GameItem item, int removeCount) {
try {
getPlayer()
.getBattlePassManager()
.triggerMission(WatcherTriggerType.TRIGGER_COST_MATERIAL, item.getItemId(), removeCount);
getPlayer()
.getQuestManager()
.queueEvent(QuestContent.QUEST_CONTENT_ITEM_LESS_THAN, item.getItemId(), item.getCount());
} catch (Exception e) {
Grasscutter.getLogger().debug("triggerRemItemEvents failed", e);
}
}
public void addItemParams(Collection<ItemParam> items) {
@ -200,11 +193,8 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
// Dont add items that dont have a valid item definition.
var data = item.getItemData();
if (data == null) return null;
try {
this.player.getProgressManager().addItemObtainedHistory(item.getItemId(), item.getCount());
} catch (Exception e) {
Grasscutter.getLogger().debug("addItemObtainedHistory failed", e);
}
if (data.isUseOnGain()) {
var params = new UseItemParams(this.player, data.getUseTarget());

View File

@ -317,9 +317,7 @@ public class StaminaManager extends BasePlayerManager {
entity.getWorld().broadcastPacket(new PacketEntityFightPropUpdateNotify(entity, FightProperty.FIGHT_PROP_CUR_HP));
entity.getWorld().broadcastPacket(new PacketLifeStateChangeNotify(0, entity, LifeState.LIFE_DEAD));
player.getScene().removeEntity(entity);
if (entity instanceof EntityAvatar avatar)
avatar.onDeath(dieType, 0);
((EntityAvatar) entity).onDeath(dieType, 0);
}
public void startSustainedStaminaHandler() {

View File

@ -345,11 +345,16 @@ public class Player implements PlayerHook, FieldFetch {
this.playerGameTime = gameTime;
// If the player is the host of the world, update the game time as well.
var world = this.getWorld();
if (world != null && world.getHost() == this) {
world.changeTime(gameTime);
if (this.getWorld().getHost() == this) {
this.getWorld().changeTime(gameTime);
}
// Trigger the script event for game time update.
var questManager = this.getQuestManager();
questManager.queueEvent(QuestCond.QUEST_COND_IS_DAYTIME);
questManager.queueEvent(QuestCond.QUEST_COND_TIME_VAR_GT_EQ);
questManager.queueEvent(QuestCond.QUEST_COND_TIME_VAR_PASS_DAY);
this.save();
}
@ -702,16 +707,14 @@ public class Player implements PlayerHook, FieldFetch {
}
public void onEnterRegion(SceneRegion region) {
var enterRegionName = "ENTER_REGION_" + region.config_id;
this.getQuestManager().forEachActiveQuest(quest -> {
if (quest.getTriggerData() != null &&
quest.getTriggers().containsKey(enterRegionName) &&
region.getGroupId() == quest.getTriggerData().get(enterRegionName).getGroupId()) {
quest.getTriggers().containsKey("ENTER_REGION_"+ region.config_id)) {
// If trigger hasn't been fired yet
if (!Boolean.TRUE.equals(quest.getTriggers().put(enterRegionName, true))) {
if (!Boolean.TRUE.equals(quest.getTriggers().put("ENTER_REGION_" + region.config_id, true))) {
this.getSession().send(new PacketServerCondMeetQuestListUpdateNotify());
this.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_TRIGGER_FIRE,
quest.getTriggerData().get(enterRegionName).getId(), 0);
quest.getTriggerData().get("ENTER_REGION_" + region.config_id).getId(), 0);
}
}
});
@ -719,15 +722,13 @@ public class Player implements PlayerHook, FieldFetch {
}
public void onLeaveRegion(SceneRegion region) {
var leaveRegionName = "LEAVE_REGION_" + region.config_id;
this.getQuestManager().forEachActiveQuest(quest -> {
if (quest.getTriggers().containsKey(leaveRegionName) &&
region.getGroupId() == quest.getTriggerData().get(leaveRegionName).getGroupId()) {
if (quest.getTriggers().containsKey("LEAVE_REGION_" + region.config_id)) {
// If trigger hasn't been fired yet
if (!Boolean.TRUE.equals(quest.getTriggers().put(leaveRegionName, true))) {
if (!Boolean.TRUE.equals(quest.getTriggers().put("LEAVE_REGION_" + region.config_id, true))) {
this.getSession().send(new PacketServerCondMeetQuestListUpdateNotify());
this.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_TRIGGER_FIRE,
quest.getTriggerData().get(leaveRegionName).getId(), 0);
quest.getTriggerData().get("LEAVE_REGION_" + region.config_id).getId(), 0);
}
}
});

View File

@ -4,10 +4,10 @@ import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Transient;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.quest.enums.QuestContent;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -29,10 +29,10 @@ public class PlayerProgress {
// keep track of EXEC_ADD_QUEST_PROGRESS count, will be used in CONTENT_ADD_QUEST_PROGRESS
// not sure where to put this, this should be saved to DB but not to individual quest, since
// it will be hard to loop and compare
private Map<String, Integer> questProgressCountMap;
private Map<Integer, Integer> questProgressCountMap;
public PlayerProgress() {
this.questProgressCountMap = new ConcurrentHashMap<>();
this.questProgressCountMap = new Int2IntOpenHashMap();
this.completedDungeons = new IntArrayList();
this.itemHistory = new Int2ObjectOpenHashMap<>();
}
@ -70,15 +70,15 @@ public class PlayerProgress {
return itemEntry.addToObtainedCount(count);
}
public int getCurrentProgress(String progressId) {
public int getCurrentProgress(int progressId) {
return questProgressCountMap.getOrDefault(progressId, -1);
}
public int addToCurrentProgress(String progressId, int count) {
public int addToCurrentProgress(int progressId, int count) {
return questProgressCountMap.merge(progressId, count, Integer::sum);
}
public int resetCurrentProgress(String progressId) {
public int resetCurrentProgress(int progressId) {
return questProgressCountMap.merge(progressId, 0, Integer::min);
}

View File

@ -300,7 +300,7 @@ public final class PlayerProgressManager extends BasePlayerDataManager {
/** Quest progress */
public void addQuestProgress(int id, int count) {
var newCount = player.getPlayerProgress().addToCurrentProgress(String.valueOf(id), count);
var newCount = player.getPlayerProgress().addToCurrentProgress(id, count);
player.save();
player
.getQuestManager()

View File

@ -5,7 +5,8 @@ import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import dev.morphia.annotations.Entity;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.net.proto.AvatarTeamOuterClass.AvatarTeam;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public final class TeamInfo {
@ -86,8 +87,6 @@ public final class TeamInfo {
for (int i = 0; i < this.getAvatars().size(); i++) {
Avatar avatar = player.getAvatars().getAvatarById(this.getAvatars().get(i));
if (avatar == null) continue;
avatarTeam.addAvatarGuidList(avatar.getGuid());
}

View File

@ -1,8 +1,5 @@
package emu.grasscutter.game.props;
import java.util.HashMap;
import java.util.Map;
public enum EntityIdType {
AVATAR(0x01),
MONSTER(0x02),
@ -15,27 +12,10 @@ public enum EntityIdType {
private final int id;
private static final Map<Integer, EntityType> map = new HashMap<>();
static {
map.put(EntityIdType.AVATAR.getId(), EntityType.Avatar);
map.put(EntityIdType.MONSTER.getId(), EntityType.Monster);
map.put(EntityIdType.NPC.getId(), EntityType.NPC);
map.put(EntityIdType.GADGET.getId(), EntityType.Gadget);
map.put(EntityIdType.REGION.getId(), EntityType.Region);
map.put(EntityIdType.WEAPON.getId(), EntityType.Equip);
map.put(EntityIdType.TEAM.getId(), EntityType.Team);
map.put(EntityIdType.MPLEVEL.getId(), EntityType.MPLevel);
}
EntityIdType(int id) {
this.id = id;
}
public static EntityType toEntityType(int entityId) {
return map.getOrDefault(entityId, EntityType.None);
}
public int getId() {
return id;
}

View File

@ -75,7 +75,6 @@ public enum EntityType implements IntValueEnum {
Screen(64),
EchoShell(65),
UIInteractGadget(66),
Region(98),
PlaceHolder(99);
private static final Int2ObjectMap<EntityType> map = new Int2ObjectOpenHashMap<>();

View File

@ -314,7 +314,7 @@ public class GameMainQuest {
0, new Position(avatarPosPos.get(0), avatarPosPos.get(1), avatarPosPos.get(2))); // position
posAndRot.add(
1, new Position(avatarPosRot.get(0), avatarPosRot.get(1), avatarPosRot.get(2))); // rotation
Grasscutter.getLogger().debug("Successfully loaded rewind data for quest {}.", subId);
Grasscutter.getLogger().info("Succesfully loaded rewind data for subQuest {}", subId);
return true;
}

View File

@ -51,12 +51,10 @@ public class GameQuest {
this.state = QuestState.QUEST_STATE_UNSTARTED;
this.triggerData = new HashMap<>();
this.triggers = new HashMap<>();
this.finishProgressList = new int[questData.getFinishCond().size()];
this.failProgressList = new int[questData.getFailCond().size()];
this.finishTime = 0;
}
public void start() {
this.clearProgress(false);
this.acceptTime = Utils.getCurrentSeconds();
this.startTime = this.acceptTime;
this.startGameDay = getOwner().getWorld().getTotalGameTimeDays();
@ -144,7 +142,7 @@ public class GameQuest {
}
public void setFinishProgress(int index, int value) {
this.finishProgressList[index] = value;
finishProgressList[index] = value;
}
public void setFailProgress(int index, int value) {
@ -155,30 +153,17 @@ public class GameQuest {
// TODO improve
var oldState = state;
if (questData.getFinishCond() != null && questData.getFinishCond().size() != 0) {
for (var condition : questData.getFinishCond()) {
if (condition.getType() == QuestContent.QUEST_CONTENT_LUA_NOTIFY) {
this.getOwner().getPlayerProgress().resetCurrentProgress(condition.getParamStr());
}
}
this.finishProgressList = new int[questData.getFinishCond().size()];
}
if (questData.getFailCond() != null && questData.getFailCond().size() != 0) {
for (var condition : questData.getFailCond()) {
if (condition.getType() == QuestContent.QUEST_CONTENT_LUA_NOTIFY) {
this.getOwner().getPlayerProgress().resetCurrentProgress(condition.getParamStr());
}
}
this.failProgressList = new int[questData.getFailCond().size()];
}
this.getOwner().getPlayerProgress().resetCurrentProgress(String.valueOf(this.subQuestId));
setState(QuestState.QUEST_STATE_UNSTARTED);
finishTime = 0;
acceptTime = 0;
startTime = 0;
this.getOwner().getPlayerProgress().resetCurrentProgress(this.subQuestId);
if (oldState == QuestState.QUEST_STATE_UNSTARTED) {
return false;
}

View File

@ -111,9 +111,7 @@ public class QuestManager extends BasePlayerManager {
30700, // Quest which is responsible for unlocking Crash Course.
30800, // Quest which is responsible for unlocking Sparks Amongst the Pages.
47001, 47002, 47003, 47004,
2010103, 2010144 // Prologue Act 2: Chasing Shadows
47001, 47002, 47003, 47004
));
}
}

View File

@ -14,8 +14,7 @@ public class ContentAddQuestProgress extends BaseContent {
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
val progressId = condition.getParam()[0];
val currentCount =
quest.getOwner().getPlayerProgress().getCurrentProgress(String.valueOf(progressId));
val currentCount = quest.getOwner().getPlayerProgress().getCurrentProgress(progressId);
// if the condition count is 0 I think it is safe to assume that the
// condition count from EXEC only needs to be 1

View File

@ -3,7 +3,8 @@ package emu.grasscutter.game.quest.content;
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_COMPLETE_TALK;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.game.quest.*;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueContent;
import lombok.val;
@QuestValueContent(QUEST_CONTENT_COMPLETE_TALK)

View File

@ -2,16 +2,20 @@ package emu.grasscutter.game.quest.content;
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_FINISH_PLOT;
import emu.grasscutter.data.binout.MainQuestData;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.game.quest.*;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueContent;
@QuestValueContent(QUEST_CONTENT_FINISH_PLOT)
public class ContentFinishPlot extends BaseContent {
@Override
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
var talkData = quest.getMainQuest().getTalks().get(params[0]);
var subQuest = quest.getMainQuest().getChildQuestById(params[0]);
MainQuestData.TalkData talkData =
quest.getMainQuest().getTalks().get(Integer.valueOf(params[0]));
GameQuest subQuest = quest.getMainQuest().getChildQuestById(params[0]);
return (talkData != null && subQuest != null || condition.getParamStr().equals(paramStr))
&& condition.getParam()[0] == params[0];
}

View File

@ -12,8 +12,6 @@ public class ContentLuaNotify extends BaseContent {
@Override
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
return condition.getParamStr().equals(paramStr)
&& condition.getCount()
<= quest.getOwner().getPlayerProgress().getCurrentProgress(paramStr);
return condition.getParamStr().equals(paramStr);
}
}

View File

@ -3,16 +3,22 @@ package emu.grasscutter.game.quest.content;
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_NOT_FINISH_PLOT;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.game.quest.*;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueContent;
import lombok.val;
@QuestValueContent(QUEST_CONTENT_NOT_FINISH_PLOT)
public class ContentNotFinishPlot extends BaseContent {
@Override
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
var talkData = quest.getMainQuest().getTalks().get(params[0]);
var subQuest = quest.getMainQuest().getChildQuestById(params[0]);
return (talkData == null && subQuest != null || condition.getParamStr().equals(paramStr))
&& condition.getParam()[0] == params[0];
val talkId = condition.getParam()[0];
val checkMainQuest = quest.getOwner().getQuestManager().getMainQuestByTalkId(talkId);
if (checkMainQuest == null) {
return true;
}
val talkData = checkMainQuest.getTalks().get(talkId);
return talkData == null;
}
}

View File

@ -1,5 +1,6 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
@ -26,16 +27,33 @@ public class ExecNotifyGroupLua extends QuestExecHandler {
}
scene.runWhenFinished(
() -> {
val groupInstance = scriptManager.getGroupInstanceById(groupId);
if (groupInstance != null) {
// workaround to make sure the triggers are still there todo find better way of trigger
// handling
scriptManager.refreshGroup(groupInstance);
Grasscutter.getLogger()
.trace(
"group: {} \ncondition: {} \nparamStr {}",
groupInstance.getLuaGroup(),
condition,
paramStr);
} else {
Grasscutter.getLogger()
.debug(
"notify, no group instance for:\n group: {} \ncondition: {} \nparamStr {}",
groupId,
condition,
paramStr);
}
val eventType =
quest.getState() == QuestState.QUEST_STATE_FINISHED
? EventType.EVENT_QUEST_FINISH
: EventType.EVENT_QUEST_START;
scriptManager.callEvent(
new ScriptArgs(
groupId,
eventType,
quest.getSubQuestId(),
quest.getState() == QuestState.QUEST_STATE_FINISHED ? 1 : 0)
new ScriptArgs(groupId, eventType, quest.getSubQuestId())
.setEventSource(quest.getSubQuestId()));
});

View File

@ -25,7 +25,6 @@ public class ExecRefreshGroupSuite extends QuestExecHandler {
if (!scriptManager.refreshGroupSuite(groupId, suiteId, quest)) {
result = false;
}
scriptManager.getGroupById(groupId).dontUnload = true;
}
return result;

View File

@ -1,11 +1,13 @@
package emu.grasscutter.game.talk;
import static emu.grasscutter.game.quest.enums.QuestCond.QUEST_COND_COMPLETE_TALK;
import static emu.grasscutter.game.quest.enums.QuestContent.*;
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_COMPLETE_ANY_TALK;
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_COMPLETE_TALK;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.MainQuestData.TalkData;
import emu.grasscutter.game.player.*;
import emu.grasscutter.game.player.BasePlayerManager;
import emu.grasscutter.game.player.Player;
import lombok.NonNull;
public final class TalkManager extends BasePlayerManager {
@ -20,10 +22,10 @@ public final class TalkManager extends BasePlayerManager {
* @param npcEntityId The entity ID of the NPC being talked to.
*/
public void triggerTalkAction(int talkId, int npcEntityId) {
var player = this.getPlayer();
var talkData = GameData.getTalkConfigDataMap().get(talkId);
if (talkData != null) {
if (talkData == null) return;
var player = this.getPlayer();
// Check if the NPC id is valid.
var entity = player.getScene().getEntityById(npcEntityId);
if (entity != null) {
@ -36,15 +38,14 @@ public final class TalkManager extends BasePlayerManager {
.getFinishExec()
.forEach(e -> player.getServer().getTalkSystem().triggerExec(player, talkData, e));
// Save the talk value to the quest's data.
this.saveTalkToQuest(talkId, talkData.getQuestId());
}
// Invoke the talking events for quests.
var questManager = player.getQuestManager();
questManager.queueEvent(QUEST_CONTENT_COMPLETE_ANY_TALK, talkId);
questManager.queueEvent(QUEST_CONTENT_COMPLETE_TALK, talkId);
questManager.queueEvent(QUEST_COND_COMPLETE_TALK, talkId);
// Save the talk value to the quest's data.
this.saveTalkToQuest(talkId, talkData.getQuestId());
}
public void saveTalkToQuest(int talkId, int mainQuestId) {

View File

@ -1,43 +1,54 @@
package emu.grasscutter.game.world;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.GameDepot;
import emu.grasscutter.data.binout.SceneNpcBornEntry;
import emu.grasscutter.data.binout.routes.Route;
import emu.grasscutter.data.excels.*;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.SceneData;
import emu.grasscutter.data.excels.codex.CodexAnimalData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.data.excels.world.WorldLevelData;
import emu.grasscutter.data.server.Grid;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.dungeons.*;
import emu.grasscutter.game.dungeons.DungeonManager;
import emu.grasscutter.game.dungeons.DungeonSettleListener;
import emu.grasscutter.game.dungeons.challenge.WorldChallenge;
import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.entity.gadget.GadgetWorktop;
import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.managers.blossom.BlossomManager;
import emu.grasscutter.game.player.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.player.TeamInfo;
import emu.grasscutter.game.props.*;
import emu.grasscutter.game.quest.QuestGroupSuite;
import emu.grasscutter.game.world.data.TeleportProperties;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.proto.*;
import emu.grasscutter.net.proto.AttackResultOuterClass.AttackResult;
import emu.grasscutter.net.proto.EnterTypeOuterClass;
import emu.grasscutter.net.proto.SelectWorktopOptionReqOuterClass;
import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
import emu.grasscutter.scripts.*;
import emu.grasscutter.scripts.SceneIndexManager;
import emu.grasscutter.scripts.SceneScriptManager;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.data.*;
import emu.grasscutter.scripts.data.SceneBlock;
import emu.grasscutter.scripts.data.SceneGroup;
import emu.grasscutter.scripts.data.ScriptArgs;
import emu.grasscutter.server.event.entity.EntityCreationEvent;
import emu.grasscutter.server.event.player.PlayerTeleportEvent;
import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.utils.objects.KahnsSort;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.val;
public final class Scene {
@Getter private final World world;
@ -540,22 +551,19 @@ public final class Scene {
}
var sceneTime = getSceneTimeSeconds();
var entities = Map.copyOf(this.getEntities());
entities.forEach(
(eid, e) -> {
if (!e.isAlive()) {
this.getEntities().remove(eid);
} else e.onTick(sceneTime);
});
getEntities().forEach((eid, e) -> e.onTick(sceneTime));
blossomManager.onTick();
this.checkNpcGroup();
checkNpcGroup();
this.finishLoading();
this.checkPlayerRespawn();
if (this.tickCount++ % 10 == 0) this.broadcastPacket(new PacketSceneTimeNotify(this));
if (this.getPlayerCount() <= 0 && !this.dontDestroyWhenEmpty) {
this.getScriptManager().onDestroy();
this.getWorld().deregisterScene(this);
}
}
/** Validates a player's current position. Teleports the player if the player is out of bounds. */
@ -692,6 +700,18 @@ public final class Scene {
npcBornEntries.addAll(loadNpcForPlayer(player));
}
// clear the unreachable group for client
var toUnload =
this.npcBornEntrySet.stream()
.filter(i -> !npcBornEntries.contains(i))
.map(SceneNpcBornEntry::getGroupId)
.toList();
if (toUnload.size() > 0) {
broadcastPacket(new PacketGroupUnloadNotify(toUnload));
Grasscutter.getLogger().trace("Unload NPC Group {}", toUnload);
}
// exchange the new npcBornEntry Set
this.npcBornEntrySet = npcBornEntries;
}
@ -838,7 +858,7 @@ public final class Scene {
.collect(Collectors.toSet());
for (var group : this.loadedGroups) {
if (!visible.contains(group.id) && !group.dynamic_load && !group.dontUnload)
if (!visible.contains(group.id) && !group.dynamic_load)
unloadGroup(scriptManager.getBlocks().get(group.block_id), group.id);
}
@ -1144,27 +1164,14 @@ public final class Scene {
pos.toDoubleArray(),
Grasscutter.getConfig().server.game.loadEntitiesForPlayerRange);
var sceneNpcBornCanidates =
var sceneNpcBornEntries =
npcList.stream().filter(i -> !this.npcBornEntrySet.contains(i)).toList();
List<SceneNpcBornEntry> sceneNpcBornEntries = new ArrayList<>();
sceneNpcBornCanidates.forEach(
i -> {
var groupInstance = scriptManager.getGroupInstanceById(i.getGroupId());
if (groupInstance == null) return;
if (i.getSuiteIdList() != null
&& !i.getSuiteIdList().contains(groupInstance.getActiveSuiteId())) return;
sceneNpcBornEntries.add(i);
});
if (sceneNpcBornEntries.size() > 0) {
this.broadcastPacket(new PacketGroupSuiteNotify(sceneNpcBornEntries));
Grasscutter.getLogger().trace("Loaded Npc Group Suite {}", sceneNpcBornEntries);
}
return npcList.stream()
.filter(i -> this.npcBornEntrySet.contains(i) || sceneNpcBornEntries.contains(i))
.toList();
return npcList;
}
public void loadGroupForQuest(List<QuestGroupSuite> sceneGroupSuite) {

View File

@ -4,14 +4,17 @@ import static emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportTy
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.dungeon.DungeonData;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.entity.EntityTeam;
import emu.grasscutter.game.entity.EntityWorld;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.player.Player.SceneLoadState;
import emu.grasscutter.game.props.*;
import emu.grasscutter.game.props.EnterReason;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.game.quest.enums.QuestContent;
import emu.grasscutter.game.world.data.TeleportProperties;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.proto.ChatInfoOuterClass.ChatInfo.*;
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
import emu.grasscutter.scripts.data.SceneConfig;
import emu.grasscutter.server.event.player.PlayerTeleportEvent;
@ -19,9 +22,15 @@ import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType;
import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.utils.ConversionUtils;
import it.unimi.dsi.fastutil.ints.*;
import java.util.*;
import lombok.*;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import lombok.Getter;
import lombok.val;
import org.jetbrains.annotations.NotNull;
public class World implements Iterable<Player> {
@ -35,8 +44,7 @@ public class World implements Iterable<Player> {
private int nextPeerId = 0;
private int worldLevel;
@Getter private boolean isMultiplayer = false;
@Getter private boolean timeLocked;
@Getter private boolean isMultiplayer, timeLocked = false;
private long lastUpdateTime;
@Getter private int tickCount = 0;
@ -57,7 +65,6 @@ public class World implements Iterable<Player> {
this.entity = new EntityWorld(this);
this.worldLevel = player.getWorldLevel();
this.isMultiplayer = isMultiplayer;
this.timeLocked = player.getProperty(PlayerProperty.PROP_IS_GAME_TIME_LOCKED) != 0;
this.lastUpdateTime = System.currentTimeMillis();
this.currentWorldTime = host.getPlayerGameTime();
@ -157,16 +164,6 @@ public class World implements Iterable<Player> {
player.getTeamManager().getCurrentSinglePlayerTeamInfo(),
player.getTeamManager().getMaxTeamSize());
player.getTeamManager().setCurrentCharacterIndex(0);
if (player != this.getHost()) {
this.broadcastPacket(
new PacketPlayerChatNotify(
player,
0,
SystemHint.newBuilder()
.setType(SystemHintType.SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD.getNumber())
.build()));
}
}
// Add to scene
@ -220,14 +217,6 @@ public class World implements Iterable<Player> {
victim.getSceneId(),
victim.getPosition()));
}
} else {
this.broadcastPacket(
new PacketPlayerChatNotify(
player,
0,
SystemHint.newBuilder()
.setType(SystemHintType.SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD.getNumber())
.build()));
}
}
@ -437,11 +426,7 @@ public class World implements Iterable<Player> {
// Check if there are players in this world.
if (this.getPlayerCount() == 0) return true;
// Tick all associated scenes.
this.getScenes()
.forEach(
(k, scene) -> {
if (scene.getPlayerCount() > 0) scene.onTick();
});
this.getScenes().forEach((k, scene) -> scene.onTick());
// sync time every 10 seconds
if (this.tickCount % 10 == 0) {
@ -527,6 +512,10 @@ public class World implements Iterable<Player> {
*/
public void changeTime(long gameTime) {
this.currentWorldTime = gameTime;
// Trigger script events.
this.players.forEach(
player -> player.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_GAME_TIME_TICK));
}
/**

View File

@ -81,7 +81,7 @@ public final class PluginManager {
if (pluginConfig.api == null) {
Grasscutter.getLogger()
.warn(translate("plugin.invalid_api.not_present", plugin.getName()));
continue;
return;
} else if (pluginConfig.api != API_VERSION) {
Grasscutter.getLogger()
.warn(
@ -90,13 +90,13 @@ public final class PluginManager {
plugin.getName(),
pluginConfig.api,
API_VERSION));
continue;
return;
}
// Check if the plugin config is valid.
if (!pluginConfig.validate()) {
Grasscutter.getLogger().warn(translate("plugin.invalid_config", plugin.getName()));
continue;
return;
}
// Create a JAR file instance from the plugin's URL.
@ -216,14 +216,9 @@ public final class PluginManager {
Grasscutter.getLogger().info(translate("plugin.enabling_plugin", name));
try {
plugin.onEnable();
return;
} catch (NoSuchMethodError ignored) {
Grasscutter.getLogger().error(translate("plugin.invalid_api.outdated", name));
} catch (Throwable exception) {
Grasscutter.getLogger().error(translate("plugin.enabling_failed", name), exception);
}
this.disablePlugin(plugin);
});
}

View File

@ -266,8 +266,7 @@ public class SceneScriptManager {
suiteId,
groupId,
getScene().getId());
if (targetGroupInstance == null) return false;
}
} else {
Grasscutter.getLogger().debug("Refreshing group {} suite {}", groupId, suiteId);
suiteId =
refreshGroup(
@ -275,6 +274,7 @@ public class SceneScriptManager {
suiteId,
false); // If suiteId is zero, the value of suiteId changes
scene.broadcastPacket(new PacketGroupSuiteNotify(groupId, suiteId));
}
return true;
}
@ -629,7 +629,7 @@ public class SceneScriptManager {
getScene().getEntities().values().stream()
.filter(
e ->
e.getEntityType() == EntityType.Avatar
e.getEntityType() == EntityType.Avatar.getValue()
&& region.getMetaRegion().contains(e.getPosition()))
.toList();
entities.forEach(region::addEntity);
@ -644,7 +644,6 @@ public class SceneScriptManager {
.trace("Call EVENT_ENTER_REGION_{}", region.getMetaRegion().config_id);
this.callEvent(
new ScriptArgs(region.getGroupId(), EventType.EVENT_ENTER_REGION, region.getConfigId())
.setEventSource(EntityType.Avatar.getValue())
.setSourceEntityId(region.getId())
.setTargetEntityId(targetId));
@ -661,7 +660,6 @@ public class SceneScriptManager {
if (region.entityHasLeft()) {
this.callEvent(
new ScriptArgs(region.getGroupId(), EventType.EVENT_LEAVE_REGION, region.getConfigId())
.setEventSource(EntityType.Avatar.getValue())
.setSourceEntityId(region.getId())
.setTargetEntityId(region.getFirstEntityId()));
@ -683,8 +681,8 @@ public class SceneScriptManager {
|| !groupInstance.getDeadEntities().contains(m.config_id));
})
.map(g -> createGadget(group.id, group.block_id, g, groupInstance.getCachedGadgetState(g)))
.filter(Objects::nonNull)
.peek(g -> groupInstance.cacheGadgetState(g.getMetaGadget(), g.getState()))
.filter(Objects::nonNull)
.toList();
}
@ -803,27 +801,26 @@ public class SceneScriptManager {
private void realCallEvent(@Nonnull ScriptArgs params) {
try {
ScriptLoader.getScriptLib().setSceneScriptManager(this);
var eventType = params.type;
var relevantTriggers =
switch (eventType) {
case EventType.EVENT_ENTER_REGION, EventType.EVENT_LEAVE_REGION -> this
.getTriggersByEvent(eventType)
.stream()
int eventType = params.type;
Set<SceneTrigger> relevantTriggers = new HashSet<>();
if (eventType == EventType.EVENT_ENTER_REGION || eventType == EventType.EVENT_LEAVE_REGION) {
relevantTriggers =
this.getTriggersByEvent(eventType).stream()
.filter(
t ->
t.getName().substring(13).equals(String.valueOf(params.param1))
t.getCondition().contains(String.valueOf(params.param1))
&& (t.getSource().isEmpty()
|| t.getSource().equals(params.getEventSource())))
.collect(Collectors.toSet());
default -> this.getTriggersByEvent(eventType).stream()
} else {
relevantTriggers =
this.getTriggersByEvent(eventType).stream()
.filter(
t -> params.getGroupId() == 0 || t.getCurrentGroup().id == params.getGroupId())
.filter(
t -> (t.getSource().isEmpty() || t.getSource().equals(params.getEventSource())))
.collect(Collectors.toSet());
};
}
for (SceneTrigger trigger : relevantTriggers) {
handleEventForTrigger(params, trigger);
}

View File

@ -18,7 +18,6 @@ import emu.grasscutter.game.quest.enums.QuestContent;
import emu.grasscutter.game.quest.enums.QuestState;
import emu.grasscutter.game.world.SceneGroupInstance;
import emu.grasscutter.net.proto.EnterTypeOuterClass;
import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.constants.GroupKillPolicy;
import emu.grasscutter.scripts.data.SceneGroup;
@ -130,7 +129,7 @@ public class ScriptLib {
public int SetWorktopOptionsByGroupId(int groupId, int configId, int[] options) {
logger.debug("[LUA] Call SetWorktopOptionsByGroupId with {},{},{}",
groupId, configId, options);
groupId,configId,options);
val entity = getSceneScriptManager().getScene().getEntityByConfigId(configId, groupId);
@ -153,17 +152,18 @@ public class ScriptLib {
logger.debug("[LUA] Call SetWorktopOptions with {}", printTable(table));
var callParams = this.callParams.getIfExists();
var group = this.currentGroup.getIfExists();
if (callParams == null || group == null) {
if(callParams == null || group == null){
return 1;
}
var configId = callParams.param1;
var entity = getSceneScriptManager().getScene().getEntityByConfigId(configId);
var worktopOptions = new int[table.length()];
for (int i = 1; i<=table.length(); i++) {
int[] worktopOptions = new int[table.length()];
for(int i = 1 ;i<=table.length() ;i++){
worktopOptions[i-1] = table.get(i).optint(-1);
}
if (!(entity instanceof EntityGadget gadget) || worktopOptions.length == 0) {
if(!(entity instanceof EntityGadget gadget)|| worktopOptions.length == 0){
return 2;
}
@ -172,11 +172,9 @@ public class ScriptLib {
}
worktop.addWorktopOptions(worktopOptions);
var scene = this.getSceneScriptManager().getScene();
// Done in order to synchronize with addEntities in Scene.class.
synchronized (this.getSceneScriptManager().getScene()) {
var scene = getSceneScriptManager().getScene();
scene.broadcastPacket(new PacketWorktopOptionNotify(gadget));
}
return 0;
}
@ -403,7 +401,7 @@ public class ScriptLib {
val old = variables.getOrDefault(var, value);
variables.put(var, value);
getSceneScriptManager().callEvent(new ScriptArgs(groupId, EventType.EVENT_VARIABLE_CHANGE, value, old).setEventSource(var));
getSceneScriptManager().callEvent(new ScriptArgs(groupId, EventType.EVENT_VARIABLE_CHANGE, value, old));
return 0;
}
@ -418,7 +416,7 @@ public class ScriptLib {
variables.put(var, old + value);
logger.debug("[LUA] Call ChangeGroupVariableValue with {},{}",
old, old+value);
getSceneScriptManager().callEvent(new ScriptArgs(groupId, EventType.EVENT_VARIABLE_CHANGE, old+value, old).setEventSource(var));
getSceneScriptManager().callEvent(new ScriptArgs(groupId, EventType.EVENT_VARIABLE_CHANGE, old+value, old));
return LuaValue.ZERO;
}
@ -611,11 +609,6 @@ public class ScriptLib {
logger.debug("[LUA] Call CreateGadget with {}",
printTable(table));
var configId = table.get("config_id").toint();
//TODO: figure out what creating gadget configId 0 does
if (configId == 0){
Grasscutter.getLogger().warn("Tried to CreateGadget with config_id 0: {}", printTable(table));
return 0;
}
var group = getCurrentGroup();
@ -674,7 +667,6 @@ public class ScriptLib {
var1);
for(var player : getSceneScriptManager().getScene().getPlayers()){
player.getPlayerProgress().addToCurrentProgress(var1, 1);
player.getQuestManager().queueEvent(QuestCond.QUEST_COND_LUA_NOTIFY, var1);
player.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_LUA_NOTIFY, var1);
}
@ -710,7 +702,7 @@ public class ScriptLib {
return EntityType.None.getValue();
}
return entity.getEntityType().getValue();
return entity.getEntityType();
}
public int GetQuestState(int entityId, int questId){
@ -745,11 +737,11 @@ public class ScriptLib {
val entity = getSceneScriptManager().getScene().getEntityByConfigId(configId, groupId);
if(entity == null || entity.getEntityType().getValue() != entityType){
if(entity == null || entity.getEntityType() != entityType){
return 1;
}
getSceneScriptManager().getScene().removeEntity(entity, VisionType.VISION_TYPE_REMOVE);
getSceneScriptManager().getScene().removeEntity(entity);
return 0;
}
@ -823,17 +815,17 @@ public class ScriptLib {
//TODO implement
return 0;
}
public boolean IsPlayerAllAvatarDie(int sceneUid){
public int IsPlayerAllAvatarDie(int sceneUid){
logger.warn("[LUA] Call unimplemented IsPlayerAllAvatarDie {}", sceneUid);
var playerEntities = getSceneScriptManager().getScene().getEntities().values().stream().filter(e -> e.getEntityType() == EntityType.Avatar).toList();
var playerEntities = getSceneScriptManager().getScene().getEntities().values().stream().filter(e -> e.getEntityType() == EntityIdType.AVATAR.getId()).toList();
for (GameEntity p : playerEntities){
var player = (EntityAvatar)p;
if(player.isAlive()){
return false;
return 0;
}
}
//TODO check
return true;
return 1;
}
public int sendShowCommonTipsToClient(String title, String content, int closeTime) {
@ -869,11 +861,6 @@ public class ScriptLib {
//TODO implement var6 object has int success, int fail, bool fail_on_wipe
return 0;
}
public int StopChallenge(int var1, int var2){
logger.warn("[LUA] Call unimplemented StopChallenge with {} {}", var1, var2);
//TODO implement
return 0;
}
public int CreateEffigyChallengeMonster(int var1, int[] var2){
logger.warn("[LUA] Call unimplemented CreateEffigyChallengeMonster with {} {}", var1, var2);
//TODO implement
@ -1611,16 +1598,6 @@ public class ScriptLib {
return 0;
}
public int DropSubfield(LuaTable table) {
String subfield_name = table.get("subfield_name").toString();
var entity = getCurrentEntity();
if(!entity.isPresent()) return -1;
entity.get().dropSubfield(subfield_name);
return -1;
}
public int[] GetGatherConfigIdList() {
EntityGadget gadget = getCurrentEntityGadget();

View File

@ -3,8 +3,5 @@ package emu.grasscutter.scripts.constants;
public enum VisionLevelType {
VISION_LEVEL_NORMAL,
VISION_LEVEL_LITTLE_REMOTE,
VISION_LEVEL_REMOTE,
VISION_LEVEL_SUPER,
VISION_LEVEL_NEARBY,
VISION_LEVEL_SUPER_NEARBY
VISION_LEVEL_REMOTE
}

View File

@ -40,7 +40,6 @@ public final class SceneGroup {
public SceneGarbage garbages;
public SceneInitConfig init_config;
@Getter public boolean dynamic_load = false;
public boolean dontUnload = false;
public SceneReplaceable is_replaceable;

View File

@ -32,9 +32,9 @@ public class SceneRegion {
public boolean contains(Position position) {
switch (shape) {
case ScriptRegionShape.CUBIC:
return (Math.abs(pos.getX() - position.getX()) <= size.getX() / 2f)
&& (Math.abs(pos.getY() - position.getY()) <= size.getY() / 2f)
&& (Math.abs(pos.getZ() - position.getZ()) <= size.getZ() / 2f);
return (Math.abs(pos.getX() - position.getX()) <= size.getX())
&& (Math.abs(pos.getY() - position.getY()) <= size.getY())
&& (Math.abs(pos.getZ() - position.getZ()) <= size.getZ());
case ScriptRegionShape.SPHERE:
var x = Math.pow(pos.getX() - position.getX(), 2);
var y = Math.pow(pos.getY() - position.getY(), 2);

View File

@ -27,7 +27,7 @@ public final class SceneTrigger {
@Override
public int hashCode() {
return (currentGroup.id + name).hashCode();
return name.hashCode();
}
@Override

View File

@ -32,11 +32,10 @@ import emu.grasscutter.server.event.internal.*;
import emu.grasscutter.server.event.types.ServerEvent;
import emu.grasscutter.server.scheduler.ServerTaskScheduler;
import emu.grasscutter.task.TaskMap;
import emu.grasscutter.utils.Utils;
import java.net.*;
import java.time.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.ConcurrentHashMap;
import kcp.highway.*;
import lombok.*;
import org.jetbrains.annotations.NotNull;
@ -164,6 +163,9 @@ public final class GameServer extends KcpServer implements Iterable<Player> {
// Chata manager
this.chatManager = new ChatSystem(this);
// Hook into shutdown event.
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
}
private static InetSocketAddress getAdapterInetSocketAddress() {
@ -324,27 +326,16 @@ public final class GameServer extends KcpServer implements Iterable<Player> {
}
public void onServerShutdown() {
var event = new ServerStopEvent(ServerEvent.Type.GAME, OffsetDateTime.now());
ServerStopEvent event = new ServerStopEvent(ServerEvent.Type.GAME, OffsetDateTime.now());
event.call();
// Save players & the world.
this.getPlayers().forEach((uid, player) -> player.getSession().close());
this.getPlayers()
.forEach(
(uid, player) -> {
player.getSession().close();
});
this.getWorlds().forEach(World::save);
Utils.sleep(1000L); // Wait 1 second for operations to finish.
this.stop(); // Stop the server.
try {
var threadPool = GameSessionManager.getLogicThread();
// Shutdown network thread.
threadPool.shutdownGracefully();
// Wait for the network thread to finish.
if (!threadPool.awaitTermination(5, TimeUnit.SECONDS)) {
Grasscutter.getLogger().error("Logic thread did not terminate!");
}
} catch (InterruptedException ignored) {
}
}
@NotNull @Override

View File

@ -1,20 +1,27 @@
package emu.grasscutter.server.game;
import static emu.grasscutter.config.Configuration.*;
import static emu.grasscutter.config.Configuration.GAME_INFO;
import static emu.grasscutter.config.Configuration.SERVER;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.PacketOpcodesUtils;
import emu.grasscutter.server.event.game.SendPacketEvent;
import emu.grasscutter.utils.*;
import io.netty.buffer.*;
import emu.grasscutter.utils.Crypto;
import emu.grasscutter.utils.FileUtils;
import emu.grasscutter.utils.Utils;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.File;
import java.net.InetSocketAddress;
import java.nio.file.Path;
import lombok.*;
import lombok.Getter;
import lombok.Setter;
public class GameSession implements GameSessionManager.KcpChannel {
private final GameServer server;
@ -132,11 +139,7 @@ public class GameSession implements GameSessionManager.KcpChannel {
SendPacketEvent event = new SendPacketEvent(this, packet);
event.call();
if (!event.isCanceled()) { // If event is not cancelled, continue.
try {
tunnel.writeData(event.getPacket().build());
} catch (Exception ignored) {
Grasscutter.getLogger().debug("Unable to send packet to client.");
}
}
}
@ -149,6 +152,7 @@ public class GameSession implements GameSessionManager.KcpChannel {
@Override
public void handleReceive(byte[] bytes) {
// Decrypt and turn back into a packet
if (this.getState() != SessionState.WAITING_FOR_TOKEN)
Crypto.xor(bytes, useSecretKey() ? Crypto.ENCRYPT_KEY : Crypto.DISPATCH_KEY);
ByteBuf packet = Unpooled.wrappedBuffer(bytes);

View File

@ -2,15 +2,16 @@ package emu.grasscutter.server.game;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.utils.Utils;
import io.netty.buffer.*;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.DefaultEventLoop;
import java.net.InetSocketAddress;
import java.util.concurrent.ConcurrentHashMap;
import kcp.highway.*;
import lombok.Getter;
import kcp.highway.KcpListener;
import kcp.highway.Ukcp;
public class GameSessionManager {
@Getter private static final DefaultEventLoop logicThread = new DefaultEventLoop();
private static final DefaultEventLoop logicThread = new DefaultEventLoop();
private static final ConcurrentHashMap<Ukcp, GameSession> sessions = new ConcurrentHashMap<>();
private static final KcpListener listener =
new KcpListener() {

View File

@ -95,13 +95,10 @@ public final class RegionHandler implements Router {
RegionInfo.newBuilder()
.setGateserverIp(region.Ip)
.setGateserverPort(region.Port)
.setSecretKey(ByteString.copyFrom(Crypto.DISPATCH_SEED))
.build();
// Create an updated region query.
var updatedQuery =
QueryCurrRegionHttpRsp.newBuilder()
.setRegionInfo(regionInfo)
.setClientSecretKey(ByteString.copyFrom(Crypto.DISPATCH_SEED))
.build();
var updatedQuery = QueryCurrRegionHttpRsp.newBuilder().setRegionInfo(regionInfo).build();
regions.put(
region.Name,
new RegionData(

View File

@ -7,13 +7,18 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.http.Router;
import emu.grasscutter.utils.*;
import emu.grasscutter.utils.DispatchUtils;
import emu.grasscutter.utils.FileUtils;
import emu.grasscutter.utils.Utils;
import io.javalin.Javalin;
import io.javalin.http.*;
import io.javalin.http.ContentType;
import io.javalin.http.Context;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.LinkedHashSet;
import lombok.Getter;
/** Handles all gacha-related HTTP requests. */
@ -43,14 +48,14 @@ public final class GachaHandler implements Router {
// Make request to dispatch server.
var data = DispatchUtils.fetchGachaRecords(account.getId(), page, gachaType);
var records = data.get("records").getAsString();
var records = data.get("records").getAsJsonArray();
var maxPage = data.get("maxPage").getAsLong();
var locale = account.getLocale();
var template =
new String(
FileUtils.read(FileUtils.getDataPath("gacha/records.html")), StandardCharsets.UTF_8)
.replace("'{{REPLACE_RECORDS}}'", Utils.unescapeJson(records))
.replace("'{{REPLACE_RECORDS}}'", records.toString())
.replace("'{{REPLACE_MAXPAGE}}'", String.valueOf(maxPage))
.replace("{{TITLE}}", translate(locale, "gacha.records.title"))
.replace("{{DATE}}", translate(locale, "gacha.records.date"))

View File

@ -1,6 +1,5 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
@ -12,11 +11,6 @@ public final class HandlerClientLockGameTimeNotify extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var packet = ClientLockGameTimeNotify.parseFrom(payload);
// session.getPlayer().getWorld().lockTime(packet.getIsLock());
// TODO: figure out what to implement here
if (packet.getIsLock())
Grasscutter.getLogger()
.warn(
"Invalid 'ClientLockGameTimeNotify' received; value is true. (please report to development channel)");
session.getPlayer().getWorld().lockTime(packet.getIsLock());
}
}

View File

@ -1,13 +1,15 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.QuestCreateEntityReqOuterClass.QuestCreateEntityReq;
import emu.grasscutter.scripts.data.SceneGadget;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketQuestCreateEntityRsp;
import lombok.val;
@ -28,29 +30,12 @@ public class HandlerQuestCreateEntityReq extends PacketHandler {
case GADGET_ID -> {
val gadgetId = entity.getGadgetId();
val gadgetInfo = entity.getGadget();
var gadgetData = GameData.getGadgetDataMap().get(gadgetId);
GadgetData gadgetData = GameData.getGadgetDataMap().get(gadgetId);
gameEntity =
switch (gadgetData.getType()) {
case Vehicle -> new EntityVehicle(scene, session.getPlayer(), gadgetId, 0, pos, rot);
case Chest -> {
var chest = gadgetInfo.getChest();
var gadget = new EntityGadget(scene, gadgetId, pos, rot);
// Create the gadget data for the chest.
var metaGadget = new SceneGadget();
metaGadget.drop_count = 1; // TODO: Check if more items should be dropped.
metaGadget.chest_drop_id = chest.getChestDropId();
metaGadget.setShowcutscene(chest.getIsShowCutscene());
// Apply the gadget data to the chest.
gadget.setMetaGadget(metaGadget);
yield gadget;
}
default -> new EntityGadget(scene, gadgetId, pos, rot);
};
if (gameEntity instanceof EntityGadget gadget) {
gadget.buildContent();
}
}
case ITEM_ID -> {
val itemId = entity.getItemId();

View File

@ -13,6 +13,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()
@ -38,6 +39,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()
@ -59,6 +61,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()

View File

@ -35,12 +35,12 @@ public class PacketPlayerLoginRsp extends BasePacket {
RegionInfo.newBuilder()
.setGateserverIp(lr(GAME_INFO.accessAddress, GAME_INFO.bindAddress))
.setGateserverPort(lr(GAME_INFO.accessPort, GAME_INFO.bindPort))
.setSecretKey(ByteString.copyFrom(Crypto.DISPATCH_SEED))
.build();
var regionCache =
regionCache =
QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp.newBuilder()
.setRegionInfo(serverRegion)
.setClientSecretKey(ByteString.copyFrom(Crypto.DISPATCH_SEED))
.build();
} catch (Exception e) {
Grasscutter.getLogger().error("Error while initializing region cache!", e);

View File

@ -1,15 +1,23 @@
package emu.grasscutter.utils;
import com.google.gson.*;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.*;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import emu.grasscutter.data.common.DynamicFloat;
import emu.grasscutter.game.world.*;
import emu.grasscutter.game.world.GridPosition;
import emu.grasscutter.game.world.Position;
import it.unimi.dsi.fastutil.floats.FloatArrayList;
import it.unimi.dsi.fastutil.ints.*;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;
import lombok.val;
public interface JsonAdapters {

View File

@ -12,7 +12,6 @@ import io.javalin.http.Context;
import io.netty.buffer.*;
import it.unimi.dsi.fastutil.ints.*;
import java.io.*;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.time.*;
@ -485,7 +484,6 @@ public final class Utils {
*
* @param runnable The task to run.
*/
@SuppressWarnings("BusyWait")
public static void waitFor(Returnable<Boolean> runnable) {
while (!runnable.invoke()) {
try {
@ -495,43 +493,4 @@ public final class Utils {
}
}
}
/**
* Recursively finds all fields in a class.
*
* @param type The class to find fields in.
* @return A list of all fields in the class.
*/
public static List<Field> getAllFields(Class<?> type) {
var fields = new LinkedList<>(Arrays.asList(type.getDeclaredFields()));
// Check for superclasses.
if (type.getSuperclass() != null) {
fields.addAll(getAllFields(type.getSuperclass()));
}
return fields;
}
/**
* Sleeps the current thread without an exception.
*
* @param millis The amount of milliseconds to sleep.
*/
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ignored) {
}
}
/**
* Unescapes a JSON string.
*
* @param json The JSON string to unescape.
* @return The unescaped JSON string.
*/
public static String unescapeJson(String json) {
return json.replaceAll("\"", "\"");
}
}

View File

@ -1,10 +1,11 @@
package emu.grasscutter.utils.objects;
import com.google.gson.*;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import emu.grasscutter.server.dispatch.IDispatcher;
import emu.grasscutter.utils.Utils;
import java.lang.reflect.Field;
import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
public interface FieldFetch {
/**
@ -17,7 +18,8 @@ public interface FieldFetch {
// Prepare field properties.
var fieldValues = new JsonObject();
var fieldMap = new HashMap<String, Field>();
Utils.getAllFields(this.getClass()).forEach(field -> fieldMap.put(field.getName(), field));
Arrays.stream(this.getClass().getDeclaredFields())
.forEach(field -> fieldMap.put(field.getName(), field));
// Find the values of all requested fields.
for (var fieldName : fields) {

View File

@ -463,8 +463,7 @@
"disabling_failed": "Failed to disable plugin: %s",
"invalid_api": {
"not_present": "Plugin %s does not specify an API version.",
"lower": "Plugin %s is using API version %s, while the server is using API version %s.",
"outdated": "Plugin %s is using an outdated API method."
"lower": "Plugin %s is using API version %s, while the server is using API version %s."
}
}
}

View File

@ -463,8 +463,7 @@
"disabling_failed": "Error al desactivar el plugin: %s",
"invalid_api": {
"not_present": "🇺🇸Plugin %s does not specify an API version.",
"lower": "🇺🇸Plugin %s is using API version %s, while the server is using API version %s.",
"outdated": "🇺🇸Plugin %s is using an outdated API method."
"lower": "🇺🇸Plugin %s is using API version %s, while the server is using API version %s."
}
}
}

View File

@ -463,8 +463,7 @@
"disabling_failed": "Impossible de désactiver le plugin %s",
"invalid_api": {
"not_present": "🇺🇸Plugin %s does not specify an API version.",
"lower": "🇺🇸Plugin %s is using API version %s, while the server is using API version %s.",
"outdated": "🇺🇸Plugin %s is using an outdated API method."
"lower": "🇺🇸Plugin %s is using API version %s, while the server is using API version %s."
}
}
}

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