-
Notifications
You must be signed in to change notification settings - Fork 220
Expand file tree
/
Copy pathMinecraftModuleBuilder.kt
More file actions
116 lines (97 loc) · 3.87 KB
/
MinecraftModuleBuilder.kt
File metadata and controls
116 lines (97 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
* Minecraft Dev for IntelliJ
*
* https://minecraftdev.org
*
* Copyright (c) 2020 minecraft-dev
*
* MIT License
*/
package com.demonwav.mcdev.creator
import com.demonwav.mcdev.asset.PlatformAssets
import com.demonwav.mcdev.platform.MinecraftModuleType
import com.intellij.ide.util.projectWizard.JavaModuleBuilder
import com.intellij.ide.util.projectWizard.ModuleWizardStep
import com.intellij.ide.util.projectWizard.WizardContext
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.module.JavaModuleType
import com.intellij.openapi.module.ModuleType
import com.intellij.openapi.project.DumbAwareRunnable
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.SdkTypeId
import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import com.intellij.openapi.startup.StartupManager
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Paths
class MinecraftModuleBuilder : JavaModuleBuilder() {
private val creator = MinecraftProjectCreator()
override fun getPresentableName() = MinecraftModuleType.NAME
override fun getNodeIcon() = PlatformAssets.MINECRAFT_ICON
override fun getGroupName() = MinecraftModuleType.NAME
override fun getWeight() = JavaModuleBuilder.BUILD_SYSTEM_WEIGHT - 1
override fun getBuilderId() = "MINECRAFT_MODULE"
override fun isSuitableSdkType(sdk: SdkTypeId?) = sdk === JavaSdk.getInstance()
override fun setupRootModel(modifiableRootModel: ModifiableRootModel) {
val project = modifiableRootModel.project
val root = createAndGetRoot() ?: return
modifiableRootModel.addContentEntry(root)
if (moduleJdk != null) {
modifiableRootModel.sdk = moduleJdk
}
val r = DumbAwareRunnable {
creator.create(root, modifiableRootModel.module)
}
if (project.isDisposed) {
return
}
if (
ApplicationManager.getApplication().isUnitTestMode ||
ApplicationManager.getApplication().isHeadlessEnvironment
) {
r.run()
return
}
if (!project.isInitialized) {
StartupManager.getInstance(project).registerPostStartupActivity(r)
return
}
DumbService.getInstance(project).runWhenSmart(r)
}
private fun createAndGetRoot(): VirtualFile? {
val temp = contentEntryPath ?: return null
val path = FileUtil.toSystemIndependentName(temp)
return try {
Files.createDirectories(Paths.get(path))
LocalFileSystem.getInstance().refreshAndFindFileByPath(path)
} catch (e: IOException) {
null
}
}
override fun getModuleType(): ModuleType<*> = JavaModuleType.getModuleType()
override fun getParentGroup() = MinecraftModuleType.NAME
override fun createWizardSteps(
wizardContext: WizardContext,
modulesProvider: ModulesProvider
): Array<ModuleWizardStep> {
return arrayOf(
BuildSystemWizardStep(creator),
BukkitProjectSettingsWizard(creator),
SpongeProjectSettingsWizard(creator),
ForgeProjectSettingsWizard(creator),
LiteLoaderProjectSettingsWizard(creator),
BungeeCordProjectSettingsWizard(creator),
PlaceholderApiProjectSettingsWizard(creator)
)
}
override fun getCustomOptionsStep(context: WizardContext?, parentDisposable: Disposable?) =
ProjectChooserWizardStep(creator)
override fun validate(current: Project?, dest: Project?) = true
}