Showing preview only (9,969K chars total). Download the full file or copy to clipboard to get everything.
Repository: HMCL-dev/HMCL
Branch: main
Commit: 87010309343a
Files: 1060
Total size: 9.3 MB
Directory structure:
gitextract_ivylyroq/
├── .cnb/
│ └── ISSUE_TEMPLATE/
│ └── config.yml
├── .editorconfig
├── .gitee/
│ └── ISSUE_TEMPLATE/
│ └── config.yml
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ ├── config.yml
│ │ └── feature.yml
│ └── workflows/
│ ├── check-codes.yml
│ ├── gradle.yml
│ ├── mirror.yml
│ └── release.yml
├── .gitignore
├── HMCL/
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ ├── com/
│ │ │ │ │ └── jfoenix/
│ │ │ │ │ ├── controls/
│ │ │ │ │ │ ├── JFXButton.java
│ │ │ │ │ │ ├── JFXCheckBox.java
│ │ │ │ │ │ ├── JFXClippedPane.java
│ │ │ │ │ │ ├── JFXColorPicker.java
│ │ │ │ │ │ ├── JFXComboBox.java
│ │ │ │ │ │ ├── JFXDialog.java
│ │ │ │ │ │ ├── JFXDialogLayout.java
│ │ │ │ │ │ ├── JFXListCell.java
│ │ │ │ │ │ ├── JFXListView.java
│ │ │ │ │ │ ├── JFXPasswordField.java
│ │ │ │ │ │ ├── JFXPopup.java
│ │ │ │ │ │ ├── JFXProgressBar.java
│ │ │ │ │ │ ├── JFXRadioButton.java
│ │ │ │ │ │ ├── JFXRippler.java
│ │ │ │ │ │ ├── JFXSlider.java
│ │ │ │ │ │ ├── JFXSnackbar.java
│ │ │ │ │ │ ├── JFXSnackbarLayout.java
│ │ │ │ │ │ ├── JFXSpinner.java
│ │ │ │ │ │ ├── JFXTextArea.java
│ │ │ │ │ │ ├── JFXTextField.java
│ │ │ │ │ │ ├── JFXToggleButton.java
│ │ │ │ │ │ ├── JFXTreeCell.java
│ │ │ │ │ │ ├── JFXTreeView.java
│ │ │ │ │ │ ├── behavior/
│ │ │ │ │ │ │ └── JFXGenericPickerBehavior.java
│ │ │ │ │ │ ├── datamodels/
│ │ │ │ │ │ │ └── treetable/
│ │ │ │ │ │ │ └── RecursiveTreeObject.java
│ │ │ │ │ │ └── events/
│ │ │ │ │ │ └── JFXDialogEvent.java
│ │ │ │ │ ├── effects/
│ │ │ │ │ │ └── JFXDepthManager.java
│ │ │ │ │ ├── skins/
│ │ │ │ │ │ ├── JFXButtonSkin.java
│ │ │ │ │ │ ├── JFXCheckBoxSkin.java
│ │ │ │ │ │ ├── JFXColorPalette.java
│ │ │ │ │ │ ├── JFXColorPickerSkin.java
│ │ │ │ │ │ ├── JFXColorPickerUI.java
│ │ │ │ │ │ ├── JFXCustomColorPicker.java
│ │ │ │ │ │ ├── JFXCustomColorPickerDialog.java
│ │ │ │ │ │ ├── JFXGenericPickerSkin.java
│ │ │ │ │ │ ├── JFXListViewSkin.java
│ │ │ │ │ │ ├── JFXPopupSkin.java
│ │ │ │ │ │ ├── JFXProgressBarSkin.java
│ │ │ │ │ │ ├── JFXRadioButtonSkin.java
│ │ │ │ │ │ ├── JFXSliderSkin.java
│ │ │ │ │ │ ├── JFXSpinnerSkin.java
│ │ │ │ │ │ ├── JFXTabPaneSkin.java
│ │ │ │ │ │ └── JFXToggleButtonSkin.java
│ │ │ │ │ ├── transitions/
│ │ │ │ │ │ ├── CacheMemento.java
│ │ │ │ │ │ ├── JFXAnimationTimer.java
│ │ │ │ │ │ ├── JFXKeyFrame.java
│ │ │ │ │ │ └── JFXKeyValue.java
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── JFXNodeUtils.java
│ │ │ │ │ └── TreeShowingProperty.java
│ │ │ │ └── org/
│ │ │ │ └── jackhuang/
│ │ │ │ └── hmcl/
│ │ │ │ ├── EntryPoint.java
│ │ │ │ ├── Launcher.java
│ │ │ │ ├── Metadata.java
│ │ │ │ ├── countly/
│ │ │ │ │ └── CrashReport.java
│ │ │ │ ├── game/
│ │ │ │ │ ├── HMCLCacheRepository.java
│ │ │ │ │ ├── HMCLGameLauncher.java
│ │ │ │ │ ├── HMCLGameRepository.java
│ │ │ │ │ ├── HMCLModpackInstallTask.java
│ │ │ │ │ ├── HMCLModpackManifest.java
│ │ │ │ │ ├── HMCLModpackProvider.java
│ │ │ │ │ ├── LauncherHelper.java
│ │ │ │ │ ├── LocalizedRemoteModRepository.java
│ │ │ │ │ ├── Log.java
│ │ │ │ │ ├── LogExporter.java
│ │ │ │ │ ├── ManuallyCreatedModpackException.java
│ │ │ │ │ ├── ManuallyCreatedModpackInstallTask.java
│ │ │ │ │ ├── ModpackHelper.java
│ │ │ │ │ ├── OAuthServer.java
│ │ │ │ │ └── TexturesLoader.java
│ │ │ │ ├── java/
│ │ │ │ │ ├── HMCLJavaRepository.java
│ │ │ │ │ ├── JavaInfoUtils.java
│ │ │ │ │ ├── JavaInstallTask.java
│ │ │ │ │ ├── JavaLocalFiles.java
│ │ │ │ │ ├── JavaManager.java
│ │ │ │ │ └── JavaManifest.java
│ │ │ │ ├── setting/
│ │ │ │ │ ├── Accounts.java
│ │ │ │ │ ├── AuthlibInjectorServers.java
│ │ │ │ │ ├── Config.java
│ │ │ │ │ ├── ConfigHolder.java
│ │ │ │ │ ├── ConfigUpgrader.java
│ │ │ │ │ ├── DownloadProviders.java
│ │ │ │ │ ├── EnumBackgroundImage.java
│ │ │ │ │ ├── EnumCommonDirectory.java
│ │ │ │ │ ├── FontManager.java
│ │ │ │ │ ├── GlobalConfig.java
│ │ │ │ │ ├── JavaVersionType.java
│ │ │ │ │ ├── LauncherVisibility.java
│ │ │ │ │ ├── Profile.java
│ │ │ │ │ ├── Profiles.java
│ │ │ │ │ ├── ProxyManager.java
│ │ │ │ │ ├── SambaException.java
│ │ │ │ │ ├── Settings.java
│ │ │ │ │ ├── StyleSheets.java
│ │ │ │ │ ├── VersionIconType.java
│ │ │ │ │ └── VersionSetting.java
│ │ │ │ ├── terracotta/
│ │ │ │ │ ├── TerracottaBundle.java
│ │ │ │ │ ├── TerracottaManager.java
│ │ │ │ │ ├── TerracottaMetadata.java
│ │ │ │ │ ├── TerracottaNodeList.java
│ │ │ │ │ ├── TerracottaState.java
│ │ │ │ │ ├── profile/
│ │ │ │ │ │ ├── ProfileKind.java
│ │ │ │ │ │ └── TerracottaProfile.java
│ │ │ │ │ └── provider/
│ │ │ │ │ ├── AbstractTerracottaProvider.java
│ │ │ │ │ ├── GeneralProvider.java
│ │ │ │ │ └── MacOSProvider.java
│ │ │ │ ├── theme/
│ │ │ │ │ ├── Theme.java
│ │ │ │ │ ├── ThemeColor.java
│ │ │ │ │ └── Themes.java
│ │ │ │ ├── ui/
│ │ │ │ │ ├── Controllers.java
│ │ │ │ │ ├── CrashWindow.java
│ │ │ │ │ ├── DialogController.java
│ │ │ │ │ ├── DialogUtils.java
│ │ │ │ │ ├── FXUtils.java
│ │ │ │ │ ├── GameCrashWindow.java
│ │ │ │ │ ├── HTMLRenderer.java
│ │ │ │ │ ├── InstallerItem.java
│ │ │ │ │ ├── ListPageBase.java
│ │ │ │ │ ├── LogWindow.java
│ │ │ │ │ ├── SVG.java
│ │ │ │ │ ├── SVGContainer.java
│ │ │ │ │ ├── ScrollUtils.java
│ │ │ │ │ ├── ToolbarListPageSkin.java
│ │ │ │ │ ├── UpgradeDialog.java
│ │ │ │ │ ├── WeakListenerHolder.java
│ │ │ │ │ ├── WebPage.java
│ │ │ │ │ ├── WindowsNativeUtils.java
│ │ │ │ │ ├── account/
│ │ │ │ │ │ ├── AccountAdvancedListItem.java
│ │ │ │ │ │ ├── AccountListItem.java
│ │ │ │ │ │ ├── AccountListItemSkin.java
│ │ │ │ │ │ ├── AccountListPage.java
│ │ │ │ │ │ ├── AccountListPopupMenu.java
│ │ │ │ │ │ ├── AddAuthlibInjectorServerPane.java
│ │ │ │ │ │ ├── ClassicAccountLoginDialog.java
│ │ │ │ │ │ ├── CreateAccountPane.java
│ │ │ │ │ │ ├── MicrosoftAccountLoginPane.java
│ │ │ │ │ │ └── OfflineAccountSkinPane.java
│ │ │ │ │ ├── animation/
│ │ │ │ │ │ ├── AnimationUtils.java
│ │ │ │ │ │ ├── ContainerAnimations.java
│ │ │ │ │ │ ├── Motion.java
│ │ │ │ │ │ └── TransitionPane.java
│ │ │ │ │ ├── construct/
│ │ │ │ │ │ ├── AdvancedListBox.java
│ │ │ │ │ │ ├── AdvancedListItem.java
│ │ │ │ │ │ ├── AdvancedListItemSkin.java
│ │ │ │ │ │ ├── ClassTitle.java
│ │ │ │ │ │ ├── ComponentList.java
│ │ │ │ │ │ ├── ComponentSublist.java
│ │ │ │ │ │ ├── ComponentSublistWrapper.java
│ │ │ │ │ │ ├── ControlSkinBase.java
│ │ │ │ │ │ ├── DialogAware.java
│ │ │ │ │ │ ├── DialogCloseEvent.java
│ │ │ │ │ │ ├── DialogPane.java
│ │ │ │ │ │ ├── DoubleValidator.java
│ │ │ │ │ │ ├── FileSelector.java
│ │ │ │ │ │ ├── FloatScrollBarSkin.java
│ │ │ │ │ │ ├── FontComboBox.java
│ │ │ │ │ │ ├── HintPane.java
│ │ │ │ │ │ ├── IconedItem.java
│ │ │ │ │ │ ├── IconedMenuItem.java
│ │ │ │ │ │ ├── ImageContainer.java
│ │ │ │ │ │ ├── ImagePickerItem.java
│ │ │ │ │ │ ├── InputDialogPane.java
│ │ │ │ │ │ ├── JFXCheckBoxTableCell.java
│ │ │ │ │ │ ├── JFXDialogPane.java
│ │ │ │ │ │ ├── JFXHyperlink.java
│ │ │ │ │ │ ├── LineButton.java
│ │ │ │ │ │ ├── LineButtonBase.java
│ │ │ │ │ │ ├── LineComponent.java
│ │ │ │ │ │ ├── LineFileChooserButton.java
│ │ │ │ │ │ ├── LinePane.java
│ │ │ │ │ │ ├── LineSelectButton.java
│ │ │ │ │ │ ├── LineTextPane.java
│ │ │ │ │ │ ├── LineToggleButton.java
│ │ │ │ │ │ ├── MDListCell.java
│ │ │ │ │ │ ├── MenuSeparator.java
│ │ │ │ │ │ ├── MenuUpDownButton.java
│ │ │ │ │ │ ├── MessageDialogPane.java
│ │ │ │ │ │ ├── MultiFileItem.java
│ │ │ │ │ │ ├── Navigator.java
│ │ │ │ │ │ ├── NoPaddingComponent.java
│ │ │ │ │ │ ├── NoneMultipleSelectionModel.java
│ │ │ │ │ │ ├── NumberValidator.java
│ │ │ │ │ │ ├── OptionsList.java
│ │ │ │ │ │ ├── OptionsListSkin.java
│ │ │ │ │ │ ├── PageAware.java
│ │ │ │ │ │ ├── PageCloseEvent.java
│ │ │ │ │ │ ├── PopupMenu.java
│ │ │ │ │ │ ├── PromptDialogPane.java
│ │ │ │ │ │ ├── RequiredValidator.java
│ │ │ │ │ │ ├── RipplerContainer.java
│ │ │ │ │ │ ├── SpinnerPane.java
│ │ │ │ │ │ ├── TabControl.java
│ │ │ │ │ │ ├── TabHeader.java
│ │ │ │ │ │ ├── TaskExecutorDialogPane.java
│ │ │ │ │ │ ├── TaskListPane.java
│ │ │ │ │ │ ├── TwoLineListItem.java
│ │ │ │ │ │ ├── URLValidator.java
│ │ │ │ │ │ └── Validator.java
│ │ │ │ │ ├── decorator/
│ │ │ │ │ │ ├── Decorator.java
│ │ │ │ │ │ ├── DecoratorAnimatedPage.java
│ │ │ │ │ │ ├── DecoratorController.java
│ │ │ │ │ │ ├── DecoratorPage.java
│ │ │ │ │ │ ├── DecoratorSkin.java
│ │ │ │ │ │ ├── DecoratorTransitionPage.java
│ │ │ │ │ │ └── DecoratorWizardDisplayer.java
│ │ │ │ │ ├── download/
│ │ │ │ │ │ ├── AbstractInstallersPage.java
│ │ │ │ │ │ ├── AdditionalInstallersPage.java
│ │ │ │ │ │ ├── DownloadPage.java
│ │ │ │ │ │ ├── InstallersPage.java
│ │ │ │ │ │ ├── LocalModpackPage.java
│ │ │ │ │ │ ├── ModpackInstallWizardProvider.java
│ │ │ │ │ │ ├── ModpackPage.java
│ │ │ │ │ │ ├── ModpackSelectionPage.java
│ │ │ │ │ │ ├── RemoteModpackPage.java
│ │ │ │ │ │ ├── UpdateInstallerWizardProvider.java
│ │ │ │ │ │ ├── VanillaInstallWizardProvider.java
│ │ │ │ │ │ └── VersionsPage.java
│ │ │ │ │ ├── export/
│ │ │ │ │ │ ├── ExportWizardProvider.java
│ │ │ │ │ │ ├── ModpackFileSelectionPage.java
│ │ │ │ │ │ ├── ModpackInfoPage.java
│ │ │ │ │ │ └── ModpackTypeSelectionPage.java
│ │ │ │ │ ├── image/
│ │ │ │ │ │ ├── AnimationImage.java
│ │ │ │ │ │ ├── ImageLoader.java
│ │ │ │ │ │ ├── ImageUtils.java
│ │ │ │ │ │ ├── apng/
│ │ │ │ │ │ │ ├── Png.java
│ │ │ │ │ │ │ ├── PngAnimationType.java
│ │ │ │ │ │ │ ├── PngChunkCode.java
│ │ │ │ │ │ │ ├── PngColourType.java
│ │ │ │ │ │ │ ├── PngConstants.java
│ │ │ │ │ │ │ ├── PngFilter.java
│ │ │ │ │ │ │ ├── PngScanlineBuffer.java
│ │ │ │ │ │ │ ├── argb8888/
│ │ │ │ │ │ │ │ ├── Argb8888Bitmap.java
│ │ │ │ │ │ │ │ ├── Argb8888BitmapSequence.java
│ │ │ │ │ │ │ │ ├── Argb8888BitmapSequenceDirector.java
│ │ │ │ │ │ │ │ ├── Argb8888Director.java
│ │ │ │ │ │ │ │ ├── Argb8888Palette.java
│ │ │ │ │ │ │ │ ├── Argb8888Processor.java
│ │ │ │ │ │ │ │ ├── Argb8888Processors.java
│ │ │ │ │ │ │ │ ├── Argb8888ScanlineProcessor.java
│ │ │ │ │ │ │ │ ├── BasicArgb8888Director.java
│ │ │ │ │ │ │ │ └── DefaultImageArgb8888Director.java
│ │ │ │ │ │ │ ├── chunks/
│ │ │ │ │ │ │ │ ├── PngAnimationControl.java
│ │ │ │ │ │ │ │ ├── PngFrameControl.java
│ │ │ │ │ │ │ │ ├── PngGamma.java
│ │ │ │ │ │ │ │ ├── PngHeader.java
│ │ │ │ │ │ │ │ └── PngPalette.java
│ │ │ │ │ │ │ ├── error/
│ │ │ │ │ │ │ │ ├── PngException.java
│ │ │ │ │ │ │ │ ├── PngFeatureException.java
│ │ │ │ │ │ │ │ └── PngIntegrityException.java
│ │ │ │ │ │ │ ├── map/
│ │ │ │ │ │ │ │ ├── PngChunkMap.java
│ │ │ │ │ │ │ │ ├── PngMap.java
│ │ │ │ │ │ │ │ └── PngMapReader.java
│ │ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ │ ├── reader/
│ │ │ │ │ │ │ │ ├── BasicScanlineProcessor.java
│ │ │ │ │ │ │ │ ├── DefaultPngChunkReader.java
│ │ │ │ │ │ │ │ ├── PngAtOnceSource.java
│ │ │ │ │ │ │ │ ├── PngChunkProcessor.java
│ │ │ │ │ │ │ │ ├── PngChunkReader.java
│ │ │ │ │ │ │ │ ├── PngReadHelper.java
│ │ │ │ │ │ │ │ ├── PngReader.java
│ │ │ │ │ │ │ │ ├── PngScanlineProcessor.java
│ │ │ │ │ │ │ │ ├── PngSource.java
│ │ │ │ │ │ │ │ └── PngStreamSource.java
│ │ │ │ │ │ │ └── util/
│ │ │ │ │ │ │ ├── InputStreamSlice.java
│ │ │ │ │ │ │ ├── PartialInflaterInputStream.java
│ │ │ │ │ │ │ ├── PngContainer.java
│ │ │ │ │ │ │ ├── PngContainerBuilder.java
│ │ │ │ │ │ │ └── PngContainerProcessor.java
│ │ │ │ │ │ └── internal/
│ │ │ │ │ │ └── AnimationImageImpl.java
│ │ │ │ │ ├── main/
│ │ │ │ │ │ ├── AboutPage.java
│ │ │ │ │ │ ├── DownloadSettingsPage.java
│ │ │ │ │ │ ├── FeedbackPage.java
│ │ │ │ │ │ ├── HelpPage.java
│ │ │ │ │ │ ├── JavaDownloadDialog.java
│ │ │ │ │ │ ├── JavaInstallPage.java
│ │ │ │ │ │ ├── JavaManagementPage.java
│ │ │ │ │ │ ├── JavaRestorePage.java
│ │ │ │ │ │ ├── LauncherSettingsPage.java
│ │ │ │ │ │ ├── MainPage.java
│ │ │ │ │ │ ├── PersonalizationPage.java
│ │ │ │ │ │ ├── RootPage.java
│ │ │ │ │ │ └── SettingsPage.java
│ │ │ │ │ ├── nbt/
│ │ │ │ │ │ ├── NBTEditorPage.java
│ │ │ │ │ │ ├── NBTFileType.java
│ │ │ │ │ │ ├── NBTTagType.java
│ │ │ │ │ │ └── NBTTreeView.java
│ │ │ │ │ ├── profile/
│ │ │ │ │ │ ├── ProfileListItem.java
│ │ │ │ │ │ ├── ProfileListItemSkin.java
│ │ │ │ │ │ └── ProfilePage.java
│ │ │ │ │ ├── skin/
│ │ │ │ │ │ ├── FunctionHelper.java
│ │ │ │ │ │ ├── SkinAnimation.java
│ │ │ │ │ │ ├── SkinAnimationPlayer.java
│ │ │ │ │ │ ├── SkinCanvas.java
│ │ │ │ │ │ ├── SkinCube.java
│ │ │ │ │ │ ├── SkinGroup.java
│ │ │ │ │ │ ├── SkinHelper.java
│ │ │ │ │ │ ├── SkinMultipleCubes.java
│ │ │ │ │ │ ├── SkinTransition.java
│ │ │ │ │ │ └── animation/
│ │ │ │ │ │ ├── SkinAniRunning.java
│ │ │ │ │ │ └── SkinAniWavingArms.java
│ │ │ │ │ ├── terracotta/
│ │ │ │ │ │ ├── TerracottaControllerPage.java
│ │ │ │ │ │ └── TerracottaPage.java
│ │ │ │ │ ├── versions/
│ │ │ │ │ │ ├── AdvancedVersionSettingPage.java
│ │ │ │ │ │ ├── DatapackListPage.java
│ │ │ │ │ │ ├── DatapackListPageSkin.java
│ │ │ │ │ │ ├── DownloadListPage.java
│ │ │ │ │ │ ├── DownloadPage.java
│ │ │ │ │ │ ├── GameAdvancedListItem.java
│ │ │ │ │ │ ├── GameItem.java
│ │ │ │ │ │ ├── GameListCell.java
│ │ │ │ │ │ ├── GameListItem.java
│ │ │ │ │ │ ├── GameListPage.java
│ │ │ │ │ │ ├── GameListPopupMenu.java
│ │ │ │ │ │ ├── HMCLLocalizedDownloadListPage.java
│ │ │ │ │ │ ├── InstallerListPage.java
│ │ │ │ │ │ ├── ModCheckUpdatesTask.java
│ │ │ │ │ │ ├── ModListPage.java
│ │ │ │ │ │ ├── ModListPageSkin.java
│ │ │ │ │ │ ├── ModTranslations.java
│ │ │ │ │ │ ├── ModUpdatesPage.java
│ │ │ │ │ │ ├── ResourcepackListPage.java
│ │ │ │ │ │ ├── SchematicsPage.java
│ │ │ │ │ │ ├── VersionIconDialog.java
│ │ │ │ │ │ ├── VersionPage.java
│ │ │ │ │ │ ├── VersionSettingsPage.java
│ │ │ │ │ │ ├── Versions.java
│ │ │ │ │ │ ├── WorldBackupTask.java
│ │ │ │ │ │ ├── WorldBackupsPage.java
│ │ │ │ │ │ ├── WorldExportPage.java
│ │ │ │ │ │ ├── WorldExportPageSkin.java
│ │ │ │ │ │ ├── WorldInfoPage.java
│ │ │ │ │ │ ├── WorldListPage.java
│ │ │ │ │ │ ├── WorldManagePage.java
│ │ │ │ │ │ └── WorldManageUIUtils.java
│ │ │ │ │ └── wizard/
│ │ │ │ │ ├── AbstractWizardDisplayer.java
│ │ │ │ │ ├── Navigation.java
│ │ │ │ │ ├── Refreshable.java
│ │ │ │ │ ├── SinglePageWizardProvider.java
│ │ │ │ │ ├── Summary.java
│ │ │ │ │ ├── TaskExecutorDialogWizardDisplayer.java
│ │ │ │ │ ├── WizardController.java
│ │ │ │ │ ├── WizardDisplayer.java
│ │ │ │ │ ├── WizardPage.java
│ │ │ │ │ ├── WizardProvider.java
│ │ │ │ │ └── WizardSinglePage.java
│ │ │ │ ├── upgrade/
│ │ │ │ │ ├── ExecutableHeaderHelper.java
│ │ │ │ │ ├── HMCLDownloadTask.java
│ │ │ │ │ ├── IntegrityChecker.java
│ │ │ │ │ ├── RemoteVersion.java
│ │ │ │ │ ├── UpdateChannel.java
│ │ │ │ │ ├── UpdateChecker.java
│ │ │ │ │ └── UpdateHandler.java
│ │ │ │ └── util/
│ │ │ │ ├── AggregatedObservableList.java
│ │ │ │ ├── AprilFools.java
│ │ │ │ ├── ChunkBaseApp.java
│ │ │ │ ├── CrashReporter.java
│ │ │ │ ├── FileSaver.java
│ │ │ │ ├── JavaFXPatcher.java
│ │ │ │ ├── Lazy.java
│ │ │ │ ├── NativePatcher.java
│ │ │ │ ├── QrCodeUtils.java
│ │ │ │ ├── RemoteImageLoader.java
│ │ │ │ ├── ResourceNotFoundError.java
│ │ │ │ ├── Restarter.java
│ │ │ │ ├── SelfDependencyPatcher.java
│ │ │ │ ├── SwingFXUtils.java
│ │ │ │ ├── TaskCancellationAction.java
│ │ │ │ ├── i18n/
│ │ │ │ │ ├── I18n.java
│ │ │ │ │ ├── MinecraftWiki.java
│ │ │ │ │ ├── SupportedLocale.java
│ │ │ │ │ └── translator/
│ │ │ │ │ ├── Translator.java
│ │ │ │ │ ├── Translator_en_Qabs.java
│ │ │ │ │ └── Translator_lzh.java
│ │ │ │ └── url/
│ │ │ │ ├── HMCLURLStreamHandlerProvider.java
│ │ │ │ └── data/
│ │ │ │ ├── DataURLConnection.java
│ │ │ │ ├── DataURLHandle.java
│ │ │ │ └── DataUri.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── java.net.spi.URLStreamHandlerProvider
│ │ │ └── assets/
│ │ │ ├── HMCLauncher.sh
│ │ │ ├── about/
│ │ │ │ ├── deps.json
│ │ │ │ └── thanks.json
│ │ │ ├── css/
│ │ │ │ ├── blue.css
│ │ │ │ ├── brightness-dark.css
│ │ │ │ ├── brightness-light.css
│ │ │ │ ├── font.css
│ │ │ │ └── root.css
│ │ │ ├── hmcl_signature_publickey.der
│ │ │ ├── lang/
│ │ │ │ ├── I18N.properties
│ │ │ │ ├── I18N_ar.properties
│ │ │ │ ├── I18N_es.properties
│ │ │ │ ├── I18N_ja.properties
│ │ │ │ ├── I18N_lzh.properties
│ │ │ │ ├── I18N_ru.properties
│ │ │ │ ├── I18N_uk.properties
│ │ │ │ ├── I18N_zh.properties
│ │ │ │ └── I18N_zh_CN.properties
│ │ │ ├── microsoft_auth.html
│ │ │ ├── mod_data.txt
│ │ │ ├── modpack_data.txt
│ │ │ ├── natives.json
│ │ │ ├── openjfx-dependencies.json
│ │ │ └── terracotta.json
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── jackhuang/
│ │ │ └── hmcl/
│ │ │ ├── JavaFXLauncher.java
│ │ │ ├── setting/
│ │ │ │ └── ThemeColorTest.java
│ │ │ ├── ui/
│ │ │ │ ├── GameCrashWindowTest.java
│ │ │ │ ├── SVGTest.java
│ │ │ │ ├── image/
│ │ │ │ │ ├── ImageUtilsTest.java
│ │ │ │ │ └── ImageViewTest.java
│ │ │ │ └── skin/
│ │ │ │ ├── SkinCanvasSupport.java
│ │ │ │ └── test/
│ │ │ │ └── Test.java
│ │ │ └── util/
│ │ │ ├── AggregatedObservableListTest.java
│ │ │ ├── i18n/
│ │ │ │ └── translator/
│ │ │ │ └── TranslatorTest.java
│ │ │ └── url/
│ │ │ └── data/
│ │ │ └── DataUriTest.java
│ │ └── resources/
│ │ └── image/
│ │ └── 16x16.apng
│ └── terracotta-template.json
├── HMCLBoot/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── jackhuang/
│ │ │ └── hmcl/
│ │ │ ├── BootProperties.java
│ │ │ ├── DesktopUtils.java
│ │ │ ├── EntryPoint.java
│ │ │ ├── Main.java
│ │ │ └── util/
│ │ │ ├── SwingUtils.java
│ │ │ └── UTF8Control.java
│ │ └── resources/
│ │ └── assets/
│ │ └── lang/
│ │ ├── boot.properties
│ │ ├── boot_es.properties
│ │ ├── boot_zh.properties
│ │ └── boot_zh_Hant.properties
│ └── test/
│ └── java/
│ └── org/
│ └── jackhuang/
│ └── hmcl/
│ └── MainTest.java
├── HMCLCore/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── jackhuang/
│ │ │ └── hmcl/
│ │ │ ├── auth/
│ │ │ │ ├── Account.java
│ │ │ │ ├── AccountFactory.java
│ │ │ │ ├── AuthInfo.java
│ │ │ │ ├── AuthenticationException.java
│ │ │ │ ├── CharacterDeletedException.java
│ │ │ │ ├── CharacterSelector.java
│ │ │ │ ├── ClassicAccount.java
│ │ │ │ ├── CredentialExpiredException.java
│ │ │ │ ├── NoCharacterException.java
│ │ │ │ ├── NoSelectedCharacterException.java
│ │ │ │ ├── NotLoggedInException.java
│ │ │ │ ├── OAuth.java
│ │ │ │ ├── OAuthAccount.java
│ │ │ │ ├── ServerDisconnectException.java
│ │ │ │ ├── ServerResponseMalformedException.java
│ │ │ │ ├── authlibinjector/
│ │ │ │ │ ├── AuthlibInjectorAccount.java
│ │ │ │ │ ├── AuthlibInjectorAccountFactory.java
│ │ │ │ │ ├── AuthlibInjectorArtifactInfo.java
│ │ │ │ │ ├── AuthlibInjectorArtifactProvider.java
│ │ │ │ │ ├── AuthlibInjectorDnD.java
│ │ │ │ │ ├── AuthlibInjectorDownloadException.java
│ │ │ │ │ ├── AuthlibInjectorDownloader.java
│ │ │ │ │ ├── AuthlibInjectorExtractor.java
│ │ │ │ │ ├── AuthlibInjectorProvider.java
│ │ │ │ │ ├── AuthlibInjectorServer.java
│ │ │ │ │ ├── BoundAuthlibInjectorAccountFactory.java
│ │ │ │ │ └── SimpleAuthlibInjectorArtifactProvider.java
│ │ │ │ ├── microsoft/
│ │ │ │ │ ├── MicrosoftAccount.java
│ │ │ │ │ ├── MicrosoftAccountFactory.java
│ │ │ │ │ ├── MicrosoftService.java
│ │ │ │ │ └── MicrosoftSession.java
│ │ │ │ ├── offline/
│ │ │ │ │ ├── OfflineAccount.java
│ │ │ │ │ ├── OfflineAccountFactory.java
│ │ │ │ │ ├── Skin.java
│ │ │ │ │ ├── Texture.java
│ │ │ │ │ └── YggdrasilServer.java
│ │ │ │ └── yggdrasil/
│ │ │ │ ├── CompleteGameProfile.java
│ │ │ │ ├── GameProfile.java
│ │ │ │ ├── PropertyMapSerializer.java
│ │ │ │ ├── RemoteAuthenticationException.java
│ │ │ │ ├── Texture.java
│ │ │ │ ├── TextureModel.java
│ │ │ │ ├── TextureType.java
│ │ │ │ ├── User.java
│ │ │ │ ├── YggdrasilAccount.java
│ │ │ │ ├── YggdrasilProvider.java
│ │ │ │ ├── YggdrasilService.java
│ │ │ │ └── YggdrasilSession.java
│ │ │ ├── download/
│ │ │ │ ├── AbstractDependencyManager.java
│ │ │ │ ├── ArtifactMalformedException.java
│ │ │ │ ├── AutoDownloadProvider.java
│ │ │ │ ├── BMCLAPIDownloadProvider.java
│ │ │ │ ├── DefaultCacheRepository.java
│ │ │ │ ├── DefaultDependencyManager.java
│ │ │ │ ├── DefaultGameBuilder.java
│ │ │ │ ├── DependencyManager.java
│ │ │ │ ├── DownloadProvider.java
│ │ │ │ ├── DownloadProviderWrapper.java
│ │ │ │ ├── GameBuilder.java
│ │ │ │ ├── LibraryAnalyzer.java
│ │ │ │ ├── MaintainTask.java
│ │ │ │ ├── MojangDownloadProvider.java
│ │ │ │ ├── MultipleSourceVersionList.java
│ │ │ │ ├── RemoteVersion.java
│ │ │ │ ├── UnsupportedInstallationException.java
│ │ │ │ ├── VersionList.java
│ │ │ │ ├── VersionMismatchException.java
│ │ │ │ ├── cleanroom/
│ │ │ │ │ ├── CleanroomInstallTask.java
│ │ │ │ │ ├── CleanroomRemoteVersion.java
│ │ │ │ │ └── CleanroomVersionList.java
│ │ │ │ ├── fabric/
│ │ │ │ │ ├── FabricAPIInstallTask.java
│ │ │ │ │ ├── FabricAPIRemoteVersion.java
│ │ │ │ │ ├── FabricAPIVersionList.java
│ │ │ │ │ ├── FabricInstallTask.java
│ │ │ │ │ ├── FabricRemoteVersion.java
│ │ │ │ │ └── FabricVersionList.java
│ │ │ │ ├── forge/
│ │ │ │ │ ├── ForgeBMCLVersionList.java
│ │ │ │ │ ├── ForgeInstall.java
│ │ │ │ │ ├── ForgeInstallProfile.java
│ │ │ │ │ ├── ForgeInstallTask.java
│ │ │ │ │ ├── ForgeNewInstallProfile.java
│ │ │ │ │ ├── ForgeNewInstallTask.java
│ │ │ │ │ ├── ForgeOldInstallTask.java
│ │ │ │ │ ├── ForgeRemoteVersion.java
│ │ │ │ │ ├── ForgeVersion.java
│ │ │ │ │ ├── ForgeVersionList.java
│ │ │ │ │ └── ForgeVersionRoot.java
│ │ │ │ ├── game/
│ │ │ │ │ ├── GameAssetDownloadTask.java
│ │ │ │ │ ├── GameAssetIndexDownloadTask.java
│ │ │ │ │ ├── GameDownloadTask.java
│ │ │ │ │ ├── GameInstallTask.java
│ │ │ │ │ ├── GameLibrariesTask.java
│ │ │ │ │ ├── GameRemoteLatestVersions.java
│ │ │ │ │ ├── GameRemoteVersion.java
│ │ │ │ │ ├── GameRemoteVersionInfo.java
│ │ │ │ │ ├── GameRemoteVersions.java
│ │ │ │ │ ├── GameVerificationFixTask.java
│ │ │ │ │ ├── GameVersionList.java
│ │ │ │ │ ├── LibraryDownloadException.java
│ │ │ │ │ ├── LibraryDownloadTask.java
│ │ │ │ │ ├── VersionJsonDownloadTask.java
│ │ │ │ │ └── VersionJsonSaveTask.java
│ │ │ │ ├── java/
│ │ │ │ │ ├── JavaDistribution.java
│ │ │ │ │ ├── JavaPackageType.java
│ │ │ │ │ ├── JavaRemoteVersion.java
│ │ │ │ │ ├── disco/
│ │ │ │ │ │ ├── DiscoFetchJavaListTask.java
│ │ │ │ │ │ ├── DiscoJavaDistribution.java
│ │ │ │ │ │ ├── DiscoJavaRemoteVersion.java
│ │ │ │ │ │ ├── DiscoRemoteFileInfo.java
│ │ │ │ │ │ └── DiscoResult.java
│ │ │ │ │ └── mojang/
│ │ │ │ │ ├── MojangJavaDistribution.java
│ │ │ │ │ ├── MojangJavaDownloadTask.java
│ │ │ │ │ ├── MojangJavaDownloads.java
│ │ │ │ │ ├── MojangJavaRemoteFiles.java
│ │ │ │ │ └── MojangJavaRemoteVersion.java
│ │ │ │ ├── legacyfabric/
│ │ │ │ │ ├── LegacyFabricAPIInstallTask.java
│ │ │ │ │ ├── LegacyFabricAPIRemoteVersion.java
│ │ │ │ │ ├── LegacyFabricAPIVersionList.java
│ │ │ │ │ ├── LegacyFabricInstallTask.java
│ │ │ │ │ ├── LegacyFabricRemoteVersion.java
│ │ │ │ │ └── LegacyFabricVersionList.java
│ │ │ │ ├── liteloader/
│ │ │ │ │ ├── LiteLoaderBMCLVersionList.java
│ │ │ │ │ ├── LiteLoaderBranch.java
│ │ │ │ │ ├── LiteLoaderGameVersions.java
│ │ │ │ │ ├── LiteLoaderInstallTask.java
│ │ │ │ │ ├── LiteLoaderRemoteVersion.java
│ │ │ │ │ ├── LiteLoaderRepository.java
│ │ │ │ │ ├── LiteLoaderVersion.java
│ │ │ │ │ ├── LiteLoaderVersionList.java
│ │ │ │ │ ├── LiteLoaderVersionsMeta.java
│ │ │ │ │ └── LiteLoaderVersionsRoot.java
│ │ │ │ ├── neoforge/
│ │ │ │ │ ├── NeoForgeBMCLVersionList.java
│ │ │ │ │ ├── NeoForgeInstallTask.java
│ │ │ │ │ ├── NeoForgeOfficialVersionList.java
│ │ │ │ │ ├── NeoForgeOldInstallTask.java
│ │ │ │ │ └── NeoForgeRemoteVersion.java
│ │ │ │ ├── optifine/
│ │ │ │ │ ├── OptiFineBMCLVersionList.java
│ │ │ │ │ ├── OptiFineInstallTask.java
│ │ │ │ │ └── OptiFineRemoteVersion.java
│ │ │ │ └── quilt/
│ │ │ │ ├── QuiltAPIInstallTask.java
│ │ │ │ ├── QuiltAPIRemoteVersion.java
│ │ │ │ ├── QuiltAPIVersionList.java
│ │ │ │ ├── QuiltInstallTask.java
│ │ │ │ ├── QuiltRemoteVersion.java
│ │ │ │ └── QuiltVersionList.java
│ │ │ ├── event/
│ │ │ │ ├── Event.java
│ │ │ │ ├── EventBus.java
│ │ │ │ ├── EventManager.java
│ │ │ │ ├── EventPriority.java
│ │ │ │ ├── GameJsonParseFailedEvent.java
│ │ │ │ ├── JVMLaunchFailedEvent.java
│ │ │ │ ├── LoadedOneVersionEvent.java
│ │ │ │ ├── ProcessExitedAbnormallyEvent.java
│ │ │ │ ├── ProcessStoppedEvent.java
│ │ │ │ ├── RefreshedVersionsEvent.java
│ │ │ │ ├── RefreshingVersionsEvent.java
│ │ │ │ ├── RemoveVersionEvent.java
│ │ │ │ └── RenameVersionEvent.java
│ │ │ ├── game/
│ │ │ │ ├── Argument.java
│ │ │ │ ├── Arguments.java
│ │ │ │ ├── Artifact.java
│ │ │ │ ├── AssetIndex.java
│ │ │ │ ├── AssetIndexInfo.java
│ │ │ │ ├── AssetObject.java
│ │ │ │ ├── ClassicVersion.java
│ │ │ │ ├── CompatibilityRule.java
│ │ │ │ ├── CrashReportAnalyzer.java
│ │ │ │ ├── DefaultGameRepository.java
│ │ │ │ ├── DownloadInfo.java
│ │ │ │ ├── DownloadType.java
│ │ │ │ ├── ExtractRules.java
│ │ │ │ ├── GameDirectoryType.java
│ │ │ │ ├── GameDumpGenerator.java
│ │ │ │ ├── GameException.java
│ │ │ │ ├── GameJavaVersion.java
│ │ │ │ ├── GameRepository.java
│ │ │ │ ├── GameVersion.java
│ │ │ │ ├── IdDownloadInfo.java
│ │ │ │ ├── JavaVersionConstraint.java
│ │ │ │ ├── LaunchOptions.java
│ │ │ │ ├── LibrariesDownloadInfo.java
│ │ │ │ ├── Library.java
│ │ │ │ ├── LibraryDownloadInfo.java
│ │ │ │ ├── LoggingInfo.java
│ │ │ │ ├── NativesDirectoryType.java
│ │ │ │ ├── OSRestriction.java
│ │ │ │ ├── ProcessPriority.java
│ │ │ │ ├── ProxyOption.java
│ │ │ │ ├── QuickPlayOption.java
│ │ │ │ ├── ReleaseType.java
│ │ │ │ ├── Renderer.java
│ │ │ │ ├── RuledArgument.java
│ │ │ │ ├── SimpleVersionProvider.java
│ │ │ │ ├── StringArgument.java
│ │ │ │ ├── Version.java
│ │ │ │ ├── VersionJsonType.java
│ │ │ │ ├── VersionLibraryBuilder.java
│ │ │ │ ├── VersionNotFoundException.java
│ │ │ │ ├── VersionProvider.java
│ │ │ │ ├── World.java
│ │ │ │ ├── WorldLockedException.java
│ │ │ │ └── tlauncher/
│ │ │ │ ├── TLauncherLibrary.java
│ │ │ │ └── TLauncherVersion.java
│ │ │ ├── java/
│ │ │ │ ├── JavaInfo.java
│ │ │ │ ├── JavaRepository.java
│ │ │ │ └── JavaRuntime.java
│ │ │ ├── launch/
│ │ │ │ ├── CommandTooLongException.java
│ │ │ │ ├── DefaultLauncher.java
│ │ │ │ ├── ExecutionPolicyLimitException.java
│ │ │ │ ├── ExitWaiter.java
│ │ │ │ ├── Launcher.java
│ │ │ │ ├── NotDecompressingNativesException.java
│ │ │ │ ├── PermissionException.java
│ │ │ │ ├── ProcessCreationException.java
│ │ │ │ ├── ProcessListener.java
│ │ │ │ └── StreamPump.java
│ │ │ ├── mod/
│ │ │ │ ├── Datapack.java
│ │ │ │ ├── LocalMod.java
│ │ │ │ ├── LocalModFile.java
│ │ │ │ ├── MinecraftInstanceTask.java
│ │ │ │ ├── MismatchedModpackTypeException.java
│ │ │ │ ├── ModAdviser.java
│ │ │ │ ├── ModLoaderType.java
│ │ │ │ ├── ModManager.java
│ │ │ │ ├── Modpack.java
│ │ │ │ ├── ModpackCompletionException.java
│ │ │ │ ├── ModpackConfiguration.java
│ │ │ │ ├── ModpackExportInfo.java
│ │ │ │ ├── ModpackInstallTask.java
│ │ │ │ ├── ModpackManifest.java
│ │ │ │ ├── ModpackProvider.java
│ │ │ │ ├── ModpackUpdateTask.java
│ │ │ │ ├── RemoteMod.java
│ │ │ │ ├── RemoteModRepository.java
│ │ │ │ ├── UnsupportedModpackException.java
│ │ │ │ ├── curse/
│ │ │ │ │ ├── CurseAddon.java
│ │ │ │ │ ├── CurseCompletionTask.java
│ │ │ │ │ ├── CurseForgeRemoteModRepository.java
│ │ │ │ │ ├── CurseInstallTask.java
│ │ │ │ │ ├── CurseManifest.java
│ │ │ │ │ ├── CurseManifestFile.java
│ │ │ │ │ ├── CurseManifestMinecraft.java
│ │ │ │ │ ├── CurseManifestModLoader.java
│ │ │ │ │ ├── CurseMetaMod.java
│ │ │ │ │ └── CurseModpackProvider.java
│ │ │ │ ├── mcbbs/
│ │ │ │ │ ├── McbbsModpackCompletionTask.java
│ │ │ │ │ ├── McbbsModpackExportTask.java
│ │ │ │ │ ├── McbbsModpackLocalInstallTask.java
│ │ │ │ │ ├── McbbsModpackManifest.java
│ │ │ │ │ ├── McbbsModpackProvider.java
│ │ │ │ │ └── McbbsModpackRemoteInstallTask.java
│ │ │ │ ├── modinfo/
│ │ │ │ │ ├── FabricModMetadata.java
│ │ │ │ │ ├── ForgeNewModMetadata.java
│ │ │ │ │ ├── ForgeOldModMetadata.java
│ │ │ │ │ ├── ForgeOldModMetadataLst.java
│ │ │ │ │ ├── LiteModMetadata.java
│ │ │ │ │ ├── PackMcMeta.java
│ │ │ │ │ └── QuiltModMetadata.java
│ │ │ │ ├── modrinth/
│ │ │ │ │ ├── ModrinthCompletionTask.java
│ │ │ │ │ ├── ModrinthInstallTask.java
│ │ │ │ │ ├── ModrinthManifest.java
│ │ │ │ │ ├── ModrinthModpackExportTask.java
│ │ │ │ │ ├── ModrinthModpackProvider.java
│ │ │ │ │ └── ModrinthRemoteModRepository.java
│ │ │ │ ├── multimc/
│ │ │ │ │ ├── MultiMCComponents.java
│ │ │ │ │ ├── MultiMCInstanceConfiguration.java
│ │ │ │ │ ├── MultiMCInstancePatch.java
│ │ │ │ │ ├── MultiMCManifest.java
│ │ │ │ │ ├── MultiMCModpackExportTask.java
│ │ │ │ │ ├── MultiMCModpackInstallTask.java
│ │ │ │ │ └── MultiMCModpackProvider.java
│ │ │ │ └── server/
│ │ │ │ ├── ServerModpackCompletionTask.java
│ │ │ │ ├── ServerModpackExportTask.java
│ │ │ │ ├── ServerModpackLocalInstallTask.java
│ │ │ │ ├── ServerModpackManifest.java
│ │ │ │ ├── ServerModpackProvider.java
│ │ │ │ └── ServerModpackRemoteInstallTask.java
│ │ │ ├── resourcepack/
│ │ │ │ ├── ResourcepackFile.java
│ │ │ │ ├── ResourcepackFolder.java
│ │ │ │ └── ResourcepackZipFile.java
│ │ │ ├── schematic/
│ │ │ │ └── LitematicFile.java
│ │ │ ├── task/
│ │ │ │ ├── AsyncTaskExecutor.java
│ │ │ │ ├── CacheFileTask.java
│ │ │ │ ├── CompletableFutureTask.java
│ │ │ │ ├── DownloadException.java
│ │ │ │ ├── FetchTask.java
│ │ │ │ ├── FileDownloadTask.java
│ │ │ │ ├── GetTask.java
│ │ │ │ ├── Schedulers.java
│ │ │ │ ├── Task.java
│ │ │ │ ├── TaskCompletableFuture.java
│ │ │ │ ├── TaskEvent.java
│ │ │ │ ├── TaskExecutor.java
│ │ │ │ └── TaskListener.java
│ │ │ └── util/
│ │ │ ├── ByteArray.java
│ │ │ ├── CacheRepository.java
│ │ │ ├── CircularArrayList.java
│ │ │ ├── Constants.java
│ │ │ ├── DataSizeUnit.java
│ │ │ ├── DigestUtils.java
│ │ │ ├── FXThread.java
│ │ │ ├── FutureCallback.java
│ │ │ ├── Holder.java
│ │ │ ├── Immutable.java
│ │ │ ├── InfiniteSizeList.java
│ │ │ ├── InvocationDispatcher.java
│ │ │ ├── KeyUtils.java
│ │ │ ├── KeyValuePairUtils.java
│ │ │ ├── Lang.java
│ │ │ ├── Log4jLevel.java
│ │ │ ├── MurmurHash2.java
│ │ │ ├── Pair.java
│ │ │ ├── Result.java
│ │ │ ├── ServerAddress.java
│ │ │ ├── SettingsMap.java
│ │ │ ├── SimpleMultimap.java
│ │ │ ├── StringUtils.java
│ │ │ ├── ToStringBuilder.java
│ │ │ ├── TypeUtils.java
│ │ │ ├── function/
│ │ │ │ ├── ExceptionalBiConsumer.java
│ │ │ │ ├── ExceptionalBiFunction.java
│ │ │ │ ├── ExceptionalConsumer.java
│ │ │ │ ├── ExceptionalFunction.java
│ │ │ │ ├── ExceptionalPredicate.java
│ │ │ │ ├── ExceptionalRunnable.java
│ │ │ │ └── ExceptionalSupplier.java
│ │ │ ├── gson/
│ │ │ │ ├── EnumOrdinalDeserializer.java
│ │ │ │ ├── InstantTypeAdapter.java
│ │ │ │ ├── JsonMap.java
│ │ │ │ ├── JsonSerializable.java
│ │ │ │ ├── JsonSubtype.java
│ │ │ │ ├── JsonType.java
│ │ │ │ ├── JsonTypeAdapterFactory.java
│ │ │ │ ├── JsonUtils.java
│ │ │ │ ├── LowerCaseEnumTypeAdapterFactory.java
│ │ │ │ ├── ObservableSetting.java
│ │ │ │ ├── PaintAdapter.java
│ │ │ │ ├── PathTypeAdapter.java
│ │ │ │ ├── RawPreservingObjectProperty.java
│ │ │ │ ├── RawPreservingProperty.java
│ │ │ │ ├── TolerableValidationException.java
│ │ │ │ ├── UUIDTypeAdapter.java
│ │ │ │ ├── Validation.java
│ │ │ │ └── ValidationTypeAdapterFactory.java
│ │ │ ├── i18n/
│ │ │ │ ├── DefaultResourceBundleControl.java
│ │ │ │ ├── LocaleUtils.java
│ │ │ │ ├── LocalizedText.java
│ │ │ │ └── TextDirection.java
│ │ │ ├── io/
│ │ │ │ ├── CSVTable.java
│ │ │ │ ├── ChecksumMismatchException.java
│ │ │ │ ├── CompressingUtils.java
│ │ │ │ ├── ContentEncoding.java
│ │ │ │ ├── DirectoryStructurePrinter.java
│ │ │ │ ├── FileUtils.java
│ │ │ │ ├── HttpMultipartRequest.java
│ │ │ │ ├── HttpRequest.java
│ │ │ │ ├── HttpServer.java
│ │ │ │ ├── IOUtils.java
│ │ │ │ ├── JarUtils.java
│ │ │ │ ├── NetworkUtils.java
│ │ │ │ ├── ResponseCodeException.java
│ │ │ │ ├── Unzipper.java
│ │ │ │ └── Zipper.java
│ │ │ ├── javafx/
│ │ │ │ ├── AutomatedToggleGroup.java
│ │ │ │ ├── BindingMapping.java
│ │ │ │ ├── DirtyTracker.java
│ │ │ │ ├── ExtendedProperties.java
│ │ │ │ ├── MappedObservableList.java
│ │ │ │ ├── MappedProperty.java
│ │ │ │ ├── ObservableCache.java
│ │ │ │ ├── ObservableHelper.java
│ │ │ │ ├── ObservableOptionalCache.java
│ │ │ │ ├── PropertyUtils.java
│ │ │ │ ├── ReadWriteComposedProperty.java
│ │ │ │ └── SafeStringConverter.java
│ │ │ ├── logging/
│ │ │ │ ├── CallerFinder.java
│ │ │ │ ├── LogEvent.java
│ │ │ │ └── Logger.java
│ │ │ ├── platform/
│ │ │ │ ├── Architecture.java
│ │ │ │ ├── Bits.java
│ │ │ │ ├── CommandBuilder.java
│ │ │ │ ├── ManagedProcess.java
│ │ │ │ ├── NativeUtils.java
│ │ │ │ ├── OSVersion.java
│ │ │ │ ├── OperatingSystem.java
│ │ │ │ ├── Platform.java
│ │ │ │ ├── SystemInfo.java
│ │ │ │ ├── SystemUtils.java
│ │ │ │ ├── UnsupportedPlatformException.java
│ │ │ │ ├── hardware/
│ │ │ │ │ ├── CentralProcessor.java
│ │ │ │ │ ├── FastFetchUtils.java
│ │ │ │ │ ├── GraphicsCard.java
│ │ │ │ │ ├── HardwareDetector.java
│ │ │ │ │ ├── HardwareVendor.java
│ │ │ │ │ └── PhysicalMemoryStatus.java
│ │ │ │ ├── linux/
│ │ │ │ │ ├── LinuxCPUDetector.java
│ │ │ │ │ ├── LinuxGPUDetector.java
│ │ │ │ │ └── LinuxHardwareDetector.java
│ │ │ │ ├── macos/
│ │ │ │ │ └── MacOSHardwareDetector.java
│ │ │ │ └── windows/
│ │ │ │ ├── Advapi32.java
│ │ │ │ ├── Dwmapi.java
│ │ │ │ ├── Kernel32.java
│ │ │ │ ├── WinConstants.java
│ │ │ │ ├── WinReg.java
│ │ │ │ ├── WinTypes.java
│ │ │ │ ├── WindowsCPUDetector.java
│ │ │ │ ├── WindowsGPUDetector.java
│ │ │ │ └── WindowsHardwareDetector.java
│ │ │ ├── skin/
│ │ │ │ ├── InvalidSkinException.java
│ │ │ │ └── NormalizedSkin.java
│ │ │ ├── tree/
│ │ │ │ ├── ArchiveFileTree.java
│ │ │ │ ├── TarFileTree.java
│ │ │ │ └── ZipFileTree.java
│ │ │ └── versioning/
│ │ │ ├── GameVersionNumber.java
│ │ │ ├── VersionNumber.java
│ │ │ └── VersionRange.java
│ │ └── resources/
│ │ └── assets/
│ │ ├── game/
│ │ │ ├── log4j2-1.12-debug.xml
│ │ │ ├── log4j2-1.12.xml
│ │ │ ├── log4j2-1.7-debug.xml
│ │ │ ├── log4j2-1.7.xml
│ │ │ ├── unlisted-versions.json
│ │ │ ├── version-alias.csv
│ │ │ └── versions.txt
│ │ ├── lang/
│ │ │ ├── default_script.csv
│ │ │ ├── language_aliases.csv
│ │ │ ├── sublanguages.csv
│ │ │ └── upside_down.txt
│ │ └── platform/
│ │ └── amdgpu.ids
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── jackhuang/
│ │ └── hmcl/
│ │ ├── JavaFXLauncher.java
│ │ ├── game/
│ │ │ └── CrashReportAnalyzerTest.java
│ │ ├── mod/
│ │ │ └── curse/
│ │ │ └── CurseForgeRemoteModRepositoryTest.java
│ │ ├── schematic/
│ │ │ └── LitematicFileTest.java
│ │ └── util/
│ │ ├── ByteArrayTest.java
│ │ ├── CircularArrayListTest.java
│ │ ├── DataSizeUnitTest.java
│ │ ├── KeyValuePairUtilsTest.java
│ │ ├── OSVersionTest.java
│ │ ├── ServerAddressTest.java
│ │ ├── StringUtilsTest.java
│ │ ├── TaskTest.java
│ │ ├── TokenizerTest.java
│ │ ├── gson/
│ │ │ ├── InstantTypeAdapterTest.java
│ │ │ └── JsonUtilsTest.java
│ │ ├── i18n/
│ │ │ └── LocaleUtilsTest.java
│ │ ├── io/
│ │ │ ├── CSVTableTest.java
│ │ │ ├── CompressingUtilsTest.java
│ │ │ ├── FileUtilsTest.java
│ │ │ └── NetworkUtilsTest.java
│ │ ├── javafx/
│ │ │ └── MappedObservableListTest.java
│ │ ├── platform/
│ │ │ ├── JavaRuntimeTest.java
│ │ │ ├── hardware/
│ │ │ │ ├── CentralProcessorTest.java
│ │ │ │ └── GraphicsCardTest.java
│ │ │ └── windows/
│ │ │ ├── WinRegTest.java
│ │ │ └── WindowsVersionTest.java
│ │ ├── skin/
│ │ │ └── NormalizedSkinTest.java
│ │ ├── tree/
│ │ │ └── ZipFileTreeTest.java
│ │ └── versioning/
│ │ ├── GameVersionNumberTest.java
│ │ ├── VersionNumberTest.java
│ │ └── VersionRangeTest.java
│ └── resources/
│ ├── crash-report/
│ │ ├── config.txt
│ │ ├── debug_crash.txt
│ │ ├── file_already_exists.txt
│ │ ├── forge_error.txt
│ │ ├── graphics_driver.txt
│ │ ├── loader_exception_mod_crash.txt
│ │ ├── loader_exception_mod_crash2.txt
│ │ ├── loader_exception_mod_crash3.txt
│ │ ├── loader_exception_mod_crash4.txt
│ │ ├── loading_error_fabric.txt
│ │ ├── mod/
│ │ │ ├── bettersprinting.txt
│ │ │ ├── creativemd.txt
│ │ │ ├── customnpc.txt
│ │ │ ├── customskinloader.txt
│ │ │ ├── flammpfeil.txt
│ │ │ ├── ic2.txt
│ │ │ ├── icycream.txt
│ │ │ ├── mapletree.txt
│ │ │ ├── nei.txt
│ │ │ ├── neoforgeforest_optifine_incompatibility.txt
│ │ │ ├── netease.txt
│ │ │ ├── performant_optifine_incompatibility.txt
│ │ │ ├── shadersmodcore.txt
│ │ │ ├── tconstruct.txt
│ │ │ ├── thaumcraft.txt
│ │ │ ├── twilightforest.txt
│ │ │ ├── twilightforest_optifine_incompatibility.txt
│ │ │ └── wizardry.txt
│ │ ├── mod_resolution0.txt
│ │ ├── need_jdk11.txt
│ │ ├── need_jdk112.txt
│ │ ├── need_jdk113.txt
│ │ ├── night_config_fixes.txt
│ │ ├── no_class_def_found_error.txt
│ │ ├── no_class_def_found_error2.txt
│ │ ├── out_of_memory.txt
│ │ ├── processing_of_javaagent_failed.txt
│ │ ├── resourcepack_resolution.txt
│ │ ├── rtss_forest_sodium.txt
│ │ ├── security.txt
│ │ ├── splashscreen.txt
│ │ ├── too_old_java.txt
│ │ └── too_old_java2.txt
│ ├── game-json/
│ │ └── tlauncher.json
│ ├── logs/
│ │ ├── bootstrap.txt
│ │ ├── crash-report.txt
│ │ ├── duplicated_mod.txt
│ │ ├── fabric-minecraft.txt
│ │ ├── fabric-mod-conflict.txt
│ │ ├── fabric-mod-missing.txt
│ │ ├── fabric-version-0.12.txt
│ │ ├── fabric_warnings.txt
│ │ ├── fabric_warnings2.txt
│ │ ├── fabric_warnings3.txt
│ │ ├── failed_to_load_a_library.txt
│ │ ├── forge_found_duplicate_mods.txt
│ │ ├── forge_repeat_installation.txt
│ │ ├── forge_repeat_installation2.txt
│ │ ├── forgemod_resolution.txt
│ │ ├── graphics_driver.txt
│ │ ├── incomplete_forge_installation.txt
│ │ ├── incomplete_forge_installation2.txt
│ │ ├── incomplete_forge_installation3.txt
│ │ ├── incomplete_forge_installation4.txt
│ │ ├── incomplete_forge_installation5.txt
│ │ ├── incomplete_forge_installation6.txt
│ │ ├── incomplete_forge_installation7.txt
│ │ ├── install_mixinbootstrap.txt
│ │ ├── jade_forest_optifine.txt
│ │ ├── java9.txt
│ │ ├── java_version_is_too_high.txt
│ │ ├── jvm_32bit.txt
│ │ ├── jvm_32bit2.txt
│ │ ├── macos_failed_to_find_service_port_for_display.txt
│ │ ├── memory_exceeded.txt
│ │ ├── mixin_apply_mod_failed.txt
│ │ ├── mod_name.txt
│ │ ├── mod_resolution.txt
│ │ ├── mod_resolution_collection.txt
│ │ ├── openj9-unsupported_charset.txt
│ │ ├── openj9.txt
│ │ ├── optifine_is_not_compatible_with_forge.txt
│ │ ├── optifine_is_not_compatible_with_forge2.txt
│ │ ├── optifine_is_not_compatible_with_forge3.txt
│ │ ├── optifine_is_not_compatible_with_forge4.txt
│ │ ├── optifine_is_not_compatible_with_forge5.txt
│ │ ├── optifine_is_not_compatible_with_forge6.txt
│ │ ├── optifine_repeat_installation.txt
│ │ ├── out_of_memory.txt
│ │ ├── out_of_memory2.txt
│ │ ├── shaders_mod.txt
│ │ ├── too_old_java.txt
│ │ └── unsatisfied_link_error.txt
│ └── schematics/
│ └── test.litematic
├── LICENSE
├── build.gradle.kts
├── buildSrc/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── jackhuang/
│ │ └── hmcl/
│ │ └── gradle/
│ │ ├── TerracottaConfigUpgradeTask.java
│ │ ├── ci/
│ │ │ ├── CheckUpdate.java
│ │ │ ├── GitHubActionUtils.java
│ │ │ └── JenkinsUtils.java
│ │ ├── docs/
│ │ │ ├── Document.java
│ │ │ ├── DocumentFileTree.java
│ │ │ ├── DocumentLocale.java
│ │ │ ├── LocalizedDocument.java
│ │ │ ├── MacroProcessor.java
│ │ │ └── UpdateDocuments.java
│ │ ├── javafx/
│ │ │ ├── JavaFXPlatform.java
│ │ │ ├── JavaFXUtils.java
│ │ │ └── JavaFXVersionType.java
│ │ ├── l10n/
│ │ │ ├── CheckTranslations.java
│ │ │ ├── CreateLanguageList.java
│ │ │ ├── CreateLocaleNamesResourceBundle.java
│ │ │ ├── LocalizationUtils.java
│ │ │ ├── ParseLanguageSubtagRegistry.java
│ │ │ └── UpsideDownTranslate.java
│ │ ├── mod/
│ │ │ └── ParseModDataTask.java
│ │ └── utils/
│ │ └── PropertiesUtils.java
│ └── resources/
│ └── org/
│ └── jackhuang/
│ └── hmcl/
│ └── gradle/
│ └── l10n/
│ ├── LocaleNamesOverride.properties
│ ├── LocaleNamesOverride_lzh.properties
│ ├── LocaleNamesOverride_zh.properties
│ └── LocaleNamesOverride_zh_Hant.properties
├── config/
│ ├── checkstyle/
│ │ └── checkstyle.xml
│ ├── jenkins/
│ │ ├── config-jenkins.sh
│ │ ├── dev/
│ │ │ └── Jenkinsfile
│ │ └── stable/
│ │ └── Jenkinsfile
│ └── project.properties
├── docs/
│ ├── Contributing.md
│ ├── Contributing_zh.md
│ ├── Contributing_zh_Hant.md
│ ├── Localization.md
│ ├── Localization_zh.md
│ ├── Localization_zh_Hant.md
│ ├── PLATFORM.md
│ ├── PLATFORM_zh.md
│ ├── PLATFORM_zh_Hant.md
│ ├── README.md
│ ├── README_en_Qabs.md
│ ├── README_es.md
│ ├── README_ja.md
│ ├── README_lzh.md
│ ├── README_ru.md
│ ├── README_uk.md
│ ├── README_zh.md
│ ├── README_zh_Hant.md
│ ├── ReleaseSchedule.md
│ ├── ReleaseSchedule_zh.md
│ └── ReleaseSchedule_zh_Hant.md
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── lib/
│ └── JFoenix.jar
├── minecraft/
│ └── libraries/
│ ├── HMCLMultiMCBootstrap/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── jackhuang/
│ │ └── hmcl/
│ │ └── HMCLMultiMCBootstrap.java
│ └── HMCLTransformerDiscoveryService/
│ ├── build.gradle.kts
│ ├── lib/
│ │ └── modlauncher-4.1.0.jar
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── jackhuang/
│ │ └── hmcl/
│ │ └── HMCLTransformerDiscoveryService.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService
└── settings.gradle.kts
================================================
FILE CONTENTS
================================================
================================================
FILE: .cnb/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: QQ 群
url: https://docs.hmcl.net/groups.html
about: Hello Minecraft! Launcher 的官方 QQ 交流群。
- name: Discord 服务器
url: https://discord.gg/jVvC7HfM6U
about: Hello Minecraft! Launcher 的官方 Discord 服务器。
================================================
FILE: .editorconfig
================================================
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = true
ij_smart_tabs = false
ij_visual_guides = none
ij_wrap_on_typing = false
[*.css]
ij_css_align_closing_brace_with_properties = false
ij_css_blank_lines_around_nested_selector = 1
ij_css_blank_lines_between_blocks = 1
ij_css_brace_placement = end_of_line
ij_css_enforce_quotes_on_format = false
ij_css_hex_color_long_format = false
ij_css_hex_color_lower_case = false
ij_css_hex_color_short_format = false
ij_css_hex_color_upper_case = false
ij_css_keep_blank_lines_in_code = 2
ij_css_keep_indents_on_empty_lines = false
ij_css_keep_single_line_blocks = false
ij_css_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_css_space_after_colon = true
ij_css_space_before_opening_brace = true
ij_css_use_double_quotes = true
ij_css_value_alignment = do_not_align
[*.feature]
indent_size = 2
ij_gherkin_keep_indents_on_empty_lines = false
[*.gsp]
ij_gsp_keep_indents_on_empty_lines = false
[*.haml]
indent_size = 2
ij_haml_keep_indents_on_empty_lines = false
[*.java]
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = false
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = true
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = true
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_records = true
ij_java_align_multiline_resources = true
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_text_blocks = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = false
ij_java_array_initializer_right_brace_on_new_line = false
ij_java_array_initializer_wrap = off
ij_java_assert_statement_colon_on_next_line = false
ij_java_assert_statement_wrap = off
ij_java_assignment_wrap = off
ij_java_binary_operation_sign_on_next_line = false
ij_java_binary_operation_wrap = off
ij_java_blank_lines_after_anonymous_class_header = 0
ij_java_blank_lines_after_class_header = 0
ij_java_blank_lines_after_imports = 1
ij_java_blank_lines_after_package = 1
ij_java_blank_lines_around_class = 1
ij_java_blank_lines_around_field = 0
ij_java_blank_lines_around_field_in_interface = 0
ij_java_blank_lines_around_initializer = 1
ij_java_blank_lines_around_method = 1
ij_java_blank_lines_around_method_in_interface = 1
ij_java_blank_lines_before_class_end = 0
ij_java_blank_lines_before_imports = 1
ij_java_blank_lines_before_method_body = 0
ij_java_blank_lines_before_package = 0
ij_java_block_brace_style = end_of_line
ij_java_block_comment_at_first_column = true
ij_java_builder_methods = none
ij_java_call_parameters_new_line_after_left_paren = false
ij_java_call_parameters_right_paren_on_new_line = false
ij_java_call_parameters_wrap = off
ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 5
ij_java_class_names_in_javadoc = 1
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = false
ij_java_do_while_brace_force = never
ij_java_doc_add_blank_line_after_description = true
ij_java_doc_add_blank_line_after_param_comments = false
ij_java_doc_add_blank_line_after_return = false
ij_java_doc_add_p_tag_on_empty_lines = true
ij_java_doc_align_exception_comments = true
ij_java_doc_align_param_comments = true
ij_java_doc_do_not_wrap_if_one_line = false
ij_java_doc_enable_formatting = true
ij_java_doc_enable_leading_asterisks = true
ij_java_doc_indent_on_continuation = false
ij_java_doc_keep_empty_lines = true
ij_java_doc_keep_empty_parameter_tag = true
ij_java_doc_keep_empty_return_tag = true
ij_java_doc_keep_empty_throws_tag = true
ij_java_doc_keep_invalid_tags = true
ij_java_doc_param_description_on_new_line = false
ij_java_doc_preserve_line_breaks = false
ij_java_doc_use_throws_not_exception_tag = true
ij_java_else_on_new_line = false
ij_java_entity_dd_suffix = EJB
ij_java_entity_eb_suffix = Bean
ij_java_entity_hi_suffix = Home
ij_java_entity_lhi_prefix = Local
ij_java_entity_lhi_suffix = Home
ij_java_entity_li_prefix = Local
ij_java_entity_pk_class = java.lang.String
ij_java_entity_vo_suffix = VO
ij_java_enum_constants_wrap = off
ij_java_extends_keyword_wrap = off
ij_java_extends_list_wrap = off
ij_java_field_annotation_wrap = split_into_lines
ij_java_finally_on_new_line = false
ij_java_for_brace_force = never
ij_java_for_statement_new_line_after_left_paren = false
ij_java_for_statement_right_paren_on_new_line = false
ij_java_for_statement_wrap = off
ij_java_generate_final_locals = false
ij_java_generate_final_parameters = false
ij_java_if_brace_force = never
ij_java_imports_layout = *,|,javax.**,java.**,|,$*
ij_java_indent_case_from_switch = true
ij_java_insert_inner_class_imports = false
ij_java_insert_override_annotation = true
ij_java_keep_blank_lines_before_right_brace = 2
ij_java_keep_blank_lines_between_package_declaration_and_header = 2
ij_java_keep_blank_lines_in_code = 2
ij_java_keep_blank_lines_in_declarations = 2
ij_java_keep_builder_methods_indents = false
ij_java_keep_control_statement_in_one_line = true
ij_java_keep_first_column_comment = true
ij_java_keep_indents_on_empty_lines = false
ij_java_keep_line_breaks = true
ij_java_keep_multiple_expressions_in_one_line = false
ij_java_keep_simple_blocks_in_one_line = false
ij_java_keep_simple_classes_in_one_line = false
ij_java_keep_simple_lambdas_in_one_line = false
ij_java_keep_simple_methods_in_one_line = false
ij_java_label_indent_absolute = false
ij_java_label_indent_size = 0
ij_java_lambda_brace_style = end_of_line
ij_java_layout_static_imports_separately = true
ij_java_line_comment_add_space = false
ij_java_line_comment_at_first_column = true
ij_java_message_dd_suffix = EJB
ij_java_message_eb_suffix = Bean
ij_java_method_annotation_wrap = split_into_lines
ij_java_method_brace_style = end_of_line
ij_java_method_call_chain_wrap = off
ij_java_method_parameters_new_line_after_left_paren = false
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = off
ij_java_modifier_list_wrap = false
ij_java_names_count_to_use_import_on_demand = 3
ij_java_new_line_after_lparen_in_record_header = false
ij_java_packages_to_use_import_on_demand = java.awt.*,javax.swing.*
ij_java_parameter_annotation_wrap = off
ij_java_parentheses_expression_new_line_after_left_paren = false
ij_java_parentheses_expression_right_paren_on_new_line = false
ij_java_place_assignment_sign_on_next_line = false
ij_java_prefer_longer_names = true
ij_java_prefer_parameters_wrap = false
ij_java_record_components_wrap = normal
ij_java_repeat_synchronized = true
ij_java_replace_instanceof_and_cast = false
ij_java_replace_null_check = true
ij_java_replace_sum_lambda_with_method_ref = true
ij_java_resource_list_new_line_after_left_paren = false
ij_java_resource_list_right_paren_on_new_line = false
ij_java_resource_list_wrap = off
ij_java_rparen_on_new_line_in_record_header = false
ij_java_session_dd_suffix = EJB
ij_java_session_eb_suffix = Bean
ij_java_session_hi_suffix = Home
ij_java_session_lhi_prefix = Local
ij_java_session_lhi_suffix = Home
ij_java_session_li_prefix = Local
ij_java_session_si_suffix = Service
ij_java_space_after_closing_angle_bracket_in_type_argument = false
ij_java_space_after_colon = true
ij_java_space_after_comma = true
ij_java_space_after_comma_in_type_arguments = true
ij_java_space_after_for_semicolon = true
ij_java_space_after_quest = true
ij_java_space_after_type_cast = true
ij_java_space_before_annotation_array_initializer_left_brace = false
ij_java_space_before_annotation_parameter_list = false
ij_java_space_before_array_initializer_left_brace = false
ij_java_space_before_catch_keyword = true
ij_java_space_before_catch_left_brace = true
ij_java_space_before_catch_parentheses = true
ij_java_space_before_class_left_brace = true
ij_java_space_before_colon = true
ij_java_space_before_colon_in_foreach = true
ij_java_space_before_comma = false
ij_java_space_before_do_left_brace = true
ij_java_space_before_else_keyword = true
ij_java_space_before_else_left_brace = true
ij_java_space_before_finally_keyword = true
ij_java_space_before_finally_left_brace = true
ij_java_space_before_for_left_brace = true
ij_java_space_before_for_parentheses = true
ij_java_space_before_for_semicolon = false
ij_java_space_before_if_left_brace = true
ij_java_space_before_if_parentheses = true
ij_java_space_before_method_call_parentheses = false
ij_java_space_before_method_left_brace = true
ij_java_space_before_method_parentheses = false
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
ij_java_space_before_quest = true
ij_java_space_before_switch_left_brace = true
ij_java_space_before_switch_parentheses = true
ij_java_space_before_synchronized_left_brace = true
ij_java_space_before_synchronized_parentheses = true
ij_java_space_before_try_left_brace = true
ij_java_space_before_try_parentheses = true
ij_java_space_before_type_parameter_list = false
ij_java_space_before_while_keyword = true
ij_java_space_before_while_left_brace = true
ij_java_space_before_while_parentheses = true
ij_java_space_inside_one_line_enum_braces = false
ij_java_space_within_empty_array_initializer_braces = false
ij_java_space_within_empty_method_call_parentheses = false
ij_java_space_within_empty_method_parentheses = false
ij_java_spaces_around_additive_operators = true
ij_java_spaces_around_assignment_operators = true
ij_java_spaces_around_bitwise_operators = true
ij_java_spaces_around_equality_operators = true
ij_java_spaces_around_lambda_arrow = true
ij_java_spaces_around_logical_operators = true
ij_java_spaces_around_method_ref_dbl_colon = false
ij_java_spaces_around_multiplicative_operators = true
ij_java_spaces_around_relational_operators = true
ij_java_spaces_around_shift_operators = true
ij_java_spaces_around_type_bounds_in_type_parameters = true
ij_java_spaces_around_unary_operator = false
ij_java_spaces_within_angle_brackets = false
ij_java_spaces_within_annotation_parentheses = false
ij_java_spaces_within_array_initializer_braces = false
ij_java_spaces_within_braces = false
ij_java_spaces_within_brackets = false
ij_java_spaces_within_cast_parentheses = false
ij_java_spaces_within_catch_parentheses = false
ij_java_spaces_within_for_parentheses = false
ij_java_spaces_within_if_parentheses = false
ij_java_spaces_within_method_call_parentheses = false
ij_java_spaces_within_method_parentheses = false
ij_java_spaces_within_parentheses = false
ij_java_spaces_within_record_header = false
ij_java_spaces_within_switch_parentheses = false
ij_java_spaces_within_synchronized_parentheses = false
ij_java_spaces_within_try_parentheses = false
ij_java_spaces_within_while_parentheses = false
ij_java_special_else_if_treatment = true
ij_java_subclass_name_suffix = Impl
ij_java_ternary_operation_signs_on_next_line = false
ij_java_ternary_operation_wrap = off
ij_java_test_name_suffix = Test
ij_java_throws_keyword_wrap = off
ij_java_throws_list_wrap = off
ij_java_use_external_annotations = false
ij_java_use_fq_class_names = false
ij_java_use_relative_indents = false
ij_java_use_single_class_imports = true
ij_java_variable_annotation_wrap = off
ij_java_visibility = public
ij_java_while_brace_force = never
ij_java_while_on_new_line = false
ij_java_wrap_comments = false
ij_java_wrap_first_method_in_call_chain = false
ij_java_wrap_long_lines = false
[*.less]
indent_size = 2
ij_less_align_closing_brace_with_properties = false
ij_less_blank_lines_around_nested_selector = 1
ij_less_blank_lines_between_blocks = 1
ij_less_brace_placement = 0
ij_less_enforce_quotes_on_format = false
ij_less_hex_color_long_format = false
ij_less_hex_color_lower_case = false
ij_less_hex_color_short_format = false
ij_less_hex_color_upper_case = false
ij_less_keep_blank_lines_in_code = 2
ij_less_keep_indents_on_empty_lines = false
ij_less_keep_single_line_blocks = false
ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_less_space_after_colon = true
ij_less_space_before_opening_brace = true
ij_less_use_double_quotes = true
ij_less_value_alignment = 0
[*.proto]
indent_size = 2
tab_width = 2
ij_continuation_indent_size = 4
ij_protobuf_keep_blank_lines_in_code = 2
ij_protobuf_keep_indents_on_empty_lines = false
ij_protobuf_keep_line_breaks = true
ij_protobuf_space_after_comma = true
ij_protobuf_space_before_comma = false
ij_protobuf_spaces_around_assignment_operators = true
ij_protobuf_spaces_within_braces = false
ij_protobuf_spaces_within_brackets = false
[*.sass]
indent_size = 2
ij_sass_align_closing_brace_with_properties = false
ij_sass_blank_lines_around_nested_selector = 1
ij_sass_blank_lines_between_blocks = 1
ij_sass_brace_placement = 0
ij_sass_enforce_quotes_on_format = false
ij_sass_hex_color_long_format = false
ij_sass_hex_color_lower_case = false
ij_sass_hex_color_short_format = false
ij_sass_hex_color_upper_case = false
ij_sass_keep_blank_lines_in_code = 2
ij_sass_keep_indents_on_empty_lines = false
ij_sass_keep_single_line_blocks = false
ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_sass_space_after_colon = true
ij_sass_space_before_opening_brace = true
ij_sass_use_double_quotes = true
ij_sass_value_alignment = 0
[*.scss]
indent_size = 2
ij_scss_align_closing_brace_with_properties = false
ij_scss_blank_lines_around_nested_selector = 1
ij_scss_blank_lines_between_blocks = 1
ij_scss_brace_placement = 0
ij_scss_enforce_quotes_on_format = false
ij_scss_hex_color_long_format = false
ij_scss_hex_color_lower_case = false
ij_scss_hex_color_short_format = false
ij_scss_hex_color_upper_case = false
ij_scss_keep_blank_lines_in_code = 2
ij_scss_keep_indents_on_empty_lines = false
ij_scss_keep_single_line_blocks = false
ij_scss_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_scss_space_after_colon = true
ij_scss_space_before_opening_brace = true
ij_scss_use_double_quotes = true
ij_scss_value_alignment = 0
[*.styl]
indent_size = 2
ij_stylus_align_closing_brace_with_properties = false
ij_stylus_blank_lines_around_nested_selector = 1
ij_stylus_blank_lines_between_blocks = 1
ij_stylus_brace_placement = 0
ij_stylus_enforce_quotes_on_format = false
ij_stylus_hex_color_long_format = false
ij_stylus_hex_color_lower_case = false
ij_stylus_hex_color_short_format = false
ij_stylus_hex_color_upper_case = false
ij_stylus_keep_blank_lines_in_code = 2
ij_stylus_keep_indents_on_empty_lines = false
ij_stylus_keep_single_line_blocks = false
ij_stylus_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_stylus_space_after_colon = true
ij_stylus_space_before_opening_brace = true
ij_stylus_use_double_quotes = true
ij_stylus_value_alignment = 0
[.editorconfig]
ij_editorconfig_align_group_field_declarations = false
ij_editorconfig_space_after_colon = false
ij_editorconfig_space_after_comma = true
ij_editorconfig_space_before_colon = false
ij_editorconfig_space_before_comma = false
ij_editorconfig_spaces_around_assignment_operators = true
[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.pom,*.rng,*.tld,*.wadl,*.wsdd,*.wsdl,*.xjb,*.xml,*.xsd,*.xsl,*.xslt,*.xul}]
ij_xml_align_attributes = true
ij_xml_align_text = false
ij_xml_attribute_wrap = normal
ij_xml_block_comment_at_first_column = true
ij_xml_keep_blank_lines = 2
ij_xml_keep_indents_on_empty_lines = false
ij_xml_keep_line_breaks = true
ij_xml_keep_line_breaks_in_text = true
ij_xml_keep_whitespaces = false
ij_xml_keep_whitespaces_around_cdata = preserve
ij_xml_keep_whitespaces_inside_cdata = false
ij_xml_line_comment_at_first_column = true
ij_xml_space_after_tag_name = false
ij_xml_space_around_equals_in_attribute = false
ij_xml_space_inside_empty_tag = false
ij_xml_text_wrap = normal
ij_xml_use_custom_settings = false
[{*.ats,*.ts}]
ij_continuation_indent_size = 4
ij_typescript_align_imports = false
ij_typescript_align_multiline_array_initializer_expression = false
ij_typescript_align_multiline_binary_operation = false
ij_typescript_align_multiline_chained_methods = false
ij_typescript_align_multiline_extends_list = false
ij_typescript_align_multiline_for = true
ij_typescript_align_multiline_parameters = true
ij_typescript_align_multiline_parameters_in_calls = false
ij_typescript_align_multiline_ternary_operation = false
ij_typescript_align_object_properties = 0
ij_typescript_align_union_types = false
ij_typescript_align_var_statements = 0
ij_typescript_array_initializer_new_line_after_left_brace = false
ij_typescript_array_initializer_right_brace_on_new_line = false
ij_typescript_array_initializer_wrap = off
ij_typescript_assignment_wrap = off
ij_typescript_binary_operation_sign_on_next_line = false
ij_typescript_binary_operation_wrap = off
ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
ij_typescript_blank_lines_after_imports = 1
ij_typescript_blank_lines_around_class = 1
ij_typescript_blank_lines_around_field = 0
ij_typescript_blank_lines_around_field_in_interface = 0
ij_typescript_blank_lines_around_function = 1
ij_typescript_blank_lines_around_method = 1
ij_typescript_blank_lines_around_method_in_interface = 1
ij_typescript_block_brace_style = end_of_line
ij_typescript_call_parameters_new_line_after_left_paren = false
ij_typescript_call_parameters_right_paren_on_new_line = false
ij_typescript_call_parameters_wrap = off
ij_typescript_catch_on_new_line = false
ij_typescript_chained_call_dot_on_new_line = true
ij_typescript_class_brace_style = end_of_line
ij_typescript_comma_on_new_line = false
ij_typescript_do_while_brace_force = never
ij_typescript_else_on_new_line = false
ij_typescript_enforce_trailing_comma = keep
ij_typescript_extends_keyword_wrap = off
ij_typescript_extends_list_wrap = off
ij_typescript_field_prefix = _
ij_typescript_file_name_style = relaxed
ij_typescript_finally_on_new_line = false
ij_typescript_for_brace_force = never
ij_typescript_for_statement_new_line_after_left_paren = false
ij_typescript_for_statement_right_paren_on_new_line = false
ij_typescript_for_statement_wrap = off
ij_typescript_force_quote_style = false
ij_typescript_force_semicolon_style = false
ij_typescript_function_expression_brace_style = end_of_line
ij_typescript_if_brace_force = never
ij_typescript_import_merge_members = global
ij_typescript_import_prefer_absolute_path = global
ij_typescript_import_sort_members = true
ij_typescript_import_sort_module_name = false
ij_typescript_import_use_node_resolution = true
ij_typescript_imports_wrap = on_every_item
ij_typescript_indent_case_from_switch = true
ij_typescript_indent_chained_calls = true
ij_typescript_indent_package_children = 0
ij_typescript_jsdoc_include_types = false
ij_typescript_jsx_attribute_value = braces
ij_typescript_keep_blank_lines_in_code = 2
ij_typescript_keep_first_column_comment = true
ij_typescript_keep_indents_on_empty_lines = false
ij_typescript_keep_line_breaks = true
ij_typescript_keep_simple_blocks_in_one_line = false
ij_typescript_keep_simple_methods_in_one_line = false
ij_typescript_line_comment_add_space = true
ij_typescript_line_comment_at_first_column = false
ij_typescript_method_brace_style = end_of_line
ij_typescript_method_call_chain_wrap = off
ij_typescript_method_parameters_new_line_after_left_paren = false
ij_typescript_method_parameters_right_paren_on_new_line = false
ij_typescript_method_parameters_wrap = off
ij_typescript_object_literal_wrap = on_every_item
ij_typescript_parentheses_expression_new_line_after_left_paren = false
ij_typescript_parentheses_expression_right_paren_on_new_line = false
ij_typescript_place_assignment_sign_on_next_line = false
ij_typescript_prefer_as_type_cast = false
ij_typescript_prefer_explicit_types_function_expression_returns = false
ij_typescript_prefer_explicit_types_function_returns = false
ij_typescript_prefer_explicit_types_vars_fields = false
ij_typescript_prefer_parameters_wrap = false
ij_typescript_reformat_c_style_comments = false
ij_typescript_space_after_colon = true
ij_typescript_space_after_comma = true
ij_typescript_space_after_dots_in_rest_parameter = false
ij_typescript_space_after_generator_mult = true
ij_typescript_space_after_property_colon = true
ij_typescript_space_after_quest = true
ij_typescript_space_after_type_colon = true
ij_typescript_space_after_unary_not = false
ij_typescript_space_before_async_arrow_lparen = true
ij_typescript_space_before_catch_keyword = true
ij_typescript_space_before_catch_left_brace = true
ij_typescript_space_before_catch_parentheses = true
ij_typescript_space_before_class_lbrace = true
ij_typescript_space_before_class_left_brace = true
ij_typescript_space_before_colon = true
ij_typescript_space_before_comma = false
ij_typescript_space_before_do_left_brace = true
ij_typescript_space_before_else_keyword = true
ij_typescript_space_before_else_left_brace = true
ij_typescript_space_before_finally_keyword = true
ij_typescript_space_before_finally_left_brace = true
ij_typescript_space_before_for_left_brace = true
ij_typescript_space_before_for_parentheses = true
ij_typescript_space_before_for_semicolon = false
ij_typescript_space_before_function_left_parenth = true
ij_typescript_space_before_generator_mult = false
ij_typescript_space_before_if_left_brace = true
ij_typescript_space_before_if_parentheses = true
ij_typescript_space_before_method_call_parentheses = false
ij_typescript_space_before_method_left_brace = true
ij_typescript_space_before_method_parentheses = false
ij_typescript_space_before_property_colon = false
ij_typescript_space_before_quest = true
ij_typescript_space_before_switch_left_brace = true
ij_typescript_space_before_switch_parentheses = true
ij_typescript_space_before_try_left_brace = true
ij_typescript_space_before_type_colon = false
ij_typescript_space_before_unary_not = false
ij_typescript_space_before_while_keyword = true
ij_typescript_space_before_while_left_brace = true
ij_typescript_space_before_while_parentheses = true
ij_typescript_spaces_around_additive_operators = true
ij_typescript_spaces_around_arrow_function_operator = true
ij_typescript_spaces_around_assignment_operators = true
ij_typescript_spaces_around_bitwise_operators = true
ij_typescript_spaces_around_equality_operators = true
ij_typescript_spaces_around_logical_operators = true
ij_typescript_spaces_around_multiplicative_operators = true
ij_typescript_spaces_around_relational_operators = true
ij_typescript_spaces_around_shift_operators = true
ij_typescript_spaces_around_unary_operator = false
ij_typescript_spaces_within_array_initializer_brackets = false
ij_typescript_spaces_within_brackets = false
ij_typescript_spaces_within_catch_parentheses = false
ij_typescript_spaces_within_for_parentheses = false
ij_typescript_spaces_within_if_parentheses = false
ij_typescript_spaces_within_imports = false
ij_typescript_spaces_within_interpolation_expressions = false
ij_typescript_spaces_within_method_call_parentheses = false
ij_typescript_spaces_within_method_parentheses = false
ij_typescript_spaces_within_object_literal_braces = false
ij_typescript_spaces_within_object_type_braces = true
ij_typescript_spaces_within_parentheses = false
ij_typescript_spaces_within_switch_parentheses = false
ij_typescript_spaces_within_type_assertion = false
ij_typescript_spaces_within_union_types = true
ij_typescript_spaces_within_while_parentheses = false
ij_typescript_special_else_if_treatment = true
ij_typescript_ternary_operation_signs_on_next_line = false
ij_typescript_ternary_operation_wrap = off
ij_typescript_union_types_wrap = on_every_item
ij_typescript_use_chained_calls_group_indents = false
ij_typescript_use_double_quotes = true
ij_typescript_use_explicit_js_extension = global
ij_typescript_use_path_mapping = always
ij_typescript_use_public_modifier = false
ij_typescript_use_semicolon_after_statement = true
ij_typescript_var_declaration_wrap = normal
ij_typescript_while_brace_force = never
ij_typescript_while_on_new_line = false
ij_typescript_wrap_comments = false
[{*.bash,*.sh,*.zsh}]
indent_size = 2
tab_width = 2
ij_shell_binary_ops_start_line = false
ij_shell_keep_column_alignment_padding = false
ij_shell_minify_program = false
ij_shell_redirect_followed_by_space = false
ij_shell_switch_cases_indented = false
ij_shell_use_unix_line_separator = true
[{*.cjs,*.js}]
ij_continuation_indent_size = 4
ij_javascript_align_imports = false
ij_javascript_align_multiline_array_initializer_expression = false
ij_javascript_align_multiline_binary_operation = false
ij_javascript_align_multiline_chained_methods = false
ij_javascript_align_multiline_extends_list = false
ij_javascript_align_multiline_for = true
ij_javascript_align_multiline_parameters = true
ij_javascript_align_multiline_parameters_in_calls = false
ij_javascript_align_multiline_ternary_operation = false
ij_javascript_align_object_properties = 0
ij_javascript_align_union_types = false
ij_javascript_align_var_statements = 0
ij_javascript_array_initializer_new_line_after_left_brace = false
ij_javascript_array_initializer_right_brace_on_new_line = false
ij_javascript_array_initializer_wrap = off
ij_javascript_assignment_wrap = off
ij_javascript_binary_operation_sign_on_next_line = false
ij_javascript_binary_operation_wrap = off
ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
ij_javascript_blank_lines_after_imports = 1
ij_javascript_blank_lines_around_class = 1
ij_javascript_blank_lines_around_field = 0
ij_javascript_blank_lines_around_function = 1
ij_javascript_blank_lines_around_method = 1
ij_javascript_block_brace_style = end_of_line
ij_javascript_call_parameters_new_line_after_left_paren = false
ij_javascript_call_parameters_right_paren_on_new_line = false
ij_javascript_call_parameters_wrap = off
ij_javascript_catch_on_new_line = false
ij_javascript_chained_call_dot_on_new_line = true
ij_javascript_class_brace_style = end_of_line
ij_javascript_comma_on_new_line = false
ij_javascript_do_while_brace_force = never
ij_javascript_else_on_new_line = false
ij_javascript_enforce_trailing_comma = keep
ij_javascript_extends_keyword_wrap = off
ij_javascript_extends_list_wrap = off
ij_javascript_field_prefix = _
ij_javascript_file_name_style = relaxed
ij_javascript_finally_on_new_line = false
ij_javascript_for_brace_force = never
ij_javascript_for_statement_new_line_after_left_paren = false
ij_javascript_for_statement_right_paren_on_new_line = false
ij_javascript_for_statement_wrap = off
ij_javascript_force_quote_style = false
ij_javascript_force_semicolon_style = false
ij_javascript_function_expression_brace_style = end_of_line
ij_javascript_if_brace_force = never
ij_javascript_import_merge_members = global
ij_javascript_import_prefer_absolute_path = global
ij_javascript_import_sort_members = true
ij_javascript_import_sort_module_name = false
ij_javascript_import_use_node_resolution = true
ij_javascript_imports_wrap = on_every_item
ij_javascript_indent_case_from_switch = true
ij_javascript_indent_chained_calls = true
ij_javascript_indent_package_children = 0
ij_javascript_jsx_attribute_value = braces
ij_javascript_keep_blank_lines_in_code = 2
ij_javascript_keep_first_column_comment = true
ij_javascript_keep_indents_on_empty_lines = false
ij_javascript_keep_line_breaks = true
ij_javascript_keep_simple_blocks_in_one_line = false
ij_javascript_keep_simple_methods_in_one_line = false
ij_javascript_line_comment_add_space = true
ij_javascript_line_comment_at_first_column = false
ij_javascript_method_brace_style = end_of_line
ij_javascript_method_call_chain_wrap = off
ij_javascript_method_parameters_new_line_after_left_paren = false
ij_javascript_method_parameters_right_paren_on_new_line = false
ij_javascript_method_parameters_wrap = off
ij_javascript_object_literal_wrap = on_every_item
ij_javascript_parentheses_expression_new_line_after_left_paren = false
ij_javascript_parentheses_expression_right_paren_on_new_line = false
ij_javascript_place_assignment_sign_on_next_line = false
ij_javascript_prefer_as_type_cast = false
ij_javascript_prefer_explicit_types_function_expression_returns = false
ij_javascript_prefer_explicit_types_function_returns = false
ij_javascript_prefer_explicit_types_vars_fields = false
ij_javascript_prefer_parameters_wrap = false
ij_javascript_reformat_c_style_comments = false
ij_javascript_space_after_colon = true
ij_javascript_space_after_comma = true
ij_javascript_space_after_dots_in_rest_parameter = false
ij_javascript_space_after_generator_mult = true
ij_javascript_space_after_property_colon = true
ij_javascript_space_after_quest = true
ij_javascript_space_after_type_colon = true
ij_javascript_space_after_unary_not = false
ij_javascript_space_before_async_arrow_lparen = true
ij_javascript_space_before_catch_keyword = true
ij_javascript_space_before_catch_left_brace = true
ij_javascript_space_before_catch_parentheses = true
ij_javascript_space_before_class_lbrace = true
ij_javascript_space_before_class_left_brace = true
ij_javascript_space_before_colon = true
ij_javascript_space_before_comma = false
ij_javascript_space_before_do_left_brace = true
ij_javascript_space_before_else_keyword = true
ij_javascript_space_before_else_left_brace = true
ij_javascript_space_before_finally_keyword = true
ij_javascript_space_before_finally_left_brace = true
ij_javascript_space_before_for_left_brace = true
ij_javascript_space_before_for_parentheses = true
ij_javascript_space_before_for_semicolon = false
ij_javascript_space_before_function_left_parenth = true
ij_javascript_space_before_generator_mult = false
ij_javascript_space_before_if_left_brace = true
ij_javascript_space_before_if_parentheses = true
ij_javascript_space_before_method_call_parentheses = false
ij_javascript_space_before_method_left_brace = true
ij_javascript_space_before_method_parentheses = false
ij_javascript_space_before_property_colon = false
ij_javascript_space_before_quest = true
ij_javascript_space_before_switch_left_brace = true
ij_javascript_space_before_switch_parentheses = true
ij_javascript_space_before_try_left_brace = true
ij_javascript_space_before_type_colon = false
ij_javascript_space_before_unary_not = false
ij_javascript_space_before_while_keyword = true
ij_javascript_space_before_while_left_brace = true
ij_javascript_space_before_while_parentheses = true
ij_javascript_spaces_around_additive_operators = true
ij_javascript_spaces_around_arrow_function_operator = true
ij_javascript_spaces_around_assignment_operators = true
ij_javascript_spaces_around_bitwise_operators = true
ij_javascript_spaces_around_equality_operators = true
ij_javascript_spaces_around_logical_operators = true
ij_javascript_spaces_around_multiplicative_operators = true
ij_javascript_spaces_around_relational_operators = true
ij_javascript_spaces_around_shift_operators = true
ij_javascript_spaces_around_unary_operator = false
ij_javascript_spaces_within_array_initializer_brackets = false
ij_javascript_spaces_within_brackets = false
ij_javascript_spaces_within_catch_parentheses = false
ij_javascript_spaces_within_for_parentheses = false
ij_javascript_spaces_within_if_parentheses = false
ij_javascript_spaces_within_imports = false
ij_javascript_spaces_within_interpolation_expressions = false
ij_javascript_spaces_within_method_call_parentheses = false
ij_javascript_spaces_within_method_parentheses = false
ij_javascript_spaces_within_object_literal_braces = false
ij_javascript_spaces_within_object_type_braces = true
ij_javascript_spaces_within_parentheses = false
ij_javascript_spaces_within_switch_parentheses = false
ij_javascript_spaces_within_type_assertion = false
ij_javascript_spaces_within_union_types = true
ij_javascript_spaces_within_while_parentheses = false
ij_javascript_special_else_if_treatment = true
ij_javascript_ternary_operation_signs_on_next_line = false
ij_javascript_ternary_operation_wrap = off
ij_javascript_union_types_wrap = on_every_item
ij_javascript_use_chained_calls_group_indents = false
ij_javascript_use_double_quotes = true
ij_javascript_use_explicit_js_extension = global
ij_javascript_use_path_mapping = always
ij_javascript_use_public_modifier = false
ij_javascript_use_semicolon_after_statement = true
ij_javascript_var_declaration_wrap = normal
ij_javascript_while_brace_force = never
ij_javascript_while_on_new_line = false
ij_javascript_wrap_comments = false
[{*.ft,*.vm,*.vsl}]
ij_vtl_keep_indents_on_empty_lines = false
[{*.gant,*.gradle,*.groovy,*.gson,*.gy}]
ij_groovy_align_group_field_declarations = false
ij_groovy_align_multiline_array_initializer_expression = false
ij_groovy_align_multiline_assignment = false
ij_groovy_align_multiline_binary_operation = false
ij_groovy_align_multiline_chained_methods = false
ij_groovy_align_multiline_extends_list = false
ij_groovy_align_multiline_for = true
ij_groovy_align_multiline_list_or_map = true
ij_groovy_align_multiline_method_parentheses = false
ij_groovy_align_multiline_parameters = true
ij_groovy_align_multiline_parameters_in_calls = false
ij_groovy_align_multiline_resources = true
ij_groovy_align_multiline_ternary_operation = false
ij_groovy_align_multiline_throws_list = false
ij_groovy_align_named_args_in_map = true
ij_groovy_align_throws_keyword = false
ij_groovy_array_initializer_new_line_after_left_brace = false
ij_groovy_array_initializer_right_brace_on_new_line = false
ij_groovy_array_initializer_wrap = off
ij_groovy_assert_statement_wrap = off
ij_groovy_assignment_wrap = off
ij_groovy_binary_operation_wrap = off
ij_groovy_blank_lines_after_class_header = 0
ij_groovy_blank_lines_after_imports = 1
ij_groovy_blank_lines_after_package = 1
ij_groovy_blank_lines_around_class = 1
ij_groovy_blank_lines_around_field = 0
ij_groovy_blank_lines_around_field_in_interface = 0
ij_groovy_blank_lines_around_method = 1
ij_groovy_blank_lines_around_method_in_interface = 1
ij_groovy_blank_lines_before_imports = 1
ij_groovy_blank_lines_before_method_body = 0
ij_groovy_blank_lines_before_package = 0
ij_groovy_block_brace_style = end_of_line
ij_groovy_block_comment_at_first_column = true
ij_groovy_call_parameters_new_line_after_left_paren = false
ij_groovy_call_parameters_right_paren_on_new_line = false
ij_groovy_call_parameters_wrap = off
ij_groovy_catch_on_new_line = false
ij_groovy_class_annotation_wrap = split_into_lines
ij_groovy_class_brace_style = end_of_line
ij_groovy_class_count_to_use_import_on_demand = 5
ij_groovy_do_while_brace_force = never
ij_groovy_else_on_new_line = false
ij_groovy_enum_constants_wrap = off
ij_groovy_extends_keyword_wrap = off
ij_groovy_extends_list_wrap = off
ij_groovy_field_annotation_wrap = split_into_lines
ij_groovy_finally_on_new_line = false
ij_groovy_for_brace_force = never
ij_groovy_for_statement_new_line_after_left_paren = false
ij_groovy_for_statement_right_paren_on_new_line = false
ij_groovy_for_statement_wrap = off
ij_groovy_if_brace_force = never
ij_groovy_import_annotation_wrap = 2
ij_groovy_imports_layout = *,|,javax.**,java.**,|,$*
ij_groovy_indent_case_from_switch = true
ij_groovy_indent_label_blocks = true
ij_groovy_insert_inner_class_imports = false
ij_groovy_keep_blank_lines_before_right_brace = 2
ij_groovy_keep_blank_lines_in_code = 2
ij_groovy_keep_blank_lines_in_declarations = 2
ij_groovy_keep_control_statement_in_one_line = true
ij_groovy_keep_first_column_comment = true
ij_groovy_keep_indents_on_empty_lines = false
ij_groovy_keep_line_breaks = true
ij_groovy_keep_multiple_expressions_in_one_line = false
ij_groovy_keep_simple_blocks_in_one_line = false
ij_groovy_keep_simple_classes_in_one_line = true
ij_groovy_keep_simple_lambdas_in_one_line = true
ij_groovy_keep_simple_methods_in_one_line = true
ij_groovy_label_indent_absolute = false
ij_groovy_label_indent_size = 0
ij_groovy_lambda_brace_style = end_of_line
ij_groovy_layout_static_imports_separately = true
ij_groovy_line_comment_add_space = false
ij_groovy_line_comment_at_first_column = true
ij_groovy_method_annotation_wrap = split_into_lines
ij_groovy_method_brace_style = end_of_line
ij_groovy_method_call_chain_wrap = off
ij_groovy_method_parameters_new_line_after_left_paren = false
ij_groovy_method_parameters_right_paren_on_new_line = false
ij_groovy_method_parameters_wrap = off
ij_groovy_modifier_list_wrap = false
ij_groovy_names_count_to_use_import_on_demand = 3
ij_groovy_parameter_annotation_wrap = off
ij_groovy_parentheses_expression_new_line_after_left_paren = false
ij_groovy_parentheses_expression_right_paren_on_new_line = false
ij_groovy_prefer_parameters_wrap = false
ij_groovy_resource_list_new_line_after_left_paren = false
ij_groovy_resource_list_right_paren_on_new_line = false
ij_groovy_resource_list_wrap = off
ij_groovy_space_after_assert_separator = true
ij_groovy_space_after_colon = true
ij_groovy_space_after_comma = true
ij_groovy_space_after_comma_in_type_arguments = true
ij_groovy_space_after_for_semicolon = true
ij_groovy_space_after_quest = true
ij_groovy_space_after_type_cast = true
ij_groovy_space_before_annotation_parameter_list = false
ij_groovy_space_before_array_initializer_left_brace = false
ij_groovy_space_before_assert_separator = false
ij_groovy_space_before_catch_keyword = true
ij_groovy_space_before_catch_left_brace = true
ij_groovy_space_before_catch_parentheses = true
ij_groovy_space_before_class_left_brace = true
ij_groovy_space_before_closure_left_brace = true
ij_groovy_space_before_colon = true
ij_groovy_space_before_comma = false
ij_groovy_space_before_do_left_brace = true
ij_groovy_space_before_else_keyword = true
ij_groovy_space_before_else_left_brace = true
ij_groovy_space_before_finally_keyword = true
ij_groovy_space_before_finally_left_brace = true
ij_groovy_space_before_for_left_brace = true
ij_groovy_space_before_for_parentheses = true
ij_groovy_space_before_for_semicolon = false
ij_groovy_space_before_if_left_brace = true
ij_groovy_space_before_if_parentheses = true
ij_groovy_space_before_method_call_parentheses = false
ij_groovy_space_before_method_left_brace = true
ij_groovy_space_before_method_parentheses = false
ij_groovy_space_before_quest = true
ij_groovy_space_before_switch_left_brace = true
ij_groovy_space_before_switch_parentheses = true
ij_groovy_space_before_synchronized_left_brace = true
ij_groovy_space_before_synchronized_parentheses = true
ij_groovy_space_before_try_left_brace = true
ij_groovy_space_before_try_parentheses = true
ij_groovy_space_before_while_keyword = true
ij_groovy_space_before_while_left_brace = true
ij_groovy_space_before_while_parentheses = true
ij_groovy_space_in_named_argument = true
ij_groovy_space_in_named_argument_before_colon = false
ij_groovy_space_within_empty_array_initializer_braces = false
ij_groovy_space_within_empty_method_call_parentheses = false
ij_groovy_spaces_around_additive_operators = true
ij_groovy_spaces_around_assignment_operators = true
ij_groovy_spaces_around_bitwise_operators = true
ij_groovy_spaces_around_equality_operators = true
ij_groovy_spaces_around_lambda_arrow = true
ij_groovy_spaces_around_logical_operators = true
ij_groovy_spaces_around_multiplicative_operators = true
ij_groovy_spaces_around_regex_operators = true
ij_groovy_spaces_around_relational_operators = true
ij_groovy_spaces_around_shift_operators = true
ij_groovy_spaces_within_annotation_parentheses = false
ij_groovy_spaces_within_array_initializer_braces = false
ij_groovy_spaces_within_braces = true
ij_groovy_spaces_within_brackets = false
ij_groovy_spaces_within_cast_parentheses = false
ij_groovy_spaces_within_catch_parentheses = false
ij_groovy_spaces_within_for_parentheses = false
ij_groovy_spaces_within_gstring_injection_braces = false
ij_groovy_spaces_within_if_parentheses = false
ij_groovy_spaces_within_list_or_map = false
ij_groovy_spaces_within_method_call_parentheses = false
ij_groovy_spaces_within_method_parentheses = false
ij_groovy_spaces_within_parentheses = false
ij_groovy_spaces_within_switch_parentheses = false
ij_groovy_spaces_within_synchronized_parentheses = false
ij_groovy_spaces_within_try_parentheses = false
ij_groovy_spaces_within_tuple_expression = false
ij_groovy_spaces_within_while_parentheses = false
ij_groovy_special_else_if_treatment = true
ij_groovy_ternary_operation_wrap = off
ij_groovy_throws_keyword_wrap = off
ij_groovy_throws_list_wrap = off
ij_groovy_use_flying_geese_braces = false
ij_groovy_use_fq_class_names = false
ij_groovy_use_fq_class_names_in_javadoc = true
ij_groovy_use_relative_indents = false
ij_groovy_use_single_class_imports = true
ij_groovy_variable_annotation_wrap = off
ij_groovy_while_brace_force = never
ij_groovy_while_on_new_line = false
ij_groovy_wrap_chain_calls_after_dot = false
ij_groovy_wrap_long_lines = false
[{*.gradle.kts,*.kt,*.kts,*.main.kts,*.space.kts}]
ij_kotlin_align_in_columns_case_branch = false
ij_kotlin_align_multiline_binary_operation = false
ij_kotlin_align_multiline_extends_list = false
ij_kotlin_align_multiline_method_parentheses = false
ij_kotlin_align_multiline_parameters = true
ij_kotlin_align_multiline_parameters_in_calls = false
ij_kotlin_allow_trailing_comma = false
ij_kotlin_allow_trailing_comma_on_call_site = false
ij_kotlin_assignment_wrap = normal
ij_kotlin_blank_lines_after_class_header = 0
ij_kotlin_blank_lines_around_block_when_branches = 0
ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1
ij_kotlin_block_comment_at_first_column = true
ij_kotlin_call_parameters_new_line_after_left_paren = true
ij_kotlin_call_parameters_right_paren_on_new_line = true
ij_kotlin_call_parameters_wrap = on_every_item
ij_kotlin_catch_on_new_line = false
ij_kotlin_class_annotation_wrap = split_into_lines
ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL
ij_kotlin_continuation_indent_for_chained_calls = false
ij_kotlin_continuation_indent_for_expression_bodies = false
ij_kotlin_continuation_indent_in_argument_lists = false
ij_kotlin_continuation_indent_in_elvis = false
ij_kotlin_continuation_indent_in_if_conditions = false
ij_kotlin_continuation_indent_in_parameter_lists = false
ij_kotlin_continuation_indent_in_supertype_lists = false
ij_kotlin_else_on_new_line = false
ij_kotlin_enum_constants_wrap = off
ij_kotlin_extends_list_wrap = normal
ij_kotlin_field_annotation_wrap = split_into_lines
ij_kotlin_finally_on_new_line = false
ij_kotlin_if_rparen_on_new_line = true
ij_kotlin_import_nested_classes = false
ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^
ij_kotlin_insert_whitespaces_in_simple_one_line_method = true
ij_kotlin_keep_blank_lines_before_right_brace = 2
ij_kotlin_keep_blank_lines_in_code = 2
ij_kotlin_keep_blank_lines_in_declarations = 2
ij_kotlin_keep_first_column_comment = true
ij_kotlin_keep_indents_on_empty_lines = false
ij_kotlin_keep_line_breaks = true
ij_kotlin_lbrace_on_next_line = false
ij_kotlin_line_comment_add_space = false
ij_kotlin_line_comment_at_first_column = true
ij_kotlin_method_annotation_wrap = split_into_lines
ij_kotlin_method_call_chain_wrap = normal
ij_kotlin_method_parameters_new_line_after_left_paren = true
ij_kotlin_method_parameters_right_paren_on_new_line = true
ij_kotlin_method_parameters_wrap = on_every_item
ij_kotlin_name_count_to_use_star_import = 5
ij_kotlin_name_count_to_use_star_import_for_members = 3
ij_kotlin_packages_to_use_import_on_demand = java.util.*,kotlinx.android.synthetic.**,io.ktor.**
ij_kotlin_parameter_annotation_wrap = off
ij_kotlin_space_after_comma = true
ij_kotlin_space_after_extend_colon = true
ij_kotlin_space_after_type_colon = true
ij_kotlin_space_before_catch_parentheses = true
ij_kotlin_space_before_comma = false
ij_kotlin_space_before_extend_colon = true
ij_kotlin_space_before_for_parentheses = true
ij_kotlin_space_before_if_parentheses = true
ij_kotlin_space_before_lambda_arrow = true
ij_kotlin_space_before_type_colon = false
ij_kotlin_space_before_when_parentheses = true
ij_kotlin_space_before_while_parentheses = true
ij_kotlin_spaces_around_additive_operators = true
ij_kotlin_spaces_around_assignment_operators = true
ij_kotlin_spaces_around_equality_operators = true
ij_kotlin_spaces_around_function_type_arrow = true
ij_kotlin_spaces_around_logical_operators = true
ij_kotlin_spaces_around_multiplicative_operators = true
ij_kotlin_spaces_around_range = false
ij_kotlin_spaces_around_relational_operators = true
ij_kotlin_spaces_around_unary_operator = false
ij_kotlin_spaces_around_when_arrow = true
ij_kotlin_variable_annotation_wrap = off
ij_kotlin_while_on_new_line = false
ij_kotlin_wrap_elvis_expressions = 1
ij_kotlin_wrap_expression_body_functions = 1
ij_kotlin_wrap_first_method_in_call_chain = false
[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.stylelintrc,bowerrc,jest.config}]
indent_size = 2
ij_json_keep_blank_lines_in_code = 0
ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = true
ij_json_space_before_comma = false
ij_json_spaces_within_braces = false
ij_json_spaces_within_brackets = false
ij_json_wrap_long_lines = false
[{*.htm,*.html,*.ng,*.sht,*.shtm,*.shtml}]
ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3
ij_html_align_attributes = true
ij_html_align_text = false
ij_html_attribute_wrap = normal
ij_html_block_comment_at_first_column = true
ij_html_do_not_align_children_of_min_lines = 0
ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p
ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot
ij_html_enforce_quotes = false
ij_html_inline_tags = a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var
ij_html_keep_blank_lines = 2
ij_html_keep_indents_on_empty_lines = false
ij_html_keep_line_breaks = true
ij_html_keep_line_breaks_in_text = true
ij_html_keep_whitespaces = false
ij_html_keep_whitespaces_inside = span,pre,textarea
ij_html_line_comment_at_first_column = true
ij_html_new_line_after_last_attribute = never
ij_html_new_line_before_first_attribute = never
ij_html_quote_style = double
ij_html_remove_new_line_before_tags = br
ij_html_space_after_tag_name = false
ij_html_space_around_equality_in_attribute = false
ij_html_space_inside_empty_tag = false
ij_html_text_wrap = normal
[{*.jsf,*.jsp,*.jspf,*.tag,*.tagf,*.xjsp}]
ij_jsp_jsp_prefer_comma_separated_import_list = false
ij_jsp_keep_indents_on_empty_lines = false
[{*.jspx,*.tagx}]
ij_jspx_keep_indents_on_empty_lines = false
[{*.markdown,*.md}]
max_line_length = 200
ij_markdown_force_one_space_after_blockquote_symbol = true
ij_markdown_force_one_space_after_header_symbol = true
ij_markdown_force_one_space_after_list_bullet = true
ij_markdown_force_one_space_between_words = true
ij_markdown_keep_indents_on_empty_lines = false
ij_markdown_max_lines_around_block_elements = 1
ij_markdown_max_lines_around_header = 1
ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 1
ij_markdown_min_lines_between_paragraphs = 1
[{*.pb,*.textproto}]
indent_size = 2
tab_width = 2
ij_continuation_indent_size = 4
ij_prototext_keep_blank_lines_in_code = 2
ij_prototext_keep_indents_on_empty_lines = false
ij_prototext_keep_line_breaks = true
ij_prototext_space_after_colon = true
ij_prototext_space_after_comma = true
ij_prototext_space_before_colon = false
ij_prototext_space_before_comma = false
ij_prototext_spaces_within_braces = true
ij_prototext_spaces_within_brackets = false
[{*.properties,spring.handlers,spring.schemas}]
ij_properties_align_group_field_declarations = false
ij_properties_keep_blank_lines = false
ij_properties_key_value_delimiter = equals
ij_properties_spaces_around_key_value_delimiter = false
[{*.yaml,*.yml}]
indent_size = 2
ij_yaml_align_values_properties = do_not_align
ij_yaml_autoinsert_sequence_marker = true
ij_yaml_block_mapping_on_new_line = false
ij_yaml_indent_sequence_value = true
ij_yaml_keep_indents_on_empty_lines = false
ij_yaml_keep_line_breaks = true
ij_yaml_sequence_on_new_line = false
ij_yaml_space_before_colon = false
ij_yaml_spaces_within_braces = true
ij_yaml_spaces_within_brackets = true
================================================
FILE: .gitee/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: QQ 群
url: https://docs.hmcl.net/groups.html
about: Hello Minecraft! Launcher 的官方 QQ 交流群。
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug 反馈 | Bug Report
description:
反馈一个 HMCL 错误。| File a bug report for HMCL.
title: "[Bug] "
labels: bug
body:
- type: markdown
attributes:
value: |
提交前请确认:
* 该问题确实是 **HMCL 的错误**,而**不是 Minecraft 非正常退出**。如果你的 Minecraft 非正常退出,请前往 [QQ 群](https://docs.hmcl.net/groups.html)/[Discord 服务器](https://discord.gg/jVvC7HfM6U) 获取帮助。
* 你的启动器版本是**最新的预览版本**。你可以从 [GitHub Actions](https://github.com/HMCL-dev/HMCL/actions/workflows/gradle.yml?query=branch%3Amain+event%3Apush) 或 [nightly.link](https://nightly.link/HMCL-dev/HMCL/workflows/gradle/main) 下载最新预览版本。
如果你的问题并不属于上述两类,你可以选取另一种 Issue 类型,或者直接前往 [QQ 群](https://docs.hmcl.net/groups.html)/[Discord 服务器](https://discord.gg/jVvC7HfM6U) 获取帮助。
Before submitting, please confirm:
* The issue is indeed **a bug of HMCL**, not **Minecraft abnormal exit**. If your Minecraft exits abnormally, please go to the [QQ group](https://docs.hmcl.net/groups.html) or [Discord server](https://discord.gg/jVvC7HfM6U) for help.
* Your launcher is the **latest nightly build**. You can download the latest nightly build from [GitHub Actions](https://github.com/HMCL-dev/HMCL/actions/workflows/gradle.yml?query=branch%3Amain+event%3Apush) or [nightly.link](https://nightly.link/HMCL-dev/HMCL/workflows/gradle/main).
If your issue does not fall into the above two categories, you can choose another type of issue or directly go to the [QQ group](https://docs.hmcl.net/groups.html) or [Discord server](https://discord.gg/jVvC7HfM6U) for help.
- type: textarea
id: bug-report
attributes:
label: 问题描述 | Bug Description
description: |
请尽可能地详细描述你所遇到的问题,并描述如何重新触发这个问题。
Please describe the bug you met in as much detail as possible. Additionally, describe the steps to reproduce this bug.
placeholder: |
1. 点击 HMCL 上的某个按钮 | Click a button named ...
2. 向下翻页 | Scroll down
3. ...
validations:
required: true
- type: textarea
id: hmcl-crash-report-or-logs
attributes:
label: 启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File
description: |
如果你的启动器崩溃了,请将崩溃报告填入 (或将文件拖入) 下方。
如果你的启动器没有崩溃,请在遇到问题后**不要退出启动器**,在启动器的 “设置 → 通用 → 调试” 一栏中点击 “导出启动器日志”,并将导出的日志拖到下方的输入栏中。
**请注意:启动器崩溃报告或日志文件是诊断问题的重要依据,请务必上传!**
If your launcher crashes, please fill in (or drag the file in) the following input field with the crash report.
If your launcher does not crash, please DO NOT EXIT your launcher, click "Export Launcher Logs" in the "Settings → General → Debug" of the launcher, and drag the exported log to the following input field.
**ATTENTION: The crash report or log file is the key to resolving the bug. Please upload them!**
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: QQ 群 | QQ Group
url: https://docs.hmcl.net/groups.html
about: Hello Minecraft! Launcher 的官方 QQ 交流群。| The official QQ group of Hello Minecraft! Launcher.
- name: Discord 服务器 | Discord Server
url: https://discord.gg/jVvC7HfM6U
about: Hello Minecraft! Launcher 的官方 Discord 服务器。| The official Discord server of Hello Minecraft! Launcher.
- name: 其他反馈 | Others
url: https://github.com/HMCL-dev/HMCL/discussions/new/choose
about: 通过 Discussions 反馈其他问题。| Report other problems in Discussions.
================================================
FILE: .github/ISSUE_TEMPLATE/feature.yml
================================================
name: 新功能 | Feature Request
description: 为 HMCL 提出新功能。| Suggest a new feature or enhancement for HMCL.
title: "[Feature] "
labels: enhancement
body:
- type: markdown
attributes:
value: |
请确认 Issues 列表无重复的项目。
Please make sure that no duplicate issues have already been submitted.
- type: textarea
id: summary
attributes:
label: 概述 | Summary
description: |
请介绍你想加入的新功能。
Please describe the new feature.
validations:
required: true
- type: textarea
id: reason
attributes:
label: 原因 | Reason
description: |
请描述该功能带来的好处及原因。
Please describe why you want to add the feature or enhancement to HMCL.
validations:
required: true
- type: textarea
id: description
attributes:
label: 详情 | Description
description: |
在这里可以补充描述该功能的具体实现方式或建议。(可选)
Describe implementation details or suggestions here. (Optional)
================================================
FILE: .github/workflows/check-codes.yml
================================================
name: Check Codes
on:
push:
paths:
- '**.java'
- '**.properties'
pull_request:
paths:
- '**.java'
- '**.properties'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '17'
java-package: 'jdk+fx'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
with:
cache-cleanup: never
- name: Check Codes
run: ./gradlew checkstyle checkTranslations --no-daemon --parallel --stacktrace
================================================
FILE: .github/workflows/gradle.yml
================================================
name: Java CI
on:
push:
pull_request:
paths-ignore:
- '**.md'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '17'
java-package: 'jdk+fx'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
with:
cache-cleanup: never
- name: Build with Gradle
run: ./gradlew build --no-daemon --parallel
env:
MICROSOFT_AUTH_ID: ${{ secrets.MICROSOFT_AUTH_ID }}
CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }}
- name: Get short SHA
run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV
- name: Upload JAR
uses: actions/upload-artifact@v7
with:
name: HMCL-${{ env.SHORT_SHA }}-jar
path: HMCL/build/libs/HMCL-*.jar
archive: false
- name: Upload EXE
uses: actions/upload-artifact@v7
with:
name: HMCL-${{ env.SHORT_SHA }}-exe
path: HMCL/build/libs/HMCL-*.exe
archive: false
- name: Upload SH
uses: actions/upload-artifact@v7
with:
name: HMCL-${{ env.SHORT_SHA }}-sh
path: HMCL/build/libs/HMCL-*.sh
archive: false
================================================
FILE: .github/workflows/mirror.yml
================================================
name: Mirror Repository
on:
workflow_dispatch:
push:
concurrency:
group: mirror-repository
cancel-in-progress: true
jobs:
mirror:
strategy:
fail-fast: false
matrix:
include:
- name: Gitee
repo: gitee.com/huanghongxun/HMCL
user: 'hmcl-sync'
token: 'GITEE_SYNC_TOKEN'
- name: CNB
repo: cnb.cool/HMCL-dev/HMCL
user: 'cnb'
token: 'CNB_SYNC_TOKEN'
name: Mirror to ${{ matrix.name }}
if: ${{ github.repository == 'HMCL-dev/HMCL' }}
runs-on: ubuntu-latest
steps:
- name: Mirror GitHub to ${{ matrix.name }}
run: |
git clone --mirror "https://github.com/${{ github.repository }}.git" -- repo
cd repo
git push -f --prune "https://${{ matrix.user }}:${{ secrets[matrix.token] }}@${{ matrix.repo }}.git" "refs/heads/*:refs/heads/*" "refs/tags/*:refs/tags/*"
================================================
FILE: .github/workflows/release.yml
================================================
name: Create Release
on:
workflow_dispatch:
# schedule:
# - cron: '30 * * * *'
permissions:
contents: write
jobs:
check-update:
if: ${{ github.repository_owner == 'HMCL-dev' }}
strategy:
fail-fast: false
max-parallel: 1
matrix:
include:
- channel: dev
task: checkUpdateDev
- channel: stable
task: checkUpdateStable
runs-on: ubuntu-latest
name: check-update-${{ matrix.channel }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '25'
- name: Fetch last version
run: ./gradlew ${{ matrix.task }} --no-daemon --info --stacktrace
- name: Check for existing tags
run: if [ -z "$(git tag -l "$HMCL_TAG_NAME")" ]; then echo "continue=true" >> $GITHUB_ENV; fi
- name: Download artifacts
if: ${{ env.continue == 'true' }}
run: |
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.exe"
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.exe.sha256"
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.jar"
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.jar.sha256"
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.sh"
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.sh.sha256"
- name: Verify artifacts
if: ${{ env.continue == 'true' }}
run: |
export JAR_SHA256=$(cat HMCL-$HMCL_VERSION.jar.sha256 | tr -d '\n')
export EXE_SHA256=$(cat HMCL-$HMCL_VERSION.exe.sha256 | tr -d '\n')
export SH_SHA256=$(cat HMCL-$HMCL_VERSION.sh.sha256 | tr -d '\n')
echo "$JAR_SHA256 HMCL-$HMCL_VERSION.jar" | sha256sum -c
echo "$EXE_SHA256 HMCL-$HMCL_VERSION.exe" | sha256sum -c
echo "$SH_SHA256 HMCL-$HMCL_VERSION.sh" | sha256sum -c
- name: Generate release note
if: ${{ env.continue == 'true' }}
run: |
# GitHub Release Note
echo " **[Changelog](https://docs.hmcl.net/changelog/${{ matrix.channel }}.html#HMCL-$HMCL_VERSION)** (Chinese)" >> RELEASE_NOTE
echo "" >> RELEASE_NOTE
echo "| File | SHA-256 Checksum |" >> RELEASE_NOTE
echo "| --- | --- |" >> RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |" >> RELEASE_NOTE
# CNB Release Note
echo "[更新日志](https://docs.hmcl.net/changelog/${{ matrix.channel }}.html#HMCL-$HMCL_VERSION)" >> CNB_RELEASE_NOTE
echo "" >> CNB_RELEASE_NOTE
echo "| 文件 | SHA-256 校验码 |" >> CNB_RELEASE_NOTE
echo "| :--- | --- |" >> CNB_RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.exe]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> CNB_RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.jar]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> CNB_RELEASE_NOTE
echo "| [HMCL-$HMCL_VERSION.sh]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |" >> CNB_RELEASE_NOTE
env:
GH_DOWNLOAD_BASE_URL: https://github.com/${{ github.repository }}/releases/download
CNB_DOWNLOAD_BASE_URL: https://cnb.cool/HMCL-dev/HMCL/-/releases/download
- name: Create GitHub release
if: ${{ env.continue == 'true' }}
run: |
gh release create "${{ env.HMCL_TAG_NAME }}" \
"HMCL-${{ env.HMCL_VERSION }}.exe" \
"HMCL-${{ env.HMCL_VERSION }}.jar" \
"HMCL-${{ env.HMCL_VERSION }}.sh" \
--target "${{ env.HMCL_COMMIT_SHA }}" \
--title "${{ env.HMCL_TAG_NAME }}" \
--notes-file RELEASE_NOTE \
--prerelease
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install git-cnb
if: ${{ env.continue == 'true' }}
run: go install "cnb.cool/looc/git-cnb@$GIT_CNB_VERSION"
env:
GIT_CNB_VERSION: '1.1.2'
- name: Create CNB release
if: ${{ env.continue == 'true' }}
run: |
echo "Uploading tags to CNB"
git fetch --tags
git push "https://cnb:${{ secrets.CNB_SYNC_TOKEN }}@cnb.cool/$CNB_REPO.git" "$HMCL_TAG_NAME"
echo "Creating CNB release"
~/go/bin/git-cnb release create \
--repo "$CNB_REPO" \
--tag "$HMCL_TAG_NAME" \
--name "HMCL $HMCL_VERSION" \
--body "$(cat CNB_RELEASE_NOTE)" \
--prerelease true
echo "Uploading HMCL-$HMCL_VERSION.jar"
~/go/bin/git-cnb release asset-upload --repo="$CNB_REPO" --tag-name "$HMCL_TAG_NAME" --file-name "HMCL-$HMCL_VERSION.jar"
echo "Uploading HMCL-$HMCL_VERSION.exe"
~/go/bin/git-cnb release asset-upload --repo="$CNB_REPO" --tag-name "$HMCL_TAG_NAME" --file-name "HMCL-$HMCL_VERSION.exe"
echo "Uploading HMCL-$HMCL_VERSION.sh"
~/go/bin/git-cnb release asset-upload --repo="$CNB_REPO" --tag-name "$HMCL_TAG_NAME" --file-name "HMCL-$HMCL_VERSION.sh"
env:
CNB_TOKEN: ${{ secrets.CNB_SYNC_TOKEN }}
CNB_REPO: HMCL-dev/HMCL
================================================
FILE: .gitignore
================================================
*.class
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*.hprof
.gradle
*.lck
*.1
*.2
*.log
.mine*
/externalgames
NVIDIA
minecraft-exported-crash-info*
hmcl-exported-logs-*
terracotta-log-*
/.java/
/.local/
/.cache/
# IANA Language Subtag Registry
language-subtag-registry
# gradle build
/build/
/HMCL/build/
/HMCLCore/build/
/HMCLBoot/build/
/minecraft/libraries/HMCLTransformerDiscoveryService/build/
/minecraft/libraries/HMCLMultiMCBootstrap/build/
/buildSrc/build/
# idea
.idea
/out/
/HMCL/out/
/HMCLCore/out/
/minecraft/libraries/HMCLTransformerDiscoveryService/out/
/minecraft/libraries/HMCLMultiMCBootstrap/out/
# eclipse
/bin/
/HMCL/bin/
/HMCLCore/bin/
/minecraft/libraries/HMCLTransformerDiscoveryService/bin/
/minecraft/libraries/HMCLMultiMCBootstrap/bin/
.classpath
.project
.settings
# netbeans
.nb-gradle
*.exe
# macos
.DS_Store
# vscode
.vscode/
# test
/hmcl.json
/.hmcl.json
/.hmcl/
================================================
FILE: HMCL/.gitignore
================================================
/data.csv
/data.json
/mod.json
/modpack.json
================================================
FILE: HMCL/build.gradle.kts
================================================
import org.jackhuang.hmcl.gradle.TerracottaConfigUpgradeTask
import org.jackhuang.hmcl.gradle.ci.GitHubActionUtils
import org.jackhuang.hmcl.gradle.ci.JenkinsUtils
import org.jackhuang.hmcl.gradle.l10n.CheckTranslations
import org.jackhuang.hmcl.gradle.l10n.CreateLanguageList
import org.jackhuang.hmcl.gradle.l10n.CreateLocaleNamesResourceBundle
import org.jackhuang.hmcl.gradle.l10n.UpsideDownTranslate
import org.jackhuang.hmcl.gradle.mod.ParseModDataTask
import org.jackhuang.hmcl.gradle.utils.PropertiesUtils
import java.net.URI
import java.nio.file.FileSystems
import java.nio.file.Files
import java.security.KeyFactory
import java.security.MessageDigest
import java.security.Signature
import java.security.spec.PKCS8EncodedKeySpec
import java.util.zip.ZipFile
plugins {
alias(libs.plugins.shadow)
}
val projectConfig = PropertiesUtils.load(rootProject.file("config/project.properties").toPath())
val isOfficial = JenkinsUtils.IS_ON_CI || GitHubActionUtils.IS_ON_OFFICIAL_REPO
val versionType = System.getenv("VERSION_TYPE") ?: if (isOfficial) "nightly" else "unofficial"
val versionRoot = System.getenv("VERSION_ROOT") ?: projectConfig.getProperty("versionRoot") ?: "3"
val microsoftAuthId = System.getenv("MICROSOFT_AUTH_ID") ?: ""
val curseForgeApiKey = System.getenv("CURSEFORGE_API_KEY") ?: ""
val launcherExe = System.getenv("HMCL_LAUNCHER_EXE") ?: ""
val buildNumber = System.getenv("BUILD_NUMBER")?.toInt()
if (buildNumber != null) {
version = if (JenkinsUtils.IS_ON_CI && versionType == "dev") {
"$versionRoot.0.$buildNumber"
} else {
"$versionRoot.$buildNumber"
}
} else {
val shortCommit = System.getenv("GITHUB_SHA")?.lowercase()?.substring(0, 7)
version = if (shortCommit.isNullOrBlank()) {
"$versionRoot.SNAPSHOT"
} else if (isOfficial) {
"$versionRoot.dev-$shortCommit"
} else {
"$versionRoot.unofficial-$shortCommit"
}
}
val embedResources by configurations.registering
dependencies {
implementation(project(":HMCLCore"))
implementation(project(":HMCLBoot"))
implementation("libs:JFoenix")
implementation(libs.twelvemonkeys.imageio.webp)
implementation(libs.java.info)
implementation(libs.monet.fx)
implementation(libs.nayuki.qrcodegen)
if (launcherExe.isBlank()) {
implementation(libs.hmclauncher)
}
embedResources(libs.authlib.injector)
}
fun digest(algorithm: String, bytes: ByteArray): ByteArray = MessageDigest.getInstance(algorithm).digest(bytes)
fun createChecksum(file: File) {
val algorithms = linkedMapOf(
"SHA-1" to "sha1",
"SHA-256" to "sha256",
"SHA-512" to "sha512"
)
algorithms.forEach { (algorithm, ext) ->
File(file.parentFile, "${file.name}.$ext").writeText(
digest(algorithm, file.readBytes()).joinToString(separator = "", postfix = "\n") { "%02x".format(it) }
)
}
}
fun attachSignature(jar: File) {
val keyLocation = System.getenv("HMCL_SIGNATURE_KEY")
if (keyLocation == null) {
logger.warn("Missing signature key")
return
}
val privatekey = KeyFactory.getInstance("RSA").generatePrivate(PKCS8EncodedKeySpec(File(keyLocation).readBytes()))
val signer = Signature.getInstance("SHA512withRSA")
signer.initSign(privatekey)
ZipFile(jar).use { zip ->
zip.stream()
.sorted(Comparator.comparing { it.name })
.filter { it.name != "META-INF/hmcl_signature" }
.forEach {
signer.update(digest("SHA-512", it.name.toByteArray()))
signer.update(digest("SHA-512", zip.getInputStream(it).readBytes()))
}
}
val signature = signer.sign()
FileSystems.newFileSystem(URI.create("jar:" + jar.toURI()), emptyMap<String, Any>()).use { zipfs ->
Files.newOutputStream(zipfs.getPath("META-INF/hmcl_signature")).use { it.write(signature) }
}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "17"
targetCompatibility = "17"
}
tasks.checkstyleMain {
// Third-party code is not checked
exclude("**/org/jackhuang/hmcl/ui/image/apng/**")
}
val addOpens = listOf(
"java.base/java.lang",
"java.base/java.lang.reflect",
"java.base/jdk.internal.loader",
"javafx.base/com.sun.javafx.binding",
"javafx.base/com.sun.javafx.event",
"javafx.base/com.sun.javafx.runtime",
"javafx.base/javafx.beans.property",
"javafx.graphics/javafx.css",
"javafx.graphics/javafx.stage",
"javafx.graphics/javafx.scene",
"javafx.graphics/com.sun.glass.ui",
"javafx.graphics/com.sun.javafx.stage",
"javafx.graphics/com.sun.javafx.util",
"javafx.graphics/com.sun.prism",
"javafx.controls/com.sun.javafx.scene.control",
"javafx.controls/com.sun.javafx.scene.control.behavior",
"javafx.graphics/com.sun.javafx.tk.quantum",
"javafx.controls/javafx.scene.control.skin",
"jdk.attach/sun.tools.attach",
)
tasks.compileJava {
options.compilerArgs.addAll(addOpens.map { "--add-exports=$it=ALL-UNNAMED" })
}
val hmclProperties = buildList {
add("hmcl.version" to project.version.toString())
add("hmcl.add-opens" to addOpens.joinToString(" "))
System.getenv("GITHUB_SHA")?.let {
add("hmcl.version.hash" to it)
}
add("hmcl.version.type" to versionType)
add("hmcl.microsoft.auth.id" to microsoftAuthId)
add("hmcl.curseforge.apikey" to curseForgeApiKey)
add("hmcl.authlib-injector.version" to libs.authlib.injector.get().version!!)
}
val hmclPropertiesFile = layout.buildDirectory.file("hmcl.properties")
val createPropertiesFile by tasks.registering {
outputs.file(hmclPropertiesFile)
hmclProperties.forEach { (k, v) -> inputs.property(k, v) }
doLast {
val targetFile = hmclPropertiesFile.get().asFile
targetFile.parentFile.mkdir()
targetFile.bufferedWriter().use {
for ((k, v) in hmclProperties) {
it.write("$k=$v\n")
}
}
}
}
tasks.jar {
enabled = false
dependsOn(tasks["shadowJar"])
}
val jarPath = tasks.jar.get().archiveFile.get().asFile
tasks.shadowJar {
dependsOn(createPropertiesFile)
archiveClassifier.set(null as String?)
exclude("**/package-info.class")
exclude("META-INF/maven/**")
exclude("META-INF/services/javax.imageio.spi.ImageReaderSpi")
exclude("META-INF/services/javax.imageio.spi.ImageInputStreamSpi")
listOf(
"aix-*", "sunos-*", "openbsd-*", "dragonflybsd-*", "freebsd-*", "linux-*", "darwin-*",
"*-ppc", "*-ppc64le", "*-s390x", "*-armel",
).forEach { exclude("com/sun/jna/$it/**") }
minimize {
exclude(dependency("com.google.code.gson:.*:.*"))
exclude(dependency("net.java.dev.jna:jna:.*"))
exclude(dependency("libs:JFoenix:.*"))
exclude(project(":HMCLBoot"))
}
manifest.attributes(
"Created-By" to "Copyright(c) 2013-2025 huangyuhui.",
"Implementation-Version" to project.version.toString(),
"Main-Class" to "org.jackhuang.hmcl.Main",
"Multi-Release" to "true",
"Add-Opens" to addOpens.joinToString(" "),
"Enable-Native-Access" to "ALL-UNNAMED",
"Enable-Final-Field-Mutation" to "ALL-UNNAMED",
)
if (launcherExe.isNotBlank()) {
into("assets") {
from(file(launcherExe))
}
}
doLast {
attachSignature(jarPath)
createChecksum(jarPath)
}
}
tasks.processResources {
dependsOn(createPropertiesFile)
dependsOn(upsideDownTranslate)
dependsOn(createLocaleNamesResourceBundle)
dependsOn(createLanguageList)
into("assets/") {
from(hmclPropertiesFile)
from(embedResources)
}
into("assets/lang") {
from(createLanguageList.map { it.outputFile })
from(upsideDownTranslate.map { it.outputFile })
from(createLocaleNamesResourceBundle.map { it.outputDirectory })
}
inputs.property("terracotta_version", libs.versions.terracotta)
doLast {
upgradeTerracottaConfig.get().checkValid()
}
}
val makeExecutables by tasks.registering {
val extensions = listOf("exe", "sh")
dependsOn(tasks.jar)
inputs.file(jarPath)
outputs.files(extensions.map { File(jarPath.parentFile, jarPath.nameWithoutExtension + '.' + it) })
doLast {
val jarContent = jarPath.readBytes()
ZipFile(jarPath).use { zipFile ->
for (extension in extensions) {
val output = File(jarPath.parentFile, jarPath.nameWithoutExtension + '.' + extension)
val entry = zipFile.getEntry("assets/HMCLauncher.$extension")
?: throw GradleException("HMCLauncher.$extension not found")
output.outputStream().use { outputStream ->
zipFile.getInputStream(entry).use { it.copyTo(outputStream) }
outputStream.write(jarContent)
}
createChecksum(output)
}
}
}
}
tasks.build {
dependsOn(makeExecutables)
}
fun parseToolOptions(options: String?): MutableList<String> {
if (options == null)
return mutableListOf()
val builder = StringBuilder()
val result = mutableListOf<String>()
var offset = 0
loop@ while (offset < options.length) {
val ch = options[offset]
if (Character.isWhitespace(ch)) {
if (builder.isNotEmpty()) {
result += builder.toString()
builder.clear()
}
while (offset < options.length && Character.isWhitespace(options[offset])) {
offset++
}
continue@loop
}
if (ch == '\'' || ch == '"') {
offset++
while (offset < options.length) {
val ch2 = options[offset++]
if (ch2 != ch) {
builder.append(ch2)
} else {
continue@loop
}
}
throw GradleException("Unmatched quote in $options")
}
builder.append(ch)
offset++
}
if (builder.isNotEmpty()) {
result += builder.toString()
}
return result
}
// For IntelliJ IDEA
tasks.withType<JavaExec> {
if (name != "run") {
jvmArgs(addOpens.map { "--add-opens=$it=ALL-UNNAMED" })
// if (javaVersion >= JavaVersion.VERSION_24) {
// jvmArgs("--enable-native-access=ALL-UNNAMED")
// }
}
}
tasks.register<JavaExec>("run") {
dependsOn(tasks.jar)
group = "application"
classpath = files(jarPath)
workingDir = rootProject.rootDir
val vmOptions = parseToolOptions(System.getenv("HMCL_JAVA_OPTS") ?: "-Xmx1g")
if (vmOptions.none { it.startsWith("-Dhmcl.offline.auth.restricted=") })
vmOptions += "-Dhmcl.offline.auth.restricted=false"
jvmArgs(vmOptions)
val hmclJavaHome = System.getenv("HMCL_JAVA_HOME")
if (hmclJavaHome != null) {
this.executable(
file(hmclJavaHome).resolve("bin")
.resolve(if (System.getProperty("os.name").lowercase().startsWith("windows")) "java.exe" else "java")
)
}
doFirst {
logger.quiet("HMCL_JAVA_OPTS: {}", vmOptions)
logger.quiet("HMCL_JAVA_HOME: {}", hmclJavaHome ?: System.getProperty("java.home"))
}
}
// terracotta
val upgradeTerracottaConfig = tasks.register<TerracottaConfigUpgradeTask>("upgradeTerracottaConfig") {
val destination = layout.projectDirectory.file("src/main/resources/assets/terracotta.json")
val source = layout.projectDirectory.file("terracotta-template.json");
classifiers.set(listOf(
"windows-x86_64", "windows-arm64",
"macos-x86_64", "macos-arm64",
"linux-x86_64", "linux-arm64", "linux-loongarch64", "linux-riscv64",
"freebsd-x86_64"
))
version.set(libs.versions.terracotta)
downloadURL.set($$"https://github.com/burningtnt/Terracotta/releases/download/v${version}/terracotta-${version}-${classifier}-pkg.tar.gz")
templateFile.set(source)
outputFile.set(destination)
}
// Check Translations
tasks.register<CheckTranslations>("checkTranslations") {
val dir = layout.projectDirectory.dir("src/main/resources/assets/lang")
englishFile.set(dir.file("I18N.properties"))
simplifiedChineseFile.set(dir.file("I18N_zh_CN.properties"))
traditionalChineseFile.set(dir.file("I18N_zh.properties"))
classicalChineseFile.set(dir.file("I18N_lzh.properties"))
}
// l10n
val generatedDir = layout.buildDirectory.dir("generated")
val upsideDownTranslate by tasks.registering(UpsideDownTranslate::class) {
inputFile.set(layout.projectDirectory.file("src/main/resources/assets/lang/I18N.properties"))
outputFile.set(generatedDir.map { it.file("generated/i18n/I18N_en_Qabs.properties") })
}
val createLanguageList by tasks.registering(CreateLanguageList::class) {
resourceBundleDir.set(layout.projectDirectory.dir("src/main/resources/assets/lang"))
resourceBundleBaseName.set("I18N")
additionalLanguages.set(listOf("en-Qabs"))
outputFile.set(generatedDir.map { it.file("languages.json") })
}
val createLocaleNamesResourceBundle by tasks.registering(CreateLocaleNamesResourceBundle::class) {
dependsOn(createLanguageList)
languagesFile.set(createLanguageList.flatMap { it.outputFile })
outputDirectory.set(generatedDir.map { it.dir("generated/LocaleNames") })
}
// mcmod data
tasks.register<ParseModDataTask>("parseModData") {
inputFile.set(layout.projectDirectory.file("mod.json"))
outputFile.set(layout.projectDirectory.file("src/main/resources/assets/mod_data.txt"))
}
tasks.register<ParseModDataTask>("parseModPackData") {
inputFile.set(layout.projectDirectory.file("modpack.json"))
outputFile.set(layout.projectDirectory.file("src/main/resources/assets/modpack_data.txt"))
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXButton.java
================================================
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.jfoenix.controls;
import com.jfoenix.converters.ButtonTypeConverter;
import com.jfoenix.skins.JFXButtonSkin;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.css.CssMetaData;
import javafx.css.SimpleStyleableObjectProperty;
import javafx.css.Styleable;
import javafx.css.StyleableObjectProperty;
import javafx.css.StyleableProperty;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.control.Labeled;
import javafx.scene.control.Skin;
import javafx.scene.paint.Paint;
public class JFXButton extends Button {
private static final String DEFAULT_STYLE_CLASS = "jfx-button";
private List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
public JFXButton() {
this.initialize();
}
public JFXButton(String text) {
super(text);
this.initialize();
}
public JFXButton(String text, Node graphic) {
super(text, graphic);
this.initialize();
}
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
protected Skin<?> createDefaultSkin() {
return new JFXButtonSkin(this);
}
private final ObjectProperty<Paint> ripplerFill = new SimpleObjectProperty<>(this, "ripplerFill", null);
public final ObjectProperty<Paint> ripplerFillProperty() {
return this.ripplerFill;
}
public final Paint getRipplerFill() {
return this.ripplerFillProperty().get();
}
public final void setRipplerFill(Paint ripplerFill) {
this.ripplerFillProperty().set(ripplerFill);
}
private final StyleableObjectProperty<ButtonType> buttonType = new SimpleStyleableObjectProperty<>(
JFXButton.StyleableProperties.BUTTON_TYPE, this, "buttonType", JFXButton.ButtonType.FLAT);
public ButtonType getButtonType() {
return this.buttonType == null ? JFXButton.ButtonType.FLAT : this.buttonType.get();
}
public StyleableObjectProperty<ButtonType> buttonTypeProperty() {
return this.buttonType;
}
public void setButtonType(ButtonType type) {
this.buttonType.set(type);
}
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
if (this.STYLEABLES == null) {
List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Control.getClassCssMetaData());
styleables.addAll(getClassCssMetaData());
styleables.addAll(Labeled.getClassCssMetaData());
this.STYLEABLES = List.copyOf(styleables);
}
return this.STYLEABLES;
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return JFXButton.StyleableProperties.CHILD_STYLEABLES;
}
protected void layoutChildren() {
super.layoutChildren();
this.setNeedsLayout(false);
}
public enum ButtonType {
FLAT,
RAISED;
}
private static final class StyleableProperties {
private static final CssMetaData<JFXButton, ButtonType> BUTTON_TYPE;
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
BUTTON_TYPE = new CssMetaData<>("-jfx-button-type", ButtonTypeConverter.getInstance(), JFXButton.ButtonType.FLAT) {
public boolean isSettable(JFXButton control) {
return control.buttonType == null || !control.buttonType.isBound();
}
public StyleableProperty<ButtonType> getStyleableProperty(JFXButton control) {
return control.buttonTypeProperty();
}
};
List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Control.getClassCssMetaData());
Collections.addAll(styleables, BUTTON_TYPE);
CHILD_STYLEABLES = List.copyOf(styleables);
}
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXCheckBox.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXCheckBoxSkin;
import javafx.css.*;
import javafx.css.converter.PaintConverter;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Skin;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/// JFXCheckBox is the material design implementation of a checkbox.
/// it shows ripple effect and a custom selection animation.
///
/// @author Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
public class JFXCheckBox extends CheckBox {
public JFXCheckBox(String text) {
super(text);
initialize();
}
public JFXCheckBox() {
initialize();
}
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
@Override
protected Skin<?> createDefaultSkin() {
return new JFXCheckBoxSkin(this);
}
/***************************************************************************
* *
* Stylesheet Handling *
* *
**************************************************************************/
/// Initialize the style class to 'jfx-check-box'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-check-box";
/// checkbox color property when selected
private StyleableObjectProperty<Paint> checkedColor;
private static final Color DEFAULT_CHECKED_COLOR = Color.valueOf("#0F9D58");
public StyleableObjectProperty<Paint> checkedColorProperty() {
if (checkedColor == null) {
checkedColor = new SimpleStyleableObjectProperty<>(StyleableProperties.CHECKED_COLOR,
JFXCheckBox.this,
"checkedColor",
DEFAULT_CHECKED_COLOR);
}
return this.checkedColor;
}
public Paint getCheckedColor() {
return checkedColor == null ? DEFAULT_CHECKED_COLOR : checkedColor.get();
}
public void setCheckedColor(Paint color) {
this.checkedColor.set(color);
}
/**
* checkbox color property when not selected
*/
private StyleableObjectProperty<Paint> unCheckedColor;
private static final Color DEFAULT_UNCHECKED_COLOR = Color.valueOf("#5A5A5A");
public StyleableObjectProperty<Paint> unCheckedColorProperty() {
if (unCheckedColor == null) {
unCheckedColor = new SimpleStyleableObjectProperty<>(StyleableProperties.UNCHECKED_COLOR,
JFXCheckBox.this,
"unCheckedColor",
DEFAULT_UNCHECKED_COLOR);
}
return this.unCheckedColor;
}
public Paint getUnCheckedColor() {
return unCheckedColor == null ? DEFAULT_UNCHECKED_COLOR : unCheckedColor.get();
}
public void setUnCheckedColor(Paint color) {
this.unCheckedColor.set(color);
}
private static final class StyleableProperties {
private static final CssMetaData<JFXCheckBox, Paint> CHECKED_COLOR =
new CssMetaData<>("-jfx-checked-color",
PaintConverter.getInstance(), DEFAULT_CHECKED_COLOR) {
@Override
public boolean isSettable(JFXCheckBox control) {
return control.checkedColor == null || !control.checkedColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXCheckBox control) {
return control.checkedColorProperty();
}
};
private static final CssMetaData<JFXCheckBox, Paint> UNCHECKED_COLOR =
new CssMetaData<>("-jfx-unchecked-color",
PaintConverter.getInstance(), DEFAULT_UNCHECKED_COLOR) {
@Override
public boolean isSettable(JFXCheckBox control) {
return control.unCheckedColor == null || !control.unCheckedColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXCheckBox control) {
return control.unCheckedColorProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables =
new ArrayList<>(CheckBox.getClassCssMetaData());
Collections.addAll(styleables,
CHECKED_COLOR,
UNCHECKED_COLOR
);
CHILD_STYLEABLES = List.copyOf(styleables);
}
}
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
return getClassCssMetaData();
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXClippedPane.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.utils.JFXNodeUtils;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
/**
* JFXClippedPane is a StackPane that clips its content if exceeding the pane bounds.
*
* @author Shadi Shaheen
* @version 1.0
* @since 2018-06-02
*/
public class JFXClippedPane extends StackPane {
private final Region clip = new Region();
public JFXClippedPane() {
super();
init();
}
public JFXClippedPane(Node... children) {
super(children);
init();
}
private void init() {
setClip(clip);
clip.setBackground(new Background(new BackgroundFill(Color.BLACK, new CornerRadii(2), Insets.EMPTY)));
backgroundProperty().addListener(observable -> JFXNodeUtils.updateBackground(getBackground(), clip));
}
@Override
protected void layoutChildren() {
super.layoutChildren();
clip.resizeRelocate(0, 0, getWidth(), getHeight());
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXColorPicker.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXColorPickerSkin;
import javafx.css.CssMetaData;
import javafx.css.SimpleStyleableBooleanProperty;
import javafx.css.Styleable;
import javafx.css.StyleableBooleanProperty;
import javafx.css.converter.BooleanConverter;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Skin;
import javafx.scene.paint.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* JFXColorPicker is the metrial design implementation of color picker.
*
* @author Shadi Shaheen
* @version 1.0
* @since 2016-03-09
*/
public class JFXColorPicker extends ColorPicker {
/**
* {@inheritDoc}
*/
public JFXColorPicker() {
initialize();
}
/**
* {@inheritDoc}
*/
public JFXColorPicker(Color color) {
super(color);
initialize();
}
/**
* {@inheritDoc}
*/
@Override
protected Skin<?> createDefaultSkin() {
return new JFXColorPickerSkin(this);
}
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
/**
* Initialize the style class to 'jfx-color-picker'.
* <p>
* This is the selector class from which CSS can be used to style
* this control.
*/
private static final String DEFAULT_STYLE_CLASS = "jfx-color-picker";
private double[] preDefinedColors = null;
public double[] getPreDefinedColors() {
return preDefinedColors;
}
public void setPreDefinedColors(double[] preDefinedColors) {
this.preDefinedColors = preDefinedColors;
}
/**
* disable animation on button action
*/
private final StyleableBooleanProperty disableAnimation = new SimpleStyleableBooleanProperty(StyleableProperties.DISABLE_ANIMATION,
JFXColorPicker.this,
"disableAnimation",
false);
public final StyleableBooleanProperty disableAnimationProperty() {
return this.disableAnimation;
}
public final Boolean isDisableAnimation() {
return disableAnimation != null && this.disableAnimationProperty().get();
}
public final void setDisableAnimation(final Boolean disabled) {
this.disableAnimationProperty().set(disabled);
}
private static final class StyleableProperties {
private static final CssMetaData<JFXColorPicker, Boolean> DISABLE_ANIMATION =
new CssMetaData<JFXColorPicker, Boolean>("-jfx-disable-animation",
BooleanConverter.getInstance(), false) {
@Override
public boolean isSettable(JFXColorPicker control) {
return control.disableAnimation == null || !control.disableAnimation.isBound();
}
@Override
public StyleableBooleanProperty getStyleableProperty(JFXColorPicker control) {
return control.disableAnimationProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables =
new ArrayList<>(ColorPicker.getClassCssMetaData());
Collections.addAll(styleables, DISABLE_ANIMATION);
CHILD_STYLEABLES = Collections.unmodifiableList(styleables);
}
}
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
return getClassCssMetaData();
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXComboBox.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.converters.base.NodeConverter;
import com.jfoenix.skins.JFXComboBoxListViewSkin;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.ObservableList;
import javafx.css.*;
import javafx.css.converter.BooleanConverter;
import javafx.css.converter.PaintConverter;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.util.StringConverter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.jackhuang.hmcl.ui.FXUtils.useJFXContextMenu;
/**
* JFXComboBox is the material design implementation of a combobox.
*
* @author Shadi Shaheen
* @version 1.0
* @since 2016-03-09
*/
public class JFXComboBox<T> extends ComboBox<T> {
/**
* {@inheritDoc}
*/
public JFXComboBox() {
initialize();
}
/**
* {@inheritDoc}
*/
public JFXComboBox(ObservableList<T> items) {
super(items);
initialize();
}
private void initialize() {
getStyleClass().add(DEFAULT_STYLE_CLASS);
this.setCellFactory(listView -> new JFXListCell<T>() {
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
updateDisplayText(this, item, empty);
}
});
// had to refactor the code out of the skin class to allow
// customization of the button cell
this.setButtonCell(new ListCell<T>() {
{
// fixed clearing the combo box value is causing
// java prompt text to be shown because the button cell is not updated
JFXComboBox.this.valueProperty().addListener(observable -> {
if (JFXComboBox.this.getValue() == null) {
updateItem(null, true);
}
});
}
@Override
protected void updateItem(T item, boolean empty) {
updateDisplayText(this, item, empty);
this.setVisible(item != null || !empty);
}
});
useJFXContextMenu(editorProperty().get());
}
/**
* {@inheritDoc}
*/
@Override
protected Skin<?> createDefaultSkin() {
return new JFXComboBoxListViewSkin<T>(this);
}
/**
* Initialize the style class to 'jfx-combo-box'.
* <p>
* This is the selector class from which CSS can be used to style
* this control.
*/
private static final String DEFAULT_STYLE_CLASS = "jfx-combo-box";
/***************************************************************************
* *
* Node Converter Property *
* *
**************************************************************************/
/**
* Converts the user-typed input (when the ComboBox is
* {@link #editableProperty() editable}) to an object of type T, such that
* the input may be retrieved via the {@link #valueProperty() value} property.
*/
public ObjectProperty<NodeConverter<T>> nodeConverterProperty() {
return nodeConverter;
}
private ObjectProperty<NodeConverter<T>> nodeConverter = new SimpleObjectProperty<>(this, "nodeConverter",
JFXComboBox.<T>defaultNodeConverter());
public final void setNodeConverter(NodeConverter<T> value) {
nodeConverterProperty().set(value);
}
public final NodeConverter<T> getNodeConverter() {
return nodeConverterProperty().get();
}
private static <T> NodeConverter<T> defaultNodeConverter() {
return new NodeConverter<T>() {
@Override
public Node toNode(T object) {
if (object == null) {
return null;
}
StackPane selectedValueContainer = new StackPane();
selectedValueContainer.getStyleClass().add("combo-box-selected-value-container");
selectedValueContainer.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, null, null)));
Label selectedValueLabel = object instanceof Label ? new Label(((Label) object).getText()) : new Label(
object.toString());
selectedValueLabel.setTextFill(Color.BLACK);
selectedValueContainer.getChildren().add(selectedValueLabel);
StackPane.setAlignment(selectedValueLabel, Pos.CENTER_LEFT);
StackPane.setMargin(selectedValueLabel, new Insets(0, 0, 0, 5));
return selectedValueContainer;
}
@SuppressWarnings("unchecked")
@Override
public T fromNode(Node node) {
return (T) node;
}
@Override
public String toString(T object) {
if (object == null) {
return null;
}
if (object instanceof Label) {
return ((Label) object).getText();
}
return object.toString();
}
};
}
private boolean updateDisplayText(ListCell<T> cell, T item, boolean empty) {
if (empty) {
// create empty cell
if (cell == null) {
return true;
}
cell.setGraphic(null);
cell.setText(null);
return true;
} else if (item instanceof Node) {
Node currentNode = cell.getGraphic();
Node newNode = (Node) item;
// create a node from the selected node of the listview
// using JFXComboBox {@link #nodeConverterProperty() NodeConverter})
NodeConverter<T> nc = this.getNodeConverter();
Node node = nc == null ? null : nc.toNode(item);
if (currentNode == null || !currentNode.equals(newNode)) {
cell.setText(null);
cell.setGraphic(node == null ? newNode : node);
}
return node == null;
} else {
// run item through StringConverter if it isn't null
StringConverter<T> c = this.getConverter();
String s = item == null ? this.getPromptText() : (c == null ? item.toString() : c.toString(item));
cell.setText(s);
cell.setGraphic(null);
return s == null || s.isEmpty();
}
}
/***************************************************************************
* *
* styleable Properties *
* *
**************************************************************************/
/**
* set true to show a float the prompt text when focusing the field
*/
private StyleableBooleanProperty labelFloat = new SimpleStyleableBooleanProperty(StyleableProperties.LABEL_FLOAT,
JFXComboBox.this,
"lableFloat",
false);
public final StyleableBooleanProperty labelFloatProperty() {
return this.labelFloat;
}
public final boolean isLabelFloat() {
return this.labelFloatProperty().get();
}
public final void setLabelFloat(final boolean labelFloat) {
this.labelFloatProperty().set(labelFloat);
}
/**
* default color used when the field is unfocused
*/
private StyleableObjectProperty<Paint> unFocusColor = new SimpleStyleableObjectProperty<>(StyleableProperties.UNFOCUS_COLOR,
JFXComboBox.this,
"unFocusColor",
Color.rgb(77,
77,
77));
public Paint getUnFocusColor() {
return unFocusColor == null ? Color.rgb(77, 77, 77) : unFocusColor.get();
}
public StyleableObjectProperty<Paint> unFocusColorProperty() {
return this.unFocusColor;
}
public void setUnFocusColor(Paint color) {
this.unFocusColor.set(color);
}
/**
* default color used when the field is focused
*/
private StyleableObjectProperty<Paint> focusColor = new SimpleStyleableObjectProperty<>(StyleableProperties.FOCUS_COLOR,
JFXComboBox.this,
"focusColor",
Color.valueOf("#4059A9"));
public Paint getFocusColor() {
return focusColor == null ? Color.valueOf("#4059A9") : focusColor.get();
}
public StyleableObjectProperty<Paint> focusColorProperty() {
return this.focusColor;
}
public void setFocusColor(Paint color) {
this.focusColor.set(color);
}
private final static class StyleableProperties {
private static final CssMetaData<JFXComboBox<?>, Paint> UNFOCUS_COLOR = new CssMetaData<JFXComboBox<?>, Paint>(
"-jfx-unfocus-color",
PaintConverter.getInstance(),
Color.valueOf("#A6A6A6")) {
@Override
public boolean isSettable(JFXComboBox<?> control) {
return control.unFocusColor == null || !control.unFocusColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXComboBox<?> control) {
return control.unFocusColorProperty();
}
};
private static final CssMetaData<JFXComboBox<?>, Paint> FOCUS_COLOR = new CssMetaData<JFXComboBox<?>, Paint>(
"-jfx-focus-color",
PaintConverter.getInstance(),
Color.valueOf("#3f51b5")) {
@Override
public boolean isSettable(JFXComboBox<?> control) {
return control.focusColor == null || !control.focusColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXComboBox<?> control) {
return control.focusColorProperty();
}
};
private static final CssMetaData<JFXComboBox<?>, Boolean> LABEL_FLOAT = new CssMetaData<JFXComboBox<?>, Boolean>(
"-jfx-label-float",
BooleanConverter.getInstance(),
false) {
@Override
public boolean isSettable(JFXComboBox<?> control) {
return control.labelFloat == null || !control.labelFloat.isBound();
}
@Override
public StyleableBooleanProperty getStyleableProperty(JFXComboBox<?> control) {
return control.labelFloatProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(
Control.getClassCssMetaData());
Collections.addAll(styleables, UNFOCUS_COLOR, FOCUS_COLOR, LABEL_FLOAT);
CHILD_STYLEABLES = Collections.unmodifiableList(styleables);
}
}
// inherit the styleable properties from parent
private List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
if (STYLEABLES == null) {
final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(
Control.getClassCssMetaData());
styleables.addAll(getClassCssMetaData());
styleables.addAll(Control.getClassCssMetaData());
STYLEABLES = Collections.unmodifiableList(styleables);
}
return STYLEABLES;
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXDialog.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.controls.events.JFXDialogEvent;
import com.jfoenix.converters.DialogTransitionConverter;
import com.jfoenix.effects.JFXDepthManager;
import com.jfoenix.transitions.CachedTransition;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.animation.Transition;
import javafx.beans.DefaultProperty;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ObjectPropertyBase;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.css.CssMetaData;
import javafx.css.SimpleStyleableObjectProperty;
import javafx.css.Styleable;
import javafx.css.StyleableObjectProperty;
import javafx.css.StyleableProperty;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.CacheHint;
import javafx.scene.Node;
import javafx.scene.SnapshotParameters;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.util.Duration;
import org.jackhuang.hmcl.ui.animation.Motion;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/// Note: for JFXDialog to work properly, the root node **MUST**
/// be of type [StackPane]
///
/// @author Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
@DefaultProperty(value = "content")
public class JFXDialog extends StackPane {
private static final double INITIAL_SCALE = 0.8;
// public static enum JFXDialogLayout{PLAIN, HEADING, ACTIONS, BACKDROP};
public enum DialogTransition {
CENTER, NONE
}
private StackPane contentHolder;
private double offsetX = 0;
private double offsetY = 0;
private StackPane dialogContainer;
private Region content;
private Transition animation;
private final EventHandler<? super MouseEvent> closeHandler = e -> close();
/// creates empty JFXDialog control with CENTER animation type
public JFXDialog() {
this(null, null, DialogTransition.CENTER);
}
/// creates empty JFXDialog control with a specified animation type
public JFXDialog(DialogTransition transition) {
this(null, null, transition);
}
/// creates JFXDialog control with a specified animation type, the animation type
/// can be one of the following:
///
/// - CENTER
/// - TOP
/// - RIGHT
/// - BOTTOM
/// - LEFT
///
/// @param dialogContainer is the parent of the dialog, it
/// @param content the content of dialog
/// @param transitionType the animation type
public JFXDialog(StackPane dialogContainer, Region content, DialogTransition transitionType) {
initialize();
setContent(content);
setDialogContainer(dialogContainer);
this.transitionType.set(transitionType);
// init change listeners
initChangeListeners();
}
/// creates JFXDialog control with a specified animation type that
/// is closed when clicking on the overlay, the animation type
/// can be one of the following:
///
/// - CENTER
/// - TOP
/// - RIGHT
/// - BOTTOM
/// - LEFT
public JFXDialog(StackPane dialogContainer, Region content, DialogTransition transitionType, boolean overlayClose) {
setOverlayClose(overlayClose);
initialize();
setContent(content);
setDialogContainer(dialogContainer);
this.transitionType.set(transitionType);
// init change listeners
initChangeListeners();
}
private void initChangeListeners() {
overlayCloseProperty().addListener((o, oldVal, newVal) -> {
if (newVal) {
this.addEventHandler(MouseEvent.MOUSE_PRESSED, closeHandler);
} else {
this.removeEventHandler(MouseEvent.MOUSE_PRESSED, closeHandler);
}
});
}
private void initialize() {
this.setVisible(false);
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
this.transitionType.addListener((o, oldVal, newVal) -> {
animation = getShowAnimation(transitionType.get());
});
contentHolder = new StackPane();
contentHolder.setBackground(new Background(new BackgroundFill(Color.WHITE, new CornerRadii(2), null)));
JFXDepthManager.setDepth(contentHolder, 4);
contentHolder.setPickOnBounds(false);
// ensure stackpane is never resized beyond it's preferred size
contentHolder.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
this.getChildren().add(contentHolder);
this.getStyleClass().add("jfx-dialog-overlay-pane");
StackPane.setAlignment(contentHolder, Pos.CENTER);
this.setBackground(new Background(new BackgroundFill(Color.rgb(0, 0, 0, 0.1), null, null)));
// close the dialog if clicked on the overlay pane
if (overlayClose.get()) {
this.addEventHandler(MouseEvent.MOUSE_PRESSED, closeHandler);
}
// prevent propagating the events to overlay pane
contentHolder.addEventHandler(MouseEvent.ANY, Event::consume);
}
/***************************************************************************
* *
* Setters / Getters *
* *
**************************************************************************/
/// @return the dialog container
public StackPane getDialogContainer() {
return dialogContainer;
}
/// set the dialog container
/// Note: the dialog container must be StackPane, its the container for the dialog to be shown in.
public void setDialogContainer(StackPane dialogContainer) {
if (dialogContainer != null) {
this.dialogContainer = dialogContainer;
// FIXME: need to be improved to consider only the parent boundary
offsetX = dialogContainer.getBoundsInLocal().getWidth();
offsetY = dialogContainer.getBoundsInLocal().getHeight();
animation = getShowAnimation(transitionType.get());
}
}
/// @return dialog content node
public Region getContent() {
return content;
}
/// set the content of the dialog
public void setContent(Region content) {
if (content != null) {
this.content = content;
this.content.setPickOnBounds(false);
contentHolder.getChildren().setAll(content);
}
}
/// indicates whether the dialog will close when clicking on the overlay or not
private final BooleanProperty overlayClose = new SimpleBooleanProperty(true);
public final BooleanProperty overlayCloseProperty() {
return this.overlayClose;
}
public final boolean isOverlayClose() {
return this.overlayCloseProperty().get();
}
public final void setOverlayClose(final boolean overlayClose) {
this.overlayCloseProperty().set(overlayClose);
}
/// if sets to true, the content of dialog container will be cached and replaced with an image
/// when displaying the dialog (better performance).
/// this is recommended if the content behind the dialog will not change during the showing
/// period
private final BooleanProperty cacheContainer = new SimpleBooleanProperty(false);
public boolean isCacheContainer() {
return cacheContainer.get();
}
public BooleanProperty cacheContainerProperty() {
return cacheContainer;
}
public void setCacheContainer(boolean cacheContainer) {
this.cacheContainer.set(cacheContainer);
}
/// it will show the dialog in the specified container
public void show(StackPane dialogContainer) {
this.setDialogContainer(dialogContainer);
showDialog();
}
private ArrayList<Node> tempContent;
/**
* show the dialog inside its parent container
*/
public void show() {
this.setDialogContainer(dialogContainer);
showDialog();
}
private void showDialog() {
if (dialogContainer == null) {
throw new RuntimeException("ERROR: JFXDialog container is not set!");
}
if (isCacheContainer()) {
tempContent = new ArrayList<>(dialogContainer.getChildren());
SnapshotParameters snapShotparams = new SnapshotParameters();
snapShotparams.setFill(Color.TRANSPARENT);
WritableImage temp = dialogContainer.snapshot(snapShotparams,
new WritableImage((int) dialogContainer.getWidth(),
(int) dialogContainer.getHeight()));
ImageView tempImage = new ImageView(temp);
tempImage.setCache(true);
tempImage.setCacheHint(CacheHint.SPEED);
dialogContainer.getChildren().setAll(tempImage, this);
} else {
//prevent error if opening an already opened dialog
dialogContainer.getChildren().remove(this);
tempContent = null;
dialogContainer.getChildren().add(this);
}
if (animation != null) {
animation.play();
} else {
setVisible(true);
setOpacity(1);
Event.fireEvent(JFXDialog.this, new JFXDialogEvent(JFXDialogEvent.OPENED));
}
}
/**
* close the dialog
*/
public void close() {
if (animation != null) {
animation.setRate(-2);
animation.play();
animation.setOnFinished(e -> {
closeDialog();
});
} else {
setOpacity(0);
setVisible(false);
closeDialog();
}
}
private void closeDialog() {
resetProperties();
Event.fireEvent(JFXDialog.this, new JFXDialogEvent(JFXDialogEvent.CLOSED));
if (tempContent == null) {
dialogContainer.getChildren().remove(this);
} else {
dialogContainer.getChildren().setAll(tempContent);
}
}
/***************************************************************************
* *
* Transitions *
* *
**************************************************************************/
private Transition getShowAnimation(DialogTransition transitionType) {
Transition animation = null;
if (contentHolder != null) {
animation = switch (transitionType) {
case CENTER -> {
contentHolder.setScaleX(INITIAL_SCALE);
contentHolder.setScaleY(INITIAL_SCALE);
yield new CenterTransition();
}
case NONE -> {
contentHolder.setScaleX(1);
contentHolder.setScaleY(1);
contentHolder.setTranslateX(0);
contentHolder.setTranslateY(0);
yield null;
}
};
}
if (animation != null) {
animation.setOnFinished(finish ->
Event.fireEvent(JFXDialog.this, new JFXDialogEvent(JFXDialogEvent.OPENED)));
}
return animation;
}
private void resetProperties() {
this.setVisible(false);
contentHolder.setTranslateX(0);
contentHolder.setTranslateY(0);
contentHolder.setScaleX(1);
contentHolder.setScaleY(1);
}
private final class CenterTransition extends CachedTransition {
private static final Interpolator INTERPOLATOR = Motion.EMPHASIZED_DECELERATE;
CenterTransition() {
super(contentHolder, new Timeline(
new KeyFrame(Duration.ZERO,
new KeyValue(contentHolder.scaleXProperty(), INITIAL_SCALE, INTERPOLATOR),
new KeyValue(contentHolder.scaleYProperty(), INITIAL_SCALE, INTERPOLATOR),
new KeyValue(JFXDialog.this.visibleProperty(), false, Motion.LINEAR)
),
new KeyFrame(Duration.millis(10),
new KeyValue(JFXDialog.this.visibleProperty(), true, Motion.LINEAR),
new KeyValue(JFXDialog.this.opacityProperty(), 0, INTERPOLATOR)
),
new KeyFrame(Motion.EXTRA_LONG4,
new KeyValue(contentHolder.scaleXProperty(), 1, INTERPOLATOR),
new KeyValue(contentHolder.scaleYProperty(), 1, INTERPOLATOR),
new KeyValue(JFXDialog.this.visibleProperty(), true, Motion.LINEAR),
new KeyValue(JFXDialog.this.opacityProperty(), 1, INTERPOLATOR)
))
);
// reduce the number to increase the shifting , increase number to reduce shifting
setCycleDuration(Duration.seconds(0.4));
setDelay(Duration.ZERO);
}
}
/***************************************************************************
* *
* Stylesheet Handling *
* *
**************************************************************************/
/// Initialize the style class to 'jfx-dialog'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-dialog";
/// dialog transition type property, it can be one of the following:
///
/// - CENTER
/// - TOP
/// - RIGHT
/// - BOTTOM
/// - LEFT
/// - NONE
private final StyleableObjectProperty<DialogTransition> transitionType = new SimpleStyleableObjectProperty<>(
StyleableProperties.DIALOG_TRANSITION,
JFXDialog.this,
"dialogTransition",
DialogTransition.CENTER);
public DialogTransition getTransitionType() {
return transitionType == null ? DialogTransition.CENTER : transitionType.get();
}
public StyleableObjectProperty<DialogTransition> transitionTypeProperty() {
return this.transitionType;
}
public void setTransitionType(DialogTransition transition) {
this.transitionType.set(transition);
}
private static final class StyleableProperties {
private static final CssMetaData<JFXDialog, DialogTransition> DIALOG_TRANSITION =
new CssMetaData<JFXDialog, DialogTransition>("-jfx-dialog-transition",
DialogTransitionConverter.getInstance(),
DialogTransition.CENTER) {
@Override
public boolean isSettable(JFXDialog control) {
return control.transitionType == null || !control.transitionType.isBound();
}
@Override
public StyleableProperty<DialogTransition> getStyleableProperty(JFXDialog control) {
return control.transitionTypeProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables =
new ArrayList<>(StackPane.getClassCssMetaData());
Collections.addAll(styleables,
DIALOG_TRANSITION
);
CHILD_STYLEABLES = Collections.unmodifiableList(styleables);
}
}
@Override
public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
return getClassCssMetaData();
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
/***************************************************************************
* *
* Custom Events *
* *
**************************************************************************/
private final ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogClosedProperty = new ObjectPropertyBase<EventHandler<? super JFXDialogEvent>>() {
@Override
protected void invalidated() {
setEventHandler(JFXDialogEvent.CLOSED, get());
}
@Override
public Object getBean() {
return JFXDialog.this;
}
@Override
public String getName() {
return "onClosed";
}
};
/**
* Defines a function to be called when the dialog is closed.
* Note: it will be triggered after the close animation is finished.
*/
public ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogClosedProperty() {
return onDialogClosedProperty;
}
public void setOnDialogClosed(EventHandler<? super JFXDialogEvent> handler) {
onDialogClosedProperty().set(handler);
}
public EventHandler<? super JFXDialogEvent> getOnDialogClosed() {
return onDialogClosedProperty().get();
}
private final ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogOpenedProperty = new ObjectPropertyBase<>() {
@Override
protected void invalidated() {
setEventHandler(JFXDialogEvent.OPENED, get());
}
@Override
public Object getBean() {
return JFXDialog.this;
}
@Override
public String getName() {
return "onOpened";
}
};
/**
* Defines a function to be called when the dialog is opened.
* Note: it will be triggered after the show animation is finished.
*/
public ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogOpenedProperty() {
return onDialogOpenedProperty;
}
public void setOnDialogOpened(EventHandler<? super JFXDialogEvent> handler) {
onDialogOpenedProperty().set(handler);
}
public EventHandler<? super JFXDialogEvent> getOnDialogOpened() {
return onDialogOpenedProperty().get();
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXDialogLayout.java
================================================
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.jfoenix.controls;
import java.util.List;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
public class JFXDialogLayout extends StackPane {
private final StackPane heading = new StackPane();
private final StackPane body = new StackPane();
private final FlowPane actions = new FlowPane() {
protected double computeMinWidth(double height) {
if (this.getContentBias() == Orientation.HORIZONTAL) {
double maxPref = 0.0;
for (Node child : this.getChildren()) {
if (child.isManaged()) {
maxPref = Math.max(maxPref, child.minWidth(-1.0));
}
}
Insets insets = this.getInsets();
return insets.getLeft() + this.snapSizeX(maxPref) + insets.getRight();
} else {
return this.computePrefWidth(height);
}
}
protected double computeMinHeight(double width) {
if (this.getContentBias() == Orientation.VERTICAL) {
double maxPref = 0.0;
for (Node child : this.getChildren()) {
if (child.isManaged()) {
maxPref = Math.max(maxPref, child.minHeight(-1.0));
}
}
Insets insets = this.getInsets();
return insets.getTop() + this.snapSizeY(maxPref) + insets.getBottom();
} else {
return this.computePrefHeight(width);
}
}
};
private static final String DEFAULT_STYLE_CLASS = "jfx-dialog-layout";
public JFXDialogLayout() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
VBox layout = new VBox();
this.heading.getStyleClass().add("jfx-layout-heading");
this.heading.getStyleClass().add("title");
this.body.getStyleClass().add("jfx-layout-body");
this.body.prefHeightProperty().bind(this.prefHeightProperty());
this.body.prefWidthProperty().bind(this.prefWidthProperty());
this.actions.getStyleClass().add("jfx-layout-actions");
layout.getChildren().setAll(this.heading, this.body, this.actions);
this.getChildren().add(layout);
}
public ObservableList<Node> getHeading() {
return this.heading.getChildren();
}
public void setHeading(Node... titleContent) {
this.heading.getChildren().setAll(titleContent);
}
public ObservableList<Node> getBody() {
return this.body.getChildren();
}
public void setBody(Node... body) {
this.body.getChildren().setAll(body);
}
public ObservableList<Node> getActions() {
return this.actions.getChildren();
}
public void setActions(Node... actions) {
this.actions.getChildren().setAll(actions);
}
public void setActions(List<? extends Node> actions) {
this.actions.getChildren().setAll(actions);
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXListCell.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.utils.JFXNodeUtils;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.Region;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.util.Duration;
import java.util.Set;
/// material design implementation of ListCell
///
/// By default, JFXListCell will try to create a graphic node for the cell,
/// to override it you need to set graphic to null in [#updateItem(Object, boolean)] method.
///
/// NOTE: passive nodes (Labels and Shapes) will be set to mouse transparent in order to
/// show the ripple effect upon clicking , to change this behavior you can override the
/// method {[#makeChildrenTransparent()]
///
/// @author Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
public class JFXListCell<T> extends ListCell<T> {
protected JFXRippler cellRippler = new JFXRippler(this) {
@Override
protected Node getMask() {
Region clip = new Region();
JFXNodeUtils.updateBackground(JFXListCell.this.getBackground(), clip);
double width = control.getLayoutBounds().getWidth();
double height = control.getLayoutBounds().getHeight();
clip.resize(width, height);
return clip;
}
@Override
protected void positionControl(Node control) {
// do nothing
}
};
protected Node cellContent;
private Rectangle clip;
private Timeline gapAnimation;
private boolean playExpandAnimation = false;
private boolean selectionChanged = false;
/**
* {@inheritDoc}
*/
public JFXListCell() {
initialize();
initListeners();
}
/**
* init listeners to update the vertical gap / selection animation
*/
private void initListeners() {
listViewProperty().addListener((listObj, oldList, newList) -> {
if (newList instanceof JFXListView<?> listView) {
listView.currentVerticalGapProperty().addListener((o, oldVal, newVal) -> {
cellRippler.rippler.setClip(null);
if (newVal.doubleValue() != 0) {
playExpandAnimation = true;
getListView().requestLayout();
} else {
// fake expand state
double gap = clip.getY() * 2;
gapAnimation = new Timeline(
new KeyFrame(Duration.millis(240),
new KeyValue(this.translateYProperty(),
-gap / 2 - (gap * (getIndex())),
Interpolator.EASE_BOTH)
));
gapAnimation.play();
gapAnimation.setOnFinished((finish) -> {
requestLayout();
Platform.runLater(() -> getListView().requestLayout());
});
}
});
selectedProperty().addListener((o, oldVal, newVal) -> {
if (newVal) {
selectionChanged = true;
}
});
}
});
}
@Override
protected void layoutChildren() {
super.layoutChildren();
cellRippler.resizeRelocate(0, 0, getWidth(), getHeight());
double gap = getGap();
if (clip == null) {
clip = new Rectangle(0, gap / 2, getWidth(), getHeight() - gap);
setClip(clip);
} else {
if (gap != 0) {
if (playExpandAnimation || selectionChanged) {
// fake list collapse state
if (playExpandAnimation) {
this.setTranslateY(-gap / 2 + (-gap * (getIndex())));
clip.setY(gap / 2);
clip.setHeight(getHeight() - gap);
gapAnimation = new Timeline(new KeyFrame(Duration.millis(240),
new KeyValue(this.translateYProperty(),
0,
Interpolator.EASE_BOTH)));
playExpandAnimation = false;
} else if (selectionChanged) {
clip.setY(0);
clip.setHeight(getHeight());
gapAnimation = new Timeline(
new KeyFrame(Duration.millis(240),
new KeyValue(clip.yProperty(), gap / 2, Interpolator.EASE_BOTH),
new KeyValue(clip.heightProperty(), getHeight() - gap, Interpolator.EASE_BOTH)
));
}
playExpandAnimation = false;
selectionChanged = false;
gapAnimation.play();
} else {
if (gapAnimation != null) {
gapAnimation.stop();
}
this.setTranslateY(0);
clip.setY(gap / 2);
clip.setHeight(getHeight() - gap);
}
} else {
this.setTranslateY(0);
clip.setY(0);
clip.setHeight(getHeight());
}
clip.setX(0);
clip.setWidth(getWidth());
}
if (!getChildren().contains(cellRippler)) {
makeChildrenTransparent();
getChildren().add(0, cellRippler);
cellRippler.rippler.clear();
}
}
/**
* this method is used to set some nodes in cell content as mouse transparent nodes
* so clicking on them will trigger the ripple effect.
*/
protected void makeChildrenTransparent() {
for (Node child : getChildren()) {
if (child instanceof Label) {
Set<Node> texts = child.lookupAll("Text");
for (Node text : texts) {
text.setMouseTransparent(true);
}
} else if (child instanceof Shape) {
child.setMouseTransparent(true);
}
}
}
/**
* {@inheritDoc}
*/
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
// remove empty (Trailing cells)
setMouseTransparent(true);
setStyle("-fx-background-color:TRANSPARENT;");
} else {
setMouseTransparent(false);
setStyle(null);
if (item instanceof Node newNode) {
setText(null);
Node currentNode = getGraphic();
if (currentNode == null || !currentNode.equals(newNode)) {
cellContent = newNode;
cellRippler.rippler.cacheRippleClip(false);
// build the Cell node
// RIPPLER ITEM : in case if the list item has its own rippler bind the list rippler and item rippler properties
if (newNode instanceof JFXRippler newRippler) {
// build cell container from exisiting rippler
cellRippler.ripplerFillProperty().bind(newRippler.ripplerFillProperty());
cellRippler.maskTypeProperty().bind(newRippler.maskTypeProperty());
cellRippler.positionProperty().bind(newRippler.positionProperty());
cellContent = newRippler.getControl();
}
((Region) cellContent).setMaxHeight(cellContent.prefHeight(-1));
setGraphic(cellContent);
}
} else {
setText(item == null ? "null" : item.toString());
setGraphic(null);
}
// show cell tooltip if it's toggled in JFXListView
if (getListView() instanceof JFXListView<?> listView && listView.isShowTooltip()) {
if (item instanceof Label label) {
setTooltip(new Tooltip(label.getText()));
} else if (getText() != null) {
setTooltip(new Tooltip(getText()));
}
}
}
}
// Stylesheet Handling *
/**
* Initialize the style class to 'jfx-list-cell'.
* <p>
* This is the selector class from which CSS can be used to style
* this control.
*/
private static final String DEFAULT_STYLE_CLASS = "jfx-list-cell";
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
this.setPadding(new Insets(8, 12, 8, 12));
}
@Override
protected double computePrefHeight(double width) {
double gap = getGap();
return super.computePrefHeight(width) + gap;
}
private double getGap() {
return (getListView() instanceof JFXListView<?> listView)
? (listView.isExpanded() ? listView.currentVerticalGapProperty().get() : 0)
: 0;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXListView.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXListViewSkin;
import javafx.beans.property.*;
import javafx.css.*;
import javafx.css.converter.BooleanConverter;
import javafx.css.converter.SizeConverter;
import javafx.scene.control.ListView;
import javafx.scene.control.Skin;
import javafx.scene.input.MouseEvent;
import java.util.*;
/// Material design implementation of List View
///
/// @author Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
public class JFXListView<T> extends ListView<T> {
/**
* {@inheritDoc}
*/
public JFXListView() {
this.setCellFactory(listView -> new JFXListCell<>());
initialize();
}
/**
* {@inheritDoc}
*/
@Override
protected Skin<?> createDefaultSkin() {
return new JFXListViewSkin<>(this);
}
private IntegerProperty depth;
public IntegerProperty depthProperty() {
if (depth == null) {
depth = new SimpleIntegerProperty(this, "depth", 0);
}
return depth;
}
public int getDepth() {
return depth != null ? depth.get() : 0;
}
public void setDepth(int depth) {
depthProperty().set(depth);
}
private DoubleProperty currentVerticalGap;
DoubleProperty currentVerticalGapProperty() {
if (currentVerticalGap == null) {
currentVerticalGap = new SimpleDoubleProperty(this, "currentVerticalGap");
}
return currentVerticalGap;
}
private void updateVerticalGap() {
if (isExpanded()) {
currentVerticalGapProperty().set(verticalGap.get());
} else {
currentVerticalGapProperty().set(0);
}
}
/*
* this only works if the items were labels / strings
*/
private BooleanProperty showTooltip;
public final BooleanProperty showTooltipProperty() {
if (showTooltip == null) {
showTooltip = new SimpleBooleanProperty(this, "showTooltip", false);
}
return this.showTooltip;
}
public final boolean isShowTooltip() {
return showTooltip != null && showTooltip.get();
}
public final void setShowTooltip(final boolean showTooltip) {
this.showTooltipProperty().set(showTooltip);
}
/***************************************************************************
* *
* Stylesheet Handling *
* *
**************************************************************************/
/// Initialize the style class to 'jfx-list-view'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-list-view";
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
/**
* propagate mouse events to the parent node ( e.g. to allow dragging while clicking on the list)
*/
public void propagateMouseEventsToParent() {
this.addEventHandler(MouseEvent.ANY, e -> {
e.consume();
this.getParent().fireEvent(e);
});
}
private StyleableDoubleProperty verticalGap;
public StyleableDoubleProperty verticalGapProperty() {
if (this.verticalGap == null) {
this.verticalGap = new StyleableDoubleProperty(0.0) {
@Override
public Object getBean() {
return JFXListView.this;
}
@Override
public String getName() {
return "verticalGap";
}
@Override
public CssMetaData<? extends Styleable, Number> getCssMetaData() {
return StyleableProperties.VERTICAL_GAP;
}
@Override
protected void invalidated() {
updateVerticalGap();
}
};
}
return this.verticalGap;
}
public Double getVerticalGap() {
return verticalGap == null ? 0.0 : verticalGap.get();
}
public void setVerticalGap(Double gap) {
verticalGapProperty().set(gap);
}
private StyleableBooleanProperty expanded;
public StyleableBooleanProperty expandedProperty() {
if (expanded == null) {
expanded = new StyleableBooleanProperty(false) {
@Override
public Object getBean() {
return JFXListView.this;
}
@Override
public String getName() {
return "expanded";
}
@Override
public CssMetaData<? extends Styleable, Boolean> getCssMetaData() {
return StyleableProperties.EXPANDED;
}
@Override
protected void invalidated() {
updateVerticalGap();
}
};
}
return this.expanded;
}
public Boolean isExpanded() {
return expanded != null && expanded.get();
}
public void setExpanded(Boolean expanded) {
expandedProperty().set(expanded);
}
private static final class StyleableProperties {
private static final CssMetaData<JFXListView<?>, Number> VERTICAL_GAP =
new CssMetaData<>("-jfx-vertical-gap",
SizeConverter.getInstance(), 0) {
@Override
public boolean isSettable(JFXListView<?> control) {
return control.verticalGap == null || !control.verticalGap.isBound();
}
@Override
public StyleableDoubleProperty getStyleableProperty(JFXListView<?> control) {
return control.verticalGapProperty();
}
};
private static final CssMetaData<JFXListView<?>, Boolean> EXPANDED =
new CssMetaData<>("-jfx-expanded",
BooleanConverter.getInstance(), false) {
@Override
public boolean isSettable(JFXListView<?> control) {
// it's only settable if the List is not shown yet
return control.getHeight() == 0 && (control.expanded == null || !control.expanded.isBound());
}
@Override
public StyleableBooleanProperty getStyleableProperty(JFXListView<?> control) {
return control.expandedProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables =
new ArrayList<>(ListView.getClassCssMetaData());
Collections.addAll(styleables, VERTICAL_GAP, EXPANDED);
CHILD_STYLEABLES = List.copyOf(styleables);
}
}
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
return getClassCssMetaData();
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXPasswordField.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXPasswordFieldSkin;
import com.jfoenix.validation.base.ValidatorBase;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.css.*;
import javafx.css.converter.BooleanConverter;
import javafx.css.converter.PaintConverter;
import javafx.scene.control.Control;
import javafx.scene.control.PasswordField;
import javafx.scene.control.Skin;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import static org.jackhuang.hmcl.ui.FXUtils.useJFXContextMenu;
/**
* JFXPasswordField is the material design implementation of a password Field.
*
* @author Shadi Shaheen
* @version 1.0
* @since 2016-03-09
*/
public class JFXPasswordField extends PasswordField {
/**
* {@inheritDoc}
*/
public JFXPasswordField() {
initialize();
}
/**
* {@inheritDoc}
*/
@Override
protected Skin<?> createDefaultSkin() {
return new JFXPasswordFieldSkin(this);
}
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
if ("dalvik".equals(System.getProperty("java.vm.name").toLowerCase(Locale.ROOT))) {
this.setStyle("-fx-skin: \"com.jfoenix.android.skins.JFXPasswordFieldSkinAndroid\";");
}
useJFXContextMenu(this);
}
/**
* Initialize the style class to 'jfx-password-field'.
* <p>
* This is the selector class from which CSS can be used to style
* this control.
*/
private static final String DEFAULT_STYLE_CLASS = "jfx-password-field";
/***************************************************************************
* *
* Properties *
* *
**************************************************************************/
/**
* holds the current active validator on the password field in case of validation error
*/
private ReadOnlyObjectWrapper<ValidatorBase> activeValidator = new ReadOnlyObjectWrapper<>();
public ValidatorBase getActiveValidator() {
return activeValidator == null ? null : activeValidator.get();
}
public ReadOnlyObjectProperty<ValidatorBase> activeValidatorProperty() {
return this.activeValidator.getReadOnlyProperty();
}
/**
* list of validators that will validate the password value upon calling
* {{@link #validate()}
*/
private ObservableList<ValidatorBase> validators = FXCollections.observableArrayList();
public ObservableList<ValidatorBase> getValidators() {
return validators;
}
public void setValidators(ValidatorBase... validators) {
this.validators.addAll(validators);
}
/**
* validates the password value using the list of validators provided by the user
* {{@link #setValidators(ValidatorBase...)}
*
* @return true if the value is valid else false
*/
public boolean validate() {
for (ValidatorBase validator : validators) {
if (validator.getSrcControl() == null) {
validator.setSrcControl(this);
}
validator.validate();
if (validator.getHasErrors()) {
activeValidator.set(validator);
return false;
}
}
activeValidator.set(null);
return true;
}
public void resetValidation() {
pseudoClassStateChanged(ValidatorBase.PSEUDO_CLASS_ERROR, false);
activeValidator.set(null);
}
/***************************************************************************
* *
* styleable Properties *
* *
**************************************************************************/
/**
* set true to show a float the prompt text when focusing the field
*/
private StyleableBooleanProperty labelFloat = new SimpleStyleableBooleanProperty(StyleableProperties.LABEL_FLOAT, JFXPasswordField.this, "lableFloat", false);
public final StyleableBooleanProperty labelFloatProperty() {
return this.labelFloat;
}
public final boolean isLabelFloat() {
return this.labelFloatProperty().get();
}
public final void setLabelFloat(final boolean labelFloat) {
this.labelFloatProperty().set(labelFloat);
}
/**
* default color used when the field is unfocused
*/
private StyleableObjectProperty<Paint> unFocusColor = new SimpleStyleableObjectProperty<>(StyleableProperties.UNFOCUS_COLOR, JFXPasswordField.this, "unFocusColor", Color.rgb(77, 77, 77));
public Paint getUnFocusColor() {
return unFocusColor == null ? Color.rgb(77, 77, 77) : unFocusColor.get();
}
public StyleableObjectProperty<Paint> unFocusColorProperty() {
return this.unFocusColor;
}
public void setUnFocusColor(Paint color) {
this.unFocusColor.set(color);
}
/**
* default color used when the field is focused
*/
private StyleableObjectProperty<Paint> focusColor = new SimpleStyleableObjectProperty<>(StyleableProperties.FOCUS_COLOR, JFXPasswordField.this, "focusColor", Color.valueOf("#4059A9"));
public Paint getFocusColor() {
return focusColor == null ? Color.valueOf("#4059A9") : focusColor.get();
}
public StyleableObjectProperty<Paint> focusColorProperty() {
return this.focusColor;
}
public void setFocusColor(Paint color) {
this.focusColor.set(color);
}
/**
* disable animation on validation
*/
private StyleableBooleanProperty disableAnimation = new SimpleStyleableBooleanProperty(StyleableProperties.DISABLE_ANIMATION, JFXPasswordField.this, "disableAnimation", false);
public final StyleableBooleanProperty disableAnimationProperty() {
return this.disableAnimation;
}
public final Boolean isDisableAnimation() {
return disableAnimation != null && this.disableAnimationProperty().get();
}
public final void setDisableAnimation(final Boolean disabled) {
this.disableAnimationProperty().set(disabled);
}
private final static class StyleableProperties {
private static final CssMetaData<JFXPasswordField, Paint> UNFOCUS_COLOR = new CssMetaData<JFXPasswordField, Paint>("-jfx-unfocus-color", PaintConverter.getInstance(), Color.valueOf("#A6A6A6")) {
@Override
public boolean isSettable(JFXPasswordField control) {
return control.unFocusColor == null || !control.unFocusColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXPasswordField control) {
return control.unFocusColorProperty();
}
};
private static final CssMetaData<JFXPasswordField, Paint> FOCUS_COLOR = new CssMetaData<JFXPasswordField, Paint>("-jfx-focus-color", PaintConverter.getInstance(), Color.valueOf("#3f51b5")) {
@Override
public boolean isSettable(JFXPasswordField control) {
return control.focusColor == null || !control.focusColor.isBound();
}
@Override
public StyleableProperty<Paint> getStyleableProperty(JFXPasswordField control) {
return control.focusColorProperty();
}
};
private static final CssMetaData<JFXPasswordField, Boolean> LABEL_FLOAT = new CssMetaData<JFXPasswordField, Boolean>("-jfx-label-float", BooleanConverter.getInstance(), false) {
@Override
public boolean isSettable(JFXPasswordField control) {
return control.labelFloat == null || !control.labelFloat.isBound();
}
@Override
public StyleableBooleanProperty getStyleableProperty(JFXPasswordField control) {
return control.labelFloatProperty();
}
};
private static final CssMetaData<JFXPasswordField, Boolean> DISABLE_ANIMATION = new CssMetaData<JFXPasswordField, Boolean>("-fx-disable-animation", BooleanConverter.getInstance(), false) {
@Override
public boolean isSettable(JFXPasswordField control) {
return control.disableAnimation == null || !control.disableAnimation.isBound();
}
@Override
public StyleableBooleanProperty getStyleableProperty(JFXPasswordField control) {
return control.disableAnimationProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Control.getClassCssMetaData());
Collections.addAll(styleables, UNFOCUS_COLOR, FOCUS_COLOR, LABEL_FLOAT, DISABLE_ANIMATION);
CHILD_STYLEABLES = Collections.unmodifiableList(styleables);
}
}
// inherit the styleable properties from parent
private List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
if (STYLEABLES == null) {
final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Control.getClassCssMetaData());
styleables.addAll(getClassCssMetaData());
styleables.addAll(TextField.getClassCssMetaData());
STYLEABLES = Collections.unmodifiableList(styleables);
}
return STYLEABLES;
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXPopup.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXPopupSkin;
import javafx.application.Platform;
import javafx.beans.DefaultProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.geometry.NodeOrientation;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.PopupControl;
import javafx.scene.control.Skin;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.stage.Window;
/// JFXPopup is the material design implementation of a popup.
///
/// @author Shadi Shaheen
/// @version 2.0
/// @since 2017-03-01
@DefaultProperty(value = "popupContent")
public class JFXPopup extends PopupControl {
public enum PopupHPosition {
RIGHT,
LEFT;
public PopupHPosition getOpposite() {
return (this == RIGHT) ? LEFT : RIGHT;
}
}
public enum PopupVPosition {
TOP, BOTTOM
}
/// Creates empty popup.
public JFXPopup() {
this(null);
}
/// creates popup with a specified container and content
///
/// @param content the node that will be shown in the popup
public JFXPopup(Region content) {
setPopupContent(content);
initialize();
}
private void initialize() {
this.setAutoFix(false);
this.setAutoHide(true);
this.setHideOnEscape(true);
this.setConsumeAutoHidingEvents(false);
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
@Override
protected Skin<?> createDefaultSkin() {
return new JFXPopupSkin(this);
}
/***************************************************************************
* *
* Setters / Getters *
* *
**************************************************************************/
private final ObjectProperty<Region> popupContent = new SimpleObjectProperty<>(new Pane());
public final ObjectProperty<Region> popupContentProperty() {
return this.popupContent;
}
public final Region getPopupContent() {
return this.popupContentProperty().get();
}
public final void setPopupContent(final Region popupContent) {
this.popupContentProperty().set(popupContent);
}
/***************************************************************************
* *
* Public API *
* *
**************************************************************************/
/// show the popup using the default position
public void show(Node node) {
this.show(node, PopupVPosition.TOP, PopupHPosition.LEFT, 0, 0);
}
/// show the popup according to the specified position
///
/// @param vAlign can be TOP/BOTTOM
/// @param hAlign can be LEFT/RIGHT
public void show(Node node, PopupVPosition vAlign, PopupHPosition hAlign) {
this.show(node, vAlign, hAlign, 0, 0);
}
/// show the popup according to the specified position with a certain offset
///
/// @param vAlign can be TOP/BOTTOM
/// @param hAlign can be LEFT/RIGHT
/// @param initOffsetX on the x-axis
/// @param initOffsetY on the y-axis
public void show(Node node, PopupVPosition vAlign, PopupHPosition hAlign, double initOffsetX, double initOffsetY) {
show(node, vAlign, hAlign, initOffsetX, initOffsetY, false);
}
public void show(Node node, PopupVPosition vAlign, PopupHPosition hAlign, double initOffsetX, double initOffsetY, boolean attachToNode) {
if (!isShowing()) {
Scene scene = node.getScene();
if (scene == null || scene.getWindow() == null) {
throw new IllegalStateException("Can not show popup. The node must be attached to a scene/window.");
}
Window parent = scene.getWindow();
final Point2D origin = node.localToScene(0, 0);
boolean isRTL = node.getEffectiveNodeOrientation() == NodeOrientation.RIGHT_TO_LEFT;
double anchorX = parent.getX() + scene.getX() + origin.getX() + (hAlign == PopupHPosition.RIGHT ? ((Region) node).getWidth() : 0);
double anchorY = parent.getY() + origin.getY() + scene.getY() + (vAlign == PopupVPosition.BOTTOM ? ((Region) node).getHeight() : 0);
if (attachToNode)
this.show(node, anchorX, anchorY);
else
this.show(parent, anchorX, anchorY);
((JFXPopupSkin) getSkin()).reset(vAlign, isRTL ? hAlign.getOpposite() : hAlign, isRTL ? -initOffsetX : initOffsetX, initOffsetY);
Platform.runLater(() -> ((JFXPopupSkin) getSkin()).animate());
}
}
public void show(Window window, double x, double y, PopupVPosition vAlign, PopupHPosition hAlign, double initOffsetX, double initOffsetY) {
if (!isShowing()) {
if (window == null) {
throw new IllegalStateException("Can not show popup. The node must be attached to a scene/window.");
}
Window parent = window;
final double anchorX = parent.getX() + x + initOffsetX;
final double anchorY = parent.getY() + y + initOffsetY;
this.show(parent, anchorX, anchorY);
((JFXPopupSkin) getSkin()).reset(vAlign, hAlign, initOffsetX, initOffsetY);
Platform.runLater(() -> ((JFXPopupSkin) getSkin()).animate());
}
}
@Override
public void hide() {
super.hide();
((JFXPopupSkin) getSkin()).init();
}
/***************************************************************************
* *
* Stylesheet Handling *
* *
**************************************************************************/
/// Initialize the style class to 'jfx-popup'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-popup";
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXProgressBar.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXProgressBarSkin;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.Skin;
/// JFXProgressBar is the material design implementation of a progress bar.
///
/// @author Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
public class JFXProgressBar extends ProgressBar {
/// Initialize the style class to 'jfx-progress-bar'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-progress-bar";
public JFXProgressBar() {
initialize();
}
public JFXProgressBar(double progress) {
super(progress);
initialize();
}
@Override
protected Skin<?> createDefaultSkin() {
return new JFXProgressBarSkin(this);
}
private boolean smoothProgress = true;
public boolean isSmoothProgress() {
return smoothProgress;
}
public void setSmoothProgress(boolean smoothProgress) {
this.smoothProgress = smoothProgress;
}
private void initialize() {
setPrefWidth(200);
getStyleClass().add(DEFAULT_STYLE_CLASS);
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXRadioButton.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.skins.JFXRadioButtonSkin;
import javafx.css.*;
import javafx.css.converter.ColorConverter;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Skin;
import javafx.scene.paint.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/// JFXRadioButton is the material design implementation of a radio button.
///
/// @author Bashir Elias & Shadi Shaheen
/// @version 1.0
/// @since 2016-03-09
public class JFXRadioButton extends RadioButton {
public JFXRadioButton(String text) {
super(text);
initialize();
}
public JFXRadioButton() {
initialize();
}
@Override
protected Skin<?> createDefaultSkin() {
return new JFXRadioButtonSkin(this);
}
private void initialize() {
this.getStyleClass().add(DEFAULT_STYLE_CLASS);
}
/// Initialize the style class to 'jfx-radio-button'.
///
/// This is the selector class from which CSS can be used to style
/// this control.
private static final String DEFAULT_STYLE_CLASS = "jfx-radio-button";
/// default color used when the radio button is selected
private StyleableObjectProperty<Color> selectedColor;
private static final Color DEFAULT_SELECTED_COLOR = Color.valueOf("#0F9D58");
public final StyleableObjectProperty<Color> selectedColorProperty() {
if (selectedColor == null) {
selectedColor = new SimpleStyleableObjectProperty<>(StyleableProperties.SELECTED_COLOR,
JFXRadioButton.this,
"selectedColor",
DEFAULT_SELECTED_COLOR);
}
return this.selectedColor;
}
public final Color getSelectedColor() {
return selectedColor == null ? DEFAULT_SELECTED_COLOR : this.selectedColorProperty().get();
}
public final void setSelectedColor(final Color selectedColor) {
this.selectedColorProperty().set(selectedColor);
}
/// default color used when the radio button is not selected
private StyleableObjectProperty<Color> unSelectedColor;
private static final Color DEFAULT_UNSELECTED_COLOR = Color.valueOf("#5A5A5A");
public final StyleableObjectProperty<Color> unSelectedColorProperty() {
if (unSelectedColor == null) {
unSelectedColor = new SimpleStyleableObjectProperty<>(
StyleableProperties.UNSELECTED_COLOR,
JFXRadioButton.this,
"unSelectedColor",
DEFAULT_UNSELECTED_COLOR);
}
return this.unSelectedColor;
}
public final Color getUnSelectedColor() {
return unSelectedColor == null ? DEFAULT_UNSELECTED_COLOR : this.unSelectedColorProperty().get();
}
public final void setUnSelectedColor(final Color unSelectedColor) {
this.unSelectedColorProperty().set(unSelectedColor);
}
private static final class StyleableProperties {
private static final CssMetaData<JFXRadioButton, Color> SELECTED_COLOR =
new CssMetaData<JFXRadioButton, Color>("-jfx-selected-color",
ColorConverter.getInstance(), DEFAULT_SELECTED_COLOR) {
@Override
public boolean isSettable(JFXRadioButton control) {
return control.selectedColor == null || !control.selectedColor.isBound();
}
@Override
public StyleableProperty<Color> getStyleableProperty(JFXRadioButton control) {
return control.selectedColorProperty();
}
};
private static final CssMetaData<JFXRadioButton, Color> UNSELECTED_COLOR =
new CssMetaData<JFXRadioButton, Color>("-jfx-unselected-color",
ColorConverter.getInstance(), DEFAULT_UNSELECTED_COLOR) {
@Override
public boolean isSettable(JFXRadioButton control) {
return control.unSelectedColor == null || !control.unSelectedColor.isBound();
}
@Override
public StyleableProperty<Color> getStyleableProperty(JFXRadioButton control) {
return control.unSelectedColorProperty();
}
};
private static final List<CssMetaData<? extends Styleable, ?>> CHILD_STYLEABLES;
static {
final List<CssMetaData<? extends Styleable, ?>> styleables =
new ArrayList<>(RadioButton.getClassCssMetaData());
Collections.addAll(styleables,
SELECTED_COLOR,
UNSELECTED_COLOR
);
CHILD_STYLEABLES = List.copyOf(styleables);
}
}
@Override
public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
return getClassCssMetaData();
}
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return StyleableProperties.CHILD_STYLEABLES;
}
}
================================================
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXRippler.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.jfoenix.controls;
import com.jfoenix.converters.RipplerMaskTypeConverter;
import com.jfoenix.utils.JFXNodeUtils;
import javafx.animation.*;
import javafx.beans.DefaultProperty;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.css.*;
import javafx.css.converter.BooleanConverter;
import javafx.css.converter.PaintConverter;
import javafx.css.converter.SizeConverter;
import javafx.geometry.Bounds;
import javafx.scene.CacheHint;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.util.Duration;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* JFXRippler is the material design implementation of a ripple effect.
* the ripple effect can be applied to any node in the scene. JFXRippler is
* a {@link StackPane} container that holds a specified node (control node) and a ripple generator.
* <p>
* UPDATE NOTES:
* - fireEventProgrammatically(Event) method has been removed as the ripple controller is
* the control itself, so you can trigger manual ripple by firing mouse event on the control
* instead of JFXRippler
*
* @author Shadi Shaheen
* @version 1.0
* @since 2016-03-09
*/
@DefaultProperty(value = "control")
public class JFXRippler extends StackPane {
public enum RipplerPos {
FRONT, BACK
}
public enum RipplerMask {
CIRCLE, RECT, FIT
}
protected RippleGenerator rippler;
protected Pane ripplerPane;
protected Node control;
protected static final double RIPPLE_MAX_RADIUS = 300;
private static final Interpolator RIPPLE_INTERPOLATOR = Interpolator.SPLINE(0.0825,
0.3025,
0.0875,
0.9975); //0.1, 0.54, 0.28, 0.95);
private boolean forceOverlay = false;
/// creates empty rippler node
public JFXRippler() {
this(null, RipplerMask.RECT, RipplerPos.FRONT);
}
/// creates a rippler for the specified control
public JFXRippler(Node control) {
this(control, RipplerMask.RECT, RipplerPos.FRONT);
}
/// creates a rippler for the specified control
///
/// @param pos can be either FRONT/BACK (position the ripple effect infront of or behind the control)
public JFXRippler(Node control, RipplerPos pos) {
this(control, RipplerMask.RECT, pos);
}
/// creates a rippler for the specified control and apply the specified mask to it
///
/// @param mask can be either rectangle/cricle
public JFXRippler(Node control, RipplerMask mask) {
this(control, mask, RipplerPos.FRONT);
}
/// creates a rippler for the specified control, mask and position.
///
/// @param mask can be either rectangle/cricle
/// @param pos can be either FRONT/BACK (position the ripple effect infront of or behind the control)
public JFXRippler(Node control, RipplerMask mask, RipplerPos pos) {
initialize();
setMaskType(mask);
setPosition(pos);
createRippleUI();
setControl(control);
// listen to control position changed
position.addListener(observable -> updateControlPosition());
setPickOnBounds(false);
setCache(true);
setCacheHint(CacheHint.SPEED);
setCacheShape(true);
}
protected final void createRippleUI() {
// create rippler panels
rippler = new RippleGenerator();
ripplerPane = new StackPane();
ripplerPane.setMouseTransparent(true);
ripplerPane.getChildren().add(rippler);
getChildren().add(ripplerPane);
}
/***************************************************************************
* *
* Setters / Getters *
* *
**************************************************************************/
public void setControl(Node control) {
if (control != null) {
this.control = control;
// position control
positionControl(control);
// add control listeners to generate / release ripples
initControlListeners();
}
}
// Override this method to create JFXRippler for a control outside the ripple
protected void positionControl(Node control) {
if (this.position.get() == RipplerPos.BACK) {
getChildren().add(control);
} else {
getChildren().add(0, control);
}
}
protected void updateControlPosition() {
if (this.position.get() == RipplerPos.BACK) {
ripplerPane.toBack();
} else {
ripplerPane.toFront();
}
}
public Node getControl() {
return control;
}
// methods that can be changed by extending the rippler class
/// generate the clipping mask
///
/// @return the mask node
protected Node getMask() {
double borderWidth = ripplerPane.getBorder() != null ? ripplerPane.getBorder().getInsets().getTop() : 0;
Bounds bounds = control.getBoundsInParent();
double width = control.getLayoutBounds().getWidth();
double height = control.getLayoutBounds().getHeight();
double diffMinX = Math.abs(control.getBoundsInLocal().getMinX() - control.getLayoutBounds().getMinX());
double diffMinY = Math.abs(control.getBoundsInLocal().getMinY() - control.getLayoutBounds().getMinY());
double diffMaxX = Math.abs(control.getBoundsInLocal().getMaxX() - control.getLayoutBounds().getMaxX());
double diffMaxY = Math.abs(control.getBoundsInLocal().getMaxY() - control.getLayoutBounds().getMaxY());
Node mask;
switch (getMaskType()) {
case RECT:
mask = new Rectangle(bounds.getMinX() + diffMinX - snappedLeftInset(),
bounds.getMinY() + diffMinY - snappedTopInset(),
width - 2 * borderWidth,
height - 2 * borderWidth); // -0.1 to prevent resizing the anchor pane
break;
case CIRCLE:
double radius = Math.min((width / 2) - 2 * borderWidth, (height / 2) - 2 * borderWidth);
mask = new Circle((bounds.getMinX() + diffMinX + bounds.getMaxX() - diffMaxX) / 2 - snappedLeftInset(),
(bounds.getMinY() + diffMinY + bounds.getMaxY() - diffMaxY) / 2 - snappedTopInset(),
radius,
Color.BLUE);
break;
case FIT:
mask = new Region();
if (control instanceof Shape) {
((Region) mask).setShape((Shape) control);
} else if (control instanceof Region) {
((Region) mask).setShape(((Region) control).getShape());
JFXNodeUtils.updateBackground(((Region) control).getBackground(), (Region) mask);
}
mask.resize(width, height);
mask.relocate(bounds.getMinX() + diffMinX, bounds.getMinY() + diffMinY);
break;
default:
mask = new Rectangle(bounds.getMinX() + diffMinX - snappedLeftInset(),
bounds.getMinY() + diffMinY - snappedTopInset(),
width - 2 * borderWidth,
height - 2 * borderWidth); // -0.1 to prevent resizing the anchor pane
break;
}
return mask;
}
/**
* compute the ripple radius
*
* @return the ripple radius size
*/
protected double computeRippleRadius() {
double width2 = control.getLayoutBounds().getWidth() * control.getLayoutBounds().getWidth();
double height2 = control.getLayoutBounds().getHeight() * control.getLayoutBounds().getHeight();
return Math.min(Math.sqrt(width2 + height2), RIPPLE_MAX_RADIUS) * 1.1 + 5;
}
protected void setOverLayBounds(Rectangle overlay) {
overlay.setWidth(control.getLayoutBounds().getWidth());
overlay.setHeight(control.getLayoutBounds().getHeight());
}
/**
* init mouse listeners on the control
*/
protected void initControlListeners() {
// if the control got resized the overlay rect must be rest
control.layoutBoundsProperty().addListener(observable -> resetRippler())
gitextract_ivylyroq/ ├── .cnb/ │ └── ISSUE_TEMPLATE/ │ └── config.yml ├── .editorconfig ├── .gitee/ │ └── ISSUE_TEMPLATE/ │ └── config.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ └── feature.yml │ └── workflows/ │ ├── check-codes.yml │ ├── gradle.yml │ ├── mirror.yml │ └── release.yml ├── .gitignore ├── HMCL/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── com/ │ │ │ │ │ └── jfoenix/ │ │ │ │ │ ├── controls/ │ │ │ │ │ │ ├── JFXButton.java │ │ │ │ │ │ ├── JFXCheckBox.java │ │ │ │ │ │ ├── JFXClippedPane.java │ │ │ │ │ │ ├── JFXColorPicker.java │ │ │ │ │ │ ├── JFXComboBox.java │ │ │ │ │ │ ├── JFXDialog.java │ │ │ │ │ │ ├── JFXDialogLayout.java │ │ │ │ │ │ ├── JFXListCell.java │ │ │ │ │ │ ├── JFXListView.java │ │ │ │ │ │ ├── JFXPasswordField.java │ │ │ │ │ │ ├── JFXPopup.java │ │ │ │ │ │ ├── JFXProgressBar.java │ │ │ │ │ │ ├── JFXRadioButton.java │ │ │ │ │ │ ├── JFXRippler.java │ │ │ │ │ │ ├── JFXSlider.java │ │ │ │ │ │ ├── JFXSnackbar.java │ │ │ │ │ │ ├── JFXSnackbarLayout.java │ │ │ │ │ │ ├── JFXSpinner.java │ │ │ │ │ │ ├── JFXTextArea.java │ │ │ │ │ │ ├── JFXTextField.java │ │ │ │ │ │ ├── JFXToggleButton.java │ │ │ │ │ │ ├── JFXTreeCell.java │ │ │ │ │ │ ├── JFXTreeView.java │ │ │ │ │ │ ├── behavior/ │ │ │ │ │ │ │ └── JFXGenericPickerBehavior.java │ │ │ │ │ │ ├── datamodels/ │ │ │ │ │ │ │ └── treetable/ │ │ │ │ │ │ │ └── RecursiveTreeObject.java │ │ │ │ │ │ └── events/ │ │ │ │ │ │ └── JFXDialogEvent.java │ │ │ │ │ ├── effects/ │ │ │ │ │ │ └── JFXDepthManager.java │ │ │ │ │ ├── skins/ │ │ │ │ │ │ ├── JFXButtonSkin.java │ │ │ │ │ │ ├── JFXCheckBoxSkin.java │ │ │ │ │ │ ├── JFXColorPalette.java │ │ │ │ │ │ ├── JFXColorPickerSkin.java │ │ │ │ │ │ ├── JFXColorPickerUI.java │ │ │ │ │ │ ├── JFXCustomColorPicker.java │ │ │ │ │ │ ├── JFXCustomColorPickerDialog.java │ │ │ │ │ │ ├── JFXGenericPickerSkin.java │ │ │ │ │ │ ├── JFXListViewSkin.java │ │ │ │ │ │ ├── JFXPopupSkin.java │ │ │ │ │ │ ├── JFXProgressBarSkin.java │ │ │ │ │ │ ├── JFXRadioButtonSkin.java │ │ │ │ │ │ ├── JFXSliderSkin.java │ │ │ │ │ │ ├── JFXSpinnerSkin.java │ │ │ │ │ │ ├── JFXTabPaneSkin.java │ │ │ │ │ │ └── JFXToggleButtonSkin.java │ │ │ │ │ ├── transitions/ │ │ │ │ │ │ ├── CacheMemento.java │ │ │ │ │ │ ├── JFXAnimationTimer.java │ │ │ │ │ │ ├── JFXKeyFrame.java │ │ │ │ │ │ └── JFXKeyValue.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── JFXNodeUtils.java │ │ │ │ │ └── TreeShowingProperty.java │ │ │ │ └── org/ │ │ │ │ └── jackhuang/ │ │ │ │ └── hmcl/ │ │ │ │ ├── EntryPoint.java │ │ │ │ ├── Launcher.java │ │ │ │ ├── Metadata.java │ │ │ │ ├── countly/ │ │ │ │ │ └── CrashReport.java │ │ │ │ ├── game/ │ │ │ │ │ ├── HMCLCacheRepository.java │ │ │ │ │ ├── HMCLGameLauncher.java │ │ │ │ │ ├── HMCLGameRepository.java │ │ │ │ │ ├── HMCLModpackInstallTask.java │ │ │ │ │ ├── HMCLModpackManifest.java │ │ │ │ │ ├── HMCLModpackProvider.java │ │ │ │ │ ├── LauncherHelper.java │ │ │ │ │ ├── LocalizedRemoteModRepository.java │ │ │ │ │ ├── Log.java │ │ │ │ │ ├── LogExporter.java │ │ │ │ │ ├── ManuallyCreatedModpackException.java │ │ │ │ │ ├── ManuallyCreatedModpackInstallTask.java │ │ │ │ │ ├── ModpackHelper.java │ │ │ │ │ ├── OAuthServer.java │ │ │ │ │ └── TexturesLoader.java │ │ │ │ ├── java/ │ │ │ │ │ ├── HMCLJavaRepository.java │ │ │ │ │ ├── JavaInfoUtils.java │ │ │ │ │ ├── JavaInstallTask.java │ │ │ │ │ ├── JavaLocalFiles.java │ │ │ │ │ ├── JavaManager.java │ │ │ │ │ └── JavaManifest.java │ │ │ │ ├── setting/ │ │ │ │ │ ├── Accounts.java │ │ │ │ │ ├── AuthlibInjectorServers.java │ │ │ │ │ ├── Config.java │ │ │ │ │ ├── ConfigHolder.java │ │ │ │ │ ├── ConfigUpgrader.java │ │ │ │ │ ├── DownloadProviders.java │ │ │ │ │ ├── EnumBackgroundImage.java │ │ │ │ │ ├── EnumCommonDirectory.java │ │ │ │ │ ├── FontManager.java │ │ │ │ │ ├── GlobalConfig.java │ │ │ │ │ ├── JavaVersionType.java │ │ │ │ │ ├── LauncherVisibility.java │ │ │ │ │ ├── Profile.java │ │ │ │ │ ├── Profiles.java │ │ │ │ │ ├── ProxyManager.java │ │ │ │ │ ├── SambaException.java │ │ │ │ │ ├── Settings.java │ │ │ │ │ ├── StyleSheets.java │ │ │ │ │ ├── VersionIconType.java │ │ │ │ │ └── VersionSetting.java │ │ │ │ ├── terracotta/ │ │ │ │ │ ├── TerracottaBundle.java │ │ │ │ │ ├── TerracottaManager.java │ │ │ │ │ ├── TerracottaMetadata.java │ │ │ │ │ ├── TerracottaNodeList.java │ │ │ │ │ ├── TerracottaState.java │ │ │ │ │ ├── profile/ │ │ │ │ │ │ ├── ProfileKind.java │ │ │ │ │ │ └── TerracottaProfile.java │ │ │ │ │ └── provider/ │ │ │ │ │ ├── AbstractTerracottaProvider.java │ │ │ │ │ ├── GeneralProvider.java │ │ │ │ │ └── MacOSProvider.java │ │ │ │ ├── theme/ │ │ │ │ │ ├── Theme.java │ │ │ │ │ ├── ThemeColor.java │ │ │ │ │ └── Themes.java │ │ │ │ ├── ui/ │ │ │ │ │ ├── Controllers.java │ │ │ │ │ ├── CrashWindow.java │ │ │ │ │ ├── DialogController.java │ │ │ │ │ ├── DialogUtils.java │ │ │ │ │ ├── FXUtils.java │ │ │ │ │ ├── GameCrashWindow.java │ │ │ │ │ ├── HTMLRenderer.java │ │ │ │ │ ├── InstallerItem.java │ │ │ │ │ ├── ListPageBase.java │ │ │ │ │ ├── LogWindow.java │ │ │ │ │ ├── SVG.java │ │ │ │ │ ├── SVGContainer.java │ │ │ │ │ ├── ScrollUtils.java │ │ │ │ │ ├── ToolbarListPageSkin.java │ │ │ │ │ ├── UpgradeDialog.java │ │ │ │ │ ├── WeakListenerHolder.java │ │ │ │ │ ├── WebPage.java │ │ │ │ │ ├── WindowsNativeUtils.java │ │ │ │ │ ├── account/ │ │ │ │ │ │ ├── AccountAdvancedListItem.java │ │ │ │ │ │ ├── AccountListItem.java │ │ │ │ │ │ ├── AccountListItemSkin.java │ │ │ │ │ │ ├── AccountListPage.java │ │ │ │ │ │ ├── AccountListPopupMenu.java │ │ │ │ │ │ ├── AddAuthlibInjectorServerPane.java │ │ │ │ │ │ ├── ClassicAccountLoginDialog.java │ │ │ │ │ │ ├── CreateAccountPane.java │ │ │ │ │ │ ├── MicrosoftAccountLoginPane.java │ │ │ │ │ │ └── OfflineAccountSkinPane.java │ │ │ │ │ ├── animation/ │ │ │ │ │ │ ├── AnimationUtils.java │ │ │ │ │ │ ├── ContainerAnimations.java │ │ │ │ │ │ ├── Motion.java │ │ │ │ │ │ └── TransitionPane.java │ │ │ │ │ ├── construct/ │ │ │ │ │ │ ├── AdvancedListBox.java │ │ │ │ │ │ ├── AdvancedListItem.java │ │ │ │ │ │ ├── AdvancedListItemSkin.java │ │ │ │ │ │ ├── ClassTitle.java │ │ │ │ │ │ ├── ComponentList.java │ │ │ │ │ │ ├── ComponentSublist.java │ │ │ │ │ │ ├── ComponentSublistWrapper.java │ │ │ │ │ │ ├── ControlSkinBase.java │ │ │ │ │ │ ├── DialogAware.java │ │ │ │ │ │ ├── DialogCloseEvent.java │ │ │ │ │ │ ├── DialogPane.java │ │ │ │ │ │ ├── DoubleValidator.java │ │ │ │ │ │ ├── FileSelector.java │ │ │ │ │ │ ├── FloatScrollBarSkin.java │ │ │ │ │ │ ├── FontComboBox.java │ │ │ │ │ │ ├── HintPane.java │ │ │ │ │ │ ├── IconedItem.java │ │ │ │ │ │ ├── IconedMenuItem.java │ │ │ │ │ │ ├── ImageContainer.java │ │ │ │ │ │ ├── ImagePickerItem.java │ │ │ │ │ │ ├── InputDialogPane.java │ │ │ │ │ │ ├── JFXCheckBoxTableCell.java │ │ │ │ │ │ ├── JFXDialogPane.java │ │ │ │ │ │ ├── JFXHyperlink.java │ │ │ │ │ │ ├── LineButton.java │ │ │ │ │ │ ├── LineButtonBase.java │ │ │ │ │ │ ├── LineComponent.java │ │ │ │ │ │ ├── LineFileChooserButton.java │ │ │ │ │ │ ├── LinePane.java │ │ │ │ │ │ ├── LineSelectButton.java │ │ │ │ │ │ ├── LineTextPane.java │ │ │ │ │ │ ├── LineToggleButton.java │ │ │ │ │ │ ├── MDListCell.java │ │ │ │ │ │ ├── MenuSeparator.java │ │ │ │ │ │ ├── MenuUpDownButton.java │ │ │ │ │ │ ├── MessageDialogPane.java │ │ │ │ │ │ ├── MultiFileItem.java │ │ │ │ │ │ ├── Navigator.java │ │ │ │ │ │ ├── NoPaddingComponent.java │ │ │ │ │ │ ├── NoneMultipleSelectionModel.java │ │ │ │ │ │ ├── NumberValidator.java │ │ │ │ │ │ ├── OptionsList.java │ │ │ │ │ │ ├── OptionsListSkin.java │ │ │ │ │ │ ├── PageAware.java │ │ │ │ │ │ ├── PageCloseEvent.java │ │ │ │ │ │ ├── PopupMenu.java │ │ │ │ │ │ ├── PromptDialogPane.java │ │ │ │ │ │ ├── RequiredValidator.java │ │ │ │ │ │ ├── RipplerContainer.java │ │ │ │ │ │ ├── SpinnerPane.java │ │ │ │ │ │ ├── TabControl.java │ │ │ │ │ │ ├── TabHeader.java │ │ │ │ │ │ ├── TaskExecutorDialogPane.java │ │ │ │ │ │ ├── TaskListPane.java │ │ │ │ │ │ ├── TwoLineListItem.java │ │ │ │ │ │ ├── URLValidator.java │ │ │ │ │ │ └── Validator.java │ │ │ │ │ ├── decorator/ │ │ │ │ │ │ ├── Decorator.java │ │ │ │ │ │ ├── DecoratorAnimatedPage.java │ │ │ │ │ │ ├── DecoratorController.java │ │ │ │ │ │ ├── DecoratorPage.java │ │ │ │ │ │ ├── DecoratorSkin.java │ │ │ │ │ │ ├── DecoratorTransitionPage.java │ │ │ │ │ │ └── DecoratorWizardDisplayer.java │ │ │ │ │ ├── download/ │ │ │ │ │ │ ├── AbstractInstallersPage.java │ │ │ │ │ │ ├── AdditionalInstallersPage.java │ │ │ │ │ │ ├── DownloadPage.java │ │ │ │ │ │ ├── InstallersPage.java │ │ │ │ │ │ ├── LocalModpackPage.java │ │ │ │ │ │ ├── ModpackInstallWizardProvider.java │ │ │ │ │ │ ├── ModpackPage.java │ │ │ │ │ │ ├── ModpackSelectionPage.java │ │ │ │ │ │ ├── RemoteModpackPage.java │ │ │ │ │ │ ├── UpdateInstallerWizardProvider.java │ │ │ │ │ │ ├── VanillaInstallWizardProvider.java │ │ │ │ │ │ └── VersionsPage.java │ │ │ │ │ ├── export/ │ │ │ │ │ │ ├── ExportWizardProvider.java │ │ │ │ │ │ ├── ModpackFileSelectionPage.java │ │ │ │ │ │ ├── ModpackInfoPage.java │ │ │ │ │ │ └── ModpackTypeSelectionPage.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── AnimationImage.java │ │ │ │ │ │ ├── ImageLoader.java │ │ │ │ │ │ ├── ImageUtils.java │ │ │ │ │ │ ├── apng/ │ │ │ │ │ │ │ ├── Png.java │ │ │ │ │ │ │ ├── PngAnimationType.java │ │ │ │ │ │ │ ├── PngChunkCode.java │ │ │ │ │ │ │ ├── PngColourType.java │ │ │ │ │ │ │ ├── PngConstants.java │ │ │ │ │ │ │ ├── PngFilter.java │ │ │ │ │ │ │ ├── PngScanlineBuffer.java │ │ │ │ │ │ │ ├── argb8888/ │ │ │ │ │ │ │ │ ├── Argb8888Bitmap.java │ │ │ │ │ │ │ │ ├── Argb8888BitmapSequence.java │ │ │ │ │ │ │ │ ├── Argb8888BitmapSequenceDirector.java │ │ │ │ │ │ │ │ ├── Argb8888Director.java │ │ │ │ │ │ │ │ ├── Argb8888Palette.java │ │ │ │ │ │ │ │ ├── Argb8888Processor.java │ │ │ │ │ │ │ │ ├── Argb8888Processors.java │ │ │ │ │ │ │ │ ├── Argb8888ScanlineProcessor.java │ │ │ │ │ │ │ │ ├── BasicArgb8888Director.java │ │ │ │ │ │ │ │ └── DefaultImageArgb8888Director.java │ │ │ │ │ │ │ ├── chunks/ │ │ │ │ │ │ │ │ ├── PngAnimationControl.java │ │ │ │ │ │ │ │ ├── PngFrameControl.java │ │ │ │ │ │ │ │ ├── PngGamma.java │ │ │ │ │ │ │ │ ├── PngHeader.java │ │ │ │ │ │ │ │ └── PngPalette.java │ │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ │ ├── PngException.java │ │ │ │ │ │ │ │ ├── PngFeatureException.java │ │ │ │ │ │ │ │ └── PngIntegrityException.java │ │ │ │ │ │ │ ├── map/ │ │ │ │ │ │ │ │ ├── PngChunkMap.java │ │ │ │ │ │ │ │ ├── PngMap.java │ │ │ │ │ │ │ │ └── PngMapReader.java │ │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ │ ├── reader/ │ │ │ │ │ │ │ │ ├── BasicScanlineProcessor.java │ │ │ │ │ │ │ │ ├── DefaultPngChunkReader.java │ │ │ │ │ │ │ │ ├── PngAtOnceSource.java │ │ │ │ │ │ │ │ ├── PngChunkProcessor.java │ │ │ │ │ │ │ │ ├── PngChunkReader.java │ │ │ │ │ │ │ │ ├── PngReadHelper.java │ │ │ │ │ │ │ │ ├── PngReader.java │ │ │ │ │ │ │ │ ├── PngScanlineProcessor.java │ │ │ │ │ │ │ │ ├── PngSource.java │ │ │ │ │ │ │ │ └── PngStreamSource.java │ │ │ │ │ │ │ └── util/ │ │ │ │ │ │ │ ├── InputStreamSlice.java │ │ │ │ │ │ │ ├── PartialInflaterInputStream.java │ │ │ │ │ │ │ ├── PngContainer.java │ │ │ │ │ │ │ ├── PngContainerBuilder.java │ │ │ │ │ │ │ └── PngContainerProcessor.java │ │ │ │ │ │ └── internal/ │ │ │ │ │ │ └── AnimationImageImpl.java │ │ │ │ │ ├── main/ │ │ │ │ │ │ ├── AboutPage.java │ │ │ │ │ │ ├── DownloadSettingsPage.java │ │ │ │ │ │ ├── FeedbackPage.java │ │ │ │ │ │ ├── HelpPage.java │ │ │ │ │ │ ├── JavaDownloadDialog.java │ │ │ │ │ │ ├── JavaInstallPage.java │ │ │ │ │ │ ├── JavaManagementPage.java │ │ │ │ │ │ ├── JavaRestorePage.java │ │ │ │ │ │ ├── LauncherSettingsPage.java │ │ │ │ │ │ ├── MainPage.java │ │ │ │ │ │ ├── PersonalizationPage.java │ │ │ │ │ │ ├── RootPage.java │ │ │ │ │ │ └── SettingsPage.java │ │ │ │ │ ├── nbt/ │ │ │ │ │ │ ├── NBTEditorPage.java │ │ │ │ │ │ ├── NBTFileType.java │ │ │ │ │ │ ├── NBTTagType.java │ │ │ │ │ │ └── NBTTreeView.java │ │ │ │ │ ├── profile/ │ │ │ │ │ │ ├── ProfileListItem.java │ │ │ │ │ │ ├── ProfileListItemSkin.java │ │ │ │ │ │ └── ProfilePage.java │ │ │ │ │ ├── skin/ │ │ │ │ │ │ ├── FunctionHelper.java │ │ │ │ │ │ ├── SkinAnimation.java │ │ │ │ │ │ ├── SkinAnimationPlayer.java │ │ │ │ │ │ ├── SkinCanvas.java │ │ │ │ │ │ ├── SkinCube.java │ │ │ │ │ │ ├── SkinGroup.java │ │ │ │ │ │ ├── SkinHelper.java │ │ │ │ │ │ ├── SkinMultipleCubes.java │ │ │ │ │ │ ├── SkinTransition.java │ │ │ │ │ │ └── animation/ │ │ │ │ │ │ ├── SkinAniRunning.java │ │ │ │ │ │ └── SkinAniWavingArms.java │ │ │ │ │ ├── terracotta/ │ │ │ │ │ │ ├── TerracottaControllerPage.java │ │ │ │ │ │ └── TerracottaPage.java │ │ │ │ │ ├── versions/ │ │ │ │ │ │ ├── AdvancedVersionSettingPage.java │ │ │ │ │ │ ├── DatapackListPage.java │ │ │ │ │ │ ├── DatapackListPageSkin.java │ │ │ │ │ │ ├── DownloadListPage.java │ │ │ │ │ │ ├── DownloadPage.java │ │ │ │ │ │ ├── GameAdvancedListItem.java │ │ │ │ │ │ ├── GameItem.java │ │ │ │ │ │ ├── GameListCell.java │ │ │ │ │ │ ├── GameListItem.java │ │ │ │ │ │ ├── GameListPage.java │ │ │ │ │ │ ├── GameListPopupMenu.java │ │ │ │ │ │ ├── HMCLLocalizedDownloadListPage.java │ │ │ │ │ │ ├── InstallerListPage.java │ │ │ │ │ │ ├── ModCheckUpdatesTask.java │ │ │ │ │ │ ├── ModListPage.java │ │ │ │ │ │ ├── ModListPageSkin.java │ │ │ │ │ │ ├── ModTranslations.java │ │ │ │ │ │ ├── ModUpdatesPage.java │ │ │ │ │ │ ├── ResourcepackListPage.java │ │ │ │ │ │ ├── SchematicsPage.java │ │ │ │ │ │ ├── VersionIconDialog.java │ │ │ │ │ │ ├── VersionPage.java │ │ │ │ │ │ ├── VersionSettingsPage.java │ │ │ │ │ │ ├── Versions.java │ │ │ │ │ │ ├── WorldBackupTask.java │ │ │ │ │ │ ├── WorldBackupsPage.java │ │ │ │ │ │ ├── WorldExportPage.java │ │ │ │ │ │ ├── WorldExportPageSkin.java │ │ │ │ │ │ ├── WorldInfoPage.java │ │ │ │ │ │ ├── WorldListPage.java │ │ │ │ │ │ ├── WorldManagePage.java │ │ │ │ │ │ └── WorldManageUIUtils.java │ │ │ │ │ └── wizard/ │ │ │ │ │ ├── AbstractWizardDisplayer.java │ │ │ │ │ ├── Navigation.java │ │ │ │ │ ├── Refreshable.java │ │ │ │ │ ├── SinglePageWizardProvider.java │ │ │ │ │ ├── Summary.java │ │ │ │ │ ├── TaskExecutorDialogWizardDisplayer.java │ │ │ │ │ ├── WizardController.java │ │ │ │ │ ├── WizardDisplayer.java │ │ │ │ │ ├── WizardPage.java │ │ │ │ │ ├── WizardProvider.java │ │ │ │ │ └── WizardSinglePage.java │ │ │ │ ├── upgrade/ │ │ │ │ │ ├── ExecutableHeaderHelper.java │ │ │ │ │ ├── HMCLDownloadTask.java │ │ │ │ │ ├── IntegrityChecker.java │ │ │ │ │ ├── RemoteVersion.java │ │ │ │ │ ├── UpdateChannel.java │ │ │ │ │ ├── UpdateChecker.java │ │ │ │ │ └── UpdateHandler.java │ │ │ │ └── util/ │ │ │ │ ├── AggregatedObservableList.java │ │ │ │ ├── AprilFools.java │ │ │ │ ├── ChunkBaseApp.java │ │ │ │ ├── CrashReporter.java │ │ │ │ ├── FileSaver.java │ │ │ │ ├── JavaFXPatcher.java │ │ │ │ ├── Lazy.java │ │ │ │ ├── NativePatcher.java │ │ │ │ ├── QrCodeUtils.java │ │ │ │ ├── RemoteImageLoader.java │ │ │ │ ├── ResourceNotFoundError.java │ │ │ │ ├── Restarter.java │ │ │ │ ├── SelfDependencyPatcher.java │ │ │ │ ├── SwingFXUtils.java │ │ │ │ ├── TaskCancellationAction.java │ │ │ │ ├── i18n/ │ │ │ │ │ ├── I18n.java │ │ │ │ │ ├── MinecraftWiki.java │ │ │ │ │ ├── SupportedLocale.java │ │ │ │ │ └── translator/ │ │ │ │ │ ├── Translator.java │ │ │ │ │ ├── Translator_en_Qabs.java │ │ │ │ │ └── Translator_lzh.java │ │ │ │ └── url/ │ │ │ │ ├── HMCLURLStreamHandlerProvider.java │ │ │ │ └── data/ │ │ │ │ ├── DataURLConnection.java │ │ │ │ ├── DataURLHandle.java │ │ │ │ └── DataUri.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── services/ │ │ │ │ └── java.net.spi.URLStreamHandlerProvider │ │ │ └── assets/ │ │ │ ├── HMCLauncher.sh │ │ │ ├── about/ │ │ │ │ ├── deps.json │ │ │ │ └── thanks.json │ │ │ ├── css/ │ │ │ │ ├── blue.css │ │ │ │ ├── brightness-dark.css │ │ │ │ ├── brightness-light.css │ │ │ │ ├── font.css │ │ │ │ └── root.css │ │ │ ├── hmcl_signature_publickey.der │ │ │ ├── lang/ │ │ │ │ ├── I18N.properties │ │ │ │ ├── I18N_ar.properties │ │ │ │ ├── I18N_es.properties │ │ │ │ ├── I18N_ja.properties │ │ │ │ ├── I18N_lzh.properties │ │ │ │ ├── I18N_ru.properties │ │ │ │ ├── I18N_uk.properties │ │ │ │ ├── I18N_zh.properties │ │ │ │ └── I18N_zh_CN.properties │ │ │ ├── microsoft_auth.html │ │ │ ├── mod_data.txt │ │ │ ├── modpack_data.txt │ │ │ ├── natives.json │ │ │ ├── openjfx-dependencies.json │ │ │ └── terracotta.json │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── jackhuang/ │ │ │ └── hmcl/ │ │ │ ├── JavaFXLauncher.java │ │ │ ├── setting/ │ │ │ │ └── ThemeColorTest.java │ │ │ ├── ui/ │ │ │ │ ├── GameCrashWindowTest.java │ │ │ │ ├── SVGTest.java │ │ │ │ ├── image/ │ │ │ │ │ ├── ImageUtilsTest.java │ │ │ │ │ └── ImageViewTest.java │ │ │ │ └── skin/ │ │ │ │ ├── SkinCanvasSupport.java │ │ │ │ └── test/ │ │ │ │ └── Test.java │ │ │ └── util/ │ │ │ ├── AggregatedObservableListTest.java │ │ │ ├── i18n/ │ │ │ │ └── translator/ │ │ │ │ └── TranslatorTest.java │ │ │ └── url/ │ │ │ └── data/ │ │ │ └── DataUriTest.java │ │ └── resources/ │ │ └── image/ │ │ └── 16x16.apng │ └── terracotta-template.json ├── HMCLBoot/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── jackhuang/ │ │ │ └── hmcl/ │ │ │ ├── BootProperties.java │ │ │ ├── DesktopUtils.java │ │ │ ├── EntryPoint.java │ │ │ ├── Main.java │ │ │ └── util/ │ │ │ ├── SwingUtils.java │ │ │ └── UTF8Control.java │ │ └── resources/ │ │ └── assets/ │ │ └── lang/ │ │ ├── boot.properties │ │ ├── boot_es.properties │ │ ├── boot_zh.properties │ │ └── boot_zh_Hant.properties │ └── test/ │ └── java/ │ └── org/ │ └── jackhuang/ │ └── hmcl/ │ └── MainTest.java ├── HMCLCore/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── jackhuang/ │ │ │ └── hmcl/ │ │ │ ├── auth/ │ │ │ │ ├── Account.java │ │ │ │ ├── AccountFactory.java │ │ │ │ ├── AuthInfo.java │ │ │ │ ├── AuthenticationException.java │ │ │ │ ├── CharacterDeletedException.java │ │ │ │ ├── CharacterSelector.java │ │ │ │ ├── ClassicAccount.java │ │ │ │ ├── CredentialExpiredException.java │ │ │ │ ├── NoCharacterException.java │ │ │ │ ├── NoSelectedCharacterException.java │ │ │ │ ├── NotLoggedInException.java │ │ │ │ ├── OAuth.java │ │ │ │ ├── OAuthAccount.java │ │ │ │ ├── ServerDisconnectException.java │ │ │ │ ├── ServerResponseMalformedException.java │ │ │ │ ├── authlibinjector/ │ │ │ │ │ ├── AuthlibInjectorAccount.java │ │ │ │ │ ├── AuthlibInjectorAccountFactory.java │ │ │ │ │ ├── AuthlibInjectorArtifactInfo.java │ │ │ │ │ ├── AuthlibInjectorArtifactProvider.java │ │ │ │ │ ├── AuthlibInjectorDnD.java │ │ │ │ │ ├── AuthlibInjectorDownloadException.java │ │ │ │ │ ├── AuthlibInjectorDownloader.java │ │ │ │ │ ├── AuthlibInjectorExtractor.java │ │ │ │ │ ├── AuthlibInjectorProvider.java │ │ │ │ │ ├── AuthlibInjectorServer.java │ │ │ │ │ ├── BoundAuthlibInjectorAccountFactory.java │ │ │ │ │ └── SimpleAuthlibInjectorArtifactProvider.java │ │ │ │ ├── microsoft/ │ │ │ │ │ ├── MicrosoftAccount.java │ │ │ │ │ ├── MicrosoftAccountFactory.java │ │ │ │ │ ├── MicrosoftService.java │ │ │ │ │ └── MicrosoftSession.java │ │ │ │ ├── offline/ │ │ │ │ │ ├── OfflineAccount.java │ │ │ │ │ ├── OfflineAccountFactory.java │ │ │ │ │ ├── Skin.java │ │ │ │ │ ├── Texture.java │ │ │ │ │ └── YggdrasilServer.java │ │ │ │ └── yggdrasil/ │ │ │ │ ├── CompleteGameProfile.java │ │ │ │ ├── GameProfile.java │ │ │ │ ├── PropertyMapSerializer.java │ │ │ │ ├── RemoteAuthenticationException.java │ │ │ │ ├── Texture.java │ │ │ │ ├── TextureModel.java │ │ │ │ ├── TextureType.java │ │ │ │ ├── User.java │ │ │ │ ├── YggdrasilAccount.java │ │ │ │ ├── YggdrasilProvider.java │ │ │ │ ├── YggdrasilService.java │ │ │ │ └── YggdrasilSession.java │ │ │ ├── download/ │ │ │ │ ├── AbstractDependencyManager.java │ │ │ │ ├── ArtifactMalformedException.java │ │ │ │ ├── AutoDownloadProvider.java │ │ │ │ ├── BMCLAPIDownloadProvider.java │ │ │ │ ├── DefaultCacheRepository.java │ │ │ │ ├── DefaultDependencyManager.java │ │ │ │ ├── DefaultGameBuilder.java │ │ │ │ ├── DependencyManager.java │ │ │ │ ├── DownloadProvider.java │ │ │ │ ├── DownloadProviderWrapper.java │ │ │ │ ├── GameBuilder.java │ │ │ │ ├── LibraryAnalyzer.java │ │ │ │ ├── MaintainTask.java │ │ │ │ ├── MojangDownloadProvider.java │ │ │ │ ├── MultipleSourceVersionList.java │ │ │ │ ├── RemoteVersion.java │ │ │ │ ├── UnsupportedInstallationException.java │ │ │ │ ├── VersionList.java │ │ │ │ ├── VersionMismatchException.java │ │ │ │ ├── cleanroom/ │ │ │ │ │ ├── CleanroomInstallTask.java │ │ │ │ │ ├── CleanroomRemoteVersion.java │ │ │ │ │ └── CleanroomVersionList.java │ │ │ │ ├── fabric/ │ │ │ │ │ ├── FabricAPIInstallTask.java │ │ │ │ │ ├── FabricAPIRemoteVersion.java │ │ │ │ │ ├── FabricAPIVersionList.java │ │ │ │ │ ├── FabricInstallTask.java │ │ │ │ │ ├── FabricRemoteVersion.java │ │ │ │ │ └── FabricVersionList.java │ │ │ │ ├── forge/ │ │ │ │ │ ├── ForgeBMCLVersionList.java │ │ │ │ │ ├── ForgeInstall.java │ │ │ │ │ ├── ForgeInstallProfile.java │ │ │ │ │ ├── ForgeInstallTask.java │ │ │ │ │ ├── ForgeNewInstallProfile.java │ │ │ │ │ ├── ForgeNewInstallTask.java │ │ │ │ │ ├── ForgeOldInstallTask.java │ │ │ │ │ ├── ForgeRemoteVersion.java │ │ │ │ │ ├── ForgeVersion.java │ │ │ │ │ ├── ForgeVersionList.java │ │ │ │ │ └── ForgeVersionRoot.java │ │ │ │ ├── game/ │ │ │ │ │ ├── GameAssetDownloadTask.java │ │ │ │ │ ├── GameAssetIndexDownloadTask.java │ │ │ │ │ ├── GameDownloadTask.java │ │ │ │ │ ├── GameInstallTask.java │ │ │ │ │ ├── GameLibrariesTask.java │ │ │ │ │ ├── GameRemoteLatestVersions.java │ │ │ │ │ ├── GameRemoteVersion.java │ │ │ │ │ ├── GameRemoteVersionInfo.java │ │ │ │ │ ├── GameRemoteVersions.java │ │ │ │ │ ├── GameVerificationFixTask.java │ │ │ │ │ ├── GameVersionList.java │ │ │ │ │ ├── LibraryDownloadException.java │ │ │ │ │ ├── LibraryDownloadTask.java │ │ │ │ │ ├── VersionJsonDownloadTask.java │ │ │ │ │ └── VersionJsonSaveTask.java │ │ │ │ ├── java/ │ │ │ │ │ ├── JavaDistribution.java │ │ │ │ │ ├── JavaPackageType.java │ │ │ │ │ ├── JavaRemoteVersion.java │ │ │ │ │ ├── disco/ │ │ │ │ │ │ ├── DiscoFetchJavaListTask.java │ │ │ │ │ │ ├── DiscoJavaDistribution.java │ │ │ │ │ │ ├── DiscoJavaRemoteVersion.java │ │ │ │ │ │ ├── DiscoRemoteFileInfo.java │ │ │ │ │ │ └── DiscoResult.java │ │ │ │ │ └── mojang/ │ │ │ │ │ ├── MojangJavaDistribution.java │ │ │ │ │ ├── MojangJavaDownloadTask.java │ │ │ │ │ ├── MojangJavaDownloads.java │ │ │ │ │ ├── MojangJavaRemoteFiles.java │ │ │ │ │ └── MojangJavaRemoteVersion.java │ │ │ │ ├── legacyfabric/ │ │ │ │ │ ├── LegacyFabricAPIInstallTask.java │ │ │ │ │ ├── LegacyFabricAPIRemoteVersion.java │ │ │ │ │ ├── LegacyFabricAPIVersionList.java │ │ │ │ │ ├── LegacyFabricInstallTask.java │ │ │ │ │ ├── LegacyFabricRemoteVersion.java │ │ │ │ │ └── LegacyFabricVersionList.java │ │ │ │ ├── liteloader/ │ │ │ │ │ ├── LiteLoaderBMCLVersionList.java │ │ │ │ │ ├── LiteLoaderBranch.java │ │ │ │ │ ├── LiteLoaderGameVersions.java │ │ │ │ │ ├── LiteLoaderInstallTask.java │ │ │ │ │ ├── LiteLoaderRemoteVersion.java │ │ │ │ │ ├── LiteLoaderRepository.java │ │ │ │ │ ├── LiteLoaderVersion.java │ │ │ │ │ ├── LiteLoaderVersionList.java │ │ │ │ │ ├── LiteLoaderVersionsMeta.java │ │ │ │ │ └── LiteLoaderVersionsRoot.java │ │ │ │ ├── neoforge/ │ │ │ │ │ ├── NeoForgeBMCLVersionList.java │ │ │ │ │ ├── NeoForgeInstallTask.java │ │ │ │ │ ├── NeoForgeOfficialVersionList.java │ │ │ │ │ ├── NeoForgeOldInstallTask.java │ │ │ │ │ └── NeoForgeRemoteVersion.java │ │ │ │ ├── optifine/ │ │ │ │ │ ├── OptiFineBMCLVersionList.java │ │ │ │ │ ├── OptiFineInstallTask.java │ │ │ │ │ └── OptiFineRemoteVersion.java │ │ │ │ └── quilt/ │ │ │ │ ├── QuiltAPIInstallTask.java │ │ │ │ ├── QuiltAPIRemoteVersion.java │ │ │ │ ├── QuiltAPIVersionList.java │ │ │ │ ├── QuiltInstallTask.java │ │ │ │ ├── QuiltRemoteVersion.java │ │ │ │ └── QuiltVersionList.java │ │ │ ├── event/ │ │ │ │ ├── Event.java │ │ │ │ ├── EventBus.java │ │ │ │ ├── EventManager.java │ │ │ │ ├── EventPriority.java │ │ │ │ ├── GameJsonParseFailedEvent.java │ │ │ │ ├── JVMLaunchFailedEvent.java │ │ │ │ ├── LoadedOneVersionEvent.java │ │ │ │ ├── ProcessExitedAbnormallyEvent.java │ │ │ │ ├── ProcessStoppedEvent.java │ │ │ │ ├── RefreshedVersionsEvent.java │ │ │ │ ├── RefreshingVersionsEvent.java │ │ │ │ ├── RemoveVersionEvent.java │ │ │ │ └── RenameVersionEvent.java │ │ │ ├── game/ │ │ │ │ ├── Argument.java │ │ │ │ ├── Arguments.java │ │ │ │ ├── Artifact.java │ │ │ │ ├── AssetIndex.java │ │ │ │ ├── AssetIndexInfo.java │ │ │ │ ├── AssetObject.java │ │ │ │ ├── ClassicVersion.java │ │ │ │ ├── CompatibilityRule.java │ │ │ │ ├── CrashReportAnalyzer.java │ │ │ │ ├── DefaultGameRepository.java │ │ │ │ ├── DownloadInfo.java │ │ │ │ ├── DownloadType.java │ │ │ │ ├── ExtractRules.java │ │ │ │ ├── GameDirectoryType.java │ │ │ │ ├── GameDumpGenerator.java │ │ │ │ ├── GameException.java │ │ │ │ ├── GameJavaVersion.java │ │ │ │ ├── GameRepository.java │ │ │ │ ├── GameVersion.java │ │ │ │ ├── IdDownloadInfo.java │ │ │ │ ├── JavaVersionConstraint.java │ │ │ │ ├── LaunchOptions.java │ │ │ │ ├── LibrariesDownloadInfo.java │ │ │ │ ├── Library.java │ │ │ │ ├── LibraryDownloadInfo.java │ │ │ │ ├── LoggingInfo.java │ │ │ │ ├── NativesDirectoryType.java │ │ │ │ ├── OSRestriction.java │ │ │ │ ├── ProcessPriority.java │ │ │ │ ├── ProxyOption.java │ │ │ │ ├── QuickPlayOption.java │ │ │ │ ├── ReleaseType.java │ │ │ │ ├── Renderer.java │ │ │ │ ├── RuledArgument.java │ │ │ │ ├── SimpleVersionProvider.java │ │ │ │ ├── StringArgument.java │ │ │ │ ├── Version.java │ │ │ │ ├── VersionJsonType.java │ │ │ │ ├── VersionLibraryBuilder.java │ │ │ │ ├── VersionNotFoundException.java │ │ │ │ ├── VersionProvider.java │ │ │ │ ├── World.java │ │ │ │ ├── WorldLockedException.java │ │ │ │ └── tlauncher/ │ │ │ │ ├── TLauncherLibrary.java │ │ │ │ └── TLauncherVersion.java │ │ │ ├── java/ │ │ │ │ ├── JavaInfo.java │ │ │ │ ├── JavaRepository.java │ │ │ │ └── JavaRuntime.java │ │ │ ├── launch/ │ │ │ │ ├── CommandTooLongException.java │ │ │ │ ├── DefaultLauncher.java │ │ │ │ ├── ExecutionPolicyLimitException.java │ │ │ │ ├── ExitWaiter.java │ │ │ │ ├── Launcher.java │ │ │ │ ├── NotDecompressingNativesException.java │ │ │ │ ├── PermissionException.java │ │ │ │ ├── ProcessCreationException.java │ │ │ │ ├── ProcessListener.java │ │ │ │ └── StreamPump.java │ │ │ ├── mod/ │ │ │ │ ├── Datapack.java │ │ │ │ ├── LocalMod.java │ │ │ │ ├── LocalModFile.java │ │ │ │ ├── MinecraftInstanceTask.java │ │ │ │ ├── MismatchedModpackTypeException.java │ │ │ │ ├── ModAdviser.java │ │ │ │ ├── ModLoaderType.java │ │ │ │ ├── ModManager.java │ │ │ │ ├── Modpack.java │ │ │ │ ├── ModpackCompletionException.java │ │ │ │ ├── ModpackConfiguration.java │ │ │ │ ├── ModpackExportInfo.java │ │ │ │ ├── ModpackInstallTask.java │ │ │ │ ├── ModpackManifest.java │ │ │ │ ├── ModpackProvider.java │ │ │ │ ├── ModpackUpdateTask.java │ │ │ │ ├── RemoteMod.java │ │ │ │ ├── RemoteModRepository.java │ │ │ │ ├── UnsupportedModpackException.java │ │ │ │ ├── curse/ │ │ │ │ │ ├── CurseAddon.java │ │ │ │ │ ├── CurseCompletionTask.java │ │ │ │ │ ├── CurseForgeRemoteModRepository.java │ │ │ │ │ ├── CurseInstallTask.java │ │ │ │ │ ├── CurseManifest.java │ │ │ │ │ ├── CurseManifestFile.java │ │ │ │ │ ├── CurseManifestMinecraft.java │ │ │ │ │ ├── CurseManifestModLoader.java │ │ │ │ │ ├── CurseMetaMod.java │ │ │ │ │ └── CurseModpackProvider.java │ │ │ │ ├── mcbbs/ │ │ │ │ │ ├── McbbsModpackCompletionTask.java │ │ │ │ │ ├── McbbsModpackExportTask.java │ │ │ │ │ ├── McbbsModpackLocalInstallTask.java │ │ │ │ │ ├── McbbsModpackManifest.java │ │ │ │ │ ├── McbbsModpackProvider.java │ │ │ │ │ └── McbbsModpackRemoteInstallTask.java │ │ │ │ ├── modinfo/ │ │ │ │ │ ├── FabricModMetadata.java │ │ │ │ │ ├── ForgeNewModMetadata.java │ │ │ │ │ ├── ForgeOldModMetadata.java │ │ │ │ │ ├── ForgeOldModMetadataLst.java │ │ │ │ │ ├── LiteModMetadata.java │ │ │ │ │ ├── PackMcMeta.java │ │ │ │ │ └── QuiltModMetadata.java │ │ │ │ ├── modrinth/ │ │ │ │ │ ├── ModrinthCompletionTask.java │ │ │ │ │ ├── ModrinthInstallTask.java │ │ │ │ │ ├── ModrinthManifest.java │ │ │ │ │ ├── ModrinthModpackExportTask.java │ │ │ │ │ ├── ModrinthModpackProvider.java │ │ │ │ │ └── ModrinthRemoteModRepository.java │ │ │ │ ├── multimc/ │ │ │ │ │ ├── MultiMCComponents.java │ │ │ │ │ ├── MultiMCInstanceConfiguration.java │ │ │ │ │ ├── MultiMCInstancePatch.java │ │ │ │ │ ├── MultiMCManifest.java │ │ │ │ │ ├── MultiMCModpackExportTask.java │ │ │ │ │ ├── MultiMCModpackInstallTask.java │ │ │ │ │ └── MultiMCModpackProvider.java │ │ │ │ └── server/ │ │ │ │ ├── ServerModpackCompletionTask.java │ │ │ │ ├── ServerModpackExportTask.java │ │ │ │ ├── ServerModpackLocalInstallTask.java │ │ │ │ ├── ServerModpackManifest.java │ │ │ │ ├── ServerModpackProvider.java │ │ │ │ └── ServerModpackRemoteInstallTask.java │ │ │ ├── resourcepack/ │ │ │ │ ├── ResourcepackFile.java │ │ │ │ ├── ResourcepackFolder.java │ │ │ │ └── ResourcepackZipFile.java │ │ │ ├── schematic/ │ │ │ │ └── LitematicFile.java │ │ │ ├── task/ │ │ │ │ ├── AsyncTaskExecutor.java │ │ │ │ ├── CacheFileTask.java │ │ │ │ ├── CompletableFutureTask.java │ │ │ │ ├── DownloadException.java │ │ │ │ ├── FetchTask.java │ │ │ │ ├── FileDownloadTask.java │ │ │ │ ├── GetTask.java │ │ │ │ ├── Schedulers.java │ │ │ │ ├── Task.java │ │ │ │ ├── TaskCompletableFuture.java │ │ │ │ ├── TaskEvent.java │ │ │ │ ├── TaskExecutor.java │ │ │ │ └── TaskListener.java │ │ │ └── util/ │ │ │ ├── ByteArray.java │ │ │ ├── CacheRepository.java │ │ │ ├── CircularArrayList.java │ │ │ ├── Constants.java │ │ │ ├── DataSizeUnit.java │ │ │ ├── DigestUtils.java │ │ │ ├── FXThread.java │ │ │ ├── FutureCallback.java │ │ │ ├── Holder.java │ │ │ ├── Immutable.java │ │ │ ├── InfiniteSizeList.java │ │ │ ├── InvocationDispatcher.java │ │ │ ├── KeyUtils.java │ │ │ ├── KeyValuePairUtils.java │ │ │ ├── Lang.java │ │ │ ├── Log4jLevel.java │ │ │ ├── MurmurHash2.java │ │ │ ├── Pair.java │ │ │ ├── Result.java │ │ │ ├── ServerAddress.java │ │ │ ├── SettingsMap.java │ │ │ ├── SimpleMultimap.java │ │ │ ├── StringUtils.java │ │ │ ├── ToStringBuilder.java │ │ │ ├── TypeUtils.java │ │ │ ├── function/ │ │ │ │ ├── ExceptionalBiConsumer.java │ │ │ │ ├── ExceptionalBiFunction.java │ │ │ │ ├── ExceptionalConsumer.java │ │ │ │ ├── ExceptionalFunction.java │ │ │ │ ├── ExceptionalPredicate.java │ │ │ │ ├── ExceptionalRunnable.java │ │ │ │ └── ExceptionalSupplier.java │ │ │ ├── gson/ │ │ │ │ ├── EnumOrdinalDeserializer.java │ │ │ │ ├── InstantTypeAdapter.java │ │ │ │ ├── JsonMap.java │ │ │ │ ├── JsonSerializable.java │ │ │ │ ├── JsonSubtype.java │ │ │ │ ├── JsonType.java │ │ │ │ ├── JsonTypeAdapterFactory.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── LowerCaseEnumTypeAdapterFactory.java │ │ │ │ ├── ObservableSetting.java │ │ │ │ ├── PaintAdapter.java │ │ │ │ ├── PathTypeAdapter.java │ │ │ │ ├── RawPreservingObjectProperty.java │ │ │ │ ├── RawPreservingProperty.java │ │ │ │ ├── TolerableValidationException.java │ │ │ │ ├── UUIDTypeAdapter.java │ │ │ │ ├── Validation.java │ │ │ │ └── ValidationTypeAdapterFactory.java │ │ │ ├── i18n/ │ │ │ │ ├── DefaultResourceBundleControl.java │ │ │ │ ├── LocaleUtils.java │ │ │ │ ├── LocalizedText.java │ │ │ │ └── TextDirection.java │ │ │ ├── io/ │ │ │ │ ├── CSVTable.java │ │ │ │ ├── ChecksumMismatchException.java │ │ │ │ ├── CompressingUtils.java │ │ │ │ ├── ContentEncoding.java │ │ │ │ ├── DirectoryStructurePrinter.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── HttpMultipartRequest.java │ │ │ │ ├── HttpRequest.java │ │ │ │ ├── HttpServer.java │ │ │ │ ├── IOUtils.java │ │ │ │ ├── JarUtils.java │ │ │ │ ├── NetworkUtils.java │ │ │ │ ├── ResponseCodeException.java │ │ │ │ ├── Unzipper.java │ │ │ │ └── Zipper.java │ │ │ ├── javafx/ │ │ │ │ ├── AutomatedToggleGroup.java │ │ │ │ ├── BindingMapping.java │ │ │ │ ├── DirtyTracker.java │ │ │ │ ├── ExtendedProperties.java │ │ │ │ ├── MappedObservableList.java │ │ │ │ ├── MappedProperty.java │ │ │ │ ├── ObservableCache.java │ │ │ │ ├── ObservableHelper.java │ │ │ │ ├── ObservableOptionalCache.java │ │ │ │ ├── PropertyUtils.java │ │ │ │ ├── ReadWriteComposedProperty.java │ │ │ │ └── SafeStringConverter.java │ │ │ ├── logging/ │ │ │ │ ├── CallerFinder.java │ │ │ │ ├── LogEvent.java │ │ │ │ └── Logger.java │ │ │ ├── platform/ │ │ │ │ ├── Architecture.java │ │ │ │ ├── Bits.java │ │ │ │ ├── CommandBuilder.java │ │ │ │ ├── ManagedProcess.java │ │ │ │ ├── NativeUtils.java │ │ │ │ ├── OSVersion.java │ │ │ │ ├── OperatingSystem.java │ │ │ │ ├── Platform.java │ │ │ │ ├── SystemInfo.java │ │ │ │ ├── SystemUtils.java │ │ │ │ ├── UnsupportedPlatformException.java │ │ │ │ ├── hardware/ │ │ │ │ │ ├── CentralProcessor.java │ │ │ │ │ ├── FastFetchUtils.java │ │ │ │ │ ├── GraphicsCard.java │ │ │ │ │ ├── HardwareDetector.java │ │ │ │ │ ├── HardwareVendor.java │ │ │ │ │ └── PhysicalMemoryStatus.java │ │ │ │ ├── linux/ │ │ │ │ │ ├── LinuxCPUDetector.java │ │ │ │ │ ├── LinuxGPUDetector.java │ │ │ │ │ └── LinuxHardwareDetector.java │ │ │ │ ├── macos/ │ │ │ │ │ └── MacOSHardwareDetector.java │ │ │ │ └── windows/ │ │ │ │ ├── Advapi32.java │ │ │ │ ├── Dwmapi.java │ │ │ │ ├── Kernel32.java │ │ │ │ ├── WinConstants.java │ │ │ │ ├── WinReg.java │ │ │ │ ├── WinTypes.java │ │ │ │ ├── WindowsCPUDetector.java │ │ │ │ ├── WindowsGPUDetector.java │ │ │ │ └── WindowsHardwareDetector.java │ │ │ ├── skin/ │ │ │ │ ├── InvalidSkinException.java │ │ │ │ └── NormalizedSkin.java │ │ │ ├── tree/ │ │ │ │ ├── ArchiveFileTree.java │ │ │ │ ├── TarFileTree.java │ │ │ │ └── ZipFileTree.java │ │ │ └── versioning/ │ │ │ ├── GameVersionNumber.java │ │ │ ├── VersionNumber.java │ │ │ └── VersionRange.java │ │ └── resources/ │ │ └── assets/ │ │ ├── game/ │ │ │ ├── log4j2-1.12-debug.xml │ │ │ ├── log4j2-1.12.xml │ │ │ ├── log4j2-1.7-debug.xml │ │ │ ├── log4j2-1.7.xml │ │ │ ├── unlisted-versions.json │ │ │ ├── version-alias.csv │ │ │ └── versions.txt │ │ ├── lang/ │ │ │ ├── default_script.csv │ │ │ ├── language_aliases.csv │ │ │ ├── sublanguages.csv │ │ │ └── upside_down.txt │ │ └── platform/ │ │ └── amdgpu.ids │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── jackhuang/ │ │ └── hmcl/ │ │ ├── JavaFXLauncher.java │ │ ├── game/ │ │ │ └── CrashReportAnalyzerTest.java │ │ ├── mod/ │ │ │ └── curse/ │ │ │ └── CurseForgeRemoteModRepositoryTest.java │ │ ├── schematic/ │ │ │ └── LitematicFileTest.java │ │ └── util/ │ │ ├── ByteArrayTest.java │ │ ├── CircularArrayListTest.java │ │ ├── DataSizeUnitTest.java │ │ ├── KeyValuePairUtilsTest.java │ │ ├── OSVersionTest.java │ │ ├── ServerAddressTest.java │ │ ├── StringUtilsTest.java │ │ ├── TaskTest.java │ │ ├── TokenizerTest.java │ │ ├── gson/ │ │ │ ├── InstantTypeAdapterTest.java │ │ │ └── JsonUtilsTest.java │ │ ├── i18n/ │ │ │ └── LocaleUtilsTest.java │ │ ├── io/ │ │ │ ├── CSVTableTest.java │ │ │ ├── CompressingUtilsTest.java │ │ │ ├── FileUtilsTest.java │ │ │ └── NetworkUtilsTest.java │ │ ├── javafx/ │ │ │ └── MappedObservableListTest.java │ │ ├── platform/ │ │ │ ├── JavaRuntimeTest.java │ │ │ ├── hardware/ │ │ │ │ ├── CentralProcessorTest.java │ │ │ │ └── GraphicsCardTest.java │ │ │ └── windows/ │ │ │ ├── WinRegTest.java │ │ │ └── WindowsVersionTest.java │ │ ├── skin/ │ │ │ └── NormalizedSkinTest.java │ │ ├── tree/ │ │ │ └── ZipFileTreeTest.java │ │ └── versioning/ │ │ ├── GameVersionNumberTest.java │ │ ├── VersionNumberTest.java │ │ └── VersionRangeTest.java │ └── resources/ │ ├── crash-report/ │ │ ├── config.txt │ │ ├── debug_crash.txt │ │ ├── file_already_exists.txt │ │ ├── forge_error.txt │ │ ├── graphics_driver.txt │ │ ├── loader_exception_mod_crash.txt │ │ ├── loader_exception_mod_crash2.txt │ │ ├── loader_exception_mod_crash3.txt │ │ ├── loader_exception_mod_crash4.txt │ │ ├── loading_error_fabric.txt │ │ ├── mod/ │ │ │ ├── bettersprinting.txt │ │ │ ├── creativemd.txt │ │ │ ├── customnpc.txt │ │ │ ├── customskinloader.txt │ │ │ ├── flammpfeil.txt │ │ │ ├── ic2.txt │ │ │ ├── icycream.txt │ │ │ ├── mapletree.txt │ │ │ ├── nei.txt │ │ │ ├── neoforgeforest_optifine_incompatibility.txt │ │ │ ├── netease.txt │ │ │ ├── performant_optifine_incompatibility.txt │ │ │ ├── shadersmodcore.txt │ │ │ ├── tconstruct.txt │ │ │ ├── thaumcraft.txt │ │ │ ├── twilightforest.txt │ │ │ ├── twilightforest_optifine_incompatibility.txt │ │ │ └── wizardry.txt │ │ ├── mod_resolution0.txt │ │ ├── need_jdk11.txt │ │ ├── need_jdk112.txt │ │ ├── need_jdk113.txt │ │ ├── night_config_fixes.txt │ │ ├── no_class_def_found_error.txt │ │ ├── no_class_def_found_error2.txt │ │ ├── out_of_memory.txt │ │ ├── processing_of_javaagent_failed.txt │ │ ├── resourcepack_resolution.txt │ │ ├── rtss_forest_sodium.txt │ │ ├── security.txt │ │ ├── splashscreen.txt │ │ ├── too_old_java.txt │ │ └── too_old_java2.txt │ ├── game-json/ │ │ └── tlauncher.json │ ├── logs/ │ │ ├── bootstrap.txt │ │ ├── crash-report.txt │ │ ├── duplicated_mod.txt │ │ ├── fabric-minecraft.txt │ │ ├── fabric-mod-conflict.txt │ │ ├── fabric-mod-missing.txt │ │ ├── fabric-version-0.12.txt │ │ ├── fabric_warnings.txt │ │ ├── fabric_warnings2.txt │ │ ├── fabric_warnings3.txt │ │ ├── failed_to_load_a_library.txt │ │ ├── forge_found_duplicate_mods.txt │ │ ├── forge_repeat_installation.txt │ │ ├── forge_repeat_installation2.txt │ │ ├── forgemod_resolution.txt │ │ ├── graphics_driver.txt │ │ ├── incomplete_forge_installation.txt │ │ ├── incomplete_forge_installation2.txt │ │ ├── incomplete_forge_installation3.txt │ │ ├── incomplete_forge_installation4.txt │ │ ├── incomplete_forge_installation5.txt │ │ ├── incomplete_forge_installation6.txt │ │ ├── incomplete_forge_installation7.txt │ │ ├── install_mixinbootstrap.txt │ │ ├── jade_forest_optifine.txt │ │ ├── java9.txt │ │ ├── java_version_is_too_high.txt │ │ ├── jvm_32bit.txt │ │ ├── jvm_32bit2.txt │ │ ├── macos_failed_to_find_service_port_for_display.txt │ │ ├── memory_exceeded.txt │ │ ├── mixin_apply_mod_failed.txt │ │ ├── mod_name.txt │ │ ├── mod_resolution.txt │ │ ├── mod_resolution_collection.txt │ │ ├── openj9-unsupported_charset.txt │ │ ├── openj9.txt │ │ ├── optifine_is_not_compatible_with_forge.txt │ │ ├── optifine_is_not_compatible_with_forge2.txt │ │ ├── optifine_is_not_compatible_with_forge3.txt │ │ ├── optifine_is_not_compatible_with_forge4.txt │ │ ├── optifine_is_not_compatible_with_forge5.txt │ │ ├── optifine_is_not_compatible_with_forge6.txt │ │ ├── optifine_repeat_installation.txt │ │ ├── out_of_memory.txt │ │ ├── out_of_memory2.txt │ │ ├── shaders_mod.txt │ │ ├── too_old_java.txt │ │ └── unsatisfied_link_error.txt │ └── schematics/ │ └── test.litematic ├── LICENSE ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── jackhuang/ │ │ └── hmcl/ │ │ └── gradle/ │ │ ├── TerracottaConfigUpgradeTask.java │ │ ├── ci/ │ │ │ ├── CheckUpdate.java │ │ │ ├── GitHubActionUtils.java │ │ │ └── JenkinsUtils.java │ │ ├── docs/ │ │ │ ├── Document.java │ │ │ ├── DocumentFileTree.java │ │ │ ├── DocumentLocale.java │ │ │ ├── LocalizedDocument.java │ │ │ ├── MacroProcessor.java │ │ │ └── UpdateDocuments.java │ │ ├── javafx/ │ │ │ ├── JavaFXPlatform.java │ │ │ ├── JavaFXUtils.java │ │ │ └── JavaFXVersionType.java │ │ ├── l10n/ │ │ │ ├── CheckTranslations.java │ │ │ ├── CreateLanguageList.java │ │ │ ├── CreateLocaleNamesResourceBundle.java │ │ │ ├── LocalizationUtils.java │ │ │ ├── ParseLanguageSubtagRegistry.java │ │ │ └── UpsideDownTranslate.java │ │ ├── mod/ │ │ │ └── ParseModDataTask.java │ │ └── utils/ │ │ └── PropertiesUtils.java │ └── resources/ │ └── org/ │ └── jackhuang/ │ └── hmcl/ │ └── gradle/ │ └── l10n/ │ ├── LocaleNamesOverride.properties │ ├── LocaleNamesOverride_lzh.properties │ ├── LocaleNamesOverride_zh.properties │ └── LocaleNamesOverride_zh_Hant.properties ├── config/ │ ├── checkstyle/ │ │ └── checkstyle.xml │ ├── jenkins/ │ │ ├── config-jenkins.sh │ │ ├── dev/ │ │ │ └── Jenkinsfile │ │ └── stable/ │ │ └── Jenkinsfile │ └── project.properties ├── docs/ │ ├── Contributing.md │ ├── Contributing_zh.md │ ├── Contributing_zh_Hant.md │ ├── Localization.md │ ├── Localization_zh.md │ ├── Localization_zh_Hant.md │ ├── PLATFORM.md │ ├── PLATFORM_zh.md │ ├── PLATFORM_zh_Hant.md │ ├── README.md │ ├── README_en_Qabs.md │ ├── README_es.md │ ├── README_ja.md │ ├── README_lzh.md │ ├── README_ru.md │ ├── README_uk.md │ ├── README_zh.md │ ├── README_zh_Hant.md │ ├── ReleaseSchedule.md │ ├── ReleaseSchedule_zh.md │ └── ReleaseSchedule_zh_Hant.md ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lib/ │ └── JFoenix.jar ├── minecraft/ │ └── libraries/ │ ├── HMCLMultiMCBootstrap/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── jackhuang/ │ │ └── hmcl/ │ │ └── HMCLMultiMCBootstrap.java │ └── HMCLTransformerDiscoveryService/ │ ├── build.gradle.kts │ ├── lib/ │ │ └── modlauncher-4.1.0.jar │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── jackhuang/ │ │ └── hmcl/ │ │ └── HMCLTransformerDiscoveryService.java │ └── resources/ │ └── META-INF/ │ └── services/ │ └── cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService └── settings.gradle.kts
Showing preview only (863K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10106 symbols across 855 files)
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXButton.java
class JFXButton (line 29) | public class JFXButton extends Button {
method JFXButton (line 34) | public JFXButton() {
method JFXButton (line 38) | public JFXButton(String text) {
method JFXButton (line 43) | public JFXButton(String text, Node graphic) {
method initialize (line 48) | private void initialize() {
method createDefaultSkin (line 52) | protected Skin<?> createDefaultSkin() {
method ripplerFillProperty (line 58) | public final ObjectProperty<Paint> ripplerFillProperty() {
method getRipplerFill (line 62) | public final Paint getRipplerFill() {
method setRipplerFill (line 66) | public final void setRipplerFill(Paint ripplerFill) {
method getButtonType (line 73) | public ButtonType getButtonType() {
method buttonTypeProperty (line 77) | public StyleableObjectProperty<ButtonType> buttonTypeProperty() {
method setButtonType (line 81) | public void setButtonType(ButtonType type) {
method getControlCssMetaData (line 85) | public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData...
method getClassCssMetaData (line 96) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
method layoutChildren (line 100) | protected void layoutChildren() {
type ButtonType (line 105) | public enum ButtonType {
class StyleableProperties (line 110) | private static final class StyleableProperties {
method isSettable (line 116) | public boolean isSettable(JFXButton control) {
method getStyleableProperty (line 120) | public StyleableProperty<ButtonType> getStyleableProperty(JFXButton ...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXCheckBox.java
class JFXCheckBox (line 40) | public class JFXCheckBox extends CheckBox {
method JFXCheckBox (line 42) | public JFXCheckBox(String text) {
method JFXCheckBox (line 47) | public JFXCheckBox() {
method initialize (line 51) | private void initialize() {
method createDefaultSkin (line 55) | @Override
method checkedColorProperty (line 77) | public StyleableObjectProperty<Paint> checkedColorProperty() {
method getCheckedColor (line 87) | public Paint getCheckedColor() {
method setCheckedColor (line 91) | public void setCheckedColor(Paint color) {
method unCheckedColorProperty (line 102) | public StyleableObjectProperty<Paint> unCheckedColorProperty() {
method getUnCheckedColor (line 112) | public Paint getUnCheckedColor() {
method setUnCheckedColor (line 116) | public void setUnCheckedColor(Paint color) {
class StyleableProperties (line 120) | private static final class StyleableProperties {
method isSettable (line 124) | @Override
method getStyleableProperty (line 129) | @Override
method isSettable (line 137) | @Override
method getStyleableProperty (line 142) | @Override
method getControlCssMetaData (line 160) | @Override
method getClassCssMetaData (line 165) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXClippedPane.java
class JFXClippedPane (line 35) | public class JFXClippedPane extends StackPane {
method JFXClippedPane (line 39) | public JFXClippedPane() {
method JFXClippedPane (line 44) | public JFXClippedPane(Node... children) {
method init (line 49) | private void init() {
method layoutChildren (line 55) | @Override
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXColorPicker.java
class JFXColorPicker (line 43) | public class JFXColorPicker extends ColorPicker {
method JFXColorPicker (line 48) | public JFXColorPicker() {
method JFXColorPicker (line 55) | public JFXColorPicker(Color color) {
method createDefaultSkin (line 63) | @Override
method initialize (line 68) | private void initialize() {
method getPreDefinedColors (line 82) | public double[] getPreDefinedColors() {
method setPreDefinedColors (line 86) | public void setPreDefinedColors(double[] preDefinedColors) {
method disableAnimationProperty (line 98) | public final StyleableBooleanProperty disableAnimationProperty() {
method isDisableAnimation (line 102) | public final Boolean isDisableAnimation() {
method setDisableAnimation (line 106) | public final void setDisableAnimation(final Boolean disabled) {
class StyleableProperties (line 110) | private static final class StyleableProperties {
method isSettable (line 115) | @Override
method getStyleableProperty (line 120) | @Override
method getControlCssMetaData (line 137) | @Override
method getClassCssMetaData (line 142) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXComboBox.java
class JFXComboBox (line 54) | public class JFXComboBox<T> extends ComboBox<T> {
method JFXComboBox (line 59) | public JFXComboBox() {
method JFXComboBox (line 66) | public JFXComboBox(ObservableList<T> items) {
method initialize (line 71) | private void initialize() {
method createDefaultSkin (line 108) | @Override
method nodeConverterProperty (line 131) | public ObjectProperty<NodeConverter<T>> nodeConverterProperty() {
method setNodeConverter (line 138) | public final void setNodeConverter(NodeConverter<T> value) {
method getNodeConverter (line 142) | public final NodeConverter<T> getNodeConverter() {
method defaultNodeConverter (line 146) | private static <T> NodeConverter<T> defaultNodeConverter() {
method updateDisplayText (line 184) | private boolean updateDisplayText(ListCell<T> cell, T item, boolean em...
method labelFloatProperty (line 229) | public final StyleableBooleanProperty labelFloatProperty() {
method isLabelFloat (line 233) | public final boolean isLabelFloat() {
method setLabelFloat (line 237) | public final void setLabelFloat(final boolean labelFloat) {
method getUnFocusColor (line 251) | public Paint getUnFocusColor() {
method unFocusColorProperty (line 255) | public StyleableObjectProperty<Paint> unFocusColorProperty() {
method setUnFocusColor (line 259) | public void setUnFocusColor(Paint color) {
method getFocusColor (line 271) | public Paint getFocusColor() {
method focusColorProperty (line 275) | public StyleableObjectProperty<Paint> focusColorProperty() {
method setFocusColor (line 279) | public void setFocusColor(Paint color) {
class StyleableProperties (line 283) | private final static class StyleableProperties {
method isSettable (line 288) | @Override
method getStyleableProperty (line 293) | @Override
method isSettable (line 302) | @Override
method getStyleableProperty (line 307) | @Override
method isSettable (line 316) | @Override
method getStyleableProperty (line 321) | @Override
method getControlCssMetaData (line 341) | @Override
method getClassCssMetaData (line 353) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXDialog.java
class JFXDialog (line 69) | @DefaultProperty(value = "content")
type DialogTransition (line 75) | public enum DialogTransition {
method JFXDialog (line 91) | public JFXDialog() {
method JFXDialog (line 96) | public JFXDialog(DialogTransition transition) {
method JFXDialog (line 112) | public JFXDialog(StackPane dialogContainer, Region content, DialogTran...
method JFXDialog (line 130) | public JFXDialog(StackPane dialogContainer, Region content, DialogTran...
method initChangeListeners (line 140) | private void initChangeListeners() {
method initialize (line 150) | private void initialize() {
method getDialogContainer (line 182) | public StackPane getDialogContainer() {
method setDialogContainer (line 188) | public void setDialogContainer(StackPane dialogContainer) {
method getContent (line 199) | public Region getContent() {
method setContent (line 204) | public void setContent(Region content) {
method overlayCloseProperty (line 215) | public final BooleanProperty overlayCloseProperty() {
method isOverlayClose (line 219) | public final boolean isOverlayClose() {
method setOverlayClose (line 223) | public final void setOverlayClose(final boolean overlayClose) {
method isCacheContainer (line 233) | public boolean isCacheContainer() {
method cacheContainerProperty (line 237) | public BooleanProperty cacheContainerProperty() {
method setCacheContainer (line 241) | public void setCacheContainer(boolean cacheContainer) {
method show (line 246) | public void show(StackPane dialogContainer) {
method show (line 256) | public void show() {
method showDialog (line 261) | private void showDialog() {
method close (line 296) | public void close() {
method closeDialog (line 310) | private void closeDialog() {
method getShowAnimation (line 326) | private Transition getShowAnimation(DialogTransition transitionType) {
method resetProperties (line 351) | private void resetProperties() {
class CenterTransition (line 359) | private final class CenterTransition extends CachedTransition {
method CenterTransition (line 362) | CenterTransition() {
method getTransitionType (line 412) | public DialogTransition getTransitionType() {
method transitionTypeProperty (line 416) | public StyleableObjectProperty<DialogTransition> transitionTypePropert...
method setTransitionType (line 420) | public void setTransitionType(DialogTransition transition) {
class StyleableProperties (line 424) | private static final class StyleableProperties {
method isSettable (line 429) | @Override
method getStyleableProperty (line 434) | @Override
method getCssMetaData (line 452) | @Override
method getClassCssMetaData (line 457) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
method invalidated (line 469) | @Override
method getBean (line 474) | @Override
method getName (line 479) | @Override
method onDialogClosedProperty (line 489) | public ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogCl...
method setOnDialogClosed (line 493) | public void setOnDialogClosed(EventHandler<? super JFXDialogEvent> han...
method getOnDialogClosed (line 497) | public EventHandler<? super JFXDialogEvent> getOnDialogClosed() {
method invalidated (line 502) | @Override
method getBean (line 507) | @Override
method getName (line 512) | @Override
method onDialogOpenedProperty (line 522) | public ObjectProperty<EventHandler<? super JFXDialogEvent>> onDialogOp...
method setOnDialogOpened (line 526) | public void setOnDialogOpened(EventHandler<? super JFXDialogEvent> han...
method getOnDialogOpened (line 530) | public EventHandler<? super JFXDialogEvent> getOnDialogOpened() {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXDialogLayout.java
class JFXDialogLayout (line 18) | public class JFXDialogLayout extends StackPane {
method computeMinWidth (line 22) | protected double computeMinWidth(double height) {
method computeMinHeight (line 38) | protected double computeMinHeight(double width) {
method JFXDialogLayout (line 57) | public JFXDialogLayout() {
method getHeading (line 76) | public ObservableList<Node> getHeading() {
method setHeading (line 80) | public void setHeading(Node... titleContent) {
method getBody (line 84) | public ObservableList<Node> getBody() {
method setBody (line 88) | public void setBody(Node... body) {
method getActions (line 92) | public ObservableList<Node> getActions() {
method setActions (line 96) | public void setActions(Node... actions) {
method setActions (line 100) | public void setActions(List<? extends Node> actions) {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXListCell.java
class JFXListCell (line 52) | public class JFXListCell<T> extends ListCell<T> {
method getMask (line 55) | @Override
method positionControl (line 65) | @Override
method JFXListCell (line 81) | public JFXListCell() {
method initListeners (line 89) | private void initListeners() {
method layoutChildren (line 123) | @Override
method makeChildrenTransparent (line 184) | protected void makeChildrenTransparent() {
method updateItem (line 200) | @Override
method initialize (line 255) | private void initialize() {
method computePrefHeight (line 260) | @Override
method getGap (line 266) | private double getGap() {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXListView.java
class JFXListView (line 38) | public class JFXListView<T> extends ListView<T> {
method JFXListView (line 43) | public JFXListView() {
method createDefaultSkin (line 51) | @Override
method depthProperty (line 58) | public IntegerProperty depthProperty() {
method getDepth (line 65) | public int getDepth() {
method setDepth (line 69) | public void setDepth(int depth) {
method currentVerticalGapProperty (line 75) | DoubleProperty currentVerticalGapProperty() {
method updateVerticalGap (line 82) | private void updateVerticalGap() {
method showTooltipProperty (line 95) | public final BooleanProperty showTooltipProperty() {
method isShowTooltip (line 102) | public final boolean isShowTooltip() {
method setShowTooltip (line 106) | public final void setShowTooltip(final boolean showTooltip) {
method initialize (line 122) | private void initialize() {
method propagateMouseEventsToParent (line 129) | public void propagateMouseEventsToParent() {
method verticalGapProperty (line 138) | public StyleableDoubleProperty verticalGapProperty() {
method getVerticalGap (line 165) | public Double getVerticalGap() {
method setVerticalGap (line 169) | public void setVerticalGap(Double gap) {
method expandedProperty (line 175) | public StyleableBooleanProperty expandedProperty() {
method isExpanded (line 203) | public Boolean isExpanded() {
method setExpanded (line 207) | public void setExpanded(Boolean expanded) {
class StyleableProperties (line 211) | private static final class StyleableProperties {
method isSettable (line 215) | @Override
method getStyleableProperty (line 220) | @Override
method isSettable (line 228) | @Override
method getStyleableProperty (line 234) | @Override
method getControlCssMetaData (line 249) | @Override
method getClassCssMetaData (line 254) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXPasswordField.java
class JFXPasswordField (line 52) | public class JFXPasswordField extends PasswordField {
method JFXPasswordField (line 57) | public JFXPasswordField() {
method createDefaultSkin (line 64) | @Override
method initialize (line 69) | private void initialize() {
method getActiveValidator (line 98) | public ValidatorBase getActiveValidator() {
method activeValidatorProperty (line 102) | public ReadOnlyObjectProperty<ValidatorBase> activeValidatorProperty() {
method getValidators (line 112) | public ObservableList<ValidatorBase> getValidators() {
method setValidators (line 116) | public void setValidators(ValidatorBase... validators) {
method validate (line 126) | public boolean validate() {
method resetValidation (line 141) | public void resetValidation() {
method labelFloatProperty (line 157) | public final StyleableBooleanProperty labelFloatProperty() {
method isLabelFloat (line 161) | public final boolean isLabelFloat() {
method setLabelFloat (line 165) | public final void setLabelFloat(final boolean labelFloat) {
method getUnFocusColor (line 174) | public Paint getUnFocusColor() {
method unFocusColorProperty (line 178) | public StyleableObjectProperty<Paint> unFocusColorProperty() {
method setUnFocusColor (line 182) | public void setUnFocusColor(Paint color) {
method getFocusColor (line 191) | public Paint getFocusColor() {
method focusColorProperty (line 195) | public StyleableObjectProperty<Paint> focusColorProperty() {
method setFocusColor (line 199) | public void setFocusColor(Paint color) {
method disableAnimationProperty (line 208) | public final StyleableBooleanProperty disableAnimationProperty() {
method isDisableAnimation (line 212) | public final Boolean isDisableAnimation() {
method setDisableAnimation (line 216) | public final void setDisableAnimation(final Boolean disabled) {
class StyleableProperties (line 220) | private final static class StyleableProperties {
method isSettable (line 222) | @Override
method getStyleableProperty (line 227) | @Override
method isSettable (line 233) | @Override
method getStyleableProperty (line 238) | @Override
method isSettable (line 245) | @Override
method getStyleableProperty (line 250) | @Override
method isSettable (line 257) | @Override
method getStyleableProperty (line 262) | @Override
method getControlCssMetaData (line 281) | @Override
method getClassCssMetaData (line 292) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXPopup.java
class JFXPopup (line 42) | @DefaultProperty(value = "popupContent")
type PopupHPosition (line 45) | public enum PopupHPosition {
method getOpposite (line 49) | public PopupHPosition getOpposite() {
type PopupVPosition (line 54) | public enum PopupVPosition {
method JFXPopup (line 59) | public JFXPopup() {
method JFXPopup (line 66) | public JFXPopup(Region content) {
method initialize (line 71) | private void initialize() {
method createDefaultSkin (line 79) | @Override
method popupContentProperty (line 92) | public final ObjectProperty<Region> popupContentProperty() {
method getPopupContent (line 96) | public final Region getPopupContent() {
method setPopupContent (line 100) | public final void setPopupContent(final Region popupContent) {
method show (line 111) | public void show(Node node) {
method show (line 119) | public void show(Node node, PopupVPosition vAlign, PopupHPosition hAli...
method show (line 129) | public void show(Node node, PopupVPosition vAlign, PopupHPosition hAli...
method show (line 133) | public void show(Node node, PopupVPosition vAlign, PopupHPosition hAli...
method show (line 157) | public void show(Window window, double x, double y, PopupVPosition vAl...
method hide (line 171) | @Override
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXProgressBar.java
class JFXProgressBar (line 31) | public class JFXProgressBar extends ProgressBar {
method JFXProgressBar (line 38) | public JFXProgressBar() {
method JFXProgressBar (line 42) | public JFXProgressBar(double progress) {
method createDefaultSkin (line 47) | @Override
method isSmoothProgress (line 54) | public boolean isSmoothProgress() {
method setSmoothProgress (line 58) | public void setSmoothProgress(boolean smoothProgress) {
method initialize (line 62) | private void initialize() {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXRadioButton.java
class JFXRadioButton (line 38) | public class JFXRadioButton extends RadioButton {
method JFXRadioButton (line 40) | public JFXRadioButton(String text) {
method JFXRadioButton (line 45) | public JFXRadioButton() {
method createDefaultSkin (line 49) | @Override
method initialize (line 54) | private void initialize() {
method selectedColorProperty (line 69) | public final StyleableObjectProperty<Color> selectedColorProperty() {
method getSelectedColor (line 79) | public final Color getSelectedColor() {
method setSelectedColor (line 83) | public final void setSelectedColor(final Color selectedColor) {
method unSelectedColorProperty (line 92) | public final StyleableObjectProperty<Color> unSelectedColorProperty() {
method getUnSelectedColor (line 103) | public final Color getUnSelectedColor() {
method setUnSelectedColor (line 107) | public final void setUnSelectedColor(final Color unSelectedColor) {
class StyleableProperties (line 111) | private static final class StyleableProperties {
method isSettable (line 115) | @Override
method getStyleableProperty (line 120) | @Override
method isSettable (line 128) | @Override
method getStyleableProperty (line 133) | @Override
method getControlCssMetaData (line 152) | @Override
method getClassCssMetaData (line 157) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXRippler.java
class JFXRippler (line 66) | @DefaultProperty(value = "control")
type RipplerPos (line 68) | public enum RipplerPos {
type RipplerMask (line 72) | public enum RipplerMask {
method JFXRippler (line 89) | public JFXRippler() {
method JFXRippler (line 94) | public JFXRippler(Node control) {
method JFXRippler (line 101) | public JFXRippler(Node control, RipplerPos pos) {
method JFXRippler (line 108) | public JFXRippler(Node control, RipplerMask mask) {
method JFXRippler (line 116) | public JFXRippler(Node control, RipplerMask mask, RipplerPos pos) {
method createRippleUI (line 133) | protected final void createRippleUI() {
method setControl (line 148) | public void setControl(Node control) {
method positionControl (line 159) | protected void positionControl(Node control) {
method updateControlPosition (line 167) | protected void updateControlPosition() {
method getControl (line 175) | public Node getControl() {
method getMask (line 184) | protected Node getMask() {
method computeRippleRadius (line 234) | protected double computeRippleRadius() {
method setOverLayBounds (line 240) | protected void setOverLayBounds(Rectangle overlay) {
method initControlListeners (line 248) | protected void initControlListeners() {
method createRipple (line 268) | protected void createRipple(double x, double y) {
method releaseRipple (line 276) | protected void releaseRipple() {
method createManualRipple (line 285) | public Runnable createManualRipple() {
method setOverlayVisible (line 302) | public void setOverlayVisible(boolean visible, boolean forceOverlay) {
method setOverlayVisible (line 309) | public void setOverlayVisible(boolean visible) {
method showOverlay (line 322) | public void showOverlay() {
method hideOverlay (line 330) | public void hideOverlay() {
class RippleGenerator (line 348) | protected final class RippleGenerator extends Group {
method RippleGenerator (line 358) | RippleGenerator() {
method createRipple (line 366) | void createRipple() {
method releaseRipple (line 387) | private void releaseRipple() {
method cacheRippleClip (line 407) | void cacheRippleClip(boolean cached) {
method createOverlay (line 411) | void createOverlay() {
method setGeneratorCenterX (line 429) | void setGeneratorCenterX(double generatorCenterX) {
method setGeneratorCenterY (line 433) | void setGeneratorCenterY(double generatorCenterY) {
class OverLayRipple (line 437) | private final class OverLayRipple extends Rectangle {
method OverLayRipple (line 445) | OverLayRipple() {
class Ripple (line 466) | private final class Ripple extends Circle {
method Ripple (line 472) | private Ripple(double centerX, double centerY) {
method clear (line 539) | public void clear() {
method resetOverLay (line 546) | private void resetOverLay() {
method resetClip (line 556) | private void resetClip() {
method resetRippler (line 560) | protected void resetRippler() {
method initialize (line 579) | private void initialize() {
method isRipplerRecenter (line 589) | public boolean isRipplerRecenter() {
method ripplerRecenterProperty (line 593) | public StyleableBooleanProperty ripplerRecenterProperty() {
method setRipplerRecenter (line 604) | public void setRipplerRecenter(boolean recenter) {
method getRipplerRadius (line 613) | public double getRipplerRadius() {
method ripplerRadiusProperty (line 617) | public StyleableDoubleProperty ripplerRadiusProperty() {
method setRipplerRadius (line 628) | public void setRipplerRadius(double radius) {
method getRipplerFill (line 639) | public Paint getRipplerFill() {
method ripplerFillProperty (line 643) | public StyleableObjectProperty<Paint> ripplerFillProperty() {
method setRipplerFill (line 653) | public void setRipplerFill(Paint color) {
method getMaskType (line 661) | public RipplerMask getMaskType() {
method maskTypeProperty (line 665) | public StyleableObjectProperty<RipplerMask> maskTypeProperty() {
method setMaskType (line 676) | public void setMaskType(RipplerMask type) {
method isRipplerDisabled (line 687) | public boolean isRipplerDisabled() {
method ripplerDisabledProperty (line 691) | public StyleableBooleanProperty ripplerDisabledProperty() {
method setRipplerDisabled (line 702) | public void setRipplerDisabled(boolean disabled) {
method setPosition (line 711) | public void setPosition(RipplerPos pos) {
method getPosition (line 715) | public RipplerPos getPosition() {
method positionProperty (line 719) | public ObjectProperty<RipplerPos> positionProperty() {
class StyleableProperties (line 723) | private static final class StyleableProperties {
method isSettable (line 727) | @Override
method getStyleableProperty (line 732) | @Override
method isSettable (line 740) | @Override
method getStyleableProperty (line 745) | @Override
method isSettable (line 753) | @Override
method getStyleableProperty (line 758) | @Override
method isSettable (line 766) | @Override
method getStyleableProperty (line 771) | @Override
method isSettable (line 779) | @Override
method getStyleableProperty (line 784) | @Override
method getCssMetaData (line 806) | @Override
method getClassCssMetaData (line 811) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXSlider.java
class JFXSlider (line 41) | public class JFXSlider extends Slider {
method JFXSlider (line 43) | public JFXSlider() {
method JFXSlider (line 48) | public JFXSlider(double min, double max, double value) {
method createDefaultSkin (line 53) | @Override
method initialize (line 58) | private void initialize() {
type IndicatorPosition (line 62) | public enum IndicatorPosition {
method valueFactoryProperty (line 92) | public final ObjectProperty<Callback<JFXSlider, StringBinding>> valueF...
method getValueFactory (line 100) | public final Callback<JFXSlider, StringBinding> getValueFactory() {
method setValueFactory (line 107) | public final void setValueFactory(final Callback<JFXSlider, StringBind...
method indicatorPositionProperty (line 127) | public StyleableObjectProperty<IndicatorPosition> indicatorPositionPro...
method getIndicatorPosition (line 138) | public IndicatorPosition getIndicatorPosition() {
method setIndicatorPosition (line 142) | public void setIndicatorPosition(IndicatorPosition pos) {
class StyleableProperties (line 146) | private static final class StyleableProperties {
method isSettable (line 151) | @Override
method getStyleableProperty (line 156) | @Override
method getControlCssMetaData (line 172) | @Override
method getClassCssMetaData (line 177) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXSnackbar.java
class JFXSnackbar (line 67) | public class JFXSnackbar extends Group {
method JFXSnackbar (line 104) | public JFXSnackbar() {
method JFXSnackbar (line 127) | public JFXSnackbar(Pane snackbarContainer) {
method initialize (line 146) | private void initialize() {
method getPopupContainer (line 152) | public Pane getPopupContainer() {
method setPrefWidth (line 156) | public void setPrefWidth(double width) {
method getPrefWidth (line 160) | public double getPrefWidth() {
method registerSnackbarContainer (line 166) | public void registerSnackbarContainer(Pane snackbarContainer) {
method unregisterSnackbarContainer (line 179) | public void unregisterSnackbarContainer(Pane snackbarContainer) {
method show (line 191) | private void show(SnackbarEvent event) {
method getTimeline (line 203) | private Timeline getTimeline(Duration timeout) {
method close (line 243) | public void close() {
method getCurrentEvent (line 279) | public SnackbarEvent getCurrentEvent() {
method enqueue (line 288) | public void enqueue(SnackbarEvent event) {
method resetPseudoClass (line 307) | private void resetPseudoClass() {
method processSnackbar (line 314) | private void processSnackbar() {
method refreshPopup (line 326) | private void refreshPopup() {
class SnackbarEvent (line 348) | public static class SnackbarEvent extends Event {
method SnackbarEvent (line 364) | public SnackbarEvent(Node content) {
method SnackbarEvent (line 372) | public SnackbarEvent(Node content, PseudoClass pseudoClass) {
method SnackbarEvent (line 381) | public SnackbarEvent(Node content, Duration timeout) {
method SnackbarEvent (line 391) | public SnackbarEvent(Node content, Duration timeout, PseudoClass pse...
method getContent (line 398) | public Node getContent() {
method getPseudoClass (line 402) | public PseudoClass getPseudoClass() {
method getTimeout (line 406) | public Duration getTimeout() {
method getEventType (line 410) | @Override
method isPersistent (line 416) | public boolean isPersistent() {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXSnackbarLayout.java
class JFXSnackbarLayout (line 36) | public class JFXSnackbarLayout extends BorderPane {
method JFXSnackbarLayout (line 42) | public JFXSnackbarLayout(String message) {
method JFXSnackbarLayout (line 46) | public JFXSnackbarLayout(String message, String actionText, EventHandl...
method getToast (line 98) | public String getToast() {
method setToast (line 102) | public void setToast(String toast) {
method initialize (line 106) | private void initialize() {
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXSpinner.java
class JFXSpinner (line 41) | public class JFXSpinner extends ProgressIndicator {
method JFXSpinner (line 45) | public JFXSpinner() {
method JFXSpinner (line 49) | public JFXSpinner(double progress) {
method init (line 54) | private void init() {
method createDefaultSkin (line 58) | @Override
method radiusProperty (line 82) | public final StyleableDoubleProperty radiusProperty() {
method getRadius (line 92) | public final double getRadius() {
method setRadius (line 96) | public final void setRadius(final double radius) {
method getStartingAngle (line 100) | public double getStartingAngle() {
class StyleableProperties (line 104) | private static final class StyleableProperties {
method isSettable (line 108) | @Override
method getStyleableProperty (line 113) | @Override
method getControlCssMetaData (line 129) | @Override
method getClassCssMetaData (line 134) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXTextArea.java
class JFXTextArea (line 50) | public class JFXTextArea extends TextArea {
method JFXTextArea (line 62) | public JFXTextArea() {
method JFXTextArea (line 69) | public JFXTextArea(String text) {
method createDefaultSkin (line 77) | @Override
method initialize (line 82) | private void initialize() {
method getActiveValidator (line 102) | public ValidatorBase getActiveValidator() {
method activeValidatorProperty (line 106) | public ReadOnlyObjectProperty<ValidatorBase> activeValidatorProperty() {
method getValidators (line 116) | public ObservableList<ValidatorBase> getValidators() {
method setValidators (line 120) | public void setValidators(ValidatorBase... validators) {
method validate (line 130) | public boolean validate() {
method resetValidation (line 145) | public void resetValidation() {
method labelFloatProperty (line 161) | public final StyleableBooleanProperty labelFloatProperty() {
method isLabelFloat (line 165) | public final boolean isLabelFloat() {
method setLabelFloat (line 169) | public final void setLabelFloat(final boolean labelFloat) {
method getUnFocusColor (line 178) | public Paint getUnFocusColor() {
method unFocusColorProperty (line 182) | public StyleableObjectProperty<Paint> unFocusColorProperty() {
method setUnFocusColor (line 186) | public void setUnFocusColor(Paint color) {
method getFocusColor (line 195) | public Paint getFocusColor() {
method focusColorProperty (line 199) | public StyleableObjectProperty<Paint> focusColorProperty() {
method setFocusColor (line 203) | public void setFocusColor(Paint color) {
method disableAnimationProperty (line 212) | public final StyleableBooleanProperty disableAnimationProperty() {
method isDisableAnimation (line 216) | public final Boolean isDisableAnimation() {
method setDisableAnimation (line 220) | public final void setDisableAnimation(final Boolean disabled) {
class StyleableProperties (line 224) | private final static class StyleableProperties {
method isSettable (line 226) | @Override
method getStyleableProperty (line 231) | @Override
method isSettable (line 237) | @Override
method getStyleableProperty (line 242) | @Override
method isSettable (line 248) | @Override
method getStyleableProperty (line 253) | @Override
method isSettable (line 260) | @Override
method getStyleableProperty (line 265) | @Override
method getControlCssMetaData (line 283) | @Override
method getClassCssMetaData (line 294) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXTextField.java
class JFXTextField (line 50) | public class JFXTextField extends TextField {
method JFXTextField (line 62) | public JFXTextField() {
method JFXTextField (line 69) | public JFXTextField(String text) {
method createDefaultSkin (line 77) | @Override
method initialize (line 82) | private void initialize() {
method getActiveValidator (line 102) | public ValidatorBase getActiveValidator() {
method activeValidatorProperty (line 106) | public ReadOnlyObjectProperty<ValidatorBase> activeValidatorProperty() {
method getValidators (line 116) | public ObservableList<ValidatorBase> getValidators() {
method setValidators (line 120) | public void setValidators(ValidatorBase... validators) {
method validate (line 130) | public boolean validate() {
method resetValidation (line 145) | public void resetValidation() {
method labelFloatProperty (line 161) | public final StyleableBooleanProperty labelFloatProperty() {
method isLabelFloat (line 165) | public final boolean isLabelFloat() {
method setLabelFloat (line 169) | public final void setLabelFloat(final boolean labelFloat) {
method getUnFocusColor (line 178) | public Paint getUnFocusColor() {
method unFocusColorProperty (line 182) | public StyleableObjectProperty<Paint> unFocusColorProperty() {
method setUnFocusColor (line 186) | public void setUnFocusColor(Paint color) {
method getFocusColor (line 195) | public Paint getFocusColor() {
method focusColorProperty (line 199) | public StyleableObjectProperty<Paint> focusColorProperty() {
method setFocusColor (line 203) | public void setFocusColor(Paint color) {
method disableAnimationProperty (line 212) | public final StyleableBooleanProperty disableAnimationProperty() {
method isDisableAnimation (line 216) | public final Boolean isDisableAnimation() {
method setDisableAnimation (line 220) | public final void setDisableAnimation(final Boolean disabled) {
class StyleableProperties (line 224) | private final static class StyleableProperties {
method isSettable (line 226) | @Override
method getStyleableProperty (line 231) | @Override
method isSettable (line 237) | @Override
method getStyleableProperty (line 242) | @Override
method isSettable (line 248) | @Override
method getStyleableProperty (line 253) | @Override
method isSettable (line 260) | @Override
method getStyleableProperty (line 265) | @Override
method getControlCssMetaData (line 284) | @Override
method getClassCssMetaData (line 295) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXToggleButton.java
class JFXToggleButton (line 61) | public class JFXToggleButton extends ToggleButton {
method JFXToggleButton (line 66) | public JFXToggleButton() {
method createDefaultSkin (line 73) | @Override
method initialize (line 78) | private void initialize() {
method getToggleColor (line 111) | public Paint getToggleColor() {
method toggleColorProperty (line 115) | public StyleableObjectProperty<Paint> toggleColorProperty() {
method setToggleColor (line 119) | public void setToggleColor(Paint color) {
method getUnToggleColor (line 132) | public Paint getUnToggleColor() {
method unToggleColorProperty (line 136) | public StyleableObjectProperty<Paint> unToggleColorProperty() {
method setUnToggleColor (line 140) | public void setUnToggleColor(Paint color) {
method getToggleLineColor (line 153) | public Paint getToggleLineColor() {
method toggleLineColorProperty (line 157) | public StyleableObjectProperty<Paint> toggleLineColorProperty() {
method setToggleLineColor (line 161) | public void setToggleLineColor(Paint color) {
method getUnToggleLineColor (line 174) | public Paint getUnToggleLineColor() {
method unToggleLineColorProperty (line 178) | public StyleableObjectProperty<Paint> unToggleLineColorProperty() {
method setUnToggleLineColor (line 182) | public void setUnToggleLineColor(Paint color) {
method getSize (line 195) | public double getSize() {
method sizeProperty (line 199) | public StyleableDoubleProperty sizeProperty() {
method setSize (line 203) | public void setSize(double size) {
method disableVisualFocusProperty (line 215) | public final StyleableBooleanProperty disableVisualFocusProperty() {
method isDisableVisualFocus (line 219) | public final Boolean isDisableVisualFocus() {
method setDisableVisualFocus (line 223) | public final void setDisableVisualFocus(final Boolean disabled) {
method disableAnimationProperty (line 236) | public final StyleableBooleanProperty disableAnimationProperty() {
method isDisableAnimation (line 240) | public final Boolean isDisableAnimation() {
method setDisableAnimation (line 244) | public final void setDisableAnimation(final Boolean disabled) {
class StyleableProperties (line 248) | private static final class StyleableProperties {
method isSettable (line 252) | @Override
method getStyleableProperty (line 257) | @Override
method isSettable (line 266) | @Override
method getStyleableProperty (line 271) | @Override
method isSettable (line 280) | @Override
method getStyleableProperty (line 285) | @Override
method isSettable (line 294) | @Override
method getStyleableProperty (line 299) | @Override
method isSettable (line 308) | @Override
method getStyleableProperty (line 313) | @Override
method isSettable (line 321) | @Override
method getStyleableProperty (line 326) | @Override
method isSettable (line 335) | @Override
method getStyleableProperty (line 340) | @Override
method getControlCssMetaData (line 364) | @Override
method getClassCssMetaData (line 369) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXTreeCell.java
class JFXTreeCell (line 39) | public class JFXTreeCell<T> extends TreeCell<T> {
method getMask (line 42) | @Override
method positionControl (line 52) | @Override
method JFXTreeCell (line 67) | public JFXTreeCell() {
method layoutChildren (line 93) | @Override
method updateDisplay (line 107) | private void updateDisplay(T item, boolean empty) {
method updateItem (line 140) | @Override
FILE: HMCL/src/main/java/com/jfoenix/controls/JFXTreeView.java
class JFXTreeView (line 31) | public class JFXTreeView<T> extends TreeView<T> {
method JFXTreeView (line 35) | public JFXTreeView() {
method JFXTreeView (line 39) | public JFXTreeView(TreeItem<T> root) {
method init (line 44) | private void init() {
FILE: HMCL/src/main/java/com/jfoenix/controls/behavior/JFXGenericPickerBehavior.java
class JFXGenericPickerBehavior (line 31) | public class JFXGenericPickerBehavior<T> extends ComboBoxBaseBehavior<T> {
method JFXGenericPickerBehavior (line 33) | public JFXGenericPickerBehavior(ComboBoxBase<T> var1) {
method onAutoHide (line 37) | public void onAutoHide(PopupControl var1) {
FILE: HMCL/src/main/java/com/jfoenix/controls/datamodels/treetable/RecursiveTreeObject.java
class RecursiveTreeObject (line 37) | public class RecursiveTreeObject<T> {
method getChildren (line 42) | public ObservableList<T> getChildren() {
method setChildren (line 46) | public void setChildren(ObservableList<T> children) {
method groupedColumnProperty (line 53) | public final ObjectProperty<TreeTableColumn<T, ?>> groupedColumnProper...
method getGroupedColumn (line 57) | public final TreeTableColumn<T, ?> getGroupedColumn() {
method setGroupedColumn (line 61) | public final void setGroupedColumn(final TreeTableColumn<T, ?> grouped...
method groupedValueProperty (line 68) | public final ObjectProperty<Object> groupedValueProperty() {
method getGroupedValue (line 72) | public final Object getGroupedValue() {
method setGroupedValue (line 76) | public final void setGroupedValue(final Object groupedValue) {
FILE: HMCL/src/main/java/com/jfoenix/controls/events/JFXDialogEvent.java
class JFXDialogEvent (line 35) | public class JFXDialogEvent extends Event {
method JFXDialogEvent (line 51) | public JFXDialogEvent(EventType<? extends Event> eventType) {
FILE: HMCL/src/main/java/com/jfoenix/effects/JFXDepthManager.java
class JFXDepthManager (line 38) | public final class JFXDepthManager {
method JFXDepthManager (line 39) | private JFXDepthManager() {
method setDepth (line 58) | public static void setDepth(Node control, int level) {
method getLevels (line 69) | public static int getLevels() {
method getShadowAt (line 73) | public static DropShadow getShadowAt(int level) {
method createMaterialNode (line 82) | public static Node createMaterialNode(Node control, int level) {
method pop (line 117) | public static void pop(Node control) {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXButtonSkin.java
class JFXButtonSkin (line 33) | public class JFXButtonSkin extends ButtonSkin {
method getMask (line 36) | protected Node getMask() {
method initListeners (line 49) | private void initListeners() {
method JFXButtonSkin (line 65) | public JFXButtonSkin(JFXButton button) {
method updateChildren (line 139) | protected void updateChildren() {
method layoutChildren (line 150) | protected void layoutChildren(double x, double y, double w, double h) {
method isJavaDefaultBackground (line 178) | private boolean isJavaDefaultBackground(Background background) {
method isJavaDefaultClickedBackground (line 187) | private boolean isJavaDefaultClickedBackground(Background background) {
method updateButtonType (line 195) | private void updateButtonType(JFXButton.ButtonType type) {
class ButtonClickTransition (line 205) | private class ButtonClickTransition extends CachedTransition {
method ButtonClickTransition (line 206) | public ButtonClickTransition() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXCheckBoxSkin.java
class JFXCheckBoxSkin (line 41) | public class JFXCheckBoxSkin extends CheckBoxSkin {
method JFXCheckBoxSkin (line 53) | public JFXCheckBoxSkin(JFXCheckBox control) {
method updateRippleColor (line 107) | private void updateRippleColor() {
method updateColors (line 114) | private void updateColors() {
method updateChildren (line 127) | protected void updateChildren() {
method computeMinWidth (line 135) | protected double computeMinWidth(double height, double topInset, doubl...
method computePrefWidth (line 139) | protected double computePrefWidth(double height, double topInset, doub...
method layoutChildren (line 143) | protected void layoutChildren(double x, double y, double w, double h) {
method computeXOffset (line 166) | static double computeXOffset(double width, double contentWidth, HPos h...
method computeYOffset (line 174) | static double computeYOffset(double height, double contentHeight, VPos...
method playSelectAnimation (line 183) | private void playSelectAnimation(Boolean selection) {
method createFillTransition (line 200) | private void createFillTransition() {
class CheckBoxTransition (line 206) | private final class CheckBoxTransition extends CachedTransition {
method CheckBoxTransition (line 207) | CheckBoxTransition() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXColorPalette.java
class JFXColorPalette (line 52) | final class JFXColorPalette extends Region {
method JFXColorPalette (line 73) | public JFXColorPalette(final JFXColorPicker colorPicker) {
method setFocusedSquare (line 130) | private void setFocusedSquare(ColorSquare square) {
method buildCustomColors (line 168) | private void buildCustomColors() {
method initNavigation (line 207) | private void initNavigation() {
method setPopupControl (line 223) | public void setPopupControl(PopupControl pc) {
method getColorGrid (line 227) | public JFXColorGrid getColorGrid() {
method isCustomColorDialogShowing (line 231) | public boolean isCustomColorDialogShowing() {
class ColorSquare (line 235) | class ColorSquare extends StackPane {
method ColorSquare (line 239) | public ColorSquare() {
method ColorSquare (line 243) | public ColorSquare(Color color, int index) {
method ColorSquare (line 247) | public ColorSquare(Color color, int index, boolean isCustom) {
method selectColor (line 285) | public void selectColor(KeyEvent event) {
method updateSelection (line 298) | public void updateSelection(Color color) {
class JFXColorGrid (line 317) | class JFXColorGrid extends GridPane {
method JFXColorGrid (line 323) | public JFXColorGrid() {
method getSquares (line 380) | public List<ColorSquare> getSquares() {
method computePrefWidth (line 384) | @Override
method computePrefHeight (line 389) | @Override
method clamp (line 614) | private static int clamp(int min, int value, int max) {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXColorPickerSkin.java
class JFXColorPickerSkin (line 55) | public final class JFXColorPickerSkin extends JFXGenericPickerSkin<Color> {
method JFXColorPickerSkin (line 68) | public JFXColorPickerSkin(final ColorPicker colorPicker) {
method computePrefWidth (line 111) | @Override
method computePrefHeight (line 121) | @Override
method layoutChildren (line 129) | @Override
method getPopupContent (line 139) | @Override
method show (line 147) | @Override
method getDisplayNode (line 154) | @Override
method updateColor (line 159) | private void updateColor() {
method initColor (line 193) | private void initColor() {
class StyleableProperties (line 215) | private static final class StyleableProperties {
method isSettable (line 220) | @Override
method getStyleableProperty (line 226) | @Override
method getClassCssMetaData (line 242) | public static List<CssMetaData<? extends Styleable, ?>> getClassCssMet...
method getCssMetaData (line 246) | @Override
method getEditor (line 251) | protected TextField getEditor() {
method getConverter (line 255) | protected javafx.util.StringConverter<Color> getConverter() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXColorPickerUI.java
class JFXColorPickerUI (line 45) | final class JFXColorPickerUI extends Pane {
method JFXColorPickerUI (line 63) | public JFXColorPickerUI(int pickerSize) {
method addColorSelectionNode (line 210) | public void addColorSelectionNode(Node... nodes) {
method removeColorSelectionNode (line 214) | public void removeColorSelectionNode(Node... nodes) {
method updateHSLCircleColor (line 218) | private void updateHSLCircleColor(int x, int y) {
method refreshHSLCircle (line 241) | private void refreshHSLCircle() {
method moveToColor (line 256) | public void moveToColor(Color color) {
method setColorAtLocation (line 340) | private void setColorAtLocation(int x, int y) {
method getColorAtLocation (line 349) | private Color getColorAtLocation(double x, double y) {
method getHuesCircle (line 355) | private Image getHuesCircle(int width, int height) {
method getSLCricle (line 378) | private Image getSLCricle(int width, int height) {
method clamp (line 392) | private double clamp(double from, double small, double big) {
method getColor (line 396) | private Color getColor(double dx, double dy) {
class CurveTransition (line 456) | private final class CurveTransition extends Transition {
method CurveTransition (line 461) | public CurveTransition(Point2D from, Point2D to) {
method interpolate (line 474) | @Override
method map (line 500) | private double map(double val, double min1, double max1, double min2, ...
method HSL2RGB (line 504) | private Color HSL2RGB(double hue, double sat, double lum) {
method circleFrom3Points (line 565) | private double[] circleFrom3Points(Point2D a, Point2D b, Point2D c) {
method getPointFromSL (line 594) | private Point2D getPointFromSL(int saturation, int lightness, double r...
method rotate (line 621) | private Point2D rotate(Point2D a, Point2D center, double angle) {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXCustomColorPicker.java
class JFXCustomColorPicker (line 47) | final class JFXCustomColorPicker extends Pane {
method JFXCustomColorPicker (line 67) | public JFXCustomColorPicker() {
method getShapesNumber (line 125) | public int getShapesNumber() {
method getSelectedIndex (line 129) | public int getSelectedIndex() {
method setColor (line 136) | public void setColor(final Color color) {
method getColor (line 141) | public Color getColor(final int index) {
method preAnimate (line 149) | public void preAnimate() {
method animate (line 184) | public void animate() {
method init (line 188) | private void init(final DoubleProperty rotationAngle, final double ini...
method createQuadraticCurve (line 308) | private void createQuadraticCurve(final DoubleProperty rotationAngle, ...
method getDefaultColor (line 389) | private String getDefaultColor(final int i) {
method rotate (line 437) | private Point2D rotate(final Point2D a, final Point2D center, final do...
method makeControlPoint (line 445) | private Point2D makeControlPoint(final double endX, final double endY,...
method scale (line 456) | private Point2D scale(final Point2D a, final double scale) {
class RecentColorPath (line 460) | final class RecentColorPath extends Path {
method RecentColorPath (line 463) | RecentColorPath(final PathElement... elements) {
method playTransition (line 473) | void playTransition(final double rate) {
class PathClickTransition (line 479) | private final class PathClickTransition extends CachedTransition {
method PathClickTransition (line 480) | PathClickTransition(final Path path) {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXCustomColorPickerDialog.java
class JFXCustomColorPickerDialog (line 52) | public class JFXCustomColorPickerDialog extends StackPane {
method JFXCustomColorPickerDialog (line 70) | public JFXCustomColorPickerDialog(Window owner) {
method updateColor (line 287) | private void updateColor() {
method updateColorFromUserInput (line 293) | private void updateColorFromUserInput(String colorWebString) {
method close (line 305) | private void close() {
method setCurrentColor (line 310) | public void setCurrentColor(Color currentColor) {
method getCurrentColor (line 317) | Color getCurrentColor() {
method customColorProperty (line 321) | ObjectProperty<Color> customColorProperty() {
method setCustomColor (line 325) | void setCustomColor(Color color) {
method getCustomColor (line 329) | Color getCustomColor() {
method getOnSave (line 333) | public Runnable getOnSave() {
method setOnSave (line 337) | public void setOnSave(Runnable onSave) {
method setOnHidden (line 341) | public void setOnHidden(EventHandler<WindowEvent> onHidden) {
method show (line 345) | public void show() {
method invalidated (line 374) | @Override
method fixPosition (line 385) | private void fixPosition() {
method layoutChildren (line 405) | @Override
method colorCharFormatter (line 419) | private static TextFormatter<String> colorCharFormatter() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXGenericPickerSkin.java
class JFXGenericPickerSkin (line 52) | public abstract class JFXGenericPickerSkin<T> extends ComboBoxPopupContr...
method JFXGenericPickerSkin (line 65) | public JFXGenericPickerSkin(ComboBoxBase<T> comboBoxBase) {
method dispose (line 101) | @Override
method findVarHandle (line 129) | private static VarHandle findVarHandle(Class<?> targetClass, String fi...
method removeParentFakeFocusListener (line 138) | private void removeParentFakeFocusListener(ComboBoxBase<T> comboBoxBas...
method removeParentPopupHandlers (line 157) | private void removeParentPopupHandlers() {
method updateArrowButtonListeners (line 174) | private void updateArrowButtonListeners() {
method reflectUpdateDisplayArea (line 227) | protected void reflectUpdateDisplayArea() {
method reflectSetTextFromTextFieldIntoComboBoxValue (line 231) | protected void reflectSetTextFromTextFieldIntoComboBoxValue() {
method reflectGetEditableInputNode (line 235) | protected TextField reflectGetEditableInputNode() {
method reflectUpdateDisplayNode (line 239) | protected void reflectUpdateDisplayNode() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXListViewSkin.java
class JFXListViewSkin (line 30) | public class JFXListViewSkin<T> extends ListViewSkin<T> {
method JFXListViewSkin (line 32) | public JFXListViewSkin(final JFXListView<T> listView) {
method computePrefWidth (line 42) | @Override
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXPopupSkin.java
class JFXPopupSkin (line 44) | public class JFXPopupSkin implements Skin<JFXPopup> {
method JFXPopupSkin (line 54) | public JFXPopupSkin(JFXPopup control) {
method reset (line 68) | public void reset(PopupVPosition vAlign, PopupHPosition hAlign, double...
method animate (line 76) | public final void animate() {
method getSkinnable (line 90) | @Override
method getNode (line 95) | @Override
method dispose (line 100) | @Override
method getAnimation (line 112) | protected Animation getAnimation() {
method init (line 132) | public void init() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXProgressBarSkin.java
class JFXProgressBarSkin (line 37) | public class JFXProgressBarSkin extends SkinBase<JFXProgressBar> {
method JFXProgressBarSkin (line 48) | public JFXProgressBarSkin(JFXProgressBar control) {
method computeBaselineOffset (line 72) | @Override
method computePrefWidth (line 77) | @Override
method computePrefHeight (line 82) | @Override
method computeMaxWidth (line 87) | @Override
method computeMaxHeight (line 92) | @Override
method layoutChildren (line 97) | @Override
method updateProgress (line 115) | private void updateProgress(boolean playProgressAnimation) {
method createIndeterminateTransition (line 152) | private Transition createIndeterminateTransition() {
method createDeterminateTransition (line 191) | private Timeline createDeterminateTransition(double targetProgress) {
method clearAnimation (line 206) | private void clearAnimation() {
method dispose (line 213) | @Override
method computeBarWidth (line 220) | private double computeBarWidth(double progress) {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXRadioButtonSkin.java
class JFXRadioButtonSkin (line 30) | public class JFXRadioButtonSkin extends RadioButtonSkin {
method JFXRadioButtonSkin (line 41) | public JFXRadioButtonSkin(JFXRadioButton control) {
method updateChildren (line 86) | protected void updateChildren() {
method layoutChildren (line 94) | protected void layoutChildren(double x, double y, double w, double h) {
method initializeComponents (line 115) | private void initializeComponents() {
method playAnimation (line 120) | private void playAnimation() {
method removeRadio (line 143) | private void removeRadio() {
method updateColors (line 147) | private void updateColors() {
method computeMinWidth (line 156) | protected double computeMinWidth(double height, double topInset, doubl...
method computePrefWidth (line 160) | protected double computePrefWidth(double height, double topInset, doub...
method computeXOffset (line 164) | static double computeXOffset(double width, double contentWidth, HPos h...
method computeYOffset (line 172) | static double computeYOffset(double height, double contentHeight, VPos...
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXSliderSkin.java
class JFXSliderSkin (line 52) | public class JFXSliderSkin extends SliderSkin {
method JFXSliderSkin (line 71) | public JFXSliderSkin(JFXSlider slider) {
method addJFXChildren (line 120) | private void addJFXChildren() {
method refreshSliderValueBinding (line 132) | private void refreshSliderValueBinding() {
method layoutChildren (line 148) | @Override
method initializeVariables (line 179) | private void initializeVariables() {
method initListeners (line 193) | private void initListeners() {
method delegateToTrack (line 223) | private void delegateToTrack(MouseEvent event) {
method updateValueStyleClass (line 230) | private void updateValueStyleClass() {
method initAnimation (line 235) | private void initAnimation(Orientation orientation) {
method dispose (line 278) | @Override
method clearAnimation (line 284) | private void clearAnimation() {
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXSpinnerSkin.java
class JFXSpinnerSkin (line 47) | public class JFXSpinnerSkin extends SkinBase<JFXSpinner> {
method JFXSpinnerSkin (line 63) | public JFXSpinnerSkin(JFXSpinner control) {
method updateProgress (line 98) | private void updateProgress() {
method computeSize (line 119) | private double computeSize() {
method computeMaxHeight (line 123) | @Override
method computeMaxWidth (line 132) | @Override
method computePrefWidth (line 141) | @Override
method computePrefHeight (line 150) | @Override
method layoutChildren (line 162) | @Override
method updateArcLayout (line 180) | private void updateArcLayout(double radius, double arcSize) {
method addKeyFrames (line 193) | private void addKeyFrames(List<KeyFrame> frames, double angle, double ...
method createTransition (line 216) | private Timeline createTransition() {
method clearAnimation (line 248) | private void clearAnimation() {
method dispose (line 255) | @Override
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXTabPaneSkin.java
class JFXTabPaneSkin (line 69) | public class JFXTabPaneSkin extends TabPaneSkin {
method JFXTabPaneSkin (line 89) | public JFXTabPaneSkin(TabPane tabPane) {
method handleControlPropertyChanged (line 182) | protected void handleControlPropertyChanged(String property) {
method removeTabs (line 194) | private void removeTabs(List<? extends Tab> removedTabs) {
method addTabs (line 208) | private void addTabs(List<? extends Tab> addedTabs, int startIndex) {
method addTabContentHolder (line 225) | private void addTabContentHolder(Tab tab) {
method removeTabContentHolder (line 234) | private void removeTabContentHolder(Tab tab) {
method removeTab (line 246) | private void removeTab(Tab tab) {
method isHorizontal (line 256) | private boolean isHorizontal() {
method getRotation (line 261) | private static int getRotation(Side pos) {
method computePrefWidth (line 276) | @Override
method computePrefHeight (line 286) | @Override
method computeBaselineOffset (line 296) | @Override
method layoutChildren (line 307) | @Override
class HeaderContainer (line 397) | protected class HeaderContainer extends StackPane {
method HeaderContainer (line 416) | public HeaderContainer() {
method updateDirection (line 552) | private void updateDirection() {
method updateHeaderContainerClip (line 557) | private void updateHeaderContainerClip() {
method getClipOffset (line 579) | private double getClipOffset() {
method addTab (line 583) | private void addTab(Tab tab, int addToIndex, boolean visible) {
method removeTab (line 591) | private void removeTab(Tab tab) {
method getTabHeaderContainer (line 605) | private TabHeaderContainer getTabHeaderContainer(Tab tab) {
method isTabsFitHeaderWidth (line 616) | private boolean isTabsFitHeaderWidth() {
method runTimeline (line 623) | private void runTimeline(double newTransX, double newWidth) {
method isAnimating (line 672) | private boolean isAnimating() {
method updateScrollOffset (line 676) | public void updateScrollOffset(double newOffset) {
method computePrefWidth (line 706) | @Override
method computePrefHeight (line 712) | @Override
method getBaselineOffset (line 718) | @Override
method layoutChildren (line 723) | @Override
method animateSelectionLine (line 803) | private void animateSelectionLine() {
class TabHeaderContainer (line 831) | protected class TabHeaderContainer extends StackPane {
method TabHeaderContainer (line 851) | public TabHeaderContainer(final Tab tab) {
method handlePropertyChanged (line 948) | private void handlePropertyChanged(final String p) {
method removeListeners (line 995) | private void removeListeners(Tab tab) {
method computePrefWidth (line 1001) | @Override
method computePrefHeight (line 1018) | @Override
method layoutChildren (line 1035) | @Override
method setWidth (line 1042) | @Override
method setHeight (line 1047) | @Override
class TabContentHolder (line 1065) | protected static class TabContentHolder extends StackPane {
method TabContentHolder (line 1072) | public TabContentHolder(Tab tab) {
method updateContent (line 1082) | private void updateContent() {
method removeListeners (line 1091) | private void removeListeners(Tab tab) {
type ArrowPosition (line 1097) | private enum ArrowPosition {
class HeaderControl (line 1106) | protected class HeaderControl extends StackPane {
method HeaderControl (line 1114) | public HeaderControl(ArrowPosition pos) {
method showTabsMenu (line 1191) | private void showTabsMenu(boolean value) {
method isControlButtonShown (line 1210) | private boolean isControlButtonShown() {
method computePrefWidth (line 1214) | @Override
method computePrefHeight (line 1223) | @Override
method layoutChildren (line 1228) | @Override
FILE: HMCL/src/main/java/com/jfoenix/skins/JFXToggleButtonSkin.java
class JFXToggleButtonSkin (line 47) | public class JFXToggleButtonSkin extends ToggleButtonSkin {
method JFXToggleButtonSkin (line 56) | public JFXToggleButtonSkin(JFXToggleButton toggleButton) {
method computeTranslation (line 176) | private double computeTranslation(double circleRadius, Line line) {
method dispose (line 180) | @Override
FILE: HMCL/src/main/java/com/jfoenix/transitions/CacheMemento.java
class CacheMemento (line 28) | public final class CacheMemento {
method CacheMemento (line 36) | public CacheMemento(Node node) {
method cache (line 43) | public void cache() {
method restore (line 58) | public void restore() {
FILE: HMCL/src/main/java/com/jfoenix/transitions/JFXAnimationTimer.java
class JFXAnimationTimer (line 40) | public class JFXAnimationTimer extends AnimationTimer {
method JFXAnimationTimer (line 48) | public JFXAnimationTimer(JFXKeyFrame... keyFrames) {
method addKeyFrame (line 60) | public void addKeyFrame(JFXKeyFrame keyFrame) throws Exception {
method removeKeyFrame (line 73) | public void removeKeyFrame(JFXKeyFrame keyFrame) throws Exception {
method start (line 81) | @Override
method handle (line 94) | @Override
method reverseAndContinue (line 114) | public void reverseAndContinue() {
method stop (line 127) | @Override
method applyEndValues (line 142) | public void applyEndValues() {
method isRunning (line 152) | public boolean isRunning() {
method setOnFinished (line 158) | public void setOnFinished(Runnable onFinished) {
method setCacheNodes (line 162) | public void setCacheNodes(Node... nodesToCache) {
method dispose (line 171) | public void dispose() {
class AnimationHandler (line 179) | static class AnimationHandler {
method AnimationHandler (line 189) | AnimationHandler(Duration duration, Supplier<Boolean> animationCondi...
method init (line 196) | public void init() {
method reverse (line 211) | void reverse(double now) {
method animate (line 225) | @SuppressWarnings({"unchecked"})
method applyEndValues (line 261) | @SuppressWarnings("unchecked")
method clear (line 276) | public void clear() {
method dispose (line 281) | void dispose() {
FILE: HMCL/src/main/java/com/jfoenix/transitions/JFXKeyFrame.java
class JFXKeyFrame (line 34) | public class JFXKeyFrame {
method JFXKeyFrame (line 40) | public JFXKeyFrame(Duration duration, JFXKeyValue<?>... keyValues) {
method JFXKeyFrame (line 49) | private JFXKeyFrame() {
method getDuration (line 53) | public final Duration getDuration() {
method getValues (line 57) | public final Set<JFXKeyValue<?>> getValues() {
method getAnimateCondition (line 61) | public Supplier<Boolean> getAnimateCondition() {
method builder (line 65) | public static Builder builder() {
class Builder (line 69) | public static final class Builder {
method Builder (line 74) | private Builder() {
method setDuration (line 77) | public Builder setDuration(Duration duration) {
method setKeyValues (line 82) | public Builder setKeyValues(JFXKeyValue<?>... keyValues) {
method setAnimateCondition (line 91) | public Builder setAnimateCondition(Supplier<Boolean> animateConditio...
method build (line 96) | public JFXKeyFrame build() {
FILE: HMCL/src/main/java/com/jfoenix/transitions/JFXKeyValue.java
class JFXKeyValue (line 33) | public final class JFXKeyValue<T> {
method JFXKeyValue (line 42) | private JFXKeyValue() {
method builder (line 46) | public static Builder builder() {
method getEndValue (line 50) | public T getEndValue() {
method getTarget (line 54) | public WritableValue<T> getTarget() {
method getInterpolator (line 58) | public Interpolator getInterpolator() {
method isValid (line 62) | public boolean isValid() {
class Builder (line 66) | public static final class Builder {
method setTarget (line 67) | public <T> JFXKeyValueBuilder<T> setTarget(WritableValue<T> target) {
method setTargetSupplier (line 73) | public <T> JFXKeyValueBuilder<T> setTargetSupplier(Supplier<Writable...
method setEndValueSupplier (line 79) | public <T> JFXKeyValueBuilder<T> setEndValueSupplier(Supplier<T> end...
method setEndValue (line 85) | public <T> JFXKeyValueBuilder<T> setEndValue(T endValue) {
method setAnimateCondition (line 91) | public <T> JFXKeyValueBuilder<T> setAnimateCondition(Supplier<Boolea...
method setInterpolator (line 97) | public <T> JFXKeyValueBuilder<T> setInterpolator(Interpolator interp...
class JFXKeyValueBuilder (line 104) | public static final class JFXKeyValueBuilder<T> {
method JFXKeyValueBuilder (line 113) | private JFXKeyValueBuilder() {
method setTarget (line 116) | public JFXKeyValueBuilder<T> setTarget(WritableValue<T> target) {
method setTargetSupplier (line 121) | public JFXKeyValueBuilder<T> setTargetSupplier(Supplier<WritableValu...
method setEndValueSupplier (line 126) | public JFXKeyValueBuilder<T> setEndValueSupplier(Supplier<T> endValu...
method setEndValue (line 131) | public JFXKeyValueBuilder<T> setEndValue(T endValue) {
method setAnimateCondition (line 136) | public JFXKeyValueBuilder<T> setAnimateCondition(Supplier<Boolean> a...
method setInterpolator (line 141) | public JFXKeyValueBuilder<T> setInterpolator(Interpolator interpolat...
method build (line 146) | public JFXKeyValue<T> build() {
FILE: HMCL/src/main/java/com/jfoenix/utils/JFXNodeUtils.java
class JFXNodeUtils (line 45) | public final class JFXNodeUtils {
method updateBackground (line 47) | public static void updateBackground(Background newBackground, Region n...
method updateBackground (line 51) | public static void updateBackground(Background newBackground, Region n...
method colorToHex (line 62) | public static String colorToHex(Color c) {
method initTreeVisiblePropertyGetter (line 75) | private static @NotNull Function<Node, ObservableBooleanValue> initTre...
method defaultTreeVisibleProperty (line 110) | private static @NotNull ObservableBooleanValue defaultTreeVisiblePrope...
method treeVisibleProperty (line 114) | public static @NotNull ObservableBooleanValue treeVisibleProperty(Node...
method isTreeVisible (line 118) | public static boolean isTreeVisible(Node item) {
method isTreeShowing (line 122) | public static boolean isTreeShowing(Node node) {
method JFXNodeUtils (line 137) | private JFXNodeUtils() {
FILE: HMCL/src/main/java/com/jfoenix/utils/TreeShowingProperty.java
class TreeShowingProperty (line 43) | public class TreeShowingProperty extends ReadOnlyBooleanPropertyBase {
method TreeShowingProperty (line 59) | public TreeShowingProperty(Node node) {
method getBean (line 69) | @Override
method getName (line 74) | @Override
method dispose (line 83) | public void dispose() {
method invalidate (line 93) | protected void invalidate() {
method get (line 100) | @Override
method sceneChanged (line 110) | private void sceneChanged(Scene oldScene, Scene newScene) {
method windowChanged (line 124) | private void windowChanged(Window oldWindow, Window newWindow) {
method updateTreeShowing (line 135) | private void updateTreeShowing() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/EntryPoint.java
class EntryPoint (line 39) | public final class EntryPoint {
method EntryPoint (line 41) | private EntryPoint() {
method main (line 44) | public static void main(String[] args) {
method exit (line 68) | public static void exit(int exitCode) {
method setupJavaFXVMOptions (line 74) | private static void setupJavaFXVMOptions() {
method createHMCLDirectories (line 139) | private static void createHMCLDirectories() {
method isInsideMacAppBundle (line 167) | private static boolean isInsideMacAppBundle() {
method initIcon (line 186) | private static void initIcon() {
method checkJavaFX (line 197) | private static void checkJavaFX() {
method verifyJavaFX (line 212) | private static void verifyJavaFX() {
method addEnableNativeAccess (line 223) | private static void addEnableNativeAccess() {
method enableUnsafeMemoryAccess (line 245) | private static void enableUnsafeMemoryAccess() {
method showErrorAndExit (line 262) | private static void showErrorAndExit(String message) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java
class Launcher (line 71) | public final class Launcher extends Application {
method start (line 74) | @Override
method appendScreen (line 149) | private static void appendScreen(StringBuilder builder, Screen screen) {
method showAlert (line 181) | private static ButtonType showAlert(AlertType alertType, String conten...
method isConfigInTempDir (line 185) | private static boolean isConfigInTempDir() {
method checkConfigInTempDir (line 222) | private static void checkConfigInTempDir() {
method checkConfigOwner (line 229) | private static void checkConfigOwner() {
method stop (line 268) | @Override
method main (line 275) | public static void main(String[] args) {
method stopApplication (line 332) | public static void stopApplication() {
method stopWithoutPlatform (line 345) | public static void stopWithoutPlatform() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java
class Metadata (line 33) | public final class Metadata {
method Metadata (line 34) | private Metadata() {
method isStable (line 92) | public static boolean isStable() {
method isDev (line 96) | public static boolean isDev() {
method isNightly (line 100) | public static boolean isNightly() {
method getSuggestedJavaDownloadLink (line 104) | public static @Nullable String getSuggestedJavaDownloadLink() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java
class CrashReport (line 11) | public class CrashReport {
method CrashReport (line 17) | public CrashReport(Thread thread, Throwable throwable) {
method getThrowable (line 23) | public Throwable getThrowable() {
method shouldBeReport (line 27) | public boolean shouldBeReport() {
method getDisplayText (line 37) | public String getDisplayText() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLCacheRepository.java
class HMCLCacheRepository (line 26) | public class HMCLCacheRepository extends DefaultCacheRepository {
method HMCLCacheRepository (line 30) | public HMCLCacheRepository() {
method getDirectory (line 34) | public String getDirectory() {
method directoryProperty (line 38) | public StringProperty directoryProperty() {
method setDirectory (line 42) | public void setDirectory(String directory) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java
class HMCLGameLauncher (line 40) | public final class HMCLGameLauncher extends DefaultLauncher {
method HMCLGameLauncher (line 42) | public HMCLGameLauncher(GameRepository repository, Version version, Au...
method HMCLGameLauncher (line 46) | public HMCLGameLauncher(GameRepository repository, Version version, Au...
method HMCLGameLauncher (line 50) | public HMCLGameLauncher(GameRepository repository, Version version, Au...
method getConfigurations (line 54) | @Override
method generateOptionsTxt (line 62) | private void generateOptionsTxt() {
method normalizedLanguageTag (line 110) | private static String normalizedLanguageTag(Locale locale, GameVersion...
method launch (line 142) | @Override
method makeLaunchScript (line 148) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java
class HMCLGameRepository (line 62) | public final class HMCLGameRepository extends DefaultGameRepository {
method HMCLGameRepository (line 71) | public HMCLGameRepository(Profile profile, Path baseDirectory) {
method getProfile (line 76) | public Profile getProfile() {
method getGameDirectoryType (line 80) | @Override
method getRunDirectory (line 89) | @Override
method getDisplayVersions (line 107) | public Stream<Version> getDisplayVersions() {
method refreshVersionsImpl (line 114) | @Override
method changeDirectory (line 136) | public void changeDirectory(Path newDirectory) {
method clean (line 141) | private void clean(Path directory) throws IOException {
method clean (line 146) | public void clean(String id) throws IOException {
method duplicateVersion (line 151) | public void duplicateVersion(String srcId, String dstId, boolean copyS...
method getLocalVersionSettingFile (line 194) | private Path getLocalVersionSettingFile(String id) {
method loadLocalVersionSetting (line 198) | private void loadLocalVersionSetting(String id) {
method createLocalVersionSetting (line 216) | public VersionSetting createLocalVersionSetting(String id) {
method initLocalVersionSetting (line 225) | private VersionSetting initLocalVersionSetting(String id, VersionSetti...
method getLocalVersionSetting (line 237) | @Nullable
method getLocalVersionSettingOrCreate (line 247) | @Nullable
method getVersionSetting (line 256) | public VersionSetting getVersionSetting(String id) {
method getVersionIconFile (line 265) | public Optional<Path> getVersionIconFile(String id) {
method setVersionIconFile (line 278) | public void setVersionIconFile(String id, Path iconFile) throws IOExce...
method deleteIconFile (line 289) | public void deleteIconFile(String id) {
method getVersionIconImage (line 301) | public Image getVersionIconImage(String id) {
method saveVersionSetting (line 356) | public void saveVersionSetting(String id) {
method specializeVersionSetting (line 375) | public VersionSetting specializeVersionSetting(String id) {
method globalizeVersionSetting (line 387) | public void globalizeVersionSetting(String id) {
method getLaunchOptions (line 393) | public LaunchOptions.Builder getLaunchOptions(String version, JavaRunt...
method getModpackConfiguration (line 463) | @Override
method markVersionAsModpack (line 468) | public void markVersionAsModpack(String id) {
method undoMark (line 472) | public void undoMark(String id) {
method markVersionLaunchedAbnormally (line 476) | public void markVersionLaunchedAbnormally(String id) {
method unmarkVersionLaunchedAbnormally (line 483) | public boolean unmarkVersionLaunchedAbnormally(String id) {
method isValidVersionId (line 509) | public static boolean isValidVersionId(String id) {
method versionIdConflicts (line 523) | public boolean versionIdConflicts(String id) {
method getAllocatedMemory (line 537) | public static long getAllocatedMemory(long minimum, long available, bo...
method getProxyOption (line 555) | public static ProxyOption getProxyOption() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java
class HMCLModpackInstallTask (line 39) | public final class HMCLModpackInstallTask extends Task<Void> {
method HMCLModpackInstallTask (line 48) | public HMCLModpackInstallTask(Profile profile, Path zipFile, Modpack m...
method getDependencies (line 80) | @Override
method getDependents (line 85) | @Override
method execute (line 90) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManifest.java
class HMCLModpackManifest (line 23) | public final class HMCLModpackManifest implements ModpackManifest {
method HMCLModpackManifest (line 26) | private HMCLModpackManifest() {}
method getProvider (line 28) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackProvider.java
class HMCLModpackProvider (line 37) | public final class HMCLModpackProvider implements ModpackProvider {
method getName (line 40) | @Override
method createCompletionTask (line 45) | @Override
method createUpdateTask (line 50) | @Override
method readManifest (line 64) | @Override
class HMCLModpack (line 80) | private final static class HMCLModpack extends Modpack {
method getInstallTask (line 81) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
class LauncherHelper (line 76) | public final class LauncherHelper {
method LauncherHelper (line 88) | public LauncherHelper(Profile profile, Account account, String selecte...
method getAccount (line 100) | public Account getAccount() {
method setAccount (line 104) | public void setAccount(Account account) {
method setTestMode (line 108) | public void setTestMode() {
method setKeep (line 113) | public void setKeep() {
method setQuickPlayOption (line 117) | public void setQuickPlayOption(QuickPlayOption quickPlayOption) {
method setDisableOfflineSkin (line 121) | public void setDisableOfflineSkin() {
method launch (line 125) | public void launch() {
method makeLaunchScript (line 134) | public void makeLaunchScript(Path scriptFile) {
method launch0 (line 139) | private void launch0() {
method checkGameState (line 360) | private static Task<JavaRuntime> checkGameState(Profile profile, Versi...
method downloadJava (line 662) | private static CompletableFuture<JavaRuntime> downloadJava(GameJavaVer...
method logIn (line 688) | private Task<AuthInfo> logIn(Account account) {
method checkExit (line 728) | private void checkExit() {
class HMCLProcessListener (line 757) | private final class HMCLProcessListener implements ProcessListener {
method HMCLProcessListener (line 773) | public HMCLProcessListener(HMCLGameRepository repository, Version ve...
method setProcess (line 783) | @Override
method finishLaunch (line 852) | private void finishLaunch() {
method onLog (line 886) | @Override
method onExit (line 929) | @Override
method countMangedProcesses (line 969) | public static int countMangedProcesses() {
method stopManagedProcesses (line 977) | public static void stopManagedProcesses() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java
class LocalizedRemoteModRepository (line 35) | public abstract class LocalizedRemoteModRepository implements RemoteModR...
method getBackedRemoteModRepository (line 40) | protected abstract RemoteModRepository getBackedRemoteModRepository();
method getBackedRemoteModRepositorySortOrder (line 42) | protected abstract SortType getBackedRemoteModRepositorySortOrder();
method search (line 44) | @Override
method getCategories (line 107) | @Override
method getRemoteVersionByLocalFile (line 112) | @Override
method getModById (line 117) | @Override
method getModFile (line 122) | @Override
method getRemoteVersionsById (line 127) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java
class Log (line 24) | public final class Log {
method getLogLines (line 27) | public static int getLogLines() {
method Log (line 36) | public Log(String log) {
method Log (line 40) | public Log(String log, Log4jLevel level) {
method getLog (line 45) | public String getLog() {
method getLevel (line 49) | public Log4jLevel getLevel() {
method isSelected (line 60) | public boolean isSelected() {
method setSelected (line 64) | public void setSelected(boolean selected) {
method toString (line 68) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java
class LogExporter (line 40) | public final class LogExporter {
method LogExporter (line 41) | private LogExporter() {
method exportLogs (line 44) | public static CompletableFuture<Void> exportLogs(
method processLogs (line 89) | private static void processLogs(Path directory, String fileExtension, ...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/ManuallyCreatedModpackException.java
class ManuallyCreatedModpackException (line 22) | public class ManuallyCreatedModpackException extends Exception {
method ManuallyCreatedModpackException (line 25) | public ManuallyCreatedModpackException(Path path) {
method getPath (line 29) | public Path getPath() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/ManuallyCreatedModpackInstallTask.java
class ManuallyCreatedModpackInstallTask (line 30) | public class ManuallyCreatedModpackInstallTask extends Task<Path> {
method ManuallyCreatedModpackInstallTask (line 37) | public ManuallyCreatedModpackInstallTask(Profile profile, Path zipFile...
method execute (line 44) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java
class ModpackHelper (line 61) | public final class ModpackHelper {
method ModpackHelper (line 62) | private ModpackHelper() {
method getProviderByType (line 78) | @Nullable
method isFileModpackByExtension (line 83) | public static boolean isFileModpackByExtension(Path file) {
method readModpackManifest (line 88) | public static Modpack readModpackManifest(Path file, Charset charset) ...
method findMinecraftDirectoryInManuallyCreatedModpack (line 117) | public static Path findMinecraftDirectoryInManuallyCreatedModpack(Stri...
method isMinecraftDirectory (line 136) | private static boolean isMinecraftDirectory(Path path) {
method readModpackConfiguration (line 141) | public static ModpackConfiguration<?> readModpackConfiguration(Path fi...
method getInstallTask (line 149) | public static Task<?> getInstallTask(Profile profile, ServerModpackMan...
method isExternalGameNameConflicts (line 173) | public static boolean isExternalGameNameConflicts(String name) {
method getInstallManuallyCreatedModpackTask (line 177) | public static Task<?> getInstallManuallyCreatedModpackTask(Profile pro...
method getInstallTask (line 191) | public static Task<?> getInstallTask(Profile profile, Path zipFile, St...
method getUpdateTask (line 226) | public static Task<Void> getUpdateTask(Profile profile, ServerModpackM...
method getUpdateTask (line 237) | public static Task<?> getUpdateTask(Profile profile, Path zipFile, Cha...
method toVersionSetting (line 252) | public static void toVersionSetting(MultiMCInstanceConfiguration c, Ve...
method applyCommandAndJvmSettings (line 289) | private static void applyCommandAndJvmSettings(MultiMCInstanceConfigur...
method createMultiMCPostUpdateTask (line 300) | private static Task<Void> createMultiMCPostUpdateTask(Profile profile,...
method createMultiMCPostInstallTask (line 307) | private static Task<Void> createMultiMCPostInstallTask(Profile profile...
method createMcbbsPostInstallTask (line 314) | private static Task<Void> createMcbbsPostInstallTask(Profile profile, ...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/OAuthServer.java
class OAuthServer (line 42) | public final class OAuthServer extends NanoHTTPD implements OAuth.Session {
method OAuthServer (line 52) | private OAuthServer(int port) {
method getCodeVerifier (line 76) | @Override
method getState (line 81) | @Override
method getRedirectURI (line 86) | @Override
method waitFor (line 91) | @Override
method getIdToken (line 96) | @Override
method serve (line 101) | @Override
class Factory (line 166) | public static class Factory implements OAuth.Callback {
method startServer (line 171) | @Override
method grantDeviceCode (line 190) | @Override
method openBrowser (line 195) | @Override
method getClientId (line 205) | @Override
class GrantDeviceCodeEvent (line 212) | public static class GrantDeviceCodeEvent extends Event {
method GrantDeviceCodeEvent (line 216) | public GrantDeviceCodeEvent(Object source, String userCode, String v...
method getUserCode (line 222) | public String getUserCode() {
method getVerificationUri (line 226) | public String getVerificationUri() {
class OpenBrowserEvent (line 231) | public static class OpenBrowserEvent extends Event {
method OpenBrowserEvent (line 234) | public OpenBrowserEvent(Object source, String url) {
method getUrl (line 239) | public String getUrl() {
class MicrosoftAuthenticationNotSupportedException (line 244) | public static class MicrosoftAuthenticationNotSupportedException exten...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java
class TexturesLoader (line 62) | public final class TexturesLoader {
method TexturesLoader (line 64) | private TexturesLoader() {
class LoadedTexture (line 68) | public static class LoadedTexture {
method LoadedTexture (line 72) | public LoadedTexture(Image image, Map<String, String> metadata) {
method getImage (line 77) | public Image getImage() {
method getMetadata (line 81) | public Map<String, String> getMetadata() {
method getTexturePath (line 89) | private static Path getTexturePath(Texture texture) {
method loadTexture (line 101) | public static LoadedTexture loadTexture(Texture texture) throws Throwa...
method getDefaultSkinImage (line 141) | public static Image getDefaultSkinImage() {
method getDefaultSkin (line 145) | public static LoadedTexture getDefaultSkin(UUID uuid) {
method getDefaultModel (line 160) | public static TextureModel getDefaultModel(UUID uuid) {
method skinBinding (line 166) | public static ObjectBinding<LoadedTexture> skinBinding(YggdrasilServic...
method skinBinding (line 197) | public static ObservableValue<LoadedTexture> skinBinding(Account accou...
method drawAvatar (line 257) | public static void drawAvatar(Canvas canvas, Image skin) {
method drawAvatar (line 269) | private static void drawAvatar(GraphicsContext g, Image skin, int size...
class SkinBindingChangeListener (line 278) | private static final class SkinBindingChangeListener implements Change...
method SkinBindingChangeListener (line 284) | SkinBindingChangeListener(Canvas canvas, ObservableValue<LoadedTextu...
method changed (line 289) | @Override
method fxAvatarBinding (line 298) | public static void fxAvatarBinding(Canvas canvas, ObservableValue<Load...
method bindAvatar (line 312) | public static void bindAvatar(Canvas canvas, YggdrasilService service,...
method bindAvatar (line 316) | public static void bindAvatar(Canvas canvas, Account account) {
method unbindAvatar (line 325) | public static void unbindAvatar(Canvas canvas) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java
class HMCLJavaRepository (line 43) | public final class HMCLJavaRepository implements JavaRepository {
method HMCLJavaRepository (line 48) | public HMCLJavaRepository(Path root) {
method getPlatformRoot (line 52) | public Path getPlatformRoot(Platform platform) {
method getJavaDir (line 56) | @Override
method getJavaDir (line 61) | public Path getJavaDir(Platform platform, GameJavaVersion gameJavaVers...
method getManifestFile (line 65) | @Override
method getManifestFile (line 70) | public Path getManifestFile(Platform platform, GameJavaVersion gameJav...
method isInstalled (line 74) | public boolean isInstalled(Platform platform, String name) {
method isInstalled (line 78) | public boolean isInstalled(Platform platform, GameJavaVersion gameJava...
method getJavaExecutable (line 82) | public @Nullable Path getJavaExecutable(Platform platform, String name) {
method getJavaExecutable (line 98) | public @Nullable Path getJavaExecutable(Platform platform, GameJavaVer...
method getAllJava (line 102) | private static void getAllJava(List<JavaRuntime> list, Platform platfo...
method getAllJava (line 133) | @Override
method getDownloadJavaTask (line 151) | @Override
method getInstallJavaTask (line 196) | public Task<JavaRuntime> getInstallJavaTask(Platform platform, String ...
method getUninstallJavaTask (line 208) | @Override
method getUninstallJavaTask (line 216) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/JavaInfoUtils.java
class JavaInfoUtils (line 37) | public final class JavaInfoUtils {
method JavaInfoUtils (line 39) | private JavaInfoUtils() {
method tryFindReleaseFile (line 42) | private static Path tryFindReleaseFile(Path executable) {
method fromExecutable (line 58) | public static @NotNull JavaInfo fromExecutable(Path executable, boolea...
class Result (line 106) | private static final class Result {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/JavaInstallTask.java
class JavaInstallTask (line 43) | public final class JavaInstallTask extends Task<JavaManifest> {
method JavaInstallTask (line 54) | public JavaInstallTask(Path targetDir, Map<String, Object> update, Pat...
method execute (line 60) | @Override
method copyDirContent (line 72) | private <F, E extends ArchiveEntry> void copyDirContent(ArchiveFileTre...
method copyDirContent (line 76) | private <F, E extends ArchiveEntry> void copyDirContent(ArchiveFileTre...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/JavaLocalFiles.java
class JavaLocalFiles (line 28) | public final class JavaLocalFiles {
class Local (line 29) | @JsonAdapter(Serializer.class)
method Local (line 33) | Local(String type) {
method getType (line 37) | public String getType() {
class LocalFile (line 42) | public static final class LocalFile extends Local {
method LocalFile (line 46) | public LocalFile(String sha1, long size) {
method getSha1 (line 52) | public String getSha1() {
method getSize (line 56) | public long getSize() {
class LocalDirectory (line 61) | public static final class LocalDirectory extends Local {
method LocalDirectory (line 62) | public LocalDirectory() {
class LocalLink (line 67) | public static final class LocalLink extends Local {
method LocalLink (line 70) | public LocalLink(String target) {
method getTarget (line 75) | public String getTarget() {
class Serializer (line 80) | public static class Serializer implements JsonSerializer<Local>, JsonD...
method serialize (line 82) | @Override
method deserialize (line 95) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java
class JavaManager (line 53) | public final class JavaManager {
method JavaManager (line 55) | private JavaManager() {
method getMojangJavaPlatform (line 61) | public static String getMojangJavaPlatform(Platform platform) {
method getExecutable (line 87) | public static Path getExecutable(Path javaHome) {
method getMacExecutable (line 91) | public static Path getMacExecutable(Path javaHome) {
method isCompatible (line 95) | public static boolean isCompatible(Platform platform) {
method getAllJavaMap (line 128) | private static Map<Path, JavaRuntime> getAllJavaMap() throws Interrupt...
method updateAllJavaProperty (line 137) | private static void updateAllJavaProperty(Map<Path, JavaRuntime> javaR...
method isInitialized (line 143) | public static boolean isInitialized() {
method getAllJava (line 147) | public static Collection<JavaRuntime> getAllJava() throws InterruptedE...
method getAllJavaProperty (line 151) | public static ObjectProperty<Collection<JavaRuntime>> getAllJavaProper...
method getJava (line 155) | public static JavaRuntime getJava(Path executable) throws IOException,...
method refresh (line 167) | public static void refresh() {
method getAddJavaTask (line 177) | public static Task<JavaRuntime> getAddJavaTask(Path binary) {
method getDownloadJavaTask (line 194) | public static Task<JavaRuntime> getDownloadJavaTask(DownloadProvider d...
method getInstallJavaTask (line 202) | public static Task<JavaRuntime> getInstallJavaTask(Platform platform, ...
method getUninstallJavaTask (line 210) | public static Task<Void> getUninstallJavaTask(JavaRuntime java) {
method addJava (line 241) | public static void addJava(JavaRuntime java) throws InterruptedExcepti...
method removeJava (line 252) | public static void removeJava(JavaRuntime java) throws InterruptedExce...
method removeJava (line 257) | public static void removeJava(Path realPath) throws InterruptedExcepti...
method chooseJava (line 267) | private static JavaRuntime chooseJava(@Nullable JavaRuntime java1, Jav...
method findSuitableJava (line 278) | @Nullable
method findSuitableJava (line 283) | @Nullable
method initialize (line 328) | public static void initialize() {
method searchPotentialJavaExecutables (line 337) | private static Map<Path, JavaRuntime> searchPotentialJavaExecutables() {
method tryAddJavaHome (line 467) | private static void tryAddJavaHome(Map<Path, JavaRuntime> javaRuntimes...
method tryAddJavaExecutable (line 507) | private static void tryAddJavaExecutable(Map<Path, JavaRuntime> javaRu...
method tryAddJavaInComponentDir (line 530) | private static void tryAddJavaInComponentDir(Map<Path, JavaRuntime> ja...
method searchAllJavaInRepository (line 571) | private static void searchAllJavaInRepository(Map<Path, JavaRuntime> j...
method searchAllOfficialJava (line 581) | private static void searchAllOfficialJava(Map<Path, JavaRuntime> javaR...
method searchAllOfficialJava (line 607) | private static void searchAllOfficialJava(Map<Path, JavaRuntime> javaR...
method searchAllJavaInDirectory (line 618) | private static void searchAllJavaInDirectory(Map<Path, JavaRuntime> ja...
method searchJavaInProgramFiles (line 632) | private static void searchJavaInProgramFiles(Map<Path, JavaRuntime> ja...
method searchJavaInMacJavaVirtualMachines (line 646) | private static void searchJavaInMacJavaVirtualMachines(Map<Path, JavaR...
method queryJavaInRegistryKey (line 661) | private static void queryJavaInRegistryKey(Map<Path, JavaRuntime> java...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManifest.java
class JavaManifest (line 36) | @JsonAdapter(JavaManifest.Serializer.class)
method JavaManifest (line 47) | public JavaManifest(JavaInfo info, @Nullable Map<String, Object> updat...
method getInfo (line 53) | public JavaInfo getInfo() {
method getUpdate (line 57) | public Map<String, Object> getUpdate() {
method getFiles (line 61) | public Map<String, JavaLocalFiles.Local> getFiles() {
class Serializer (line 65) | public static final class Serializer implements JsonSerializer<JavaMan...
method serialize (line 69) | @Override
method deserialize (line 86) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java
class Accounts (line 66) | public final class Accounts {
method Accounts (line 67) | private Accounts() {
method getLoginType (line 91) | public static String getLoginType(AccountFactory<?> factory) {
method getAccountFactory (line 102) | public static AccountFactory<?> getAccountFactory(String loginType) {
method getAccountFactoryByAuthlibInjectorServer (line 107) | public static BoundAuthlibInjectorAccountFactory getAccountFactoryByAu...
method getAccountFactory (line 112) | public static AccountFactory<?> getAccountFactory(Account account) {
method getAccountStorage (line 134) | private static Map<Object, Object> getAccountStorage(Account account) {
method updateAccountStorages (line 140) | private static void updateAccountStorages() {
method loadGlobalAccountStorages (line 164) | private static void loadGlobalAccountStorages() {
method parseAccount (line 178) | private static Account parseAccount(Map<Object, Object> storage) {
method init (line 196) | static void init() {
method getAccounts (line 342) | public static ObservableList<Account> getAccounts() {
method getSelectedAccount (line 346) | public static Account getSelectedAccount() {
method setSelectedAccount (line 350) | public static void setSelectedAccount(Account selectedAccount) {
method selectedAccountProperty (line 354) | public static ObjectProperty<Account> selectedAccountProperty() {
method createAuthlibInjectorArtifactProvider (line 359) | private static AuthlibInjectorArtifactProvider createAuthlibInjectorAr...
method getOrCreateAuthlibInjectorServer (line 375) | private static AuthlibInjectorServer getOrCreateAuthlibInjectorServer(...
method removeDanglingAuthlibInjectorAccounts (line 390) | private static void removeDanglingAuthlibInjectorAccounts() {
method getLocalizedLoginTypeName (line 406) | public static String getLocalizedLoginTypeName(AccountFactory<?> facto...
method localizeErrorMessage (line 412) | public static String localizeErrorMessage(Exception exception) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/AuthlibInjectorServers.java
class AuthlibInjectorServers (line 41) | @JsonSerializable
method getServers (line 48) | public static Set<AuthlibInjectorServer> getServers() {
method AuthlibInjectorServers (line 54) | private AuthlibInjectorServers(List<String> urls) {
method validate (line 58) | @Override
method init (line 65) | public static void init() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
class Config (line 47) | @JsonAdapter(value = Config.Adapter.class)
method fromJson (line 66) | @Nullable
method Config (line 71) | public Config() {
method toJson (line 77) | public String toJson() {
method configVersionProperty (line 86) | public IntegerProperty configVersionProperty() {
method getConfigVersion (line 90) | public int getConfigVersion() {
method setConfigVersion (line 94) | public void setConfigVersion(int configVersion) {
method uiVersionProperty (line 108) | public IntegerProperty uiVersionProperty() {
method getUiVersion (line 112) | public int getUiVersion() {
method setUiVersion (line 116) | public void setUiVersion(int uiVersion) {
method xProperty (line 123) | public DoubleProperty xProperty() {
method getX (line 127) | public double getX() {
method setX (line 131) | public void setX(double x) {
method yProperty (line 138) | public DoubleProperty yProperty() {
method getY (line 142) | public double getY() {
method setY (line 146) | public void setY(double y) {
method widthProperty (line 153) | public DoubleProperty widthProperty() {
method getWidth (line 157) | public double getWidth() {
method setWidth (line 161) | public void setWidth(double width) {
method heightProperty (line 168) | public DoubleProperty heightProperty() {
method getHeight (line 172) | public double getHeight() {
method setHeight (line 176) | public void setHeight(double height) {
method localizationProperty (line 183) | public ObjectProperty<SupportedLocale> localizationProperty() {
method getLocalization (line 187) | public SupportedLocale getLocalization() {
method setLocalization (line 191) | public void setLocalization(SupportedLocale localization) {
method getPromptedVersion (line 198) | public String getPromptedVersion() {
method promptedVersionProperty (line 202) | public StringProperty promptedVersionProperty() {
method setPromptedVersion (line 206) | public void setPromptedVersion(String promptedVersion) {
method acceptPreviewUpdateProperty (line 213) | public BooleanProperty acceptPreviewUpdateProperty() {
method isAcceptPreviewUpdate (line 217) | public boolean isAcceptPreviewUpdate() {
method setAcceptPreviewUpdate (line 221) | public void setAcceptPreviewUpdate(boolean acceptPreviewUpdate) {
method disableAutoShowUpdateDialogProperty (line 228) | public BooleanProperty disableAutoShowUpdateDialogProperty() {
method isDisableAutoShowUpdateDialog (line 232) | public boolean isDisableAutoShowUpdateDialog() {
method setDisableAutoShowUpdateDialog (line 236) | public void setDisableAutoShowUpdateDialog(boolean disableAutoShowUpda...
method disableAprilFoolsProperty (line 243) | public BooleanProperty disableAprilFoolsProperty() {
method isDisableAprilFools (line 247) | public boolean isDisableAprilFools() {
method setDisableAprilFools (line 251) | public void setDisableAprilFools(boolean disableAprilFools) {
method getShownTips (line 258) | public ObservableMap<String, Object> getShownTips() {
method commonDirTypeProperty (line 265) | public ObjectProperty<EnumCommonDirectory> commonDirTypeProperty() {
method getCommonDirType (line 269) | public EnumCommonDirectory getCommonDirType() {
method setCommonDirType (line 273) | public void setCommonDirType(EnumCommonDirectory commonDirType) {
method commonDirectoryProperty (line 280) | public StringProperty commonDirectoryProperty() {
method getCommonDirectory (line 284) | public String getCommonDirectory() {
method setCommonDirectory (line 288) | public void setCommonDirectory(String commonDirectory) {
method logLinesProperty (line 295) | public ObjectProperty<Integer> logLinesProperty() {
method getLogLines (line 299) | public Integer getLogLines() {
method setLogLines (line 303) | public void setLogLines(Integer logLines) {
method themeBrightnessProperty (line 312) | public StringProperty themeBrightnessProperty() {
method getThemeBrightness (line 316) | public String getThemeBrightness() {
method setThemeBrightness (line 320) | public void setThemeBrightness(String themeBrightness) {
method themeColorProperty (line 327) | public ObjectProperty<ThemeColor> themeColorProperty() {
method getThemeColor (line 331) | public ThemeColor getThemeColor() {
method setThemeColor (line 335) | public void setThemeColor(ThemeColor themeColor) {
method fontFamilyProperty (line 342) | public StringProperty fontFamilyProperty() {
method getFontFamily (line 346) | public String getFontFamily() {
method setFontFamily (line 350) | public void setFontFamily(String fontFamily) {
method fontSizeProperty (line 357) | public DoubleProperty fontSizeProperty() {
method getFontSize (line 361) | public double getFontSize() {
method setFontSize (line 365) | public void setFontSize(double fontSize) {
method launcherFontFamilyProperty (line 372) | public StringProperty launcherFontFamilyProperty() {
method getLauncherFontFamily (line 376) | public String getLauncherFontFamily() {
method setLauncherFontFamily (line 380) | public void setLauncherFontFamily(String launcherFontFamily) {
method animationDisabledProperty (line 391) | public BooleanProperty animationDisabledProperty() {
method isAnimationDisabled (line 395) | public boolean isAnimationDisabled() {
method setAnimationDisabled (line 399) | public void setAnimationDisabled(boolean animationDisabled) {
method titleTransparentProperty (line 406) | public BooleanProperty titleTransparentProperty() {
method isTitleTransparent (line 410) | public boolean isTitleTransparent() {
method setTitleTransparent (line 414) | public void setTitleTransparent(boolean titleTransparent) {
method backgroundImageTypeProperty (line 421) | public ObjectProperty<EnumBackgroundImage> backgroundImageTypeProperty...
method getBackgroundImageType (line 425) | public EnumBackgroundImage getBackgroundImageType() {
method setBackgroundImageType (line 429) | public void setBackgroundImageType(EnumBackgroundImage backgroundImage...
method backgroundImageProperty (line 436) | public StringProperty backgroundImageProperty() {
method getBackgroundImage (line 440) | public String getBackgroundImage() {
method setBackgroundImage (line 444) | public void setBackgroundImage(String backgroundImage) {
method backgroundImageUrlProperty (line 451) | public StringProperty backgroundImageUrlProperty() {
method getBackgroundImageUrl (line 455) | public String getBackgroundImageUrl() {
method setBackgroundImageUrl (line 459) | public void setBackgroundImageUrl(String backgroundImageUrl) {
method getBackgroundPaint (line 466) | public Paint getBackgroundPaint() {
method backgroundPaintProperty (line 470) | public ObjectProperty<Paint> backgroundPaintProperty() {
method setBackgroundPaint (line 474) | public void setBackgroundPaint(Paint backgroundPaint) {
method backgroundImageOpacityProperty (line 481) | public IntegerProperty backgroundImageOpacityProperty() {
method getBackgroundImageOpacity (line 485) | public int getBackgroundImageOpacity() {
method setBackgroundImageOpacity (line 489) | public void setBackgroundImageOpacity(int backgroundImageOpacity) {
method autoDownloadThreadsProperty (line 498) | public BooleanProperty autoDownloadThreadsProperty() {
method getAutoDownloadThreads (line 502) | public boolean getAutoDownloadThreads() {
method setAutoDownloadThreads (line 506) | public void setAutoDownloadThreads(boolean autoDownloadThreads) {
method downloadThreadsProperty (line 513) | public IntegerProperty downloadThreadsProperty() {
method getDownloadThreads (line 517) | public int getDownloadThreads() {
method setDownloadThreads (line 521) | public void setDownloadThreads(int downloadThreads) {
method downloadTypeProperty (line 528) | public StringProperty downloadTypeProperty() {
method getDownloadType (line 532) | public String getDownloadType() {
method setDownloadType (line 536) | public void setDownloadType(String downloadType) {
method autoChooseDownloadTypeProperty (line 543) | public BooleanProperty autoChooseDownloadTypeProperty() {
method isAutoChooseDownloadType (line 547) | public boolean isAutoChooseDownloadType() {
method setAutoChooseDownloadType (line 551) | public void setAutoChooseDownloadType(boolean autoChooseDownloadType) {
method versionListSourceProperty (line 558) | public StringProperty versionListSourceProperty() {
method getVersionListSource (line 562) | public String getVersionListSource() {
method setVersionListSource (line 566) | public void setVersionListSource(String versionListSource) {
method hasProxyProperty (line 573) | public BooleanProperty hasProxyProperty() {
method hasProxy (line 577) | public boolean hasProxy() {
method setHasProxy (line 581) | public void setHasProxy(boolean hasProxy) {
method hasProxyAuthProperty (line 588) | public BooleanProperty hasProxyAuthProperty() {
method hasProxyAuth (line 592) | public boolean hasProxyAuth() {
method setHasProxyAuth (line 596) | public void setHasProxyAuth(boolean hasProxyAuth) {
method proxyTypeProperty (line 603) | public ObjectProperty<Proxy.Type> proxyTypeProperty() {
method getProxyType (line 607) | public Proxy.Type getProxyType() {
method setProxyType (line 611) | public void setProxyType(Proxy.Type proxyType) {
method proxyHostProperty (line 618) | public StringProperty proxyHostProperty() {
method getProxyHost (line 622) | public String getProxyHost() {
method setProxyHost (line 626) | public void setProxyHost(String proxyHost) {
method proxyPortProperty (line 633) | public IntegerProperty proxyPortProperty() {
method getProxyPort (line 637) | public int getProxyPort() {
method setProxyPort (line 641) | public void setProxyPort(int proxyPort) {
method proxyUserProperty (line 648) | public StringProperty proxyUserProperty() {
method getProxyUser (line 652) | public String getProxyUser() {
method setProxyUser (line 656) | public void setProxyUser(String proxyUser) {
method proxyPassProperty (line 663) | public StringProperty proxyPassProperty() {
method getProxyPass (line 667) | public String getProxyPass() {
method setProxyPass (line 671) | public void setProxyPass(String proxyPass) {
method disableAutoGameOptionsProperty (line 680) | public BooleanProperty disableAutoGameOptionsProperty() {
method isDisableAutoGameOptions (line 684) | public boolean isDisableAutoGameOptions() {
method setDisableAutoGameOptions (line 688) | public void setDisableAutoGameOptions(boolean disableAutoGameOptions) {
method getAuthlibInjectorServers (line 697) | public ObservableList<AuthlibInjectorServer> getAuthlibInjectorServers...
method addedLittleSkinProperty (line 704) | public BooleanProperty addedLittleSkinProperty() {
method isAddedLittleSkin (line 708) | public boolean isAddedLittleSkin() {
method setAddedLittleSkin (line 712) | public void setAddedLittleSkin(boolean addedLittleSkin) {
method preferredLoginTypeProperty (line 722) | public StringProperty preferredLoginTypeProperty() {
method getPreferredLoginType (line 726) | public String getPreferredLoginType() {
method setPreferredLoginType (line 730) | public void setPreferredLoginType(String preferredLoginType) {
method selectedAccountProperty (line 737) | public StringProperty selectedAccountProperty() {
method getSelectedAccount (line 741) | public String getSelectedAccount() {
method setSelectedAccount (line 745) | public void setSelectedAccount(String selectedAccount) {
method getAccountStorages (line 752) | public ObservableList<Map<Object, Object>> getAccountStorages() {
method selectedProfileProperty (line 761) | public StringProperty selectedProfileProperty() {
method getSelectedProfile (line 765) | public String getSelectedProfile() {
method setSelectedProfile (line 769) | public void setSelectedProfile(String selectedProfile) {
method getConfigurations (line 776) | public MapProperty<String, Profile> getConfigurations() {
class Adapter (line 780) | public static final class Adapter extends ObservableSetting.Adapter<Co...
method createInstance (line 781) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java
class ConfigHolder (line 34) | public final class ConfigHolder {
method ConfigHolder (line 36) | private ConfigHolder() {
method config (line 50) | public static Config config() {
method globalConfig (line 57) | public static GlobalConfig globalConfig() {
method configLocation (line 64) | public static Path configLocation() {
method isNewlyCreated (line 68) | public static boolean isNewlyCreated() {
method isOwnerChanged (line 72) | public static boolean isOwnerChanged() {
method isUnsupportedVersion (line 76) | public static boolean isUnsupportedVersion() {
method init (line 80) | public static void init() throws IOException {
method locateConfig (line 121) | private static Path locateConfig() {
method loadConfig (line 155) | private static Config loadConfig() throws IOException {
method loadGlobalConfig (line 193) | private static GlobalConfig loadGlobalConfig() throws IOException {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java
class ConfigUpgrader (line 30) | final class ConfigUpgrader {
method ConfigUpgrader (line 31) | private ConfigUpgrader() {
method upgradeConfig (line 40) | static void upgradeConfig(Config deserialized, String rawContent) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java
class DownloadProviders (line 44) | public final class DownloadProviders {
method DownloadProviders (line 45) | private DownloadProviders() {
method init (line 82) | static void init() {
method getDownloadProvider (line 115) | public static DownloadProvider getDownloadProvider() {
method localizeErrorMessage (line 119) | public static String localizeErrorMessage(Throwable exception) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java
type EnumBackgroundImage (line 20) | public enum EnumBackgroundImage {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumCommonDirectory.java
type EnumCommonDirectory (line 20) | public enum EnumCommonDirectory {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/FontManager.java
class FontManager (line 46) | public final class FontManager {
method updateFont (line 105) | private static void updateFont() {
method tryLoadDefaultFont (line 120) | private static Font tryLoadDefaultFont(Path dir) {
method tryLoadLocalizedFont (line 140) | private static Font tryLoadLocalizedFont(Path dir) {
method findByFcMatch (line 172) | public static Font findByFcMatch(String pattern) {
method fontProperty (line 230) | public static ReadOnlyObjectProperty<FontReference> fontProperty() {
method getFont (line 234) | public static FontReference getFont() {
method setFontFamily (line 238) | public static void setFontFamily(String fontFamily) {
method FontReference (line 249) | public FontReference(@NotNull String family) {
method FontReference (line 253) | public FontReference(@NotNull Font font) {
method FontManager (line 258) | private FontManager() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/GlobalConfig.java
class GlobalConfig (line 31) | @JsonAdapter(GlobalConfig.Adapter.class)
method fromJson (line 34) | @Nullable
method GlobalConfig (line 39) | public GlobalConfig() {
method toJson (line 43) | public String toJson() {
method agreementVersionProperty (line 50) | public IntegerProperty agreementVersionProperty() {
method getAgreementVersion (line 54) | public int getAgreementVersion() {
method setAgreementVersion (line 58) | public void setAgreementVersion(int agreementVersion) {
method terracottaAgreementVersionProperty (line 65) | public IntegerProperty terracottaAgreementVersionProperty() {
method getTerracottaAgreementVersion (line 69) | public int getTerracottaAgreementVersion() {
method setTerracottaAgreementVersion (line 73) | public void setTerracottaAgreementVersion(int terracottaAgreementVersi...
method platformPromptVersionProperty (line 80) | public IntegerProperty platformPromptVersionProperty() {
method getPlatformPromptVersion (line 84) | public int getPlatformPromptVersion() {
method setPlatformPromptVersion (line 88) | public void setPlatformPromptVersion(int platformPromptVersion) {
method logRetentionProperty (line 95) | public IntegerProperty logRetentionProperty() {
method getLogRetention (line 99) | public int getLogRetention() {
method setLogRetention (line 103) | public void setLogRetention(int logRetention) {
method enableOfflineAccountProperty (line 110) | public BooleanProperty enableOfflineAccountProperty() {
method isEnableOfflineAccount (line 114) | public boolean isEnableOfflineAccount() {
method setEnableOfflineAccount (line 118) | public void setEnableOfflineAccount(boolean value) {
method fontAntiAliasingProperty (line 125) | public StringProperty fontAntiAliasingProperty() {
method getFontAntiAliasing (line 129) | public String getFontAntiAliasing() {
method setFontAntiAliasing (line 133) | public void setFontAntiAliasing(String value) {
method getUserJava (line 140) | public ObservableSet<String> getUserJava() {
method getDisabledJava (line 147) | public ObservableSet<String> getDisabledJava() {
class Adapter (line 151) | static final class Adapter extends ObservableSetting.Adapter<GlobalCon...
method createInstance (line 152) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/JavaVersionType.java
type JavaVersionType (line 23) | public enum JavaVersionType {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/LauncherVisibility.java
type LauncherVisibility (line 24) | public enum LauncherVisibility {
method isDaemon (line 48) | public boolean isDaemon() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java
class Profile (line 49) | @JsonAdapter(Profile.Serializer.class)
method selectedVersionProperty (line 56) | public StringProperty selectedVersionProperty() {
method getSelectedVersion (line 60) | public String getSelectedVersion() {
method setSelectedVersion (line 64) | public void setSelectedVersion(String selectedVersion) {
method gameDirProperty (line 70) | public ObjectProperty<Path> gameDirProperty() {
method getGameDir (line 74) | public Path getGameDir() {
method setGameDir (line 78) | public void setGameDir(Path gameDir) {
method globalProperty (line 84) | public ReadOnlyObjectProperty<VersionSetting> globalProperty() {
method getGlobal (line 88) | public VersionSetting getGlobal() {
method nameProperty (line 94) | public StringProperty nameProperty() {
method getName (line 98) | public String getName() {
method setName (line 102) | public void setName(String name) {
method useRelativePathProperty (line 108) | public BooleanProperty useRelativePathProperty() {
method isUseRelativePath (line 112) | public boolean isUseRelativePath() {
method setUseRelativePath (line 116) | public void setUseRelativePath(boolean useRelativePath) {
method Profile (line 120) | public Profile(String name) {
method Profile (line 124) | public Profile(String name, Path initialGameDir) {
method Profile (line 128) | public Profile(String name, Path initialGameDir, VersionSetting global) {
method Profile (line 132) | public Profile(String name, Path initialGameDir, VersionSetting global...
method checkSelectedVersion (line 147) | private void checkSelectedVersion() {
method getRepository (line 161) | public HMCLGameRepository getRepository() {
method getDependency (line 165) | public DefaultDependencyManager getDependency() {
method getDependency (line 169) | public DefaultDependencyManager getDependency(DownloadProvider downloa...
method getVersionSetting (line 173) | public VersionSetting getVersionSetting(String id) {
method toString (line 177) | @Override
method addPropertyChangedListener (line 186) | private void addPropertyChangedListener(InvalidationListener listener) {
method addListener (line 197) | @Override
method removeListener (line 202) | @Override
method invalidate (line 207) | private void invalidate() {
class ProfileVersion (line 211) | public static class ProfileVersion {
method ProfileVersion (line 215) | public ProfileVersion(Profile profile, String version) {
method getProfile (line 220) | public Profile getProfile() {
method getVersion (line 224) | public String getVersion() {
class Serializer (line 229) | public static final class Serializer implements JsonSerializer<Profile...
method serialize (line 230) | @Override
method deserialize (line 244) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java
class Profiles (line 42) | public final class Profiles {
method Profiles (line 47) | private Profiles() {
method getProfileDisplayName (line 50) | public static String getProfileDisplayName(Profile profile) {
method invalidated (line 66) | @Override
method checkProfiles (line 102) | private static void checkProfiles() {
method updateProfileStorages (line 125) | private static void updateProfileStorages() {
method init (line 141) | static void init() {
method getProfiles (line 177) | public static ObservableList<Profile> getProfiles() {
method profilesProperty (line 181) | public static ReadOnlyListProperty<Profile> profilesProperty() {
method getSelectedProfile (line 185) | public static Profile getSelectedProfile() {
method setSelectedProfile (line 189) | public static void setSelectedProfile(Profile profile) {
method selectedProfileProperty (line 193) | public static ObjectProperty<Profile> selectedProfileProperty() {
method selectedVersionProperty (line 199) | public static ReadOnlyStringProperty selectedVersionProperty() {
method getSelectedVersion (line 204) | public static String getSelectedVersion() {
method registerVersionsListener (line 210) | public static void registerVersionsListener(Consumer<Profile> listener) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/ProxyManager.java
class ProxyManager (line 35) | public final class ProxyManager {
method getProxySelector (line 50) | private static ProxySelector getProxySelector() {
method getAuthenticator (line 69) | private static SimpleAuthenticator getAuthenticator() {
method init (line 85) | static void init() {
class AbstractProxySelector (line 122) | private static abstract class AbstractProxySelector extends ProxySelec...
method connectFailed (line 123) | @Override
class SimpleProxySelector (line 131) | private static final class SimpleProxySelector extends AbstractProxySe...
method SimpleProxySelector (line 134) | SimpleProxySelector(Proxy proxy) {
method select (line 138) | @Override
method toString (line 145) | @Override
class ProxySelectorWrapper (line 152) | private static final class ProxySelectorWrapper extends AbstractProxyS...
method ProxySelectorWrapper (line 155) | ProxySelectorWrapper(ProxySelector source) {
method select (line 159) | @Override
class SimpleAuthenticator (line 171) | private static final class SimpleAuthenticator extends Authenticator {
method SimpleAuthenticator (line 175) | private SimpleAuthenticator(String username, char[] password) {
method getPasswordAuthentication (line 180) | @Override
method ProxyManager (line 186) | private ProxyManager() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/SambaException.java
class SambaException (line 3) | public final class SambaException extends RuntimeException {
method SambaException (line 4) | public SambaException() {
method SambaException (line 7) | public SambaException(String message) {
method SambaException (line 11) | public SambaException(String message, Throwable cause) {
method SambaException (line 15) | public SambaException(Throwable cause) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java
class Settings (line 29) | public final class Settings {
method instance (line 33) | public static Settings instance() {
method init (line 43) | static void init() {
method Settings (line 47) | private Settings() {
method getDefaultCommonDirectory (line 65) | public static String getDefaultCommonDirectory() {
method getCommonDirectory (line 69) | public String getCommonDirectory() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/StyleSheets.java
class StyleSheets (line 47) | public final class StyleSheets {
method toStyleSheetUri (line 70) | private static String toStyleSheetUri(String styleSheet, String fallba...
method getFontStyleSheet (line 89) | private static String getFontStyleSheet() {
method getBrightnessStyleSheet (line 139) | private static String getBrightnessStyleSheet() {
method addColor (line 145) | private static void addColor(StringBuilder builder, String name, Color...
method addColor (line 150) | private static void addColor(StringBuilder builder, String name, Color...
method addColor (line 155) | private static void addColor(StringBuilder builder, ColorScheme scheme...
method getThemeStyleSheet (line 161) | private static String getThemeStyleSheet() {
method init (line 190) | public static void init(Scene scene) {
method StyleSheets (line 194) | private StyleSheets() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionIconType.java
type VersionIconType (line 24) | public enum VersionIconType {
method getIconType (line 45) | public static VersionIconType getIconType(ModLoaderType modLoaderType) {
method VersionIconType (line 59) | VersionIconType(String resourceUrl) {
method getIcon (line 63) | public Image getIcon() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java
class VersionSetting (line 48) | @JsonAdapter(VersionSetting.Serializer.class)
method VersionSetting (line 62) | public VersionSetting() {
method usesGlobalProperty (line 68) | public BooleanProperty usesGlobalProperty() {
method isUsesGlobal (line 80) | public boolean isUsesGlobal() {
method setUsesGlobal (line 84) | public void setUsesGlobal(boolean usesGlobal) {
method javaVersionTypeProperty (line 92) | public ObjectProperty<JavaVersionType> javaVersionTypeProperty() {
method getJavaVersionType (line 96) | public JavaVersionType getJavaVersionType() {
method setJavaVersionType (line 100) | public void setJavaVersionType(JavaVersionType javaVersionType) {
method javaVersionProperty (line 106) | public StringProperty javaVersionProperty() {
method getJavaVersion (line 110) | public String getJavaVersion() {
method setJavaVersion (line 114) | public void setJavaVersion(String java) {
method setUsesCustomJavaDir (line 118) | public void setUsesCustomJavaDir() {
method setJavaAutoSelected (line 124) | public void setJavaAutoSelected() {
method getDefaultJavaPath (line 136) | public String getDefaultJavaPath() {
method defaultJavaPathPropertyProperty (line 140) | public StringProperty defaultJavaPathPropertyProperty() {
method setDefaultJavaPath (line 144) | public void setDefaultJavaPath(String defaultJavaPath) {
method nativesDirTypeProperty (line 153) | public ObjectProperty<NativesDirectoryType> nativesDirTypeProperty() {
method getNativesDirType (line 157) | public NativesDirectoryType getNativesDirType() {
method setNativesDirType (line 161) | public void setNativesDirType(NativesDirectoryType nativesDirType) {
method nativesDirProperty (line 169) | public StringProperty nativesDirProperty() {
method getNativesDir (line 173) | public String getNativesDir() {
method setNativesDir (line 177) | public void setNativesDir(String nativesDir) {
method javaDirProperty (line 183) | public StringProperty javaDirProperty() {
method getJavaDir (line 190) | public String getJavaDir() {
method setJavaDir (line 194) | public void setJavaDir(String javaDir) {
method wrapperProperty (line 200) | public StringProperty wrapperProperty() {
method getWrapper (line 207) | public String getWrapper() {
method setWrapper (line 211) | public void setWrapper(String wrapper) {
method permSizeProperty (line 217) | public StringProperty permSizeProperty() {
method getPermSize (line 224) | public String getPermSize() {
method setPermSize (line 228) | public void setPermSize(String permSize) {
method maxMemoryProperty (line 234) | public IntegerProperty maxMemoryProperty() {
method getMaxMemory (line 241) | public int getMaxMemory() {
method setMaxMemory (line 245) | public void setMaxMemory(int maxMemory) {
method minMemoryProperty (line 254) | public ObjectProperty<Integer> minMemoryProperty() {
method getMinMemory (line 258) | public Integer getMinMemory() {
method setMinMemory (line 262) | public void setMinMemory(Integer minMemory) {
method isAutoMemory (line 268) | public boolean isAutoMemory() {
method autoMemoryProperty (line 272) | public BooleanProperty autoMemoryProperty() {
method setAutoMemory (line 276) | public void setAutoMemory(boolean autoMemory) {
method preLaunchCommandProperty (line 282) | public StringProperty preLaunchCommandProperty() {
method getPreLaunchCommand (line 290) | public String getPreLaunchCommand() {
method setPreLaunchCommand (line 294) | public void setPreLaunchCommand(String preLaunchCommand) {
method postExitCommandProperty (line 300) | public StringProperty postExitCommandProperty() {
method getPostExitCommand (line 308) | public String getPostExitCommand() {
method setPostExitCommand (line 312) | public void setPostExitCommand(String postExitCommand) {
method javaArgsProperty (line 320) | public StringProperty javaArgsProperty() {
method getJavaArgs (line 327) | public String getJavaArgs() {
method setJavaArgs (line 331) | public void setJavaArgs(String javaArgs) {
method minecraftArgsProperty (line 337) | public StringProperty minecraftArgsProperty() {
method getMinecraftArgs (line 344) | public String getMinecraftArgs() {
method setMinecraftArgs (line 348) | public void setMinecraftArgs(String minecraftArgs) {
method environmentVariablesProperty (line 354) | public StringProperty environmentVariablesProperty() {
method getEnvironmentVariables (line 358) | public String getEnvironmentVariables() {
method setEnvironmentVariables (line 362) | public void setEnvironmentVariables(String env) {
method noJVMArgsProperty (line 368) | public BooleanProperty noJVMArgsProperty() {
method isNoJVMArgs (line 375) | public boolean isNoJVMArgs() {
method setNoJVMArgs (line 379) | public void setNoJVMArgs(boolean noJVMArgs) {
method noOptimizingJVMArgsProperty (line 385) | public BooleanProperty noOptimizingJVMArgsProperty() {
method isNoOptimizingJVMArgs (line 389) | public boolean isNoOptimizingJVMArgs() {
method setNoOptimizingJVMArgs (line 393) | public void setNoOptimizingJVMArgs(boolean noOptimizingJVMArgs) {
method notCheckJVMProperty (line 399) | public BooleanProperty notCheckJVMProperty() {
method isNotCheckJVM (line 406) | public boolean isNotCheckJVM() {
method setNotCheckJVM (line 410) | public void setNotCheckJVM(boolean notCheckJVM) {
method notCheckGameProperty (line 416) | public BooleanProperty notCheckGameProperty() {
method isNotCheckGame (line 423) | public boolean isNotCheckGame() {
method setNotCheckGame (line 427) | public void setNotCheckGame(boolean notCheckGame) {
method notPatchNativesProperty (line 433) | public BooleanProperty notPatchNativesProperty() {
method isNotPatchNatives (line 437) | public boolean isNotPatchNatives() {
method setNotPatchNatives (line 441) | public void setNotPatchNatives(boolean notPatchNatives) {
method showLogsProperty (line 447) | public BooleanProperty showLogsProperty() {
method isShowLogs (line 454) | public boolean isShowLogs() {
method setShowLogs (line 458) | public void setShowLogs(boolean showLogs) {
method enableDebugLogOutputProperty (line 464) | public BooleanProperty enableDebugLogOutputProperty() {
method isEnableDebugLogOutput (line 468) | public boolean isEnableDebugLogOutput() {
method setEnableDebugLogOutput (line 472) | public void setEnableDebugLogOutput(boolean u) {
method serverIpProperty (line 480) | public StringProperty serverIpProperty() {
method getServerIp (line 489) | public String getServerIp() {
method setServerIp (line 493) | public void setServerIp(String serverIp) {
method fullscreenProperty (line 500) | public BooleanProperty fullscreenProperty() {
method isFullscreen (line 507) | public boolean isFullscreen() {
method setFullscreen (line 511) | public void setFullscreen(boolean fullscreen) {
method widthProperty (line 517) | public IntegerProperty widthProperty() {
method getWidth (line 528) | public int getWidth() {
method setWidth (line 532) | public void setWidth(int width) {
method heightProperty (line 538) | public IntegerProperty heightProperty() {
method getHeight (line 549) | public int getHeight() {
method setHeight (line 553) | public void setHeight(int height) {
method gameDirTypeProperty (line 563) | public ObjectProperty<GameDirectoryType> gameDirTypeProperty() {
method getGameDirType (line 567) | public GameDirectoryType getGameDirType() {
method setGameDirType (line 571) | public void setGameDirType(GameDirectoryType gameDirType) {
method gameDirProperty (line 580) | public StringProperty gameDirProperty() {
method getGameDir (line 584) | public String getGameDir() {
method setGameDir (line 588) | public void setGameDir(String gameDir) {
method processPriorityProperty (line 594) | public ObjectProperty<ProcessPriority> processPriorityProperty() {
method getProcessPriority (line 598) | public ProcessPriority getProcessPriority() {
method setProcessPriority (line 602) | public void setProcessPriority(ProcessPriority processPriority) {
method getRenderer (line 608) | public Renderer getRenderer() {
method rendererProperty (line 612) | public ObjectProperty<Renderer> rendererProperty() {
method setRenderer (line 616) | public void setRenderer(Renderer renderer) {
method isUseNativeGLFW (line 622) | public boolean isUseNativeGLFW() {
method useNativeGLFWProperty (line 626) | public BooleanProperty useNativeGLFWProperty() {
method setUseNativeGLFW (line 630) | public void setUseNativeGLFW(boolean useNativeGLFW) {
method isUseNativeOpenAL (line 636) | public boolean isUseNativeOpenAL() {
method useNativeOpenALProperty (line 640) | public BooleanProperty useNativeOpenALProperty() {
method setUseNativeOpenAL (line 644) | public void setUseNativeOpenAL(boolean useNativeOpenAL) {
method getVersionIcon (line 650) | public VersionIconType getVersionIcon() {
method versionIconProperty (line 654) | public ObjectProperty<VersionIconType> versionIconProperty() {
method setVersionIcon (line 658) | public void setVersionIcon(VersionIconType versionIcon) {
method launcherVisibilityProperty (line 671) | public ObjectProperty<LauncherVisibility> launcherVisibilityProperty() {
method getLauncherVisibility (line 675) | public LauncherVisibility getLauncherVisibility() {
method setLauncherVisibility (line 679) | public void setLauncherVisibility(LauncherVisibility launcherVisibilit...
method getJava (line 683) | public JavaRuntime getJava(GameVersionNumber gameVersion, Version vers...
method addListener (line 748) | @Override
method removeListener (line 753) | @Override
method clone (line 758) | @Override
class Serializer (line 765) | public static class Serializer implements JsonSerializer<VersionSettin...
method serialize (line 766) | @Override
method deserialize (line 830) | @Override
method parseJsonPrimitive (line 911) | private int parseJsonPrimitive(JsonPrimitive primitive) {
method parseJsonPrimitive (line 915) | private int parseJsonPrimitive(JsonPrimitive primitive, int defaultV...
method parseJsonPrimitive (line 924) | private <E extends Enum<E>> E parseJsonPrimitive(JsonPrimitive primi...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java
class TerracottaBundle (line 48) | public final class TerracottaBundle {
method TerracottaBundle (line 57) | public TerracottaBundle(Path root, List<URI> links, FileDownloadTask.I...
method download (line 64) | public Task<Path> download(AbstractTerracottaProvider.DownloadContext ...
method install (line 100) | public Task<?> install(Path pkg) {
method locate (line 141) | public Path locate(String file) {
method status (line 149) | public AbstractTerracottaProvider.Status status() throws IOException {
method isLocalBundleValid (line 164) | private boolean isLocalBundleValid() throws IOException { // FIXME: Ma...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java
class TerracottaManager (line 60) | public final class TerracottaManager {
method TerracottaManager (line 61) | private TerracottaManager() {
method stateProperty (line 86) | public static ReadOnlyObjectProperty<TerracottaState> stateProperty() {
method runBackground (line 95) | private static void runBackground() {
method switchDaemon (line 134) | @FXThread
method getProvider (line 147) | private static AbstractTerracottaProvider getProvider() {
method isInvalidBundle (line 155) | public static boolean isInvalidBundle(Path file) {
method download (line 159) | @FXThread
method install (line 196) | @FXThread
method recover (line 227) | @FXThread
method launch (line 253) | private static void launch(TerracottaState.Launching state, boolean re...
method exportLogs (line 289) | public static Task<String> exportLogs() {
method setWaiting (line 297) | public static TerracottaState.Waiting setWaiting() {
method getPlayerName (line 308) | private static String getPlayerName() {
method setScanning (line 313) | public static TerracottaState.HostScanning setScanning() {
method setGuesting (line 333) | public static Task<TerracottaState.GuestConnecting> setGuesting(String...
method setState (line 354) | private static <T extends TerracottaState> T setState(T value) {
method compareAndSet (line 364) | private static boolean compareAndSet(TerracottaState previous, Terraco...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java
class TerracottaMetadata (line 53) | public final class TerracottaMetadata {
method TerracottaMetadata (line 54) | private TerracottaMetadata() {
method replace (line 58) | public String replace(String value) {
method resolve (line 86) | private @Nullable TerracottaBundle resolve(Options options) {
method locateProvider (line 149) | @Nullable
method removeLegacyVersionFiles (line 170) | public static void removeLegacyVersionFiles() {
method hasLegacyVersionFiles (line 187) | public static boolean hasLegacyVersionFiles() throws IOException {
method collectLegacyVersionFiles (line 193) | private static @Nullable DirectoryStream<Path> collectLegacyVersionFil...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNodeList.java
class TerracottaNodeList (line 37) | public final class TerracottaNodeList {
method validate (line 42) | @Override
method fetch (line 55) | public static List<URI> fetch() {
method TerracottaNodeList (line 101) | private TerracottaNodeList() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaState.java
class TerracottaState (line 36) | public abstract sealed class TerracottaState {
method TerracottaState (line 37) | protected TerracottaState() {
method isUIFakeState (line 40) | public boolean isUIFakeState() {
method isForkOf (line 44) | public boolean isForkOf(TerracottaState state) {
class Bootstrap (line 48) | public static final class Bootstrap extends TerracottaState {
method Bootstrap (line 51) | private Bootstrap() {
class Uninitialized (line 55) | public static final class Uninitialized extends TerracottaState {
method Uninitialized (line 58) | Uninitialized(boolean hasLegacy) {
method hasLegacy (line 62) | public boolean hasLegacy() {
class Preparing (line 67) | public static final class Preparing extends TerracottaState implements...
method Preparing (line 72) | Preparing(ReadOnlyDoubleWrapper progress, boolean hasInstallFence) {
method progressProperty (line 77) | public ReadOnlyDoubleProperty progressProperty() {
method requestInstallFence (line 81) | public boolean requestInstallFence() {
method hasInstallFence (line 85) | public boolean hasInstallFence() {
method bindProgress (line 89) | @Override
method checkCancellation (line 94) | @Override
class Launching (line 102) | public static final class Launching extends TerracottaState {
method Launching (line 103) | Launching() {
class PortSpecific (line 107) | static abstract sealed class PortSpecific extends TerracottaState {
method PortSpecific (line 110) | protected PortSpecific(int port) {
class Ready (line 115) | @JsonType(
method Ready (line 135) | Ready(int port, int index, String state) {
method isUIFakeState (line 141) | @Override
class Unknown (line 147) | public static final class Unknown extends PortSpecific {
method Unknown (line 148) | Unknown(int port) {
class Waiting (line 153) | public static final class Waiting extends Ready {
method Waiting (line 154) | Waiting(int port, int index, String state) {
class HostScanning (line 159) | public static final class HostScanning extends Ready {
method HostScanning (line 160) | HostScanning(int port, int index, String state) {
class HostStarting (line 165) | public static final class HostStarting extends Ready {
method HostStarting (line 166) | HostStarting(int port, int index, String state) {
class HostOK (line 171) | public static final class HostOK extends Ready implements Validation {
method HostOK (line 181) | HostOK(int port, int index, String state, String code, int profileIn...
method validate (line 188) | @Override
method getCode (line 198) | public String getCode() {
method getProfiles (line 202) | public List<TerracottaProfile> getProfiles() {
method isForkOf (line 206) | @Override
class GuestConnecting (line 212) | public static final class GuestConnecting extends Ready {
method GuestConnecting (line 213) | GuestConnecting(int port, int index, String state) {
class GuestStarting (line 218) | public static final class GuestStarting extends Ready {
type Difficulty (line 219) | public enum Difficulty {
method GuestStarting (line 230) | GuestStarting(int port, int index, String state, Difficulty difficul...
method getDifficulty (line 235) | public Difficulty getDifficulty() {
class GuestOK (line 240) | public static final class GuestOK extends Ready implements Validation {
method GuestOK (line 250) | GuestOK(int port, int index, String state, String url, int profileIn...
method validate (line 257) | @Override
method getUrl (line 264) | public String getUrl() {
method getProfiles (line 268) | public List<TerracottaProfile> getProfiles() {
method isForkOf (line 272) | @Override
class Exception (line 278) | public static final class Exception extends Ready implements Validation {
type Type (line 279) | public enum Type {
method Exception (line 293) | Exception(int port, int index, String state, int type) {
method validate (line 298) | @Override
method getType (line 305) | public Type getType() {
class Fatal (line 310) | public static final class Fatal extends TerracottaState {
type Type (line 311) | public enum Type {
method Fatal (line 321) | public Fatal(Type type) {
method getType (line 325) | public Type getType() {
method isRecoverable (line 329) | public boolean isRecoverable() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/profile/ProfileKind.java
type ProfileKind (line 22) | public enum ProfileKind {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/profile/TerracottaProfile.java
class TerracottaProfile (line 22) | public final class TerracottaProfile {
method TerracottaProfile (line 35) | private TerracottaProfile(String machineID, String name, String vendor...
method getMachineID (line 42) | public String getMachineID() {
method getName (line 46) | public String getName() {
method getVendor (line 50) | public String getVendor() {
method getType (line 54) | public ProfileKind getType() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/AbstractTerracottaProvider.java
class AbstractTerracottaProvider (line 30) | public abstract class AbstractTerracottaProvider {
type Status (line 31) | public enum Status {
type DownloadContext (line 37) | public interface DownloadContext {
method bindProgress (line 38) | @FXThread
method checkCancellation (line 41) | void checkCancellation() throws CancellationException;
method AbstractTerracottaProvider (line 46) | protected AbstractTerracottaProvider(TerracottaBundle bundle) {
method status (line 50) | public Status status() throws IOException {
method download (line 54) | public final Task<Path> download(DownloadContext progress) {
method install (line 58) | public Task<?> install(Path pkg) throws IOException {
method ofCommandLine (line 62) | public abstract List<String> ofCommandLine(Path portTransfer);
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/GeneralProvider.java
class GeneralProvider (line 25) | public final class GeneralProvider extends AbstractTerracottaProvider {
method GeneralProvider (line 28) | public GeneralProvider(TerracottaBundle bundle, Path executable) {
method ofCommandLine (line 33) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java
class MacOSProvider (line 36) | public final class MacOSProvider extends AbstractTerracottaProvider {
method MacOSProvider (line 39) | public MacOSProvider(TerracottaBundle bundle, Path executable, Path in...
method status (line 45) | @Override
method install (line 54) | @Override
method ofCommandLine (line 91) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/theme/Theme.java
class Theme (line 25) | public final class Theme {
method Theme (line 34) | public Theme(ThemeColor primaryColorSeed,
method toColorScheme (line 45) | public ColorScheme toColorScheme() {
method primaryColorSeed (line 55) | public ThemeColor primaryColorSeed() {
method brightness (line 59) | public Brightness brightness() {
method colorStyle (line 63) | public ColorStyle colorStyle() {
method contrast (line 67) | public Contrast contrast() {
method equals (line 71) | @Override
method hashCode (line 80) | @Override
method toString (line 85) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/theme/ThemeColor.java
method getColorDisplayName (line 55) | public static String getColorDisplayName(Color c) {
method getColorDisplayNameWithOpacity (line 63) | public static String getColorDisplayNameWithOpacity(Color c, double opac...
method of (line 72) | public static @Nullable ThemeColor of(String name) {
method of (line 90) | @Contract("null -> null; !null -> !null")
class BidirectionalBinding (line 95) | private static final class BidirectionalBinding implements InvalidationL...
method BidirectionalBinding (line 102) | private BidirectionalBinding(ColorPicker colorPicker, Property<ThemeCo...
method invalidated (line 108) | @Override
method wasGarbageCollected (line 139) | @Override
method hashCode (line 144) | @Override
method equals (line 149) | @Override
method bindBidirectional (line 169) | public static void bindBidirectional(ColorPicker colorPicker, Property<T...
class TypeAdapter (line 182) | static final class TypeAdapter extends com.google.gson.TypeAdapter<Theme...
method write (line 183) | @Override
method read (line 188) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/theme/Themes.java
class Themes (line 58) | public final class Themes {
method getBrightness (line 72) | private Brightness getBrightness() {
method computeValue (line 91) | @Override
method getDefaultBrightness (line 116) | private static Brightness getDefaultBrightness() {
method themeProperty (line 174) | public static ObjectExpression<Theme> themeProperty() {
method getTheme (line 178) | public static Theme getTheme() {
method colorSchemeProperty (line 182) | public static ReadOnlyColorSchemeProperty colorSchemeProperty() {
method getColorScheme (line 186) | public static ColorScheme getColorScheme() {
method titleFillProperty (line 198) | public static ObservableValue<Color> titleFillProperty() {
method darkModeProperty (line 202) | public static BooleanBinding darkModeProperty() {
method applyNativeDarkMode (line 206) | public static void applyNativeDarkMode(Stage stage) {
method Themes (line 239) | private Themes() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java
class Controllers (line 86) | public final class Controllers {
method Controllers (line 127) | private Controllers() {
method getScene (line 130) | public static Scene getScene() {
method getStage (line 134) | public static Stage getStage() {
method getVersionPage (line 139) | public static VersionPage getVersionPage() {
method prepareVersionPage (line 146) | @FXThread
method getGameListPage (line 155) | public static GameListPage getGameListPage() {
method getRootPage (line 160) | public static RootPage getRootPage() {
method getSettingsPage (line 165) | public static LauncherSettingsPage getSettingsPage() {
method prepareSettingsPage (line 172) | @FXThread
method getAccountListPage (line 181) | public static AccountListPage getAccountListPage() {
method getDownloadPage (line 186) | public static DownloadPage getDownloadPage() {
method prepareDownloadPage (line 193) | @FXThread
method getTerracottaPage (line 202) | public static Node getTerracottaPage() {
method getDecorator (line 207) | public static DecoratorController getDecorator() {
method onApplicationStop (line 211) | public static void onApplicationStop() {
method initialize (line 231) | public static void initialize(Stage stage) {
method dialog (line 492) | public static void dialog(Region content) {
method dialog (line 497) | public static void dialog(String text) {
method dialog (line 501) | public static void dialog(String text, String title) {
method dialog (line 505) | public static void dialog(String text, String title, MessageType type) {
method dialog (line 509) | public static void dialog(String text, String title, MessageType type,...
method confirm (line 513) | public static void confirm(String text, String title, Runnable yes, Ru...
method confirm (line 517) | public static void confirm(String text, String title, MessageType type...
method confirmAction (line 521) | public static void confirmAction(String text, String title, MessageTyp...
method confirmAction (line 525) | public static void confirmAction(String text, String title, MessageTyp...
method confirmWithCountdown (line 529) | public static void confirmWithCountdown(String text, String title, int...
method prompt (line 561) | public static CompletableFuture<String> prompt(String title, FutureCal...
method prompt (line 565) | public static CompletableFuture<String> prompt(String title, FutureCal...
method prompt (line 571) | public static CompletableFuture<List<PromptDialogPane.Builder.Question...
method taskDialog (line 577) | public static TaskExecutorDialogPane taskDialog(TaskExecutor executor,...
method taskDialog (line 585) | public static TaskExecutorDialogPane taskDialog(Task<?> task, String t...
method navigate (line 592) | public static void navigate(Node node) {
method navigateForward (line 596) | public static void navigateForward(Node node) {
method showToast (line 600) | public static void showToast(String content) {
method onHyperlinkAction (line 604) | public static void onHyperlinkAction(String href) {
method isStopped (line 621) | public static boolean isStopped() {
method shutdown (line 625) | public static void shutdown() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java
class CrashWindow (line 38) | public class CrashWindow extends Stage {
method CrashWindow (line 40) | public CrashWindow(CrashReport report) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java
class DialogController (line 31) | public final class DialogController {
method DialogController (line 32) | private DialogController() {
method logIn (line 35) | public static AuthInfo logIn(Account account) throws CancellationExcep...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogUtils.java
class DialogUtils (line 37) | public final class DialogUtils {
method DialogUtils (line 38) | private DialogUtils() {
method show (line 48) | public static void show(Decorator decorator, Node content) {
method show (line 62) | public static void show(StackPane container, Node content) {
method show (line 66) | public static void show(StackPane container, Node content, @Nullable C...
method handleDialogShown (line 104) | private static void handleDialogShown(JFXDialog dialog, Node node) {
method close (line 124) | @SuppressWarnings("unchecked")
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java
class FXUtils (line 121) | public final class FXUtils {
method FXUtils (line 122) | private FXUtils() {
method shutdown (line 244) | public static void shutdown() {
method runInFX (line 248) | public static void runInFX(Runnable runnable) {
method checkFxUserThread (line 256) | public static void checkFxUserThread() {
method onInvalidating (line 263) | public static InvalidationListener onInvalidating(Runnable action) {
method onChange (line 267) | public static <T> void onChange(ObservableValue<T> value, Consumer<T> ...
method onWeakChange (line 271) | public static <T> ChangeListener<T> onWeakChange(ObservableValue<T> va...
method onChangeAndOperate (line 277) | public static <T> void onChangeAndOperate(ObservableValue<T> value, Co...
method onWeakChangeAndOperate (line 282) | public static <T> ChangeListener<T> onWeakChangeAndOperate(ObservableV...
method observeWeak (line 287) | public static InvalidationListener observeWeak(Runnable runnable, Obse...
method runLaterIf (line 297) | public static void runLaterIf(BooleanSupplier condition, Runnable runn...
method limitSize (line 302) | public static void limitSize(ImageView imageView, double maxWidth, dou...
class ListenerPair (line 315) | private static class ListenerPair<T> {
method ListenerPair (line 319) | ListenerPair(ObservableValue<T> value, ChangeListener<? super T> lis...
method bind (line 324) | void bind() {
method unbind (line 328) | void unbind() {
method addListener (line 333) | public static <T> void addListener(Node node, String key, ObservableVa...
method removeListener (line 339) | public static void removeListener(Node node, String key) {
method ignoreEvent (line 347) | @SuppressWarnings("unchecked")
method setValidateWhileTextChanged (line 362) | public static void setValidateWhileTextChanged(Node field, boolean val...
method getValidateWhileTextChanged (line 381) | public static boolean getValidateWhileTextChanged(Node field) {
method setOverflowHidden (line 385) | public static Rectangle setOverflowHidden(Region region) {
method setOverflowHidden (line 393) | public static Rectangle setOverflowHidden(Region region, double arc) {
method setLimitWidth (line 400) | public static void setLimitWidth(Region region, double width) {
method getLimitWidth (line 406) | public static double getLimitWidth(Region region) {
method setLimitHeight (line 410) | public static void setLimitHeight(Region region, double height) {
method getLimitHeight (line 416) | public static double getLimitHeight(Region region) {
method limitCellWidth (line 420) | public static void limitCellWidth(ListView<?> listView, ListCell<?> ce...
method smoothScrolling (line 434) | public static void smoothScrolling(ScrollPane scrollPane) {
method smoothScrolling (line 439) | public static void smoothScrolling(VirtualFlow<?> virtualFlow) {
method textTruncatedProperty (line 446) | public static @Nullable ReadOnlyBooleanProperty textTruncatedProperty(...
method focusVisibleProperty (line 460) | public static @Nullable ReadOnlyBooleanProperty focusVisibleProperty(N...
method installTooltip (line 478) | public static void installTooltip(Node node, Duration showDelay, Durat...
method installFastTooltip (line 485) | public static void installFastTooltip(Node node, Tooltip tooltip) {
method installFastTooltip (line 489) | public static void installFastTooltip(Node node, String tooltip) {
method installSlowTooltip (line 493) | public static void installSlowTooltip(Node node, Tooltip tooltip) {
method installSlowTooltip (line 497) | public static void installSlowTooltip(Node node, String tooltip) {
method playAnimation (line 501) | public static void playAnimation(Node node, String animationKey, Anima...
method openFolder (line 509) | public static void openFolder(Path file) {
method showFileInExplorer (line 558) | public static void showFileInExplorer(Path file) {
method openLink (line 617) | public static void openLink(String link) {
method bind (line 655) | public static <T> void bind(JFXTextField textField, Property<T> proper...
method bindInt (line 664) | public static void bindInt(JFXTextField textField, Property<Number> pr...
method bindString (line 668) | public static void bindString(JFXTextField textField, Property<String>...
method unbind (line 672) | public static void unbind(JFXTextField textField, Property<?> property) {
class TextFieldBinding (line 681) | private static final class TextFieldBinding<T> {
method TextFieldBinding (line 690) | public TextFieldBinding(JFXTextField textField, Property<T> property...
method updateProperty (line 720) | public void updateProperty() {
method updateTextField (line 730) | public void updateTextField() {
class EnumBidirectionalBinding (line 736) | private static final class EnumBidirectionalBinding<E extends Enum<E>>...
method EnumBidirectionalBinding (line 743) | private EnumBidirectionalBinding(JFXComboBox<E> comboBox, Property<E...
method invalidated (line 749) | @Override
method wasGarbageCollected (line 780) | @Override
method hashCode (line 785) | @Override
method equals (line 790) | @Override
method bindEnum (line 821) | public static <T extends Enum<T>> void bindEnum(JFXComboBox<T> comboBo...
method unbindEnum (line 840) | public static <T extends Enum<T>> void unbindEnum(JFXComboBox<T> combo...
class PaintBidirectionalBinding (line 846) | private static final class PaintBidirectionalBinding implements Invali...
method PaintBidirectionalBinding (line 853) | private PaintBidirectionalBinding(ColorPicker colorPicker, Property<...
method invalidated (line 859) | @Override
method wasGarbageCollected (line 893) | @Override
method hashCode (line 898) | @Override
method equals (line 903) | @Override
method bindPaint (line 925) | public static void bindPaint(ColorPicker colorPicker, Property<Paint> ...
class WindowsSizeBidirectionalBinding (line 940) | private static final class WindowsSizeBidirectionalBinding implements ...
method WindowsSizeBidirectionalBinding (line 949) | private WindowsSizeBidirectionalBinding(JFXComboBox<String> comboBox,
method invalidated (line 960) | @Override
method wasGarbageCollected (line 1023) | @Override
method hashCode (line 1030) | @Override
method equals (line 1035) | @Override
method bindWindowsSize (line 1063) | public static void bindWindowsSize(JFXComboBox<String> comboBox, Integ...
method unbindWindowsSize (line 1072) | public static void unbindWindowsSize(JFXComboBox<String> comboBox, Int...
method bindAllEnabled (line 1080) | public static void bindAllEnabled(BooleanProperty allEnabled, BooleanP...
method setIcon (line 1135) | public static void setIcon(Stage stage) {
method loadImage (line 1147) | public static Image loadImage(Path path) throws Exception {
method loadImage (line 1151) | public static Image loadImage(Path path,
method loadImage (line 1169) | public static Image loadImage(String url) throws Exception {
method newBuiltinImage (line 1205) | public static Image newBuiltinImage(String url) {
method newBuiltinImage (line 1229) | public static Image newBuiltinImage(String url, double requestedWidth,...
method getRemoteImageTask (line 1237) | public static Task<Image> getRemoteImageTask(String url, int requested...
method getRemoteImageTask (line 1244) | public static Task<Image> getRemoteImageTask(List<URI> uris, int reque...
method newRemoteImage (line 1251) | public static ObservableValue<Image> newRemoteImage(String url, int re...
method newRaisedButton (line 1266) | public static JFXButton newRaisedButton(String text) {
method newBorderButton (line 1273) | public static JFXButton newBorderButton(String text) {
method newToggleButton4 (line 1279) | public static JFXButton newToggleButton4(SVG icon) {
method newToggleButton4 (line 1286) | public static JFXButton newToggleButton4(SVG icon, int size) {
method setOnActionWithCooldown (line 1293) | public static void setOnActionWithCooldown(ButtonBase button, Runnable...
method setOnActionWithCooldown (line 1297) | public static void setOnActionWithCooldown(ButtonBase button, Runnable...
method newSafeTruncatedLabel (line 1310) | public static Label newSafeTruncatedLabel() {
method showTooltipWhenTruncated (line 1319) | public static void showTooltipWhenTruncated(Labeled labeled) {
method applyDragListener (line 1343) | public static void applyDragListener(Node node, PathMatcher filter, Co...
method applyDragListener (line 1347) | public static void applyDragListener(Node node, PathMatcher filter, Co...
method stringConverter (line 1371) | public static <T> StringConverter<T> stringConverter(Function<T, Strin...
method jfxListCellFactory (line 1386) | public static <T> Callback<ListView<T>, ListCell<T>> jfxListCellFactor...
method getColumnFillingWidth (line 1400) | public static ColumnConstraints getColumnFillingWidth() {
method getColumnHgrowing (line 1406) | public static ColumnConstraints getColumnHgrowing() {
method curve (line 1414) | @Override
method toString (line 1419) | @Override
method onEscPressed (line 1425) | public static void onEscPressed(Node node, Runnable action) {
method onClicked (line 1434) | public static void onClicked(Node node, Runnable action) {
method onSecondaryButtonClicked (line 1443) | public static void onSecondaryButtonClicked(Node node, Runnable action) {
method prepareNode (line 1452) | public static <N extends Parent> N prepareNode(N node) {
method prepareOnMouseEnter (line 1460) | public static void prepareOnMouseEnter(Node node, Runnable action) {
method onScroll (line 1470) | public static <T> void onScroll(Node node, List<T> list,
method copyOnDoubleClick (line 1491) | public static void copyOnDoubleClick(Labeled label) {
method copyText (line 1503) | public static void copyText(String text) {
method copyText (line 1507) | public static void copyText(String text, @Nullable String toastMessage) {
method parseSegment (line 1517) | public static List<Node> parseSegment(String segment, Consumer<String>...
method segmentToTextFlow (line 1568) | public static TextFlow segmentToTextFlow(final String segment, Consume...
method toWeb (line 1574) | public static String toWeb(Color color) {
method getImageExtensionFilter (line 1582) | public static FileChooser.ExtensionFilter getImageExtensionFilter() {
method determineOptimalPopupPosition (line 1596) | public static JFXPopup.PopupVPosition determineOptimalPopupPosition(No...
method useJFXContextMenu (line 1648) | public static void useJFXContextMenu(TextInputControl control) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java
class GameCrashWindow (line 74) | public class GameCrashWindow extends Stage {
method GameCrashWindow (line 93) | public GameCrashWindow(ManagedProcess managedProcess, ProcessListener....
method analyzeCrashReport (line 125) | @SuppressWarnings("unchecked")
method translateFabricModId (line 239) | private String translateFabricModId(String modName) {
method parseFabricModId (line 252) | private String parseFabricModId(String modName) {
method showLogWindow (line 266) | private void showLogWindow() {
method exportGameCrashInfo (line 276) | private void exportGameCrashInfo() {
class View (line 320) | private final class View extends VBox {
method View (line 322) | View() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/HTMLRenderer.java
class HTMLRenderer (line 39) | public final class HTMLRenderer {
method resolveLink (line 40) | private static URI resolveLink(Node linkNode) {
method HTMLRenderer (line 65) | public HTMLRenderer(Consumer<URI> onClickHyperlink) {
method updateStyle (line 69) | private void updateStyle() {
method pushNode (line 113) | private void pushNode(Node node) {
method popNode (line 118) | private void popNode() {
method applyStyle (line 123) | private void applyStyle(Text text) {
method appendText (line 149) | private void appendText(String text) {
method appendAutoLineBreak (line 155) | private void appendAutoLineBreak(String text) {
method appendImage (line 161) | private void appendImage(Node node) {
method appendNode (line 210) | public void appendNode(Node node) {
method isSpacing (line 262) | private static boolean isSpacing(String text) {
method mergeLineBreaks (line 274) | public void mergeLineBreaks() {
method render (line 303) | public TextFlow render() {
class AutoLineBreak (line 310) | private static final class AutoLineBreak extends Text {
method AutoLineBreak (line 311) | public AutoLineBreak(String text) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java
class InstallerItem (line 55) | public class InstallerItem extends Control {
type State (line 65) | public sealed interface State {
class InstallableState (line 68) | public static final class InstallableState implements State {
method InstallableState (line 71) | private InstallableState() {
type Style (line 81) | public enum Style {
method InstallerItem (line 86) | public InstallerItem(LibraryAnalyzer.LibraryType id, Style style) {
method InstallerItem (line 90) | public InstallerItem(String id, Style style) {
method getLibraryId (line 108) | public String getLibraryId() {
method versionProperty (line 112) | public ObjectProperty<InstalledState> versionProperty() {
method resolvedStateProperty (line 116) | public ObjectProperty<State> resolvedStateProperty() {
method onInstallProperty (line 120) | public ObjectProperty<Runnable> onInstallProperty() {
method getOnInstall (line 124) | public Runnable getOnInstall() {
method setOnInstall (line 128) | public void setOnInstall(Runnable onInstall) {
method onRemoveProperty (line 132) | public ObjectProperty<Runnable> onRemoveProperty() {
method getOnRemove (line 136) | public Runnable getOnRemove() {
method setOnRemove (line 140) | public void setOnRemove(Runnable onRemove) {
method createDefaultSkin (line 144) | @Override
class InstallerItemGroup (line 149) | public final static class InstallerItemGroup {
method getIncompatibles (line 154) | private Set<InstallerItem> getIncompatibles(Map<InstallerItem, Set<I...
method addIncompatibles (line 158) | private void addIncompatibles(Map<InstallerItem, Set<InstallerItem>>...
method mutualIncompatible (line 166) | private void mutualIncompatible(Map<InstallerItem, Set<InstallerItem...
method InstallerItemGroup (line 178) | public InstallerItemGroup(String gameVersion, Style style) {
method getGame (line 257) | public InstallerItem getGame() {
method getLibraries (line 261) | public InstallerItem[] getLibraries() {
class InstallerItemSkin (line 266) | private static final class InstallerItemSkin extends SkinBase<Installe...
method InstallerItemSkin (line 273) | InstallerItemSkin(InstallerItem control) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageBase.java
class ListPageBase (line 30) | public class ListPageBase<T> extends Control implements TransitionPane.C...
method getItems (line 35) | public ObservableList<T> getItems() {
method setItems (line 39) | public void setItems(ObservableList<T> items) {
method itemsProperty (line 43) | public ListProperty<T> itemsProperty() {
method isLoading (line 47) | public boolean isLoading() {
method setLoading (line 51) | public void setLoading(boolean loading) {
method loadingProperty (line 55) | public BooleanProperty loadingProperty() {
method getFailedReason (line 59) | public String getFailedReason() {
method failedReasonProperty (line 63) | public StringProperty failedReasonProperty() {
method setFailedReason (line 67) | public void setFailedReason(String failedReason) {
method onFailedActionProperty (line 71) | public final ObjectProperty<EventHandler<Event>> onFailedActionPropert...
method setOnFailedAction (line 75) | public final void setOnFailedAction(EventHandler<Event> value) {
method getOnFailedAction (line 79) | public final EventHandler<Event> getOnFailedAction() {
method invalidated (line 84) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java
class LogWindow (line 67) | public final class LogWindow extends Stage {
method LogWindow (line 85) | public LogWindow(ManagedProcess gameProcess) {
method LogWindow (line 89) | public LogWindow(ManagedProcess gameProcess, CircularArrayList<Log> lo...
method logLine (line 106) | public void logLine(Log log) {
method logLines (line 118) | public void logLines(List<Log> logs) {
method shakeLogs (line 132) | private void shakeLogs() {
method checkLogCount (line 137) | private void checkLogCount() {
method autoScroll (line 155) | private void autoScroll() {
class LogWindowImpl (line 160) | private final class LogWindowImpl extends Control {
method LogWindowImpl (line 169) | LogWindowImpl() {
method onTerminateGame (line 190) | private void onTerminateGame() {
method onClear (line 194) | private void onClear() {
method onExportLogs (line 199) | private void onExportLogs() {
method onExportDump (line 218) | private void onExportDump(SpinnerPane pane) {
method createDefaultSkin (line 244) | @Override
class LogWindowSkin (line 250) | private static final class LogWindowSkin extends SkinBase<LogWindowImp...
method LogWindowSkin (line 263) | LogWindowSkin(LogWindowImpl control) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java
type SVG (line 30) | public enum SVG {
method setSize (line 132) | static void setSize(SVGPath path, double size) {
method SVG (line 141) | SVG(String rawPath) {
method getPath (line 145) | public String getPath() {
method createIcon (line 152) | public SVGPath createIcon() {
method createIcon (line 159) | public SVGContainer createIcon(double size) {
method createIcon (line 163) | public SVGPath createIcon(ObservableValue<? extends Paint> color) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/SVGContainer.java
class SVGContainer (line 31) | public final class SVGContainer extends Parent {
method SVGContainer (line 47) | public SVGContainer() {
method SVGContainer (line 54) | public SVGContainer(SVG icon) {
method SVGContainer (line 62) | public SVGContainer(double iconSize) {
method SVGContainer (line 70) | public SVGContainer(SVG icon, double iconSize) {
method getIconSize (line 75) | public double getIconSize() {
method setIconSizeImpl (line 79) | private void setIconSizeImpl(double newSize) {
method setIconSize (line 86) | public void setIconSize(double newSize) {
method getIcon (line 92) | public SVG getIcon() {
method setIcon (line 97) | public void setIcon(SVG newIcon) {
method setIcon (line 102) | public void setIcon(SVG newIcon, Duration animationDuration) {
method prefWidth (line 150) | @Override
method prefHeight (line 155) | @Override
method minHeight (line 160) | @Override
method minWidth (line 165) | @Override
method layoutChildren (line 170) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/ScrollUtils.java
class ScrollUtils (line 38) | final class ScrollUtils {
type ScrollDirection (line 40) | public enum ScrollDirection {
method ScrollDirection (line 45) | ScrollDirection(int intDirection) {
method intDirection (line 49) | public int intDirection() {
method isTrackPad (line 71) | public static boolean isTrackPad(ScrollEvent event, ScrollDirection sc...
method determineScrollDirection (line 94) | public static ScrollDirection determineScrollDirection(ScrollEvent eve...
method addSmoothScrolling (line 114) | public static void addSmoothScrolling(ScrollPane scrollPane) {
method addSmoothScrolling (line 123) | public static void addSmoothScrolling(ScrollPane scrollPane, double sp...
method addSmoothScrolling (line 135) | public static void addSmoothScrolling(ScrollPane scrollPane, double sp...
method addSmoothScrolling (line 140) | public static void addSmoothScrolling(VirtualFlow<?> virtualFlow) {
method addSmoothScrolling (line 145) | public static void addSmoothScrolling(VirtualFlow<?> virtualFlow, doub...
method addSmoothScrolling (line 150) | public static void addSmoothScrolling(VirtualFlow<?> virtualFlow, doub...
method smoothScroll (line 157) | private static void smoothScroll(ScrollPane scrollPane, double speed, ...
method smoothScroll (line 223) | private static void smoothScroll(VirtualFlow<?> virtualFlow, double sp...
method ScrollUtils (line 267) | private ScrollUtils() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java
class ToolbarListPageSkin (line 38) | public abstract class ToolbarListPageSkin<E, P extends ListPageBase<E>> ...
method ToolbarListPageSkin (line 42) | public ToolbarListPageSkin(P skinnable) {
method createToolbarButton2 (line 84) | public static JFXButton createToolbarButton2(String text, SVG svg, Run...
method createDecoratorButton (line 93) | public static JFXButton createDecoratorButton(String tooltip, SVG svg,...
method initializeToolbar (line 102) | protected abstract List<Node> initializeToolbar(P skinnable);
method createListCell (line 104) | protected ListCell<E> createListCell(JFXListView<E> listView) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/UpgradeDialog.java
class UpgradeDialog (line 44) | public final class UpgradeDialog extends JFXDialogLayout {
method UpgradeDialog (line 46) | public UpgradeDialog(RemoteVersion remoteVersion, Runnable updateRunna...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java
class WeakListenerHolder (line 35) | public final class WeakListenerHolder {
method WeakListenerHolder (line 38) | public WeakListenerHolder() {
method weak (line 41) | public WeakInvalidationListener weak(InvalidationListener listener) {
method weak (line 46) | public <T> WeakChangeListener<T> weak(ChangeListener<T> listener) {
method weak (line 51) | public <T> WeakListChangeListener<T> weak(ListChangeListener<T> listen...
method registerWeak (line 56) | public <T extends Event> void registerWeak(EventManager<T> manager, Co...
method registerWeak (line 60) | public <T extends Event> void registerWeak(EventManager<T> manager, Co...
method onWeakChange (line 64) | public <T> void onWeakChange(ObservableValue<T> value, Consumer<T> con...
method onWeakChangeAndOperate (line 68) | public <T> void onWeakChangeAndOperate(ObservableValue<T> value, Consu...
method add (line 72) | public void add(Object obj) {
method remove (line 76) | public boolean remove(Object obj) {
method clear (line 80) | public void clear() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/WebPage.java
class WebPage (line 40) | public final class WebPage extends SpinnerPane implements DecoratorPage {
method WebPage (line 44) | public WebPage(String title, String content) {
method stateProperty (line 72) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/WindowsNativeUtils.java
class WindowsNativeUtils (line 31) | public final class WindowsNativeUtils {
method getWindowHandle (line 33) | public static OptionalLong getWindowHandle(Stage stage) {
method WindowsNativeUtils (line 58) | private WindowsNativeUtils() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountAdvancedListItem.java
class AccountAdvancedListItem (line 42) | public class AccountAdvancedListItem extends AdvancedListItem {
method invalidated (line 48) | @Override
method AccountAdvancedListItem (line 71) | public AccountAdvancedListItem() {
method AccountAdvancedListItem (line 75) | public AccountAdvancedListItem(Account account) {
method accountProperty (line 94) | public ObjectProperty<Account> accountProperty() {
method accountSubtitle (line 98) | private static ObservableValue<String> accountSubtitle(Account account) {
method accountTooltip (line 106) | private static ObservableValue<String> accountTooltip(Account account) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItem.java
class AccountListItem (line 61) | public class AccountListItem extends RadioButton {
method AccountListItem (line 67) | public AccountListItem(Account account) {
method createDefaultSkin (line 93) | @Override
method refreshAsync (line 98) | public Task<?> refreshAsync() {
method canUploadSkin (line 119) | public ObservableBooleanValue canUploadSkin() {
method uploadSkin (line 138) | @Nullable
method remove (line 180) | public void remove() {
method getAccount (line 184) | public Account getAccount() {
method getTitle (line 188) | public String getTitle() {
method setTitle (line 192) | public void setTitle(String title) {
method titleProperty (line 196) | public StringProperty titleProperty() {
method getSubtitle (line 200) | public String getSubtitle() {
method setSubtitle (line 204) | public void setSubtitle(String subtitle) {
method subtitleProperty (line 208) | public StringProperty subtitleProperty() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java
class AccountListItemSkin (line 49) | public final class AccountListItemSkin extends SkinBase<AccountListItem> {
method AccountListItemSkin (line 51) | public AccountListItemSkin(AccountListItem skinnable) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java
class AccountListPage (line 60) | public final class AccountListPage extends DecoratorAnimatedPage impleme...
method changed (line 72) | @Override
method AccountListPage (line 88) | public AccountListPage() {
method selectedAccountProperty (line 93) | public ObjectProperty<Account> selectedAccountProperty() {
method accountsProperty (line 97) | public ListProperty<Account> accountsProperty() {
method stateProperty (line 101) | @Override
method authServersProperty (line 106) | public ListProperty<AuthlibInjectorServer> authServersProperty() {
method createDefaultSkin (line 110) | @Override
class AccountListPageSkin (line 115) | private static class AccountListPageSkin extends DecoratorAnimatedPage...
method AccountListPageSkin (line 120) | public AccountListPageSkin(AccountListPage skinnable) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPopupMenu.java
class AccountListPopupMenu (line 35) | public final class AccountListPopupMenu extends StackPane {
method show (line 36) | public static void show(Node owner, JFXPopup.PopupVPosition vAlign, JF...
method AccountListPopupMenu (line 48) | public AccountListPopupMenu() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java
class AddAuthlibInjectorServerPane (line 42) | public final class AddAuthlibInjectorServerPane extends TransitionPane i...
method AddAuthlibInjectorServerPane (line 56) | public AddAuthlibInjectorServerPane(String url) {
method AddAuthlibInjectorServerPane (line 62) | public AddAuthlibInjectorServerPane() {
method onDialogShown (line 161) | @Override
method resolveFetchExceptionMessage (line 166) | private String resolveFetchExceptionMessage(Throwable exception) {
method onAddCancel (line 182) | private void onAddCancel() {
method onAddNext (line 186) | private void onAddNext() {
method onAddPrev (line 219) | private void onAddPrev() {
method onAddFinish (line 223) | private void onAddFinish() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/ClassicAccountLoginDialog.java
class ClassicAccountLoginDialog (line 44) | public class ClassicAccountLoginDialog extends StackPane {
method ClassicAccountLoginDialog (line 53) | public ClassicAccountLoginDialog(ClassicAccount oldAccount, Consumer<A...
method onAccept (line 101) | private void onAccept() {
method onCancel (line 121) | private void onCancel() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java
class CreateAccountPane (line 74) | public class CreateAccountPane extends JFXDialogLayout implements Dialog...
method CreateAccountPane (line 92) | public CreateAccountPane() {
method CreateAccountPane (line 96) | public CreateAccountPane(AccountFactory<?> factory) {
method CreateAccountPane (line 195) | public CreateAccountPane(AuthlibInjectorServer authServer) {
method onAccept (line 199) | private void onAccept() {
method onCancel (line 264) | private void onCancel() {
method initDetailsPane (line 271) | private void initDetailsPane() {
class AccountDetailsInputPane (line 291) | private static class AccountDetailsInputPane extends GridPane {
method createHyperlinks (line 296) | private static List<Hyperlink> createHyperlinks(AuthlibInjectorServe...
method AccountDetailsInputPane (line 324) | public AccountDetailsInputPane(AccountFactory<?> factory, Runnable o...
method requiresEmailAsUsername (line 523) | private boolean requiresEmailAsUsername() {
method getAdditionalData (line 533) | public Object getAdditionalData() {
method getAuthServer (line 544) | public @Nullable AuthlibInjectorServer getAuthServer() {
method getUsername (line 548) | public @Nullable String getUsername() {
method getPassword (line 552) | public @Nullable String getPassword() {
method validProperty (line 556) | public BooleanBinding validProperty() {
method focus (line 560) | public void focus() {
class DialogCharacterSelector (line 567) | public static class DialogCharacterSelector extends JFXDialogLayout im...
method DialogCharacterSelector (line 575) | public DialogCharacterSelector() {
method select (line 594) | @Override
method onDialogShown (line 626) | @Override
class UUIDValidator (line 633) | private static class UUIDValidator extends ValidatorBase {
method UUIDValidator (line 635) | public UUIDValidator() {
method UUIDValidator (line 639) | public UUIDValidator(@NamedArg("message") String message) {
method eval (line 643) | @Override
method evalTextInputField (line 650) | private void evalTextInputField() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/MicrosoftAccountLoginPane.java
class MicrosoftAccountLoginPane (line 62) | public class MicrosoftAccountLoginPane extends JFXDialogLayout implement...
method MicrosoftAccountLoginPane (line 78) | public MicrosoftAccountLoginPane() {
method MicrosoftAccountLoginPane (line 82) | public MicrosoftAccountLoginPane(boolean bodyonly) {
method MicrosoftAccountLoginPane (line 86) | public MicrosoftAccountLoginPane(Account account, Consumer<AuthInfo> c...
method onStep (line 133) | private void onStep(Step currentStep) {
method cancelAllTasks (line 258) | private void cancelAllTasks() {
method onCancel (line 263) | private void onCancel() {
method onLoginCompleted (line 269) | private void onLoginCompleted(MicrosoftAccount account, Exception exce...
type Step (line 297) | private sealed interface Step {
class Init (line 298) | final class Init implements Step {
class StartAuthorizationCodeLogin (line 301) | final class StartAuthorizationCodeLogin implements Step {
class StartDeviceCodeLogin (line 308) | final class StartDeviceCodeLogin implements Step {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/account/OfflineAccountSkinPane.java
class OfflineAccountSkinPane (line 54) | public class OfflineAccountSkinPane extends StackPane {
method OfflineAccountSkinPane (line 65) | public OfflineAccountSkinPane(OfflineAccount account) {
method getSkin (line 229) | private Skin getSkin() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationUtils.java
class AnimationUtils (line 27) | public final class AnimationUtils {
method AnimationUtils (line 29) | private AnimationUtils() {
method init (line 36) | @SuppressWarnings("JavadocReference")
method isAnimationEnabled (line 43) | public static boolean isAnimationEnabled() {
method playWindowAnimation (line 47) | public static boolean playWindowAnimation() {
method reset (line 51) | public static void reset(Node node, boolean opaque) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/ContainerAnimations.java
type ContainerAnimations (line 26) | public enum ContainerAnimations implements TransitionPane.AnimationProdu...
method init (line 28) | @Override
method animate (line 34) | @Override
method opposite (line 41) | @Override
method animate (line 51) | @Override
method opposite (line 64) | @Override
method init (line 74) | @Override
method animate (line 81) | @Override
method opposite (line 93) | @Override
method init (line 103) | @Override
method animate (line 110) | @Override
method opposite (line 122) | @Override
method animate (line 130) | @Override
method opposite (line 152) | @Override
method animate (line 160) | @Override
method opposite (line 182) | @Override
method animate (line 190) | @Override
method animate (line 211) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/Motion.java
class Motion (line 27) | public final class Motion {
method bounce (line 458) | private static double bounce(double t) {
method curve (line 477) | @Override
method curve (line 487) | @Override
method curve (line 497) | @Override
method curve (line 513) | @Override
method curve (line 525) | @Override
method curve (line 536) | @Override
class Cubic (line 550) | private static final class Cubic extends Interpolator {
method Cubic (line 577) | private Cubic(double a, double b, double c, double d) {
method _evaluateCubic (line 584) | double _evaluateCubic(double a, double b, double m) {
method curve (line 588) | @Override
method equals (line 606) | @Override
method hashCode (line 615) | @Override
method toString (line 620) | @Override
class ThreePointCubic (line 629) | private static final class ThreePointCubic extends Interpolator {
method ThreePointCubic (line 670) | private ThreePointCubic(Offset a1, Offset b1, Offset midpoint, Offse...
method curve (line 678) | @Override
method equals (line 704) | @Override
method hashCode (line 714) | @Override
method toString (line 719) | @Override
method Motion (line 779) | private Motion() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java
class TransitionPane (line 31) | public class TransitionPane extends StackPane {
method TransitionPane (line 35) | public TransitionPane() {
method getCurrentNode (line 39) | public Node getCurrentNode() {
method setContent (line 43) | public final void setContent(Node newView, AnimationProducer transitio...
method setContent (line 47) | public final void setContent(Node newView, AnimationProducer transitio...
method setContent (line 51) | public void setContent(Node newView, AnimationProducer transition,
type AnimationProducer (line 98) | public interface AnimationProducer {
method init (line 99) | default void init(TransitionPane container, Node previousNode, Node ...
method animate (line 104) | Animation animate(Pane container, Node previousNode, Node nextNode,
method opposite (line 107) | default @Nullable TransitionPane.AnimationProducer opposite() {
type Cacheable (line 113) | public interface Cacheable {
method getCacheHint (line 116) | default @Nullable CacheHint getCacheHint(AnimationProducer animation...
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListBox.java
class AdvancedListBox (line 35) | public class AdvancedListBox extends ScrollPane {
method add (line 58) | public AdvancedListBox add(Node child) {
method createNavigationDrawerItem (line 70) | private AdvancedListItem createNavigationDrawerItem(String title, SVG ...
method addNavigationDrawerItem (line 80) | public AdvancedListBox addNavigationDrawerItem(String title, SVG leftG...
method addNavigationDrawerItem (line 84) | public AdvancedListBox addNavigationDrawerItem(String title, SVG leftG...
method addNavigationDrawerTab (line 95) | public AdvancedListBox addNavigationDrawerTab(TabHeader tabHeader, Tab...
method addNavigationDrawerTab (line 102) | public AdvancedListBox addNavigationDrawerTab(TabHeader tabHeader, Tab...
method add (line 117) | public AdvancedListBox add(int index, Node child) {
method remove (line 129) | public AdvancedListBox remove(Node child) {
method indexOf (line 134) | public int indexOf(Node child) {
method startCategory (line 150) | public AdvancedListBox startCategory(String category) {
method setSpacing (line 154) | public void setSpacing(double spacing) {
method clear (line 158) | public void clear() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListItem.java
class AdvancedListItem (line 32) | public class AdvancedListItem extends Control {
method setMargin (line 37) | public static void setMargin(Node graphic, Insets margin) {
method setAlignment (line 41) | public static void setAlignment(Node graphic, Pos alignment) {
method AdvancedListItem (line 45) | public AdvancedListItem() {
method leftGraphicProperty (line 52) | public ObjectProperty<Node> leftGraphicProperty() {
method getLeftGraphic (line 56) | public Node getLeftGraphic() {
method setLeftGraphic (line 60) | public void setLeftGraphic(Node leftGraphic) {
method setLeftIcon (line 64) | public void setLeftIcon(SVG svg) {
method rightGraphicProperty (line 74) | public ObjectProperty<Node> rightGraphicProperty() {
method getRightGraphic (line 78) | public Node getRightGraphic() {
method setRightGraphic (line 82) | public void setRightGraphic(Node rightGraphic) {
method setRightAction (line 86) | public void setRightAction(SVG icon, Runnable action) {
method titleProperty (line 98) | public StringProperty titleProperty() {
method getTitle (line 102) | public String getTitle() {
method setTitle (line 106) | public void setTitle(String title) {
method subtitleProperty (line 112) | public StringProperty subtitleProperty() {
method getSubtitle (line 116) | public String getSubtitle() {
method setSubtitle (line 120) | public void setSubtitle(String subtitle) {
method activeProperty (line 126) | public BooleanProperty activeProperty() {
method isActive (line 130) | public boolean isActive() {
method setActive (line 134) | public void setActive(boolean active) {
method invalidated (line 139) | @Override
method onActionProperty (line 145) | public final ObjectProperty<EventHandler<ActionEvent>> onActionPropert...
method setOnAction (line 149) | public final void setOnAction(EventHandler<ActionEvent> value) {
method getOnAction (line 153) | public final EventHandler<ActionEvent> getOnAction() {
method createDefaultSkin (line 157) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListItemSkin.java
class AdvancedListItemSkin (line 25) | public class AdvancedListItemSkin extends SkinBase<AdvancedListItem> {
method AdvancedListItemSkin (line 28) | public AdvancedListItemSkin(AdvancedListItem skinnable) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ClassTitle.java
class ClassTitle (line 31) | public class ClassTitle extends StackPane {
method ClassTitle (line 34) | public ClassTitle(String text) {
method ClassTitle (line 38) | public ClassTitle(Node content) {
method ClassTitle (line 51) | public ClassTitle(String text, Node rightNode) {
method getContent (line 58) | public Node getContent() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java
class ComponentList (line 34) | public class ComponentList extends Control implements NoPaddingComponent {
method ComponentList (line 36) | public ComponentList() {
method getContent (line 42) | public ObservableList<Node> getContent() {
method getContentBias (line 46) | @Override
method createDefaultSkin (line 51) | @Override
class Skin (line 56) | private static final class Skin extends ControlSkinBase<ComponentList> {
method Skin (line 62) | Skin(ComponentList control) {
method updateStyle (line 99) | private void updateStyle() {
method createComponentListTitle (line 129) | public static Node createComponentListTitle(String title) {
method setVgrow (line 140) | public static void setVgrow(Node node, Priority priority) {
method setNoPadding (line 144) | public static void setNoPadding(Node node) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java
class ComponentSublist (line 26) | public class ComponentSublist extends ComponentList {
method ComponentSublist (line 30) | public ComponentSublist() {
method ComponentSublist (line 34) | public ComponentSublist(Supplier<List<? extends Node>> lazyInitializer) {
method doLazyInit (line 38) | void doLazyInit() {
method titleProperty (line 48) | public StringProperty titleProperty() {
method getTitle (line 52) | public String getTitle() {
method setTitle (line 56) | public void setTitle(String title) {
method subtitleProperty (line 62) | public StringProperty subtitleProperty() {
method getSubtitle (line 69) | public String getSubtitle() {
method setSubtitle (line 73) | public void setSubtitle(String subtitle) {
method isHasSubtitle (line 79) | public boolean isHasSubtitle() {
method setHasSubtitle (line 83) | public void setHasSubtitle(boolean hasSubtitle) {
method getHeaderLeft (line 89) | public Node getHeaderLeft() {
method setHeaderLeft (line 93) | public void setHeaderLeft(Node headerLeft) {
method getHeaderRight (line 99) | public Node getHeaderRight() {
method setHeaderRight (line 103) | public void setHeaderRight(Node headerRight) {
method hasComponentPadding (line 109) | public boolean hasComponentPadding() {
method setComponentPadding (line 113) | public void setComponentPadding(boolean componentPadding) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java
class ComponentSublistWrapper (line 39) | final class ComponentSublistWrapper extends VBox implements NoPaddingCom...
method ComponentSublistWrapper (line 45) | ComponentSublistWrapper(ComponentSublist sublist) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ControlSkinBase.java
class ControlSkinBase (line 26) | public abstract class ControlSkinBase<C extends Control> implements Skin...
method ControlSkinBase (line 36) | protected ControlSkinBase(C control) {
method getSkinnable (line 40) | @Override
method getNode (line 45) | @Override
method dispose (line 51) | @Override
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogAware.java
type DialogAware (line 26) | public interface DialogAware {
method onDialogShown (line 28) | default void onDialogShown() {
method onDialogClosed (line 31) | default void onDialogClosed() {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogCloseEvent.java
class DialogCloseEvent (line 32) | public class DialogCloseEvent extends Event {
method DialogCloseEvent (line 36) | public DialogCloseEvent() {
method DialogCloseEvent (line 40) | public DialogCloseEvent(Object source, EventTarget target) {
FILE: HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogPane.java
class DialogPane (line 35) | public class DialogPane extends JFXDialogLayout {
method DialogPane (line 43) | public DialogPane() {
method getProgressBar (line 69) | protected JFXProgressBar getProgressBar() {
method getTitle (line 73) | public String getTitle() {
method titleProperty (lin
Copy disabled (too large)
Download .json
Condensed preview — 1060 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,102K chars).
[
{
"path": ".cnb/ISSUE_TEMPLATE/config.yml",
"chars": 265,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: QQ 群\n url: https://docs.hmcl.net/groups.html\n about: Hello Mi"
},
{
"path": ".editorconfig",
"chars": 59973,
"preview": "[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = false\nmax_line_length ="
},
{
"path": ".gitee/ISSUE_TEMPLATE/config.yml",
"chars": 150,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: QQ 群\n url: https://docs.hmcl.net/groups.html\n about: Hello Mi"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 2814,
"preview": "name: Bug 反馈 | Bug Report\ndescription: \n 反馈一个 HMCL 错误。| File a bug report for HMCL.\ntitle: \"[Bug] \"\nlabels: bug\nbody:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 567,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: QQ 群 | QQ Group\n url: https://docs.hmcl.net/groups.html\n abou"
},
{
"path": ".github/ISSUE_TEMPLATE/feature.yml",
"chars": 897,
"preview": "name: 新功能 | Feature Request\ndescription: 为 HMCL 提出新功能。| Suggest a new feature or enhancement for HMCL.\ntitle: \"[Feature]"
},
{
"path": ".github/workflows/check-codes.yml",
"chars": 643,
"preview": "name: Check Codes\n\non:\n push:\n paths:\n - '**.java'\n - '**.properties'\n pull_request:\n paths:\n - '"
},
{
"path": ".github/workflows/gradle.yml",
"chars": 1275,
"preview": "name: Java CI\n\non:\n push:\n pull_request:\n paths-ignore:\n - '**.md'\n\njobs:\n build:\n\n runs-on: ubuntu-latest"
},
{
"path": ".github/workflows/mirror.yml",
"chars": 936,
"preview": "name: Mirror Repository\n\non:\n workflow_dispatch:\n push:\n\nconcurrency:\n group: mirror-repository\n cancel-in-progress:"
},
{
"path": ".github/workflows/release.yml",
"chars": 5874,
"preview": "name: Create Release\n\non:\n workflow_dispatch:\n# schedule:\n# - cron: '30 * * * *'\n\npermissions:\n contents: write\n\nj"
},
{
"path": ".gitignore",
"chars": 962,
"preview": "*.class\n\n# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml\nhs_err_pid*\n*.hprof\n\n."
},
{
"path": "HMCL/.gitignore",
"chars": 44,
"preview": "/data.csv\n/data.json\n/mod.json\n/modpack.json"
},
{
"path": "HMCL/build.gradle.kts",
"chars": 13903,
"preview": "import org.jackhuang.hmcl.gradle.TerracottaConfigUpgradeTask\nimport org.jackhuang.hmcl.gradle.ci.GitHubActionUtils\nimpor"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXButton.java",
"chars": 4154,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by Fernflower decompiler)\n//\n\npackage com.jf"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXCheckBox.java",
"chars": 6108,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXClippedPane.java",
"chars": 1848,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXColorPicker.java",
"chars": 4484,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXComboBox.java",
"chars": 13089,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXDialog.java",
"chars": 19897,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXDialogLayout.java",
"chars": 3277,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by Fernflower decompiler)\n//\n\npackage com.jf"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXListCell.java",
"chars": 10446,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXListView.java",
"chars": 8298,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXPasswordField.java",
"chars": 11085,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXPopup.java",
"chars": 7371,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXProgressBar.java",
"chars": 2010,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXRadioButton.java",
"chars": 5940,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXRippler.java",
"chars": 31296,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXSlider.java",
"chars": 6781,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXSnackbar.java",
"chars": 17792,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXSnackbarLayout.java",
"chars": 3902,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXSpinner.java",
"chars": 4771,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXTextArea.java",
"chars": 10963,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXTextField.java",
"chars": 10993,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXToggleButton.java",
"chars": 13516,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXTreeCell.java",
"chars": 5548,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/JFXTreeView.java",
"chars": 1523,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/behavior/JFXGenericPickerBehavior.java",
"chars": 1489,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/datamodels/treetable/RecursiveTreeObject.java",
"chars": 2740,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/controls/events/JFXDialogEvent.java",
"chars": 1961,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/effects/JFXDepthManager.java",
"chars": 4575,
"preview": "/*\n * Copyright (c) 2016 JFoenix\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n "
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXButtonSkin.java",
"chars": 11722,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by Fernflower decompiler)\n//\n\npackage com.jf"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXCheckBoxSkin.java",
"chars": 10928,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by FernFlower decompiler)\n//\n\npackage com.jf"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXColorPalette.java",
"chars": 20742,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXColorPickerSkin.java",
"chars": 10286,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXColorPickerUI.java",
"chars": 26389,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXCustomColorPicker.java",
"chars": 23943,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXCustomColorPickerDialog.java",
"chars": 18173,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXGenericPickerSkin.java",
"chars": 10734,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXListViewSkin.java",
"chars": 1893,
"preview": "// Copy from https://github.com/sshahine/JFoenix/blob/d427fd801a338f934307ba41ce604eb5c79f0b20/jfoenix/src/main/java/com"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXPopupSkin.java",
"chars": 5169,
"preview": "/*\n * Copyright (c) 2016 JFoenix\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n "
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXProgressBarSkin.java",
"chars": 7676,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXRadioButtonSkin.java",
"chars": 7922,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by FernFlower decompiler)\n//\n\npackage com.jf"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXSliderSkin.java",
"chars": 11569,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXSpinnerSkin.java",
"chars": 9662,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXTabPaneSkin.java",
"chars": 57667,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/skins/JFXToggleButtonSkin.java",
"chars": 7936,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/transitions/CacheMemento.java",
"chars": 2274,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/transitions/JFXAnimationTimer.java",
"chars": 10170,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/transitions/JFXKeyFrame.java",
"chars": 3037,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/transitions/JFXKeyValue.java",
"chars": 5370,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/utils/JFXNodeUtils.java",
"chars": 5299,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOT"
},
{
"path": "HMCL/src/main/java/com/jfoenix/utils/TreeShowingProperty.java",
"chars": 4999,
"preview": "/*\n * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.\n * DO NOT ALTER OR REMOVE COPYRIGHT N"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/EntryPoint.java",
"chars": 10657,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java",
"chars": 15806,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java",
"chars": 6043,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java",
"chars": 2252,
"preview": "package org.jackhuang.hmcl.countly;\n\nimport org.jackhuang.hmcl.Metadata;\nimport org.jackhuang.hmcl.util.StringUtils;\nimp"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLCacheRepository.java",
"chars": 1577,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java",
"chars": 5894,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java",
"chars": 23419,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java",
"chars": 4801,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManifest.java",
"chars": 1192,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackProvider.java",
"chars": 3899,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2022 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java",
"chars": 51388,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java",
"chars": 6461,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2022 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java",
"chars": 1991,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java",
"chars": 4684,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/ManuallyCreatedModpackException.java",
"chars": 1067,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/ManuallyCreatedModpackInstallTask.java",
"chars": 2153,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java",
"chars": 15096,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/OAuthServer.java",
"chars": 9136,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java",
"chars": 13709,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java",
"chars": 9831,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/JavaInfoUtils.java",
"chars": 4252,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/JavaInstallTask.java",
"chars": 4643,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/JavaLocalFiles.java",
"chars": 4114,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java",
"chars": 29531,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManifest.java",
"chars": 4549,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java",
"chars": 22173,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/AuthlibInjectorServers.java",
"chars": 3714,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java",
"chars": 23371,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java",
"chars": 7829,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java",
"chars": 4440,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java",
"chars": 7603,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java",
"chars": 929,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumCommonDirectory.java",
"chars": 978,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/FontManager.java",
"chars": 8832,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/GlobalConfig.java",
"chars": 4883,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/JavaVersionType.java",
"chars": 902,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/LauncherVisibility.java",
"chars": 1432,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java",
"chars": 8936,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java",
"chars": 7740,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/ProxyManager.java",
"chars": 7051,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/SambaException.java",
"chars": 384,
"preview": "package org.jackhuang.hmcl.setting;\n\npublic final class SambaException extends RuntimeException {\n public SambaExcept"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java",
"chars": 2647,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/StyleSheets.java",
"chars": 7966,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionIconType.java",
"chars": 2333,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java",
"chars": 34718,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java",
"chars": 7964,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java",
"chars": 16057,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java",
"chars": 8308,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNodeList.java",
"chars": 3864,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaState.java",
"chars": 10158,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/profile/ProfileKind.java",
"chars": 1009,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/profile/TerracottaProfile.java",
"chars": 1636,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/AbstractTerracottaProvider.java",
"chars": 1975,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/GeneralProvider.java",
"chars": 1330,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java",
"chars": 3843,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/theme/Theme.java",
"chars": 2982,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/theme/ThemeColor.java",
"chars": 7241,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/theme/Themes.java",
"chars": 9935,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java",
"chars": 27017,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java",
"chars": 2771,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java",
"chars": 2653,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogUtils.java",
"chars": 6484,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java",
"chars": 68495,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java",
"chars": 22886,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2023 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/HTMLRenderer.java",
"chars": 9214,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java",
"chars": 18274,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageBase.java",
"chars": 2895,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java",
"chars": 18435,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java",
"chars": 37668,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/SVGContainer.java",
"chars": 5176,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/ScrollUtils.java",
"chars": 11216,
"preview": "// Copy from https://github.com/palexdev/MaterialFX/blob/c8038ce2090f5cddf923a19d79cc601db86a4d17/materialfx/src/main/ja"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java",
"chars": 4447,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/UpgradeDialog.java",
"chars": 4924,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java",
"chars": 2818,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/WebPage.java",
"chars": 2990,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2024 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/WindowsNativeUtils.java",
"chars": 2526,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountAdvancedListItem.java",
"chars": 4911,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItem.java",
"chars": 8254,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java",
"chars": 8280,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java",
"chars": 10438,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPopupMenu.java",
"chars": 3116,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java",
"chars": 9233,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/ClassicAccountLoginDialog.java",
"chars": 4768,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java",
"chars": 27256,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/MicrosoftAccountLoginPane.java",
"chars": 13529,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/account/OfflineAccountSkinPane.java",
"chars": 11376,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationUtils.java",
"chars": 1860,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/ContainerAnimations.java",
"chars": 11589,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/Motion.java",
"chars": 36757,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java",
"chars": 4365,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListBox.java",
"chars": 6203,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListItem.java",
"chars": 4783,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/AdvancedListItemSkin.java",
"chars": 1991,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ClassTitle.java",
"chars": 1994,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java",
"chars": 5153,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java",
"chars": 3012,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java",
"chars": 5942,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ControlSkinBase.java",
"chars": 1523,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2022 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogAware.java",
"chars": 1054,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogCloseEvent.java",
"chars": 1404,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DialogPane.java",
"chars": 3895,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/DoubleValidator.java",
"chars": 1904,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileSelector.java",
"chars": 3871,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FloatScrollBarSkin.java",
"chars": 8111,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java",
"chars": 2325,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/HintPane.java",
"chars": 2669,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedItem.java",
"chars": 1766,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedMenuItem.java",
"chars": 1538,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImageContainer.java",
"chars": 5193,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java",
"chars": 4369,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/InputDialogPane.java",
"chars": 3887,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/JFXCheckBoxTableCell.java",
"chars": 2490,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2025 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/JFXDialogPane.java",
"chars": 1873,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/JFXHyperlink.java",
"chars": 1218,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineButton.java",
"chars": 5661,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineButtonBase.java",
"chars": 1433,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineComponent.java",
"chars": 7450,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineFileChooserButton.java",
"chars": 7843,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LinePane.java",
"chars": 1917,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineSelectButton.java",
"chars": 8971,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineTextPane.java",
"chars": 2595,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/LineToggleButton.java",
"chars": 1976,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MDListCell.java",
"chars": 2592,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MenuSeparator.java",
"chars": 1303,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MenuUpDownButton.java",
"chars": 3252,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java",
"chars": 7458,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java",
"chars": 11125,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/Navigator.java",
"chars": 8809,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NoPaddingComponent.java",
"chars": 916,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NoneMultipleSelectionModel.java",
"chars": 2125,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NumberValidator.java",
"chars": 1901,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/OptionsList.java",
"chars": 6894,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/OptionsListSkin.java",
"chars": 5924,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2026 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This "
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/PageAware.java",
"chars": 917,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/PageCloseEvent.java",
"chars": 1289,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/PopupMenu.java",
"chars": 3384,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/PromptDialogPane.java",
"chars": 8794,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
},
{
"path": "HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/RequiredValidator.java",
"chars": 1610,
"preview": "/*\n * Hello Minecraft! Launcher\n * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors\n *\n * This"
}
]
// ... and 860 more files (download for full content)
About this extraction
This page contains the full source code of the HMCL-dev/HMCL GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1060 files (9.3 MB), approximately 2.5M tokens, and a symbol index with 10106 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.