Add basic MultiProjectTest and a basic RunConfigTest
This should cover most of the main things now.
This commit is contained in:
		
							parent
							
								
									d1c4082761
								
							
						
					
					
						commit
						e9c7c21ede
					
				
					 20 changed files with 405 additions and 4 deletions
				
			
		
							
								
								
									
										66
									
								
								src/test/groovy/net/fabricmc/loom/MultiProjectTest.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/test/groovy/net/fabricmc/loom/MultiProjectTest.groovy
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | ||||||
|  | /* | ||||||
|  |  * 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 | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.loom.util.ArchiveAssertionsTrait | ||||||
|  | import net.fabricmc.loom.util.ProjectTestTrait | ||||||
|  | import spock.lang.Specification | ||||||
|  | import spock.lang.Unroll | ||||||
|  | 
 | ||||||
|  | import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||||
|  | 
 | ||||||
|  | class MultiProjectTest extends Specification implements ProjectTestTrait, ArchiveAssertionsTrait { | ||||||
|  | 	@Override | ||||||
|  | 	String name() { | ||||||
|  | 		"multiproject" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Unroll | ||||||
|  | 	def "build (gradle #gradle)"() { | ||||||
|  | 		when: | ||||||
|  | 			def result = create("build", gradle) | ||||||
|  | 		then: | ||||||
|  | 			result.task(":build").outcome == SUCCESS | ||||||
|  | 			result.task(":core:build").outcome == SUCCESS | ||||||
|  | 			result.task(":example:build").outcome == SUCCESS | ||||||
|  | 
 | ||||||
|  | 			result.task(":remapAllJars").outcome == SUCCESS | ||||||
|  | 			result.task(":remapAllSources").outcome == SUCCESS | ||||||
|  | 
 | ||||||
|  | 			hasArchiveEntry("multiproject-1.0.0.jar", "META-INF/jars/example-1.0.0.jar") | ||||||
|  | 			hasArchiveEntry("multiproject-1.0.0.jar", "META-INF/jars/core-1.0.0.jar") | ||||||
|  | 			hasArchiveEntry("multiproject-1.0.0.jar", "META-INF/jars/fabric-api-base-0.2.1+9354966b7d.jar") | ||||||
|  | 
 | ||||||
|  | 		where: | ||||||
|  | 			gradle 				| _ | ||||||
|  | 			'6.8.3' 			| _ | ||||||
|  | 			'7.0-milestone-2'	| _ | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	String warningMode(String gradleVersion) { | ||||||
|  | 		"none" // TODO fix this! | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/test/groovy/net/fabricmc/loom/RunConfigTest.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/test/groovy/net/fabricmc/loom/RunConfigTest.groovy
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | ||||||
|  | /* | ||||||
|  |  * 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 | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.loom.util.ProjectTestTrait | ||||||
|  | import spock.lang.Specification | ||||||
|  | import spock.lang.Unroll | ||||||
|  | 
 | ||||||
|  | import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||||
|  | 
 | ||||||
|  | // This test runs a mod that exits on mod init | ||||||
|  | class RunConfigTest extends Specification implements ProjectTestTrait { | ||||||
|  | 	@Override | ||||||
|  | 	String name() { | ||||||
|  | 		"runconfigs" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Unroll | ||||||
|  | 	def "#task"() { | ||||||
|  | 		when: | ||||||
|  | 			def result = create(task) | ||||||
|  | 		then: | ||||||
|  | 			result.task(":${task}").outcome == SUCCESS | ||||||
|  | 		where: | ||||||
|  | 			task 				| _ | ||||||
|  | 			'runClient' 		| _ | ||||||
|  | 			'runServer'			| _ | ||||||
|  | 			'runTestmodClient'	| _ | ||||||
|  | 			'runTestmodServer'	| _ | ||||||
|  | 			'runAutoTestServer'	| _ | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -27,8 +27,8 @@ package net.fabricmc.loom.util | ||||||
| import org.zeroturnaround.zip.ZipUtil | import org.zeroturnaround.zip.ZipUtil | ||||||
| 
 | 
 | ||||||
| trait ArchiveAssertionsTrait extends ProjectTestTrait { | trait ArchiveAssertionsTrait extends ProjectTestTrait { | ||||||
| 	String getArchiveEntry(String name, String entry) { | 	String getArchiveEntry(String name, String entry, String project = "") { | ||||||
| 		def file = getOutputFile(name) | 		def file = getOutputFile(name, project) | ||||||
| 
 | 
 | ||||||
| 		def bytes = ZipUtil.unpackEntry(file, entry) | 		def bytes = ZipUtil.unpackEntry(file, entry) | ||||||
| 
 | 
 | ||||||
|  | @ -38,4 +38,9 @@ trait ArchiveAssertionsTrait extends ProjectTestTrait { | ||||||
| 
 | 
 | ||||||
| 		new String(bytes as byte[]) | 		new String(bytes as byte[]) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	boolean hasArchiveEntry(String name, String entry, String project = "") { | ||||||
|  | 		def file = getOutputFile(name, project) | ||||||
|  | 		ZipUtil.unpackEntry(file, entry) != null | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | @ -96,8 +96,8 @@ trait ProjectTestTrait { | ||||||
| 		new File(gradleHome, gradleVersion).absolutePath | 		new File(gradleHome, gradleVersion).absolutePath | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	File getOutputFile(String name) { | 	File getOutputFile(String name, String project = "") { | ||||||
| 		def file = new File(testProjectDir, "build/libs/" + name) | 		def file = new File(testProjectDir, "${project}build/libs/${name}") | ||||||
| 
 | 
 | ||||||
| 		if (!file.exists()) { | 		if (!file.exists()) { | ||||||
| 			throw new FileNotFoundException("Could not find ${name} at ${file.absolutePath}") | 			throw new FileNotFoundException("Could not find ${name} at ${file.absolutePath}") | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								src/test/resources/projects/multiproject/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/test/resources/projects/multiproject/build.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | ||||||
|  | plugins { | ||||||
|  | 	id "java" | ||||||
|  | 	id "java-library" | ||||||
|  | 	id 'fabric-loom' apply false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | allprojects { | ||||||
|  | 	apply plugin: "fabric-loom" | ||||||
|  | 
 | ||||||
|  | 	version = "1.0.0" | ||||||
|  | 
 | ||||||
|  | 	tasks.withType(JavaCompile).configureEach { | ||||||
|  | 		def targetVersion = 8 | ||||||
|  | 		if (JavaVersion.current().isJava9Compatible()) { | ||||||
|  | 			it.options.release = targetVersion | ||||||
|  | 		} else { | ||||||
|  | 			sourceCompatibility = JavaVersion.toVersion(targetVersion) | ||||||
|  | 			targetCompatibility = JavaVersion.toVersion(targetVersion) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		it.options.encoding = "UTF-8" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	dependencies { | ||||||
|  | 		// To change the versions see the gradle.properties file | ||||||
|  | 		minecraft "com.mojang:minecraft:1.16.5" | ||||||
|  | 		mappings "net.fabricmc:yarn:1.16.5+build.5:v2" | ||||||
|  | 		modImplementation "net.fabricmc:fabric-loader:0.11.2" | ||||||
|  | 
 | ||||||
|  | 		modImplementation "net.fabricmc.fabric-api:fabric-api:0.31.0+1.16" | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	configurations { | ||||||
|  | 		dev | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	jar { | ||||||
|  | 		archiveClassifier.set "dev" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	loom { | ||||||
|  | 		shareCaches = true | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	java { | ||||||
|  | 		withSourcesJar() | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | dependencies { | ||||||
|  | 	afterEvaluate { | ||||||
|  | 		subprojects.each { | ||||||
|  | 			include project("${it.name}:") | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	include fabricApi.module("fabric-api-base", "0.31.0+1.16") | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | archivesBaseName = "multiproject" | ||||||
|  | version = "1.0.0" | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | archivesBaseName = "core" | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | package net.fabricmc.core; | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.api.ModInitializer; | ||||||
|  | 
 | ||||||
|  | public class ExampleMod implements ModInitializer { | ||||||
|  | 	@Override | ||||||
|  | 	public void onInitialize() { | ||||||
|  | 		// This code runs as soon as Minecraft is in a mod-load-ready state. | ||||||
|  | 		// However, some things (like resources) may still be uninitialized. | ||||||
|  | 		// Proceed with mild caution. | ||||||
|  | 
 | ||||||
|  | 		System.out.println("Hello Fabric world!"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | { | ||||||
|  |   "schemaVersion": 1, | ||||||
|  |   "id": "modid", | ||||||
|  |   "version": "${version}", | ||||||
|  | 
 | ||||||
|  |   "name": "Example Mod", | ||||||
|  |   "description": "This is an example description! Tell everyone what your mod is about!", | ||||||
|  |   "authors": [ | ||||||
|  |     "Me!" | ||||||
|  |   ], | ||||||
|  |   "contact": { | ||||||
|  |     "homepage": "https://fabricmc.net/", | ||||||
|  |     "sources": "https://github.com/FabricMC/fabric-example-mod" | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   "license": "CC0-1.0", | ||||||
|  | 
 | ||||||
|  |   "environment": "*", | ||||||
|  |   "entrypoints": { | ||||||
|  |     "main": [ | ||||||
|  |       "net.fabricmc.core.ExampleMod" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   "depends": { | ||||||
|  |     "fabricloader": ">=0.7.4", | ||||||
|  |     "fabric": "*", | ||||||
|  |     "minecraft": "1.16.x" | ||||||
|  |   }, | ||||||
|  |   "suggests": { | ||||||
|  |     "another-mod": "*" | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | archivesBaseName = "example" | ||||||
|  | 
 | ||||||
|  | dependencies { | ||||||
|  | 	implementation project(path: ":core", configuration: "dev") | ||||||
|  | } | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | package net.fabricmc.example; | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.api.ModInitializer; | ||||||
|  | 
 | ||||||
|  | public class ExampleMod implements ModInitializer { | ||||||
|  | 	@Override | ||||||
|  | 	public void onInitialize() { | ||||||
|  | 		// This code runs as soon as Minecraft is in a mod-load-ready state. | ||||||
|  | 		// However, some things (like resources) may still be uninitialized. | ||||||
|  | 		// Proceed with mild caution. | ||||||
|  | 
 | ||||||
|  | 		System.out.println("Hello Fabric world!"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | package net.fabricmc.example.mixin; | ||||||
|  | 
 | ||||||
|  | import net.minecraft.client.gui.screen.TitleScreen; | ||||||
|  | import org.spongepowered.asm.mixin.Mixin; | ||||||
|  | import org.spongepowered.asm.mixin.injection.At; | ||||||
|  | import org.spongepowered.asm.mixin.injection.Inject; | ||||||
|  | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; | ||||||
|  | 
 | ||||||
|  | @Mixin(TitleScreen.class) | ||||||
|  | public class ExampleMixin { | ||||||
|  | 	@Inject(at = @At("HEAD"), method = "init()V") | ||||||
|  | 	private void init(CallbackInfo info) { | ||||||
|  | 		System.out.println("This line is printed by an example mod mixin!"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | { | ||||||
|  |   "schemaVersion": 1, | ||||||
|  |   "id": "modid", | ||||||
|  |   "version": "${version}", | ||||||
|  | 
 | ||||||
|  |   "name": "Example Mod", | ||||||
|  |   "description": "This is an example description! Tell everyone what your mod is about!", | ||||||
|  |   "authors": [ | ||||||
|  |     "Me!" | ||||||
|  |   ], | ||||||
|  |   "contact": { | ||||||
|  |     "homepage": "https://fabricmc.net/", | ||||||
|  |     "sources": "https://github.com/FabricMC/fabric-example-mod" | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   "license": "CC0-1.0", | ||||||
|  | 
 | ||||||
|  |   "environment": "*", | ||||||
|  |   "entrypoints": { | ||||||
|  |     "main": [ | ||||||
|  |       "net.fabricmc.example.ExampleMod" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "mixins": [ | ||||||
|  |     "modid.mixins.json" | ||||||
|  |   ], | ||||||
|  | 
 | ||||||
|  |   "depends": { | ||||||
|  |     "fabricloader": ">=0.7.4", | ||||||
|  |     "fabric": "*", | ||||||
|  |     "minecraft": "1.16.x" | ||||||
|  |   }, | ||||||
|  |   "suggests": { | ||||||
|  |     "another-mod": "*" | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | { | ||||||
|  |   "required": true, | ||||||
|  |   "minVersion": "0.8", | ||||||
|  |   "package": "net.fabricmc.example.mixin", | ||||||
|  |   "compatibilityLevel": "JAVA_8", | ||||||
|  |   "mixins": [ | ||||||
|  |   ], | ||||||
|  |   "client": [ | ||||||
|  |     "ExampleMixin" | ||||||
|  |   ], | ||||||
|  |   "injectors": { | ||||||
|  |     "defaultRequire": 1 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								src/test/resources/projects/multiproject/gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/test/resources/projects/multiproject/gradle.properties
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | ||||||
|  | # Done to increase the memory available to gradle. | ||||||
|  | org.gradle.jvmargs=-Xmx1G | ||||||
|  | 
 | ||||||
|  | # Fabric Properties | ||||||
|  | 	# check these on https://fabricmc.net/use | ||||||
|  | 	minecraft_version=1.16.5 | ||||||
|  | 	yarn_mappings=1.16.5+build.5 | ||||||
|  | 	loader_version=0.11.2 | ||||||
|  | 
 | ||||||
|  | # Mod Properties | ||||||
|  | 	mod_version = 1.0.0 | ||||||
|  | 	maven_group = com.example | ||||||
|  | 	archives_base_name = fabric-example-mod | ||||||
|  | 
 | ||||||
|  | # Dependencies | ||||||
|  | 	# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api | ||||||
|  | 	fabric_version=0.31.0+1.16 | ||||||
							
								
								
									
										4
									
								
								src/test/resources/projects/multiproject/settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/test/resources/projects/multiproject/settings.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | rootProject.name = "fabric-example-mod" | ||||||
|  | 
 | ||||||
|  | include 'core' | ||||||
|  | include 'example' | ||||||
							
								
								
									
										33
									
								
								src/test/resources/projects/runconfigs/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/test/resources/projects/runconfigs/build.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | plugins { | ||||||
|  | 	id 'fabric-loom' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | loom { | ||||||
|  | 	runs { | ||||||
|  | 		testmodClient { | ||||||
|  | 			client() | ||||||
|  | 			ideConfigGenerated project.rootProject == project | ||||||
|  | 			name = "Testmod Client" | ||||||
|  | 			source sourceSets.main | ||||||
|  | 		} | ||||||
|  | 		testmodServer { | ||||||
|  | 			server() | ||||||
|  | 			ideConfigGenerated project.rootProject == project | ||||||
|  | 			name = "Testmod Server" | ||||||
|  | 			source sourceSets.main | ||||||
|  | 		} | ||||||
|  | 		autoTestServer { | ||||||
|  | 			inherit testmodServer | ||||||
|  | 			vmArg "-Dfabric.autoTest" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | archivesBaseName = "fabric-example-mod" | ||||||
|  | version = "1.0.0" | ||||||
|  | 
 | ||||||
|  | dependencies { | ||||||
|  | 	minecraft "com.mojang:minecraft:1.16.5" | ||||||
|  | 	mappings "net.fabricmc:yarn:1.16.5+build.5:v2" | ||||||
|  | 	modImplementation "net.fabricmc:fabric-loader:0.11.2" | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								src/test/resources/projects/runconfigs/gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/test/resources/projects/runconfigs/gradle.properties
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | org.gradle.jvmargs=-Xmx1G | ||||||
							
								
								
									
										2
									
								
								src/test/resources/projects/runconfigs/settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/test/resources/projects/runconfigs/settings.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | rootProject.name = "fabric-example-mod" | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | package net.fabricmc.example; | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.api.ModInitializer; | ||||||
|  | 
 | ||||||
|  | public class ExampleMod implements ModInitializer { | ||||||
|  | 	@Override | ||||||
|  | 	public void onInitialize() { | ||||||
|  | 		System.out.println("Hello Fabric world!"); | ||||||
|  | 
 | ||||||
|  | 		// Quit now, we dont need to load the whole game to know the run configs are works | ||||||
|  | 		System.exit(0); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | { | ||||||
|  |   "schemaVersion": 1, | ||||||
|  |   "id": "modid", | ||||||
|  |   "version": "1.0.0", | ||||||
|  |   "environment": "*", | ||||||
|  |   "entrypoints": { | ||||||
|  |     "main": [ | ||||||
|  |       "net.fabricmc.example.ExampleMod" | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue