Added vscode task to generate launch.json
A few plugins will make the experience a lot better: https://marketplace.visualstudio.com/items?itemName=redhat.java https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
This commit is contained in:
		
							parent
							
								
									64e052cf25
								
							
						
					
					
						commit
						3766182f93
					
				
					 2 changed files with 107 additions and 0 deletions
				
			
		|  | @ -37,6 +37,7 @@ public class LoomGradlePlugin extends AbstractPlugin { | |||
| 		makeTask("genSources", GenSourcesTask.class); | ||||
| 
 | ||||
| 		makeTask("genIdeaWorkspace", GenIdeaProjectTask.class).dependsOn("idea").setGroup("ide"); | ||||
| 		makeTask("vscode", GenVsCodeProjectTask.class).setGroup("ide"); | ||||
| 
 | ||||
| 		makeTask("runClient", RunClientTask.class).dependsOn("buildNeeded").setGroup("minecraftMapped"); | ||||
| 		makeTask("runServer", RunServerTask.class).dependsOn("buildNeeded").setGroup("minecraftMapped"); | ||||
|  |  | |||
							
								
								
									
										106
									
								
								src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,106 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2016, 2017, 2018 FabricMC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
| 
 | ||||
| package net.fabricmc.loom.task; | ||||
| 
 | ||||
| import com.google.gson.Gson; | ||||
| import com.google.gson.GsonBuilder; | ||||
| import net.fabricmc.loom.LoomGradleExtension; | ||||
| import net.fabricmc.loom.util.Constants; | ||||
| import net.fabricmc.loom.util.IdeaRunConfig; | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.gradle.api.DefaultTask; | ||||
| import org.gradle.api.tasks.TaskAction; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| //Recommended vscode plugins: | ||||
| // https://marketplace.visualstudio.com/items?itemName=redhat.java | ||||
| // https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug | ||||
| // https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack | ||||
| public class GenVsCodeProjectTask extends DefaultTask { | ||||
| 
 | ||||
|     @TaskAction | ||||
|     public void genRuns() { | ||||
|         LoomGradleExtension extension = getProject().getExtensions().getByType(LoomGradleExtension.class); | ||||
|         File projectDir = new File(".vscode"); | ||||
|         if (!projectDir.exists()) { | ||||
|             projectDir.mkdir(); | ||||
|         } | ||||
|         File launchJson = new File(projectDir, "launch.json"); | ||||
|         if (launchJson.exists()) { | ||||
|             launchJson.delete(); | ||||
|         } | ||||
| 
 | ||||
|         VsCodeLaunch launch = new VsCodeLaunch(); | ||||
|         launch.add(IdeaRunConfig.clientRunConfig(getProject())); | ||||
|         launch.add(IdeaRunConfig.serverRunConfig(getProject())); | ||||
| 
 | ||||
|         Gson gson = new GsonBuilder().setPrettyPrinting().create(); | ||||
|         String json = gson.toJson(launch); | ||||
| 
 | ||||
|         try { | ||||
|             FileUtils.writeStringToFile(launchJson, json, StandardCharsets.UTF_8); | ||||
|         } catch (IOException e) { | ||||
|             throw new RuntimeException("Failed to write launch.json", e); | ||||
|         } | ||||
| 
 | ||||
|         File runDir = new File(Constants.WORKING_DIRECTORY, extension.runDir); | ||||
|         if (!runDir.exists()) { | ||||
|             runDir.mkdirs(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private static class VsCodeLaunch { | ||||
|         public String version = "0.2.0"; | ||||
|         public List<VsCodeConfiguration> configurations = new ArrayList<>(); | ||||
| 
 | ||||
|         public void add(IdeaRunConfig runConfig) { | ||||
|             configurations.add(new VsCodeConfiguration(runConfig)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private static class VsCodeConfiguration { | ||||
|         public String type = "java"; | ||||
|         public String name; | ||||
|         public String request = "launch"; | ||||
|         public String cwd = "${workspaceFolder}\\run"; | ||||
|         public String conolse = "internalConsole"; | ||||
|         public boolean stopOnEntry = false; | ||||
|         public String mainClass; | ||||
|         public String vmArgs; | ||||
|         public String args; | ||||
| 
 | ||||
|         public VsCodeConfiguration(IdeaRunConfig runConfig) { | ||||
|             this.name = runConfig.configName; | ||||
|             this.mainClass = runConfig.mainClass; | ||||
|             this.vmArgs = runConfig.vmArgs; | ||||
|             this.args = runConfig.programArgs; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in a new issue