]> git.lizzy.rs Git - LightOverlay.git/blob - build.gradle
create ko_kr.json (#71)
[LightOverlay.git] / build.gradle
1 buildscript {
2     repositories {
3         mavenCentral()
4     }
5     dependencies {
6         classpath("commons-io:commons-io:2.6")
7     }
8 }
9
10 import org.jetbrains.gradle.ext.ActionDelegationConfig
11
12 import java.nio.file.FileVisitResult
13 import java.nio.file.Files
14 import java.nio.file.Path
15 import java.nio.file.SimpleFileVisitor
16 import java.nio.file.attribute.BasicFileAttributes
17 import java.util.stream.Stream
18 import java.util.zip.ZipEntry
19 import java.util.zip.ZipInputStream
20 import java.util.zip.ZipOutputStream
21
22 plugins {
23     id "architect-plugin" version "1.0.10"
24     id "org.jetbrains.gradle.plugin.idea-ext" version "0.7"
25 }
26
27 architect {
28     minecraft = minecraft_version
29 }
30
31 allprojects {
32     apply plugin: "java"
33     apply plugin: "architect-plugin"
34
35     group "me.shedaniel"
36     archivesBaseName = rootProject.name
37     version = rootProject.mod_version
38 }
39
40 idea.project.settings {
41     delegateActions {
42         delegateBuildRunToGradle = false
43         testRunner = ActionDelegationConfig.TestRunner.PLATFORM
44     }
45     runConfigurations {
46         "Fabric: Minecraft Client"(org.jetbrains.gradle.ext.Gradle) {
47             project = rootProject.project(":fabric")
48             taskNames = Collections.singletonList("runClient")
49         }
50         "Fabric: Minecraft Server"(org.jetbrains.gradle.ext.Gradle) {
51             project = rootProject.project(":fabric")
52             taskNames = Collections.singletonList("runServer")
53         }
54         "Forge: Minecraft Client"(org.jetbrains.gradle.ext.Gradle) {
55             project = rootProject.project(":forge")
56             taskNames = Collections.singletonList("runClient")
57         }
58         "Forge: Minecraft Server"(org.jetbrains.gradle.ext.Gradle) {
59             project = rootProject.project(":forge")
60             taskNames = Collections.singletonList("runServer")
61         }
62     }
63 }
64
65 task buildMerged {
66     doLast {
67         def folder = file(".gradle/.mergemods")
68         folder.mkdirs()
69         def fabricJar = file("fabric/build/libs/${rootProject.name}-${rootProject.mod_version}.jar")
70         def forgeJar = file("forge/build/libs/${rootProject.name}-${rootProject.mod_version}.jar")
71         def fabricFolder = new File(folder, ".tempFabric")
72         def forgeFolder = new File(folder, ".tempForge")
73         def mergeFolder = new File(folder, ".tempMerge")
74         def policyMap = new HashMap<String, String>()
75         file("merging.policy").eachLine {
76             if (it.isBlank() || it.startsWith("#")) return
77             def env = it.substring(0, it.indexOf(' '))
78             if (env == "FABRIC")
79                 policyMap.put(it.substring(env.length() + 1), "Fabric")
80             else if (env == "FORGE")
81                 policyMap.put(it.substring(env.length() + 1), "Forge")
82             else throw new IllegalStateException("Illegal env $env at $it")
83         }
84         forgeFolder.deleteDir()
85         fabricFolder.deleteDir()
86         mergeFolder.deleteDir()
87         unzip(fabricJar, fabricFolder)
88         unzip(forgeJar, forgeFolder)
89         mergeFolder.mkdirs()
90         Stream.of(forgeFolder, fabricFolder).each { useFolder ->
91             try {
92                 Files.walkFileTree(useFolder.toPath(), new SimpleFileVisitor<Path>() {
93                     @Override
94                     FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
95                         try {
96                             File ogFile = file.toFile()
97                             File outFile = new File(mergeFolder, ogFile.getAbsolutePath().replace(useFolder.getAbsolutePath(), ""))
98                             outFile.getParentFile().mkdirs()
99                             if (outFile.exists()) {
100                                 def env = useFolder.getName().substring(5)
101                                 def fileName = outFile.getAbsolutePath().replace(mergeFolder.getAbsolutePath(), "")
102                                 def policyEnv = policyMap.get(fileName)
103                                 if (policyEnv == null) {
104                                     throw new IllegalStateException("Unhandled duplicate file: $fileName")
105                                 }
106                                 println "Chose env ${policyEnv.toUpperCase(Locale.ROOT)} for duplicate file: $fileName"
107                                 if (policyEnv != env)
108                                     return FileVisitResult.CONTINUE
109                             }
110                             if (!ogFile.isDirectory()) {
111                                 org.apache.commons.io.FileUtils.copyFile(ogFile, outFile)
112                             } else {
113                                 org.apache.commons.io.FileUtils.copyDirectory(ogFile, outFile)
114                             }
115                         } catch (IOException e) {
116                             e.printStackTrace()
117                             System.exit(0)
118                         }
119                         return FileVisitResult.CONTINUE
120                     }
121                 })
122             } catch (IOException e) {
123                 e.printStackTrace()
124                 System.exit(0)
125             }
126         }
127         File finalMerge = file("build/libs/${rootProject.name}-${rootProject.mod_version}.jar")
128         finalMerge.parentFile.mkdirs()
129         finalMerge.delete()
130         compress(mergeFolder.toPath(), finalMerge)
131         folder.deleteDir()
132     }
133 }
134
135 rootProject.subprojects.forEach {
136     buildMerged.mustRunAfter it.tasks.getByName("build")
137 }
138
139 static def compress(Path sourceDir, File zipFile) {
140     try {
141         final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFile))
142         Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
143             @Override
144             FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {
145                 try {
146                     Path targetFile = sourceDir.relativize(file)
147                     outputStream.putNextEntry(new ZipEntry(targetFile.toString()))
148                     byte[] bytes = Files.readAllBytes(file)
149                     outputStream.write(bytes, 0, bytes.length)
150                     outputStream.closeEntry()
151                 } catch (IOException e) {
152                     e.printStackTrace()
153                 }
154                 return FileVisitResult.CONTINUE
155             }
156         })
157         outputStream.close()
158     } catch (IOException e) {
159         e.printStackTrace()
160     }
161 }
162
163 static def unzip(File zipFile, File destDir) {
164     if (!destDir.exists())
165         destDir.mkdirs()
166     FileInputStream fis
167     byte[] buffer = new byte[1024]
168     try {
169         fis = new FileInputStream(zipFile)
170         ZipInputStream zis = new ZipInputStream(fis)
171         ZipEntry zipEntry = zis.getNextEntry()
172         while (zipEntry != null) {
173             if (!zipEntry.isDirectory()) {
174                 File newFile = new File(destDir, zipEntry.getName())
175                 new File(newFile.getParent()).mkdirs()
176                 FileOutputStream fos = new FileOutputStream(newFile)
177                 int len
178                 while ((len = zis.read(buffer)) > 0) {
179                     fos.write(buffer, 0, len)
180                 }
181                 fos.close()
182             }
183             zis.closeEntry()
184             zipEntry = zis.getNextEntry()
185         }
186         zis.closeEntry()
187         zis.close()
188         fis.close()
189     } catch (IOException e) {
190         e.printStackTrace()
191     }
192 }