mirror of
				https://github.com/QuiltMC/quilt-template-mod
				synced 2024-08-15 00:23:32 +00:00 
			
		
		
		
	Add gametest setup
This commit is contained in:
		
							parent
							
								
									c5f28c9f03
								
							
						
					
					
						commit
						80468faa1c
					
				
					 6 changed files with 234 additions and 2 deletions
				
			
		
							
								
								
									
										14
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
										
									
									
									
								
							|  | @ -4,7 +4,7 @@ My personalized Quilt template Mod. You can use it as a template for your own mo | ||||||
| 
 | 
 | ||||||
| ## Differences from the Official Mod | ## Differences from the Official Mod | ||||||
| - Added a build github action | - Added a build github action | ||||||
| 
 | - Added gametest support (See ##Usage###Gametest Support) | ||||||
| ## Usage | ## Usage | ||||||
| 
 | 
 | ||||||
| In order to use this mod as a template: | In order to use this mod as a template: | ||||||
|  | @ -14,7 +14,7 @@ In order to use this mod as a template: | ||||||
| 3. Make the necessary changes in order to make it yours: | 3. Make the necessary changes in order to make it yours: | ||||||
|     - Update `gradle.properties` in order to use your Maven group and mod ID |     - Update `gradle.properties` in order to use your Maven group and mod ID | ||||||
|         - If you don't know which Maven group to use, and you are planning to host the mod's source code on GitHub, use `io.github.<Your_Username_Here>` |         - If you don't know which Maven group to use, and you are planning to host the mod's source code on GitHub, use `io.github.<Your_Username_Here>` | ||||||
|     - Update `quilt.mod.json` in order to reflect your mod's metadata |     - Update `quilt.mod.json` in `src/main/resources` in order to reflect your mod's metadata | ||||||
|         - If you are planning to include (jar-in-jar) a mod, don't forget to declare its dependency on it! |         - If you are planning to include (jar-in-jar) a mod, don't forget to declare its dependency on it! | ||||||
|         - The icon provided here is a placeholder one. If you aren't able to replace it yet, you can delete it and remove the "icon" property |         - The icon provided here is a placeholder one. If you aren't able to replace it yet, you can delete it and remove the "icon" property | ||||||
|     - Create a LICENSE file for this mod! If you don't know which license to use, check out [here](https://choosealicense.com/). |     - Create a LICENSE file for this mod! If you don't know which license to use, check out [here](https://choosealicense.com/). | ||||||
|  | @ -24,6 +24,16 @@ In order to use this mod as a template: | ||||||
|     - If the dependencies on `gradle/libs.versions.toml` isn't up-to-date, feel free to update them! The [linked utility](https://lambdaurora.dev/tools/import_quilt.html) should help you in this easy and quick process. |     - If the dependencies on `gradle/libs.versions.toml` isn't up-to-date, feel free to update them! The [linked utility](https://lambdaurora.dev/tools/import_quilt.html) should help you in this easy and quick process. | ||||||
| 4. The mod is now ready to be worked on! | 4. The mod is now ready to be worked on! | ||||||
| 
 | 
 | ||||||
|  | ### Gametest Support | ||||||
|  | 1. Update `quilt.mod.json` in `src/gametest/resources` and the rest of the naming in order to reflect your testmod's metadata | ||||||
|  | 
 | ||||||
|  | > [WARNING] | ||||||
|  | > | ||||||
|  | > make sure to change the dependency on `example_mod` to your modid and to not reuse the modid of your main project, e.g. suffix your project's modid with `_test` | ||||||
|  | > | ||||||
|  | 
 | ||||||
|  | 2. Now testing should be available using the test gradle task | ||||||
|  | 
 | ||||||
| ## License | ## License | ||||||
| 
 | 
 | ||||||
| This template on the QuiltMC GitHub is licensed under the [Creative Common Zero v1.0 license](./LICENSE-TEMPLATE.md). | This template on the QuiltMC GitHub is licensed under the [Creative Common Zero v1.0 license](./LICENSE-TEMPLATE.md). | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								build.gradle
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								build.gradle
									
										
									
									
									
								
							|  | @ -69,6 +69,36 @@ jar { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Gametest stuff | ||||||
|  | sourceSets { | ||||||
|  | 	gametest { | ||||||
|  | 		compileClasspath += sourceSets.main.compileClasspath | ||||||
|  | 		runtimeClasspath += sourceSets.main.runtimeClasspath | ||||||
|  | 		compileClasspath += sourceSets.main.output | ||||||
|  | 		runtimeClasspath += sourceSets.main.output | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | loom { | ||||||
|  | 	runs { | ||||||
|  | 		gametest { | ||||||
|  | 			server() | ||||||
|  | 			name = "Headless Game Test Server" | ||||||
|  | 			vmArg "-Dfabric-api.gametest" | ||||||
|  | 			runDir "build/gametest" | ||||||
|  | 			source = project.sourceSets.gametest | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		gametestClient { | ||||||
|  | 			client() | ||||||
|  | 			name = "Game Test Client" | ||||||
|  | 			source = project.sourceSets.gametest | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test.dependsOn runGametest | ||||||
|  | 
 | ||||||
| // Configure the maven publication | // Configure the maven publication | ||||||
| publishing { | publishing { | ||||||
| 	publications { | 	publications { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | package com.example.example_mod.test; | ||||||
|  | 
 | ||||||
|  | import net.minecraft.block.Blocks; | ||||||
|  | import net.minecraft.test.GameTest; | ||||||
|  | import net.minecraft.test.TestContext; | ||||||
|  | import net.minecraft.util.math.BlockPos; | ||||||
|  | 
 | ||||||
|  | public class ExampleModTests { | ||||||
|  | 	@GameTest() | ||||||
|  | 	public void exampleStructureTest (TestContext context) { | ||||||
|  | 		context.setBlockState(new BlockPos(0, 2, 0), Blocks.DIAMOND_BLOCK.getDefaultState()); | ||||||
|  | 		context.addInstantFinalTask(() -> context.checkBlock(new BlockPos(0,2,0), block -> block == Blocks.DIAMOND_BLOCK, "Expect block to be a Diamond Block")); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/gametest/resources/assets/example_mod_test/icon.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/gametest/resources/assets/example_mod_test/icon.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 207 B | 
|  | @ -0,0 +1,138 @@ | ||||||
|  | { | ||||||
|  |     DataVersion: 3120, | ||||||
|  |     size: [5, 5, 5], | ||||||
|  |     data: [ | ||||||
|  |         {pos: [0, 0, 0], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [0, 0, 1], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [0, 0, 2], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [0, 0, 3], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [0, 0, 4], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [1, 0, 0], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [1, 0, 1], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [1, 0, 2], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [1, 0, 3], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [1, 0, 4], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [2, 0, 0], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [2, 0, 1], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [2, 0, 2], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [2, 0, 3], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [2, 0, 4], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [3, 0, 0], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [3, 0, 1], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [3, 0, 2], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [3, 0, 3], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [3, 0, 4], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [4, 0, 0], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [4, 0, 1], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [4, 0, 2], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [4, 0, 3], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [4, 0, 4], state: "minecraft:polished_andesite"}, | ||||||
|  |         {pos: [0, 1, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 1, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 1, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 1, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 1, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 1, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 1, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 1, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 1, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 1, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 1, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 1, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 1, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 1, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 1, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 1, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 1, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 1, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 1, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 1, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 1, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 1, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 1, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 1, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 1, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 2, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 2, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 2, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 2, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 2, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 2, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 2, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 2, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 2, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 2, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 2, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 2, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 2, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 2, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 2, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 2, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 2, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 2, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 2, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 2, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 2, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 2, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 2, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 2, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 2, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 3, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 3, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 3, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 3, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 3, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 3, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 3, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 3, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 3, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 3, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 3, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 3, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 3, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 3, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 3, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 3, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 3, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 3, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 3, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 3, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 3, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 3, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 3, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 3, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 3, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 4, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 4, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 4, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 4, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [0, 4, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 4, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 4, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 4, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 4, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [1, 4, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 4, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 4, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 4, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 4, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [2, 4, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 4, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 4, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 4, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 4, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [3, 4, 4], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 4, 0], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 4, 1], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 4, 2], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 4, 3], state: "minecraft:air"}, | ||||||
|  |         {pos: [4, 4, 4], state: "minecraft:air"} | ||||||
|  |     ], | ||||||
|  |     entities: [], | ||||||
|  |     palette: [ | ||||||
|  |         "minecraft:polished_andesite", | ||||||
|  |         "minecraft:air", | ||||||
|  |         "minecraft:campfire{facing:south,lit:true,signal_fire:false,waterlogged:false}", | ||||||
|  |         "turing_potions:potion_cauldron{level:1}" | ||||||
|  |     ] | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								src/gametest/resources/quilt.mod.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/gametest/resources/quilt.mod.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | { | ||||||
|  | 	"schema_version": 1, | ||||||
|  | 	"quilt_loader": { | ||||||
|  | 		"group": "com.example", | ||||||
|  | 		"id": "example_mod_test", | ||||||
|  | 		"version": "${version}", | ||||||
|  | 		"metadata": { | ||||||
|  | 			"name": "Mod Name Testmod", | ||||||
|  | 			"description": "The Mod Name Testmod.", | ||||||
|  | 			"contributors": { | ||||||
|  | 				"Your name here": "Owner" | ||||||
|  | 			}, | ||||||
|  | 			"icon": "assets/example_mod/icon.png" | ||||||
|  | 		}, | ||||||
|  | 		"intermediate_mappings": "net.fabricmc:intermediary", | ||||||
|  | 		"entrypoints": { | ||||||
|  | 			"fabric-gametest": [ | ||||||
|  | 				"com.example.example_mod.test.ExampleModTests" | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		"depends": [ | ||||||
|  | 			{ | ||||||
|  | 				"id": "example_mod", | ||||||
|  | 				"versions": "*" | ||||||
|  | 			}, | ||||||
|  | 			{ | ||||||
|  | 				"id": "quilt_loader", | ||||||
|  | 				"versions": ">=0.17.0-" | ||||||
|  | 			}, | ||||||
|  | 			{ | ||||||
|  | 				"id": "quilted_fabric_api", | ||||||
|  | 				"versions": ">=4.0.0-" | ||||||
|  | 			}, | ||||||
|  | 			{ | ||||||
|  | 				"id": "minecraft", | ||||||
|  | 				"versions": ">=1.19.2" | ||||||
|  | 			} | ||||||
|  | 		] | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue