Files
Grasscutter/src/main/java/emu/grasscutter/utils/FileUtils.java
T
KingRainbow44 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

272 lines
10 KiB
Java

package emu.grasscutter.utils;
import emu.grasscutter.Grasscutter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.val;
public final class FileUtils {
private static final Path DATA_DEFAULT_PATH;
private static final Path DATA_USER_PATH = Path.of(Grasscutter.config.folderStructure.data);
private static final Path PACKETS_PATH = Path.of(Grasscutter.config.folderStructure.packets);
private static final Path PLUGINS_PATH = Path.of(Grasscutter.config.folderStructure.plugins);
private static final Path CACHE_PATH = Path.of(Grasscutter.config.folderStructure.cache);
private static final Path RESOURCES_PATH;
private static final Path SCRIPTS_PATH;
private static final String[] TSJ_JSON_TSV = {"tsj", "json", "tsv"};
static {
FileSystem fs = null;
Path path = null;
// Setup access to jar resources
try {
var uri = Grasscutter.class.getResource("/defaults/data").toURI();
switch (uri.getScheme()) {
case "jar": // When running normally, as a jar
case "zip": // Honestly I have no idea what setup would result in this, but this should work
// regardless
fs =
FileSystems.newFileSystem(
uri,
Map.of()); // Have to mount zip filesystem. This leaks, but we want to keep it
// forever anyway.
// Fall-through
case "file": // When running in an IDE
path = Path.of(uri); // Can access directly
break;
default:
Grasscutter.getLogger()
.error("Invalid URI scheme for class resources: " + uri.getScheme());
break;
}
} catch (URISyntaxException | IOException e) {
// Failed to load this jar. How?
Grasscutter.getLogger().error("Failed to load jar?!");
} finally {
DATA_DEFAULT_PATH = path;
Grasscutter.getLogger().debug("Setting path for default data: " + path.toAbsolutePath());
}
// Setup Resources path
final String resources = Grasscutter.config.folderStructure.resources;
fs = null;
path = Path.of(resources);
if (resources.endsWith(
".zip")) { // Would be nice to support .tar.gz too at some point, but it doesn't come for
// free in Java
try {
fs = FileSystems.newFileSystem(path);
} catch (IOException e) {
Grasscutter.getLogger().error("Failed to load resources zip \"" + resources + "\"");
}
}
if (fs != null) {
var root = fs.getPath("");
try (Stream<Path> pathStream =
Files.find(
root,
3,
(p, a) -> {
var filename = p.getFileName();
if (filename == null) return false;
return filename.toString().equals("ExcelBinOutput");
})) {
var excelBinOutput = pathStream.findFirst();
if (excelBinOutput.isPresent()) {
path = excelBinOutput.get().getParent();
if (path == null) path = root;
Grasscutter.getLogger()
.debug("Resources will be loaded from \"" + resources + "/" + path + "\"");
} else {
Grasscutter.getLogger()
.error("Failed to find ExcelBinOutput in resources zip \"" + resources + "\"");
}
} catch (IOException e) {
Grasscutter.getLogger().error("Failed to scan resources zip \"" + resources + "\"");
}
}
RESOURCES_PATH = path;
// Setup Scripts path
final String scripts = Grasscutter.config.folderStructure.scripts;
SCRIPTS_PATH =
(scripts.startsWith("resources:"))
? RESOURCES_PATH.resolve(scripts.substring("resources:".length()))
: Path.of(scripts);
}
/* Apply after initialization. */
private static final Path[] DATA_PATHS = {DATA_USER_PATH, DATA_DEFAULT_PATH};
public static Path getDataPathTsjJsonTsv(String filename) {
return getDataPathTsjJsonTsv(filename, true);
}
public static Path getDataPathTsjJsonTsv(String filename, boolean fallback) {
val name = getFilenameWithoutExtension(filename);
for (val data_path : DATA_PATHS) {
for (val ext : TSJ_JSON_TSV) {
val path = data_path.resolve(name + "." + ext);
if (Files.exists(path)) return path;
}
}
return fallback
? DATA_USER_PATH.resolve(name + ".tsj")
: null; // Maybe they want to write to a new file
}
public static Path getDataPath(String path) {
Path userPath = DATA_USER_PATH.resolve(path);
if (Files.exists(userPath)) return userPath;
Path defaultPath = DATA_DEFAULT_PATH.resolve(path);
if (Files.exists(defaultPath)) return defaultPath;
return userPath; // Maybe they want to write to a new file
}
public static Path getDataUserPath(String path) {
return DATA_USER_PATH.resolve(path);
}
public static Path getCachePath(String path) {
return CACHE_PATH.resolve(path);
}
public static Path getPacketPath(String path) {
return PACKETS_PATH.resolve(path);
}
public static Path getPluginPath(String path) {
return PLUGINS_PATH.resolve(path);
}
public static Path getResourcePath(String path) {
return RESOURCES_PATH.resolve(path);
}
public static Path getExcelPath(String filename) {
Path p = getTsjJsonTsv(RESOURCES_PATH.resolve("Server"), filename);
return Files.exists(p) ? p : getTsjJsonTsv(RESOURCES_PATH.resolve("ExcelBinOutput"), filename);
}
// Gets path of a resource.
// If multiple formats of it exist, priority is TSJ > JSON > TSV
// If none exist, return the TSJ path, in case it wants to create a file
public static Path getTsjJsonTsv(Path root, String filename) {
val name = getFilenameWithoutExtension(filename);
for (val ext : TSJ_JSON_TSV) {
val path = root.resolve(name + "." + ext);
if (Files.exists(path)) return path;
}
return root.resolve(name + ".tsj");
}
public static Path getScriptPath(String path) {
return SCRIPTS_PATH.resolve(path);
}
public static void write(String dest, byte[] bytes) {
Path path = Path.of(dest);
try {
Files.write(path, bytes);
} catch (IOException e) {
Grasscutter.getLogger().warn("Failed to write file: " + dest);
}
}
public static byte[] read(String dest) {
return read(Path.of(dest));
}
public static byte[] read(Path path) {
try {
return Files.readAllBytes(path);
} catch (IOException e) {
Grasscutter.getLogger().warn("Failed to read file: " + path);
}
return new byte[0];
}
public static InputStream readResourceAsStream(String resourcePath) {
return Grasscutter.class.getResourceAsStream(resourcePath);
}
public static byte[] readResource(String resourcePath) {
try (InputStream is = Grasscutter.class.getResourceAsStream(resourcePath)) {
return is.readAllBytes();
} catch (Exception exception) {
Grasscutter.getLogger().warn("Failed to read resource: " + resourcePath);
Grasscutter.getLogger().debug("Failed to load resource: " + resourcePath, exception);
}
return new byte[0];
}
public static byte[] read(File file) {
return read(file.getPath());
}
public static void copyResource(String resourcePath, String destination) {
try {
byte[] resource = FileUtils.readResource(resourcePath);
FileUtils.write(destination, resource);
} catch (Exception exception) {
Grasscutter.getLogger().warn("Failed to copy resource: " + resourcePath + "\n" + exception);
}
}
@Deprecated // Misnamed legacy function
public static String getFilenameWithoutPath(String filename) {
return getFilenameWithoutExtension(filename);
}
public static String getFilenameWithoutExtension(String filename) {
int i = filename.lastIndexOf(".");
return (i < 0) ? filename : filename.substring(0, i);
}
public static String getFileExtension(Path path) {
val filename = path.toString();
int i = filename.lastIndexOf(".");
return (i < 0) ? "" : filename.substring(i + 1);
}
public static List<Path> getPathsFromResource(String folder) throws URISyntaxException {
try {
// file walks JAR
return Files.walk(Path.of(Grasscutter.class.getResource(folder).toURI()))
.filter(Files::isRegularFile)
.collect(Collectors.toList());
} catch (IOException e) {
// Eclipse puts resources in its bin folder
try {
return Files.walk(Path.of(System.getProperty("user.dir"), folder))
.filter(Files::isRegularFile)
.collect(Collectors.toList());
} catch (IOException ignored) {
return null;
}
}
}
@SuppressWarnings("ResultOfMethodCallIgnored")
public static String readToString(InputStream file) throws IOException {
byte[] content = file.readAllBytes();
return new String(content, StandardCharsets.UTF_8);
}
}