mirror of
				https://github.com/chylex/Minecraft-Window-Title.git
				synced 2025-10-31 03:17:17 +01:00 
			
		
		
		
	Compare commits
	
		
			34 Commits
		
	
	
		
			1.15
			...
			2a17b46a1d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2a17b46a1d | |||
|   | 5e64fd81e3 | ||
| 425eb3f380 | |||
| 43698d23b5 | |||
| dbbd5b60f5 | |||
| 73dab6b277 | |||
| 3de5e01e32 | |||
| 05a081364d | |||
|   | 941ece888b | ||
| ba22745940 | |||
| 13e6e63e81 | |||
| 44a10a09ca | |||
| 701543c1e8 | |||
| ef0031a3dd | |||
| 8a9e287061 | |||
| c6b0e485de | |||
| 8190b1e1c1 | |||
| cb81efe63b | |||
| 0ebd3a9ef3 | |||
| ddc0e4595a | |||
| 335c8cf87b | |||
| e2fb18fdef | |||
| 8b12ddc7c7 | |||
| 02d6f2a63d | |||
| 30a12716b6 | |||
| 5325cdf282 | |||
| 6c4892dcd0 | |||
| e0b48e1c53 | |||
| d070b4b22f | |||
| 2c12af5fa8 | |||
| 04f1714ec5 | |||
| 466de670f3 | |||
| 639f96dbed | |||
| 4aceac18c2 | 
							
								
								
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1 @@ | ||||
| github: chylex | ||||
| patreon: chylex | ||||
| ko_fi: chylex | ||||
|   | ||||
							
								
								
									
										44
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										44
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,22 +1,30 @@ | ||||
| bin/ | ||||
| [Bb]uild/ | ||||
| eclipse/ | ||||
| run/ | ||||
| out/ | ||||
| # gradle | ||||
|  | ||||
| .gradle/ | ||||
| .settings/ | ||||
| .updateclasses/ | ||||
| .idea/codeStyles/ | ||||
| .idea/inspectionProfiles/ | ||||
| .idea/libraries/ | ||||
| .idea/$CACHE_FILE$ | ||||
| .idea/dictionaries | ||||
| .idea/jarRepositories.xml | ||||
| .idea/workspace.xml | ||||
| .classpath | ||||
| .project | ||||
| .DS_Store | ||||
| build/ | ||||
| out/ | ||||
| classes/ | ||||
|  | ||||
| # eclipse | ||||
|  | ||||
| *.launch | ||||
|  | ||||
| # idea | ||||
|  | ||||
| .idea/ | ||||
| *.iml | ||||
| *.ipr | ||||
| *.iws | ||||
| Thumbs.db | ||||
|  | ||||
| # vscode | ||||
|  | ||||
| .settings/ | ||||
| .vscode/ | ||||
| bin/ | ||||
| .classpath | ||||
| .project | ||||
|  | ||||
| # fabric | ||||
|  | ||||
| run/ | ||||
| logs/ | ||||
|   | ||||
							
								
								
									
										13
									
								
								.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CompilerConfiguration"> | ||||
|     <bytecodeTargetLevel> | ||||
|       <module name="Fabric" target="1.8" /> | ||||
|       <module name="Fabric.main" target="1.8" /> | ||||
|       <module name="Fabric.test" target="1.8" /> | ||||
|       <module name="Forge" target="1.8" /> | ||||
|       <module name="Forge.main" target="1.8" /> | ||||
|       <module name="Forge.test" target="1.8" /> | ||||
|     </bytecodeTargetLevel> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										18
									
								
								.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							| @@ -4,24 +4,12 @@ | ||||
|   <component name="GradleSettings"> | ||||
|     <option name="linkedExternalProjectsSettings"> | ||||
|       <GradleProjectSettings> | ||||
|         <option name="delegatedBuild" value="true" /> | ||||
|         <option name="testRunner" value="GRADLE" /> | ||||
|         <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$/Fabric" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||
|         <option name="modules"> | ||||
|           <set> | ||||
|             <option value="$PROJECT_DIR$" /> | ||||
|             <option value="$PROJECT_DIR$/Fabric" /> | ||||
|           </set> | ||||
|         </option> | ||||
|       </GradleProjectSettings> | ||||
|       <GradleProjectSettings> | ||||
|         <option name="delegatedBuild" value="true" /> | ||||
|         <option name="testRunner" value="GRADLE" /> | ||||
|         <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$/Forge" /> | ||||
|         <option name="modules"> | ||||
|           <set> | ||||
|             <option value="$PROJECT_DIR$/Forge" /> | ||||
|             <option value="$PROJECT_DIR$/NeoForge" /> | ||||
|           </set> | ||||
|         </option> | ||||
|       </GradleProjectSettings> | ||||
|   | ||||
							
								
								
									
										16
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,16 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="EntryPointsManager"> | ||||
|     <list size="6"> | ||||
|       <item index="0" class="java.lang.String" itemvalue="net.minecraftforge.eventbus.api.SubscribeEvent" /> | ||||
|       <item index="1" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod" /> | ||||
|       <item index="2" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod.EventHandler" /> | ||||
|       <item index="3" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.Mixin" /> | ||||
|       <item index="4" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.injection.Inject" /> | ||||
|       <item index="5" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.eventhandler.SubscribeEvent" /> | ||||
|     </list> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||||
|     <output url="file://$PROJECT_DIR$/out" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										14
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										14
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,14 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ProjectModuleManager"> | ||||
|     <modules> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Fabric.iml" filepath="$PROJECT_DIR$/.idea/modules/Fabric.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Fabric.main.iml" filepath="$PROJECT_DIR$/.idea/modules/Fabric.main.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Fabric.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Fabric.test.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Forge.iml" filepath="$PROJECT_DIR$/.idea/modules/Forge.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Forge.main.iml" filepath="$PROJECT_DIR$/.idea/modules/Forge.main.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Forge.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Forge.test.iml" /> | ||||
|       <module fileurl="file://$PROJECT_DIR$/Minecraft-Window-Title.iml" filepath="$PROJECT_DIR$/Minecraft-Window-Title.iml" /> | ||||
|     </modules> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										14
									
								
								.idea/modules/Fabric.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										14
									
								
								.idea/modules/Fabric.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,14 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.fabric" externalSystemModuleVersion="v1.1.0" linkedProjectId="Fabric" linkedProjectPath="$MODULE_DIR$/../../Fabric" rootProjectPath="$MODULE_DIR$/../../Fabric" /> | ||||
|   <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Fabric"> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Fabric/.gradle" /> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Fabric/build" /> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Fabric/run" /> | ||||
|     </content> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|   </component> | ||||
| </module> | ||||
							
								
								
									
										122
									
								
								.idea/modules/Fabric.main.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										122
									
								
								.idea/modules/Fabric.main.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,122 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.fabric" externalSystemModuleType="sourceSet" externalSystemModuleVersion="v1.1.0" linkedProjectId="Fabric:main" linkedProjectPath="$MODULE_DIR$/../../Fabric" rootProjectPath="$MODULE_DIR$/../../Fabric" /> | ||||
|   <component name="FacetManager"> | ||||
|     <facet type="minecraft" name="Minecraft"> | ||||
|       <configuration> | ||||
|         <autoDetectTypes> | ||||
|           <platformType>FABRIC</platformType> | ||||
|           <platformType>MIXIN</platformType> | ||||
|           <platformType>MCP</platformType> | ||||
|         </autoDetectTypes> | ||||
|       </configuration> | ||||
|     </facet> | ||||
|   </component> | ||||
|   <component name="McpModuleSettings"> | ||||
|     <option name="srgType" value="SRG" /> | ||||
|   </component> | ||||
|   <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Fabric/src/main"> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Fabric/src/main/java" isTestSource="false" /> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Fabric/src/main/resources" type="java-resource" /> | ||||
|     </content> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|     <orderEntry type="module-library" scope="PROVIDED"> | ||||
|       <library> | ||||
|         <CLASSES> | ||||
|           <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loom/0.2.6-SNAPSHOT/c4870a9dea65b47e62686806437c907ccf5f4b65/fabric-loom-0.2.6-SNAPSHOT.jar!/" /> | ||||
|         </CLASSES> | ||||
|         <JAVADOC /> | ||||
|         <SOURCES /> | ||||
|       </library> | ||||
|     </orderEntry> | ||||
|     <orderEntry type="module-library"> | ||||
|       <library> | ||||
|         <CLASSES> | ||||
|           <root url="jar://$USER_HOME$/.gradle/caches/fabric-loom/yarn-1.15.2+build.1-v2-final.jar!/" /> | ||||
|         </CLASSES> | ||||
|         <JAVADOC /> | ||||
|         <SOURCES /> | ||||
|       </library> | ||||
|     </orderEntry> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:patchy:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: oshi-project:oshi-core:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:jna:4.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:platform:3.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.ibm.icu:icu4j-core-mojang:51.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:javabridge:1.0.22" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.sf.jopt-simple:jopt-simple:5.0.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: io.netty:netty-all:4.1.25.Final" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-io:commons-io:2.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.10" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jutils:jutils:1.0.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:brigadier:1.0.17" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:datafixerupper:2.0.24" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:authlib:1.5.25" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-compress:1.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpclient:4.3.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.1.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.3.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: it.unimi.dsi:fastutil:8.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-api:2.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-core:2.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:tiny-mappings-parser:0.2.2.14" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:sponge-mixin:0.8+build.18" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:tiny-remapper:0.2.2.64" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:fabric-loader-sat4j:2.3.5.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.jimfs:jimfs:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-analysis:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-commons:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-tree:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-util:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:minecraft:1.15.2-mapped-net.fabricmc.yarn-1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-api:0.4.29+build.290-1.15@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-api-base:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-biomes-v1:0.1.5+3b05f68e0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-blockrenderlayer-v1:1.1.4+c6a8ea890c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-commands-v0:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-containers-v0:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-content-registries-v0:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-crash-report-info-v1:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-dimensions-v1:0.2.4+203491ea0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-events-interaction-v0:0.2.7+a1bd31180c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-events-lifecycle-v0:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-item-groups-v0:0.1.6+ec40b2e10c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-keybindings-v0:0.1.1+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-loot-tables-v1:0.1.5+e08a73050c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-mining-levels-v0:0.1.1+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-models-v0:0.1.0+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-networking-blockentity-v0:0.2.3+e08a73050c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-networking-v0:0.1.7+12515ed90c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-object-builders-v0:0.1.3+e4c9a9c30c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-particles-v1:0.1.1+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-registry-sync-v0:0.2.6+f3d8141b0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-api-v1:0.2.9+aea78a250c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-indigo:0.2.22+203491ea0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-registries-v1:2.0.1+5a0f9a600c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-data-attachment-v1:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-fluids-v1:0.1.6+12515ed90c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-v0:1.1.0+534104900c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-v1:0.1.0+534104900c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-resource-loader-v0:0.1.10+06c939b30c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-tag-extensions-v0:0.1.3+abd915800c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-textures-v0:1.0.4+821cdba70c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:fabric-loader:0.8.2+build.194@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" scope="RUNTIME" name="Gradle: net.fabricmc:dev-launch-injector:0.2.0+build.6" level="project" /> | ||||
|   </component> | ||||
| </module> | ||||
							
								
								
									
										112
									
								
								.idea/modules/Fabric.test.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										112
									
								
								.idea/modules/Fabric.test.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,112 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.fabric" externalSystemModuleType="sourceSet" externalSystemModuleVersion="v1.1.0" linkedProjectId="Fabric:test" linkedProjectPath="$MODULE_DIR$/../../Fabric" rootProjectPath="$MODULE_DIR$/../../Fabric" /> | ||||
|   <component name="FacetManager"> | ||||
|     <facet type="minecraft" name="Minecraft"> | ||||
|       <configuration> | ||||
|         <autoDetectTypes> | ||||
|           <platformType>FABRIC</platformType> | ||||
|           <platformType>MIXIN</platformType> | ||||
|           <platformType>MCP</platformType> | ||||
|         </autoDetectTypes> | ||||
|       </configuration> | ||||
|     </facet> | ||||
|   </component> | ||||
|   <component name="McpModuleSettings"> | ||||
|     <option name="srgType" value="SRG" /> | ||||
|   </component> | ||||
|   <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Fabric/src/test" /> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|     <orderEntry type="module" module-name="Fabric.main" /> | ||||
|     <orderEntry type="module-library"> | ||||
|       <library> | ||||
|         <CLASSES> | ||||
|           <root url="jar://$USER_HOME$/.gradle/caches/fabric-loom/yarn-1.15.2+build.1-v2-final.jar!/" /> | ||||
|         </CLASSES> | ||||
|         <JAVADOC /> | ||||
|         <SOURCES /> | ||||
|       </library> | ||||
|     </orderEntry> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:patchy:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: oshi-project:oshi-core:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:jna:4.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:platform:3.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.ibm.icu:icu4j-core-mojang:51.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:javabridge:1.0.22" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.sf.jopt-simple:jopt-simple:5.0.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: io.netty:netty-all:4.1.25.Final" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-io:commons-io:2.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.10" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jutils:jutils:1.0.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:brigadier:1.0.17" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:datafixerupper:2.0.24" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:authlib:1.5.25" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-compress:1.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpclient:4.3.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.1.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.3.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: it.unimi.dsi:fastutil:8.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-api:2.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-core:2.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:tiny-mappings-parser:0.2.2.14" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:sponge-mixin:0.8+build.18" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:tiny-remapper:0.2.2.64" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:fabric-loader-sat4j:2.3.5.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.jimfs:jimfs:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-analysis:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-commons:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-tree:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-util:8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:minecraft:1.15.2-mapped-net.fabricmc.yarn-1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-api:0.4.29+build.290-1.15@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-api-base:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-biomes-v1:0.1.5+3b05f68e0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-blockrenderlayer-v1:1.1.4+c6a8ea890c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-commands-v0:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-containers-v0:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-content-registries-v0:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-crash-report-info-v1:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-dimensions-v1:0.2.4+203491ea0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-events-interaction-v0:0.2.7+a1bd31180c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-events-lifecycle-v0:0.1.2+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-item-groups-v0:0.1.6+ec40b2e10c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-keybindings-v0:0.1.1+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-loot-tables-v1:0.1.5+e08a73050c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-mining-levels-v0:0.1.1+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-models-v0:0.1.0+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-networking-blockentity-v0:0.2.3+e08a73050c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-networking-v0:0.1.7+12515ed90c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-object-builders-v0:0.1.3+e4c9a9c30c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-particles-v1:0.1.1+dfdb52d60c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-registry-sync-v0:0.2.6+f3d8141b0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-api-v1:0.2.9+aea78a250c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-indigo:0.2.22+203491ea0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-renderer-registries-v1:2.0.1+5a0f9a600c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-data-attachment-v1:0.1.3+b7f9825d0c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-fluids-v1:0.1.6+12515ed90c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-v0:1.1.0+534104900c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-rendering-v1:0.1.0+534104900c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-resource-loader-v0:0.1.10+06c939b30c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-tag-extensions-v0:0.1.3+abd915800c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc.fabric-api:fabric-textures-v0:1.0.4+821cdba70c@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.fabricmc:fabric-loader:0.8.2+build.194@net.fabricmc.yarn.1_15_2.1.15.2+build.1-v2" level="project" /> | ||||
|     <orderEntry type="library" scope="RUNTIME" name="Gradle: net.fabricmc:dev-launch-injector:0.2.0+build.6" level="project" /> | ||||
|   </component> | ||||
|   <component name="TestModuleProperties" production-module="Fabric.main" /> | ||||
| </module> | ||||
							
								
								
									
										14
									
								
								.idea/modules/Forge.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										14
									
								
								.idea/modules/Forge.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,14 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.forge" externalSystemModuleVersion="1.0.2" linkedProjectId="Forge" linkedProjectPath="$MODULE_DIR$/../../Forge" rootProjectPath="$MODULE_DIR$/../../Forge" /> | ||||
|   <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Forge"> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Forge/.gradle" /> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Forge/build" /> | ||||
|       <excludeFolder url="file://$MODULE_DIR$/../../Forge/run" /> | ||||
|     </content> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|   </component> | ||||
| </module> | ||||
							
								
								
									
										103
									
								
								.idea/modules/Forge.main.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										103
									
								
								.idea/modules/Forge.main.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,103 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.forge" externalSystemModuleType="sourceSet" externalSystemModuleVersion="1.0.2" linkedProjectId="Forge:main" linkedProjectPath="$MODULE_DIR$/../../Forge" rootProjectPath="$MODULE_DIR$/../../Forge" /> | ||||
|   <component name="FacetManager"> | ||||
|     <facet type="minecraft" name="Minecraft"> | ||||
|       <configuration> | ||||
|         <autoDetectTypes> | ||||
|           <platformType>FORGE</platformType> | ||||
|           <platformType>MCP</platformType> | ||||
|         </autoDetectTypes> | ||||
|       </configuration> | ||||
|     </facet> | ||||
|   </component> | ||||
|   <component name="McpModuleSettings"> | ||||
|     <option name="mappingFile" value="C:\Projects\Mods\Minecraft-Window-Title\Forge\build\createMcpToSrg\output.tsrg" /> | ||||
|     <option name="mcpVersion" value="snapshot_20200130-1.15.1" /> | ||||
|     <option name="minecraftVersion" value="1.15.2" /> | ||||
|     <option name="srgType" value="TSRG" /> | ||||
|   </component> | ||||
|   <component name="NewModuleRootManager"> | ||||
|     <output url="file://$MODULE_DIR$/../../Forge/build/classes/java/main" /> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Forge/src/main"> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Forge/src/main/java" isTestSource="false" /> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Forge/src/main/resources" type="java-resource" /> | ||||
|     </content> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forge:1.15.2-31.0.14_mapped_snapshot_20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forge:launcher:1.15.2-31.0.14_mapped_snapshot_20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:client:extra:1.15.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:accesstransformers:shadowed:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:eventbus:service:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:coremods:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forgespi:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:modlauncher:5.0.0-milestone.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:modlauncher:api:5.0.0-milestone.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:mergetool:api:1.0.9" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:mappings_snapshot:zip:20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-commons:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-tree:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:grossjava9hacks:1.1.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:unsafe:0.2.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.electronwill.night-config:toml:3.6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.electronwill.night-config:core:3.6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline:3.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.maven:maven-artifact:3.6.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.jodah:typetools:0.6.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecrell:terminalconsoleappender:1.2.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-core:2.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-api:2.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.sf.jopt-simple:jopt-simple:5.0.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:patchy:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: oshi-project:oshi-core:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:jna:4.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:platform:3.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.ibm.icu:icu4j-core-mojang:51.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:javabridge:1.0.22" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: io.netty:netty-all:4.1.25.Final" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-io:commons-io:2.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpclient:4.3.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.10" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jutils:jutils:1.0.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:brigadier:1.0.17" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:datafixerupper:2.0.24" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:authlib:1.5.25" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-compress:1.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.1.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.3.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: it.unimi.dsi:fastutil:8.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:natives-windows:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.antlr:antlr4-runtime:4.7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-util:6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-analysis:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.codehaus.plexus:plexus-utils:3.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline-reader:3.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-linux:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-osx:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-windows:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline-terminal:3.12.1" level="project" /> | ||||
|   </component> | ||||
| </module> | ||||
							
								
								
									
										105
									
								
								.idea/modules/Forge.test.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										105
									
								
								.idea/modules/Forge.test.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,105 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module version="4"> | ||||
|   <component name="ExternalSystem" externalSystem="GRADLE" externalSystemModuleGroup="chylex.customwindowtitle.forge" externalSystemModuleType="sourceSet" externalSystemModuleVersion="1.0.2" linkedProjectId="Forge:test" linkedProjectPath="$MODULE_DIR$/../../Forge" rootProjectPath="$MODULE_DIR$/../../Forge" /> | ||||
|   <component name="FacetManager"> | ||||
|     <facet type="minecraft" name="Minecraft"> | ||||
|       <configuration> | ||||
|         <autoDetectTypes> | ||||
|           <platformType>FORGE</platformType> | ||||
|           <platformType>MCP</platformType> | ||||
|         </autoDetectTypes> | ||||
|       </configuration> | ||||
|     </facet> | ||||
|   </component> | ||||
|   <component name="McpModuleSettings"> | ||||
|     <option name="mappingFile" value="C:\Projects\Mods\Minecraft-Window-Title\Forge\build\createMcpToSrg\output.tsrg" /> | ||||
|     <option name="mcpVersion" value="snapshot_20200130-1.15.1" /> | ||||
|     <option name="minecraftVersion" value="1.15.2" /> | ||||
|     <option name="srgType" value="TSRG" /> | ||||
|   </component> | ||||
|   <component name="NewModuleRootManager"> | ||||
|     <output-test url="file://$MODULE_DIR$/../../Forge/build/classes/java/test" /> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$/../../Forge/src/test"> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Forge/src/test/java" isTestSource="true" /> | ||||
|       <sourceFolder url="file://$MODULE_DIR$/../../Forge/src/test/resources" type="java-test-resource" /> | ||||
|     </content> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|     <orderEntry type="module" module-name="Forge.main" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forge:1.15.2-31.0.14_mapped_snapshot_20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forge:launcher:1.15.2-31.0.14_mapped_snapshot_20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:client:extra:1.15.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:accesstransformers:shadowed:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:eventbus:service:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:coremods:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:forgespi:2.0.0-milestone.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:modlauncher:5.0.0-milestone.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:modlauncher:api:5.0.0-milestone.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:mergetool:api:1.0.9" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraft:mappings_snapshot:zip:20200130-1.15.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-commons:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-tree:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: cpw.mods:grossjava9hacks:1.1.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecraftforge:unsafe:0.2.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.electronwill.night-config:toml:3.6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.electronwill.night-config:core:3.6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline:3.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.maven:maven-artifact:3.6.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.jodah:typetools:0.6.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.minecrell:terminalconsoleappender:1.2.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-core:2.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-api:2.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.sf.jopt-simple:jopt-simple:5.0.4" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:patchy:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: oshi-project:oshi-core:1.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:jna:4.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.dev.jna:platform:3.4.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.ibm.icu:icu4j-core-mojang:51.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:javabridge:1.0.22" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: io.netty:netty-all:4.1.25.Final" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-io:commons-io:2.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpclient:4.3.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.10" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jutils:jutils:1.0.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:brigadier:1.0.17" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:datafixerupper:2.0.24" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:authlib:1.5.25" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.commons:commons-compress:1.8.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.1.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.3.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: it.unimi.dsi:fastutil:8.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-jemalloc:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-openal:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-opengl:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-glfw:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-stb:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl-tinyfd:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.lwjgl:lwjgl:natives-windows:3.2.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: com.mojang:text2speech:natives-windows:1.11.3" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.antlr:antlr4-runtime:4.7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-util:6.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.ow2.asm:asm-analysis:7.2" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.codehaus.plexus:plexus-utils:3.2.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline-reader:3.12.1" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-linux:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-osx:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:natives-windows:2.0.5" level="project" /> | ||||
|     <orderEntry type="library" name="Gradle: org.jline:jline-terminal:3.12.1" level="project" /> | ||||
|   </component> | ||||
|   <component name="TestModuleProperties" production-module="Forge.main" /> | ||||
| </module> | ||||
							
								
								
									
										13
									
								
								.idea/runConfigurations/Build___Merge.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								.idea/runConfigurations/Build___Merge.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| <component name="ProjectRunConfigurationManager"> | ||||
|   <configuration default="false" name="Build & Merge" type="ShConfigurationType"> | ||||
|     <option name="INDEPENDENT_SCRIPT_PATH" value="false" /> | ||||
|     <option name="SCRIPT_PATH" value="$PROJECT_DIR$/BuildMerge.bat" /> | ||||
|     <option name="SCRIPT_OPTIONS" value="" /> | ||||
|     <option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" /> | ||||
|     <option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" /> | ||||
|     <option name="INDEPENDENT_INTERPRETER_PATH" value="true" /> | ||||
|     <option name="INTERPRETER_PATH" value="" /> | ||||
|     <option name="INTERPRETER_OPTIONS" value="" /> | ||||
|     <method v="2" /> | ||||
|   </configuration> | ||||
| </component> | ||||
							
								
								
									
										21
									
								
								.idea/runConfigurations/Fabric__runClient_.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										21
									
								
								.idea/runConfigurations/Fabric__runClient_.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,21 +0,0 @@ | ||||
| <component name="ProjectRunConfigurationManager"> | ||||
|   <configuration default="false" name="Fabric [runClient]" type="GradleRunConfiguration" factoryName="Gradle" nameIsGenerated="true"> | ||||
|     <ExternalSystemSettings> | ||||
|       <option name="executionName" /> | ||||
|       <option name="externalProjectPath" value="$PROJECT_DIR$/Fabric" /> | ||||
|       <option name="externalSystemIdString" value="GRADLE" /> | ||||
|       <option name="scriptParameters" value="" /> | ||||
|       <option name="taskDescriptions"> | ||||
|         <list /> | ||||
|       </option> | ||||
|       <option name="taskNames"> | ||||
|         <list> | ||||
|           <option value="runClient" /> | ||||
|         </list> | ||||
|       </option> | ||||
|       <option name="vmOptions" value="" /> | ||||
|     </ExternalSystemSettings> | ||||
|     <GradleScriptDebugEnabled>true</GradleScriptDebugEnabled> | ||||
|     <method v="2" /> | ||||
|   </configuration> | ||||
| </component> | ||||
							
								
								
									
										21
									
								
								.idea/runConfigurations/Forge__runClient_.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										21
									
								
								.idea/runConfigurations/Forge__runClient_.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,21 +0,0 @@ | ||||
| <component name="ProjectRunConfigurationManager"> | ||||
|   <configuration default="false" name="Forge [runClient]" type="GradleRunConfiguration" factoryName="Gradle" nameIsGenerated="true"> | ||||
|     <ExternalSystemSettings> | ||||
|       <option name="executionName" /> | ||||
|       <option name="externalProjectPath" value="$PROJECT_DIR$/Forge" /> | ||||
|       <option name="externalSystemIdString" value="GRADLE" /> | ||||
|       <option name="scriptParameters" value="" /> | ||||
|       <option name="taskDescriptions"> | ||||
|         <list /> | ||||
|       </option> | ||||
|       <option name="taskNames"> | ||||
|         <list> | ||||
|           <option value="runClient" /> | ||||
|         </list> | ||||
|       </option> | ||||
|       <option name="vmOptions" value="" /> | ||||
|     </ExternalSystemSettings> | ||||
|     <GradleScriptDebugEnabled>true</GradleScriptDebugEnabled> | ||||
|     <method v="2" /> | ||||
|   </configuration> | ||||
| </component> | ||||
| @@ -1 +0,0 @@ | ||||
| python BuildMerge.py | ||||
| @@ -1,61 +0,0 @@ | ||||
| import subprocess | ||||
| import platform | ||||
| import sys | ||||
| import os | ||||
| import time | ||||
| import shutil | ||||
| import zipfile | ||||
|  | ||||
| root = os.path.abspath(sys.path[0]) | ||||
| builds = os.path.join(root, "Build") | ||||
| combined = os.path.join(builds, "Combined") | ||||
| outputjar = "CustomWindowTitle.jar" | ||||
|  | ||||
| gradlew = "gradlew.bat" if platform.system() == "Windows" else "gradlew" | ||||
|  | ||||
| def build(folder): | ||||
|     separator = "========={}".format("=" * len(folder)) | ||||
|      | ||||
|     print(separator) | ||||
|     print("Building {}".format(folder)) | ||||
|     print(separator) | ||||
|      | ||||
|     libs = os.path.join(root, folder, "build", "libs") | ||||
|     shutil.rmtree(libs) | ||||
|      | ||||
|     os.chdir(os.path.join(root, folder)) | ||||
|     subprocess.run([gradlew, "build"]) | ||||
|      | ||||
|     for fname in os.listdir(libs): | ||||
|         if "-dev" not in fname: | ||||
|             global outputjar | ||||
|             outputjar = fname | ||||
|              | ||||
|             jar = os.path.join(builds, "{}.{}".format(folder, fname)) | ||||
|             shutil.copyfile(os.path.join(libs, fname), jar) | ||||
|              | ||||
|             jar = zipfile.ZipFile(jar) | ||||
|             jar.extractall(combined) | ||||
|             jar.close() | ||||
|              | ||||
|             break | ||||
|  | ||||
| if os.path.isdir(builds): | ||||
|     shutil.rmtree(builds) | ||||
|     time.sleep(0.25) | ||||
|  | ||||
| os.mkdir(builds) | ||||
| os.mkdir(combined) | ||||
|  | ||||
| # Forge must run last to overwrite MANIFEST.MF | ||||
| build("Fabric") | ||||
| build("Forge") | ||||
|  | ||||
| os.chdir(builds) | ||||
|  | ||||
| with zipfile.ZipFile(outputjar, "w", compression = zipfile.ZIP_DEFLATED, compresslevel = 9) as jar: | ||||
|     for root, dirs, files in os.walk(combined): | ||||
|         for fname in files: | ||||
|             fname = os.path.join(root, fname) | ||||
|             fname = os.path.normpath(fname) | ||||
|             jar.write(fname, os.path.relpath(fname, combined)) | ||||
							
								
								
									
										9
									
								
								Fabric/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								Fabric/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +0,0 @@ | ||||
| .idea/codeStyles/ | ||||
| .idea/inspectionProfiles/ | ||||
| .idea/modules/ | ||||
| .idea/runConfigurations/ | ||||
|  | ||||
| .idea/$CACHE_FILE$ | ||||
| .idea/dictionaries | ||||
| .idea/jarRepositories.xml | ||||
| .idea/workspace.xml | ||||
							
								
								
									
										2
									
								
								Fabric/.idea/Fabric.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								Fabric/.idea/Fabric.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,2 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="JAVA_MODULE" version="4" /> | ||||
							
								
								
									
										6
									
								
								Fabric/.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Fabric/.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CompilerConfiguration"> | ||||
|     <bytecodeTargetLevel target="1.8" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										6
									
								
								Fabric/.idea/encodings.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Fabric/.idea/encodings.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> | ||||
|     <file url="PROJECT" charset="UTF-8" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										22
									
								
								Fabric/.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								Fabric/.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,22 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="GradleMigrationSettings" migrationVersion="1" /> | ||||
|   <component name="GradleSettings"> | ||||
|     <option name="linkedExternalProjectsSettings"> | ||||
|       <GradleProjectSettings> | ||||
|         <option name="delegatedBuild" value="true" /> | ||||
|         <option name="testRunner" value="GRADLE" /> | ||||
|         <option name="disableWrapperSourceDistributionNotification" value="true" /> | ||||
|         <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||
|         <option name="gradleJvm" value="1.8" /> | ||||
|         <option name="modules"> | ||||
|           <set> | ||||
|             <option value="$PROJECT_DIR$" /> | ||||
|           </set> | ||||
|         </option> | ||||
|         <option name="useQualifiedModuleNames" value="true" /> | ||||
|       </GradleProjectSettings> | ||||
|     </option> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										13
									
								
								Fabric/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								Fabric/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="EntryPointsManager"> | ||||
|     <list size="5"> | ||||
|       <item index="0" class="java.lang.String" itemvalue="net.minecraftforge.eventbus.api.SubscribeEvent" /> | ||||
|       <item index="1" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod" /> | ||||
|       <item index="2" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod.EventHandler" /> | ||||
|       <item index="3" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.Mixin" /> | ||||
|       <item index="4" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.injection.Inject" /> | ||||
|     </list> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> | ||||
| </project> | ||||
							
								
								
									
										6
									
								
								Fabric/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Fabric/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
| @@ -1,47 +0,0 @@ | ||||
| plugins{ | ||||
| 	id 'fabric-loom' version '0.2.6-SNAPSHOT' | ||||
| 	id 'maven-publish' | ||||
| } | ||||
|  | ||||
| sourceCompatibility = JavaVersion.VERSION_1_8 | ||||
| targetCompatibility = JavaVersion.VERSION_1_8 | ||||
|  | ||||
| archivesBaseName = project.archives_base_name | ||||
| version = project.mod_version | ||||
| group = project.maven_group | ||||
|  | ||||
| minecraft{} | ||||
|  | ||||
| dependencies{ | ||||
| 	minecraft "com.mojang:minecraft:${project.minecraft_version}" | ||||
| 	mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" | ||||
| 	modCompile "net.fabricmc:fabric-loader:${project.loader_version}" | ||||
| 	modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" | ||||
| } | ||||
|  | ||||
| processResources{ | ||||
| 	inputs.property "version", project.version | ||||
|  | ||||
| 	from(sourceSets.main.resources.srcDirs){ | ||||
| 		include "fabric.mod.json" | ||||
| 		expand "version": project.version | ||||
| 	} | ||||
|  | ||||
| 	from(sourceSets.main.resources.srcDirs){ | ||||
| 		exclude "fabric.mod.json" | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // fix jar file name | ||||
| version = 'v' + version | ||||
|  | ||||
| // ensure that the encoding is set to UTF-8, no matter what the system default is | ||||
| // this fixes some edge cases with special characters not displaying correctly | ||||
| // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html | ||||
| tasks.withType(JavaCompile){ | ||||
| 	options.encoding = "UTF-8" | ||||
| } | ||||
|  | ||||
| jar{ | ||||
| 	from "../LICENSE" | ||||
| } | ||||
							
								
								
									
										67
									
								
								Fabric/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Fabric/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| import net.fabricmc.loom.configuration.ide.RunConfigSettings | ||||
| import org.gradle.jvm.tasks.Jar | ||||
|  | ||||
| val modId: String by project | ||||
| val modSides: String by project | ||||
| val minecraftVersion: String by project | ||||
| val fabricVersion: String by project | ||||
|  | ||||
| plugins { | ||||
| 	id("fabric-loom") | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
| 	minecraft("com.mojang:minecraft:$minecraftVersion") | ||||
| 	modImplementation("net.fabricmc:fabric-loader:$fabricVersion") | ||||
| 	mappings(loom.officialMojangMappings()) | ||||
| } | ||||
|  | ||||
| loom { | ||||
| 	runs { | ||||
| 		val runJvmArgs: Set<String> by project | ||||
| 		 | ||||
| 		configureEach { | ||||
| 			runDir("../run") | ||||
| 			vmArgs(runJvmArgs) | ||||
| 			ideConfigGenerated(true) | ||||
| 		} | ||||
| 		 | ||||
| 		fun side(name: String, configure: RunConfigSettings.() -> Unit) { | ||||
| 			if (modSides == "both" || modSides == name) { | ||||
| 				named(name, configure) | ||||
| 			} | ||||
| 			else { | ||||
| 				findByName(name)?.let(::remove) | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		side("client") { | ||||
| 			configName = "Fabric Client" | ||||
| 			client() | ||||
| 		} | ||||
| 		 | ||||
| 		side("server") { | ||||
| 			configName = "Fabric Server" | ||||
| 			server() | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	mixin { | ||||
| 		defaultRefmapName.set("$modId.refmap.json") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| tasks.processResources { | ||||
| 	filesMatching("fabric.mod.json") { | ||||
| 		expand(inputs.properties) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| tasks.register<Jar>("uncompressedRemapJar") { | ||||
| 	group = "fabric" | ||||
| 	 | ||||
| 	from(tasks.remapJar.map { it.outputs.files.map(::zipTree) }) | ||||
| 	 | ||||
| 	archiveClassifier.set("uncompressed") | ||||
| 	entryCompression = ZipEntryCompression.STORED // Reduces size of multiloader jar. | ||||
| } | ||||
| @@ -1,17 +0,0 @@ | ||||
| # Done to increase the memory available to gradle. | ||||
| org.gradle.jvmargs=-Xmx1G | ||||
|  | ||||
| # Fabric Properties | ||||
| 	# check these on https://fabricmc.net/use | ||||
| 	minecraft_version=1.15.2 | ||||
| 	yarn_mappings=1.15.2+build.1 | ||||
| 	loader_version=0.7.5+build.178 | ||||
|  | ||||
| # Mod Properties | ||||
| 	mod_version = 1.1.1 | ||||
| 	maven_group = chylex.customwindowtitle.fabric | ||||
| 	archives_base_name = CustomWindowTitle | ||||
|  | ||||
| # 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.4.29+build.290-1.15 | ||||
							
								
								
									
										
											BIN
										
									
								
								Fabric/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Fabric/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										188
									
								
								Fabric/gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										188
									
								
								Fabric/gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -1,188 +0,0 @@ | ||||
| #!/usr/bin/env sh | ||||
|  | ||||
| # | ||||
| # Copyright 2015 the original author or authors. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #      https://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
|  | ||||
| ############################################################################## | ||||
| ## | ||||
| ##  Gradle start up script for UN*X | ||||
| ## | ||||
| ############################################################################## | ||||
|  | ||||
| # Attempt to set APP_HOME | ||||
| # Resolve links: $0 may be a link | ||||
| PRG="$0" | ||||
| # Need this for relative symlinks. | ||||
| while [ -h "$PRG" ] ; do | ||||
|     ls=`ls -ld "$PRG"` | ||||
|     link=`expr "$ls" : '.*-> \(.*\)$'` | ||||
|     if expr "$link" : '/.*' > /dev/null; then | ||||
|         PRG="$link" | ||||
|     else | ||||
|         PRG=`dirname "$PRG"`"/$link" | ||||
|     fi | ||||
| done | ||||
| SAVED="`pwd`" | ||||
| cd "`dirname \"$PRG\"`/" >/dev/null | ||||
| APP_HOME="`pwd -P`" | ||||
| cd "$SAVED" >/dev/null | ||||
|  | ||||
| APP_NAME="Gradle" | ||||
| APP_BASE_NAME=`basename "$0"` | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||
|  | ||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||
| MAX_FD="maximum" | ||||
|  | ||||
| warn () { | ||||
|     echo "$*" | ||||
| } | ||||
|  | ||||
| die () { | ||||
|     echo | ||||
|     echo "$*" | ||||
|     echo | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| # OS specific support (must be 'true' or 'false'). | ||||
| cygwin=false | ||||
| msys=false | ||||
| darwin=false | ||||
| nonstop=false | ||||
| case "`uname`" in | ||||
|   CYGWIN* ) | ||||
|     cygwin=true | ||||
|     ;; | ||||
|   Darwin* ) | ||||
|     darwin=true | ||||
|     ;; | ||||
|   MINGW* ) | ||||
|     msys=true | ||||
|     ;; | ||||
|   NONSTOP* ) | ||||
|     nonstop=true | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||||
|  | ||||
| # Determine the Java command to use to start the JVM. | ||||
| if [ -n "$JAVA_HOME" ] ; then | ||||
|     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||||
|         # IBM's JDK on AIX uses strange locations for the executables | ||||
|         JAVACMD="$JAVA_HOME/jre/sh/java" | ||||
|     else | ||||
|         JAVACMD="$JAVA_HOME/bin/java" | ||||
|     fi | ||||
|     if [ ! -x "$JAVACMD" ] ; then | ||||
|         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
|     fi | ||||
| else | ||||
|     JAVACMD="java" | ||||
|     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
| fi | ||||
|  | ||||
| # Increase the maximum file descriptors if we can. | ||||
| if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | ||||
|     MAX_FD_LIMIT=`ulimit -H -n` | ||||
|     if [ $? -eq 0 ] ; then | ||||
|         if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||||
|             MAX_FD="$MAX_FD_LIMIT" | ||||
|         fi | ||||
|         ulimit -n $MAX_FD | ||||
|         if [ $? -ne 0 ] ; then | ||||
|             warn "Could not set maximum file descriptor limit: $MAX_FD" | ||||
|         fi | ||||
|     else | ||||
|         warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| # For Darwin, add options to specify how the application appears in the dock | ||||
| if $darwin; then | ||||
|     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||||
| fi | ||||
|  | ||||
| # For Cygwin, switch paths to Windows format before running java | ||||
| if $cygwin ; then | ||||
|     APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||||
|     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||||
|     JAVACMD=`cygpath --unix "$JAVACMD"` | ||||
|  | ||||
|     # We build the pattern for arguments to be converted via cygpath | ||||
|     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||||
|     SEP="" | ||||
|     for dir in $ROOTDIRSRAW ; do | ||||
|         ROOTDIRS="$ROOTDIRS$SEP$dir" | ||||
|         SEP="|" | ||||
|     done | ||||
|     OURCYGPATTERN="(^($ROOTDIRS))" | ||||
|     # Add a user-defined pattern to the cygpath arguments | ||||
|     if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||||
|         OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||||
|     fi | ||||
|     # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||||
|     i=0 | ||||
|     for arg in "$@" ; do | ||||
|         CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||||
|         CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option | ||||
|  | ||||
|         if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition | ||||
|             eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||||
|         else | ||||
|             eval `echo args$i`="\"$arg\"" | ||||
|         fi | ||||
|         i=$((i+1)) | ||||
|     done | ||||
|     case $i in | ||||
|         (0) set -- ;; | ||||
|         (1) set -- "$args0" ;; | ||||
|         (2) set -- "$args0" "$args1" ;; | ||||
|         (3) set -- "$args0" "$args1" "$args2" ;; | ||||
|         (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||||
|         (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||||
|         (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||||
|         (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||||
|         (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||||
|         (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||||
|     esac | ||||
| fi | ||||
|  | ||||
| # Escape application args | ||||
| save () { | ||||
|     for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||||
|     echo " " | ||||
| } | ||||
| APP_ARGS=$(save "$@") | ||||
|  | ||||
| # Collect all arguments for the java command, following the shell quoting and substitution rules | ||||
| eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||||
|  | ||||
| # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | ||||
| if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | ||||
|   cd "$(dirname "$0")" | ||||
| fi | ||||
|  | ||||
| exec "$JAVACMD" "$@" | ||||
| @@ -1,10 +0,0 @@ | ||||
| pluginManagement { | ||||
|     repositories { | ||||
|         jcenter() | ||||
|         maven { | ||||
|             name = 'Fabric' | ||||
|             url = 'https://maven.fabricmc.net/' | ||||
|         } | ||||
|         gradlePluginPortal() | ||||
|     } | ||||
| } | ||||
| @@ -1,132 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.nio.file.StandardOpenOption; | ||||
| import java.util.Collections; | ||||
| import java.util.HashMap; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.Map; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| public final class TitleConfig{ | ||||
| 	private static final Map<String, String> DEFAULTS; | ||||
| 	 | ||||
| 	static{ | ||||
| 		final Map<String, String> defaults = new LinkedHashMap<>(); | ||||
| 		 | ||||
| 		defaults.put("title", "Minecraft {mcversion}"); | ||||
| 		defaults.put("icon16", ""); | ||||
| 		defaults.put("icon32", ""); | ||||
| 		 | ||||
| 		DEFAULTS = Collections.unmodifiableMap(defaults); | ||||
| 	} | ||||
| 	 | ||||
| 	public static TitleConfig read(final String folder){ | ||||
| 		final Path configFile = Paths.get(folder, "customwindowtitle-client.toml"); | ||||
| 		final Map<String, String> config = new LinkedHashMap<>(DEFAULTS); | ||||
| 		 | ||||
| 		try{ | ||||
| 			if (!Files.exists(configFile)){ | ||||
| 				Files.write(configFile, config.entrySet().stream().map(entry -> String.format("%s = '%s'", entry.getKey(), entry.getValue())).collect(Collectors.toList()), StandardCharsets.UTF_8); | ||||
| 			} | ||||
| 			else{ | ||||
| 				Files.readAllLines(configFile, StandardCharsets.UTF_8).stream().map(String::trim).filter(line -> !line.isEmpty()).forEach(line -> { | ||||
| 					final String[] split = line.split("=", 2); | ||||
| 					 | ||||
| 					if (split.length != 2){ | ||||
| 						throw new RuntimeException("CustomWindowTitle configuration has an invalid line: " + line); | ||||
| 					} | ||||
| 					 | ||||
| 					final String key = split[0].trim(); | ||||
| 					final String value = parseTrimmedValue(split[1].trim()); | ||||
| 					 | ||||
| 					if (config.containsKey(key)){ | ||||
| 						config.put(key, value); | ||||
| 					} | ||||
| 					else{ | ||||
| 						throw new RuntimeException("CustomWindowTitle configuration has an invalid key: " + key); | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration error", e); | ||||
| 		} | ||||
| 		 | ||||
| 		final String icon16 = config.get("icon16"); | ||||
| 		final String icon32 = config.get("icon32"); | ||||
| 		 | ||||
| 		final Path pathIcon16 = icon16.isEmpty() ? null : Paths.get(folder, icon16); | ||||
| 		final Path pathIcon32 = icon32.isEmpty() ? null : Paths.get(folder, icon32); | ||||
| 		 | ||||
| 		if ((pathIcon16 == null) != (pathIcon32 == null)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration specifies only one icon, both 'icon16' and 'icon32' must be set."); | ||||
| 		} | ||||
| 		 | ||||
| 		if (pathIcon16 != null && Files.notExists(pathIcon16)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle 16x16 icon not found: " + pathIcon16); | ||||
| 		} | ||||
| 		 | ||||
| 		if (pathIcon32 != null && Files.notExists(pathIcon32)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle 32x32 icon not found: " + pathIcon32); | ||||
| 		} | ||||
| 		 | ||||
| 		return new TitleConfig(config.get("title"), pathIcon16, pathIcon32); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String parseTrimmedValue(String value){ | ||||
| 		if (value.isEmpty()){ | ||||
| 			return value; | ||||
| 		} | ||||
| 		 | ||||
| 		final char surrounding = value.charAt(0); | ||||
| 		final int length = value.length(); | ||||
| 		 | ||||
| 		if (value.charAt(length - 1) == surrounding){ | ||||
| 			value = value.substring(1, length - 1); | ||||
| 			 | ||||
| 			if (surrounding == '"'){ | ||||
| 				value = value.replace("\\\"", "\"").replace("\\\\", "\\"); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return value; | ||||
| 	} | ||||
| 	 | ||||
| 	private final String title; | ||||
| 	private final Path icon16; | ||||
| 	private final Path icon32; | ||||
| 	 | ||||
| 	private TitleConfig(final String title, final Path icon16, final Path icon32){ | ||||
| 		this.title = title; | ||||
| 		this.icon16 = icon16; | ||||
| 		this.icon32 = icon32; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getTitle(){ | ||||
| 		return title; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean hasIcon(){ | ||||
| 		return icon16 != null && icon32 != null; | ||||
| 	} | ||||
| 	 | ||||
| 	public InputStream readIcon16(){ | ||||
| 		try{ | ||||
| 			return Files.newInputStream(icon16, StandardOpenOption.READ); | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle could not open the specified 16x16 icon: " + icon16, e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public InputStream readIcon32(){ | ||||
| 		try{ | ||||
| 			return Files.newInputStream(icon32, StandardOpenOption.READ); | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle could not open the specified 32x32 icon: " + icon16, e); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1,46 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
| import org.apache.commons.lang3.ArrayUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
|  | ||||
| public final class TitleParser{ | ||||
| 	private static final Pattern tokenRegex = Pattern.compile("\\{([a-z]+)(?::([^}]+))?}"); | ||||
| 	private static final Logger logger = LogManager.getLogger("CustomWindowTitle"); | ||||
| 	 | ||||
| 	public static String parse(final String input){ | ||||
| 		final StringBuffer buffer = new StringBuffer(); | ||||
| 		final Matcher matcher = tokenRegex.matcher(input); | ||||
| 		 | ||||
| 		while(matcher.find()){ | ||||
| 			final String token = matcher.group(1); | ||||
| 			final String[] args = StringUtils.split(matcher.group(2), ','); | ||||
| 			 | ||||
| 			String result = null; | ||||
| 			 | ||||
| 			try{ | ||||
| 				result = TitleTokens.getTokenFunction(token).apply(args == null ? ArrayUtils.EMPTY_STRING_ARRAY : args); | ||||
| 			}catch(final TokenException e){ | ||||
| 				logger.warn("Error processing token '" + token + "': " + e.getMessage()); | ||||
| 			}catch(final Throwable t){ | ||||
| 				logger.warn("Error processing token '" + token + "': " + t.getMessage(), t); | ||||
| 			} | ||||
| 			 | ||||
| 			if (result == null){ | ||||
| 				matcher.appendReplacement(buffer, input.substring(matcher.start(), matcher.end())); | ||||
| 			} | ||||
| 			else{ | ||||
| 				matcher.appendReplacement(buffer, result); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		matcher.appendTail(buffer); | ||||
| 		return buffer.toString(); | ||||
| 	} | ||||
| 	 | ||||
| 	// Static class | ||||
| 	 | ||||
| 	private TitleParser(){} | ||||
| } | ||||
| @@ -1,43 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.function.Function; | ||||
| import java.util.function.Supplier; | ||||
| import java.util.function.UnaryOperator; | ||||
|  | ||||
| public final class TitleTokens{ | ||||
| 	 | ||||
| 	// Registry | ||||
| 	 | ||||
| 	private static final Map<String, Function<String[], String>> tokenMap = new HashMap<>(); | ||||
| 	 | ||||
| 	public static void registerToken(final String token, final Function<String[], String> processor){ | ||||
| 		tokenMap.putIfAbsent(token, processor); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> getTokenFunction(final String token){ | ||||
| 		return tokenMap.getOrDefault(token, args -> null); | ||||
| 	} | ||||
| 	 | ||||
| 	// Arguments | ||||
| 	 | ||||
| 	public static Function<String[], String> noArgs(final Supplier<String> func){ | ||||
| 		return args -> args.length > 0 ? fail("expected no arguments, got " + args.length) : func.get(); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> oneArg(final UnaryOperator<String> func){ | ||||
| 		return args -> args.length != 1 ? fail("expected 1 argument, got " + args.length) : func.apply(args[0]); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> rangeArgs(final int min, final int max, final Function<String[], String> func){ | ||||
| 		return args -> args.length < min || args.length > max ? fail("expected between " + min + " and " + max + " arguments, got " + args.length) : func.apply(args); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String fail(final String message){ | ||||
| 		throw new TokenException(message); | ||||
| 	} | ||||
| 	 | ||||
| 	// Static class | ||||
| 	 | ||||
| 	private TitleTokens(){} | ||||
| } | ||||
| @@ -1,7 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| public class TokenException extends RuntimeException{ | ||||
| 	public TokenException(final String message){ | ||||
| 		super(message); | ||||
| 	} | ||||
| } | ||||
| @@ -1,30 +1,22 @@ | ||||
| package chylex.customwindowtitle.fabric; | ||||
|  | ||||
| import chylex.customwindowtitle.TitleChanger; | ||||
| import chylex.customwindowtitle.TitleConfig; | ||||
| import chylex.customwindowtitle.TitleParser; | ||||
| import chylex.customwindowtitle.data.CommonTokenData; | ||||
| import net.fabricmc.api.ClientModInitializer; | ||||
| import net.fabricmc.loader.api.FabricLoader; | ||||
| import net.minecraft.client.MinecraftClient; | ||||
| import net.minecraft.client.util.Window; | ||||
| import net.minecraft.client.Minecraft; | ||||
|  | ||||
| public class CustomWindowTitle implements ClientModInitializer{ | ||||
| public class CustomWindowTitle implements ClientModInitializer { | ||||
| 	private final TitleConfig config; | ||||
| 	 | ||||
| 	public CustomWindowTitle(){ | ||||
| 		config = TitleConfig.read(FabricLoader.getInstance().getConfigDirectory().getAbsolutePath()); | ||||
| 	public CustomWindowTitle() { | ||||
| 		config = TitleConfig.load(FabricLoader.getInstance().getConfigDir().toAbsolutePath().toString()); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void onInitializeClient(){ | ||||
| 		TokenData.register(); | ||||
| 		MinecraftClient.getInstance().execute(this::updateTitle); | ||||
| 	} | ||||
| 	 | ||||
| 	private void updateTitle(){ | ||||
| 		final Window window = MinecraftClient.getInstance().getWindow(); | ||||
| 		window.setTitle(TitleParser.parse(config.getTitle())); | ||||
| 		 | ||||
| 		if (config.hasIcon()){ | ||||
| 			window.setIcon(config.readIcon16(), config.readIcon32()); | ||||
| 		} | ||||
| 	public void onInitializeClient() { | ||||
| 		CommonTokenData.register(new TokenProvider()); | ||||
| 		Minecraft.getInstance().execute(() -> TitleChanger.setTitle(config)); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,22 +0,0 @@ | ||||
| package chylex.customwindowtitle.fabric; | ||||
| import chylex.customwindowtitle.TokenException; | ||||
| import net.fabricmc.loader.api.FabricLoader; | ||||
| import net.minecraft.SharedConstants; | ||||
| import static chylex.customwindowtitle.TitleTokens.noArgs; | ||||
| import static chylex.customwindowtitle.TitleTokens.oneArg; | ||||
| import static chylex.customwindowtitle.TitleTokens.registerToken; | ||||
|  | ||||
| final class TokenData{ | ||||
| 	static void register(){ | ||||
| 		registerToken("mcversion", noArgs(TokenData::getMinecraftVersion)); | ||||
| 		registerToken("modversion", oneArg(TokenData::getModVersion)); | ||||
| 	} | ||||
| 	 | ||||
| 	static String getMinecraftVersion(){ | ||||
| 		return SharedConstants.getGameVersion().getName(); | ||||
| 	} | ||||
| 	 | ||||
| 	static String getModVersion(final String modId){ | ||||
| 		return FabricLoader.getInstance().getModContainer(modId).orElseThrow(() -> new TokenException("mod info for '" + modId + "' not found")).getMetadata().getVersion().getFriendlyString(); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| package chylex.customwindowtitle.fabric; | ||||
|  | ||||
| import chylex.customwindowtitle.TokenException; | ||||
| import chylex.customwindowtitle.data.CommonTokenProvider; | ||||
| import net.fabricmc.loader.api.FabricLoader; | ||||
|  | ||||
| final class TokenProvider implements CommonTokenProvider { | ||||
| 	@Override | ||||
| 	public String getModVersion(final String modId) { | ||||
| 		return FabricLoader.getInstance() | ||||
| 			.getModContainer(modId) | ||||
| 			.orElseThrow(() -> new TokenException("mod info for '" + modId + "' not found")) | ||||
| 			.getMetadata() | ||||
| 			.getVersion() | ||||
| 			.getFriendlyString(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,14 +0,0 @@ | ||||
| package chylex.customwindowtitle.fabric.mixin; | ||||
| import net.minecraft.client.MinecraftClient; | ||||
| 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(MinecraftClient.class) | ||||
| public final class DisableVanillaTitle{ | ||||
| 	@Inject(method = "updateWindowTitle()V", at = @At("HEAD"), cancellable = true) | ||||
| 	private void updateTitle(final CallbackInfo info){ | ||||
| 		info.cancel(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,32 +1,35 @@ | ||||
| { | ||||
|   "schemaVersion": 1, | ||||
|   "id": "customwindowtitle", | ||||
|   "id": "${id}", | ||||
|   "name": "${name}", | ||||
|   "description": "${description}", | ||||
|   "version": "${version}", | ||||
|  | ||||
|   "name": "Custom Window Title", | ||||
|   "license": "${license}", | ||||
|    | ||||
|   "authors": [ | ||||
|     "chylex" | ||||
|     "${author}" | ||||
|   ], | ||||
|    | ||||
|   "contact": { | ||||
|     "homepage": "https://chylex.com", | ||||
|     "sources": "https://github.com/chylex/Minecraft-Window-Title", | ||||
|     "issues": "https://github.com/chylex/Minecraft-Window-Title/issues" | ||||
|     "issues": "${issuesURL}", | ||||
|     "sources": "${sourcesURL}" | ||||
|   }, | ||||
|  | ||||
|   "license": "Unlicense", | ||||
|  | ||||
|   "environment": "client", | ||||
|    | ||||
|   "environment": "${sidesForFabric}", | ||||
|   "entrypoints": { | ||||
|     "client": [ | ||||
|       "chylex.customwindowtitle.fabric.CustomWindowTitle" | ||||
|     ] | ||||
|   }, | ||||
|   "mixins": [ | ||||
|     "mixins.json" | ||||
|   ], | ||||
|  | ||||
|    | ||||
|   "mixins": [{ | ||||
|     "config": "${id}.mixins.json", | ||||
|     "environment": "${sidesForFabric}" | ||||
|   }], | ||||
|    | ||||
|   "depends": { | ||||
|     "fabricloader": ">=0.7.2", | ||||
|     "minecraft": ">=1.15" | ||||
|     "fabricloader": ">=${minimumFabricVersion}", | ||||
|     "minecraft": ">=${minimumMinecraftVersion}" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| { | ||||
|   "required": true, | ||||
|   "package": "chylex.customwindowtitle.fabric.mixin", | ||||
|   "compatibilityLevel": "JAVA_8", | ||||
|   "mixins": [ | ||||
|   ], | ||||
|   "client": [ | ||||
|     "DisableVanillaTitle" | ||||
|   ], | ||||
|   "injectors": { | ||||
|     "defaultRequire": 1 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										9
									
								
								Forge/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								Forge/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +0,0 @@ | ||||
| .idea/codeStyles/ | ||||
| .idea/inspectionProfiles/ | ||||
| .idea/modules/ | ||||
| .idea/runConfigurations/ | ||||
|  | ||||
| .idea/$CACHE_FILE$ | ||||
| .idea/dictionaries | ||||
| .idea/jarRepositories.xml | ||||
| .idea/workspace.xml | ||||
							
								
								
									
										2
									
								
								Forge/.idea/Forge.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								Forge/.idea/Forge.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,2 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="JAVA_MODULE" version="4" /> | ||||
							
								
								
									
										6
									
								
								Forge/.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Forge/.idea/compiler.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CompilerConfiguration"> | ||||
|     <bytecodeTargetLevel target="1.8" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										6
									
								
								Forge/.idea/encodings.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Forge/.idea/encodings.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> | ||||
|     <file url="PROJECT" charset="UTF-8" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										22
									
								
								Forge/.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								Forge/.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,22 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="GradleMigrationSettings" migrationVersion="1" /> | ||||
|   <component name="GradleSettings"> | ||||
|     <option name="linkedExternalProjectsSettings"> | ||||
|       <GradleProjectSettings> | ||||
|         <option name="delegatedBuild" value="true" /> | ||||
|         <option name="testRunner" value="GRADLE" /> | ||||
|         <option name="disableWrapperSourceDistributionNotification" value="true" /> | ||||
|         <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||
|         <option name="gradleJvm" value="1.8" /> | ||||
|         <option name="modules"> | ||||
|           <set> | ||||
|             <option value="$PROJECT_DIR$" /> | ||||
|           </set> | ||||
|         </option> | ||||
|         <option name="useQualifiedModuleNames" value="true" /> | ||||
|       </GradleProjectSettings> | ||||
|     </option> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										13
									
								
								Forge/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								Forge/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="EntryPointsManager"> | ||||
|     <list size="5"> | ||||
|       <item index="0" class="java.lang.String" itemvalue="net.minecraftforge.eventbus.api.SubscribeEvent" /> | ||||
|       <item index="1" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod" /> | ||||
|       <item index="2" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod.EventHandler" /> | ||||
|       <item index="3" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.Mixin" /> | ||||
|       <item index="4" class="java.lang.String" itemvalue="org.spongepowered.asm.mixin.injection.Inject" /> | ||||
|     </list> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> | ||||
| </project> | ||||
							
								
								
									
										6
									
								
								Forge/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Forge/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
| @@ -1,82 +0,0 @@ | ||||
| buildscript{ | ||||
|     repositories{ | ||||
|         maven{ url = 'https://files.minecraftforge.net/maven' } | ||||
|         jcenter() | ||||
|         mavenCentral() | ||||
|     } | ||||
|  | ||||
|     dependencies{ | ||||
|         classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true | ||||
|     } | ||||
| } | ||||
|  | ||||
| apply plugin: 'net.minecraftforge.gradle' | ||||
| apply plugin: 'eclipse' | ||||
|  | ||||
| def mcversion = "1.15.2" | ||||
| def forgeversion = "31.0.14" | ||||
|  | ||||
| def prefixName = 'displayName = ' | ||||
| def prefixVersion = 'version = ' | ||||
|  | ||||
| def metaLines = file('src/main/resources/META-INF/mods.toml').readLines() | ||||
| def metaName = metaLines.find { line -> line.startsWith(prefixName) }.substring(prefixName.length())[1..-2] | ||||
| def metaVersion = metaLines.find { line -> line.startsWith(prefixVersion) }.substring(prefixVersion.length())[1..-2] | ||||
|  | ||||
| group = 'chylex.customwindowtitle.forge' | ||||
| version = metaVersion | ||||
| archivesBaseName = metaName.replaceAll('\\s', '') | ||||
|  | ||||
| sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' | ||||
|  | ||||
| minecraft{ | ||||
|     mappings channel: 'snapshot', version: '20200130-1.15.1' | ||||
|  | ||||
|     runs{ | ||||
|         client{ | ||||
|             workingDirectory file('run') | ||||
|  | ||||
|             mods{ | ||||
|                 customwindowtitle{ | ||||
|                     source sourceSets.main | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         server{ | ||||
|             workingDirectory file('run') | ||||
|  | ||||
|             mods{ | ||||
|                 customwindowtitle{ | ||||
|                     source sourceSets.main | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| dependencies{ | ||||
|     minecraft 'net.minecraftforge:forge:' + mcversion + '-' + forgeversion | ||||
| } | ||||
|  | ||||
| jar{ | ||||
|     archiveName = archivesBaseName + '-1.15+v' + version + '.jar' | ||||
|  | ||||
|     from('../'){ | ||||
|         include 'LICENSE' | ||||
|     } | ||||
|  | ||||
|     manifest{ | ||||
|         attributes([ | ||||
|                 'Specification-Title'  : 'customwindowtitle', | ||||
|                 'Specification-Version': '1', | ||||
|                 'Specification-Vendor' : 'chylex', | ||||
|  | ||||
|                 'Implementation-Title'  : metaName, | ||||
|                 'Implementation-Version': metaVersion, | ||||
|                 'Implementation-Vendor' : 'chylex', | ||||
|  | ||||
|                 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") | ||||
|         ]) | ||||
|     } | ||||
| } | ||||
| @@ -1,4 +0,0 @@ | ||||
| # Sets default memory used for gradle commands. Can be overridden by user or command line properties. | ||||
| # This is required to provide enough memory for the Minecraft decompilation process. | ||||
| org.gradle.jvmargs=-Xmx3G | ||||
| org.gradle.daemon=false | ||||
							
								
								
									
										
											BIN
										
									
								
								Forge/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Forge/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,5 +0,0 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip | ||||
							
								
								
									
										172
									
								
								Forge/gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										172
									
								
								Forge/gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -1,172 +0,0 @@ | ||||
| #!/usr/bin/env sh | ||||
|  | ||||
| ############################################################################## | ||||
| ## | ||||
| ##  Gradle start up script for UN*X | ||||
| ## | ||||
| ############################################################################## | ||||
|  | ||||
| # Attempt to set APP_HOME | ||||
| # Resolve links: $0 may be a link | ||||
| PRG="$0" | ||||
| # Need this for relative symlinks. | ||||
| while [ -h "$PRG" ] ; do | ||||
|     ls=`ls -ld "$PRG"` | ||||
|     link=`expr "$ls" : '.*-> \(.*\)$'` | ||||
|     if expr "$link" : '/.*' > /dev/null; then | ||||
|         PRG="$link" | ||||
|     else | ||||
|         PRG=`dirname "$PRG"`"/$link" | ||||
|     fi | ||||
| done | ||||
| SAVED="`pwd`" | ||||
| cd "`dirname \"$PRG\"`/" >/dev/null | ||||
| APP_HOME="`pwd -P`" | ||||
| cd "$SAVED" >/dev/null | ||||
|  | ||||
| APP_NAME="Gradle" | ||||
| APP_BASE_NAME=`basename "$0"` | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS="" | ||||
|  | ||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||
| MAX_FD="maximum" | ||||
|  | ||||
| warn () { | ||||
|     echo "$*" | ||||
| } | ||||
|  | ||||
| die () { | ||||
|     echo | ||||
|     echo "$*" | ||||
|     echo | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| # OS specific support (must be 'true' or 'false'). | ||||
| cygwin=false | ||||
| msys=false | ||||
| darwin=false | ||||
| nonstop=false | ||||
| case "`uname`" in | ||||
|   CYGWIN* ) | ||||
|     cygwin=true | ||||
|     ;; | ||||
|   Darwin* ) | ||||
|     darwin=true | ||||
|     ;; | ||||
|   MINGW* ) | ||||
|     msys=true | ||||
|     ;; | ||||
|   NONSTOP* ) | ||||
|     nonstop=true | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||||
|  | ||||
| # Determine the Java command to use to start the JVM. | ||||
| if [ -n "$JAVA_HOME" ] ; then | ||||
|     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||||
|         # IBM's JDK on AIX uses strange locations for the executables | ||||
|         JAVACMD="$JAVA_HOME/jre/sh/java" | ||||
|     else | ||||
|         JAVACMD="$JAVA_HOME/bin/java" | ||||
|     fi | ||||
|     if [ ! -x "$JAVACMD" ] ; then | ||||
|         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
|     fi | ||||
| else | ||||
|     JAVACMD="java" | ||||
|     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
| fi | ||||
|  | ||||
| # Increase the maximum file descriptors if we can. | ||||
| if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | ||||
|     MAX_FD_LIMIT=`ulimit -H -n` | ||||
|     if [ $? -eq 0 ] ; then | ||||
|         if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||||
|             MAX_FD="$MAX_FD_LIMIT" | ||||
|         fi | ||||
|         ulimit -n $MAX_FD | ||||
|         if [ $? -ne 0 ] ; then | ||||
|             warn "Could not set maximum file descriptor limit: $MAX_FD" | ||||
|         fi | ||||
|     else | ||||
|         warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| # For Darwin, add options to specify how the application appears in the dock | ||||
| if $darwin; then | ||||
|     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||||
| fi | ||||
|  | ||||
| # For Cygwin, switch paths to Windows format before running java | ||||
| if $cygwin ; then | ||||
|     APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||||
|     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||||
|     JAVACMD=`cygpath --unix "$JAVACMD"` | ||||
|  | ||||
|     # We build the pattern for arguments to be converted via cygpath | ||||
|     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||||
|     SEP="" | ||||
|     for dir in $ROOTDIRSRAW ; do | ||||
|         ROOTDIRS="$ROOTDIRS$SEP$dir" | ||||
|         SEP="|" | ||||
|     done | ||||
|     OURCYGPATTERN="(^($ROOTDIRS))" | ||||
|     # Add a user-defined pattern to the cygpath arguments | ||||
|     if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||||
|         OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||||
|     fi | ||||
|     # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||||
|     i=0 | ||||
|     for arg in "$@" ; do | ||||
|         CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||||
|         CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option | ||||
|  | ||||
|         if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition | ||||
|             eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||||
|         else | ||||
|             eval `echo args$i`="\"$arg\"" | ||||
|         fi | ||||
|         i=$((i+1)) | ||||
|     done | ||||
|     case $i in | ||||
|         (0) set -- ;; | ||||
|         (1) set -- "$args0" ;; | ||||
|         (2) set -- "$args0" "$args1" ;; | ||||
|         (3) set -- "$args0" "$args1" "$args2" ;; | ||||
|         (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||||
|         (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||||
|         (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||||
|         (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||||
|         (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||||
|         (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||||
|     esac | ||||
| fi | ||||
|  | ||||
| # Escape application args | ||||
| save () { | ||||
|     for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||||
|     echo " " | ||||
| } | ||||
| APP_ARGS=$(save "$@") | ||||
|  | ||||
| # Collect all arguments for the java command, following the shell quoting and substitution rules | ||||
| eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||||
|  | ||||
| # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | ||||
| if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | ||||
|   cd "$(dirname "$0")" | ||||
| fi | ||||
|  | ||||
| exec "$JAVACMD" "$@" | ||||
							
								
								
									
										84
									
								
								Forge/gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								Forge/gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @@ -1,84 +0,0 @@ | ||||
| @if "%DEBUG%" == "" @echo off | ||||
| @rem ########################################################################## | ||||
| @rem | ||||
| @rem  Gradle startup script for Windows | ||||
| @rem | ||||
| @rem ########################################################################## | ||||
|  | ||||
| @rem Set local scope for the variables with windows NT shell | ||||
| if "%OS%"=="Windows_NT" setlocal | ||||
|  | ||||
| set DIRNAME=%~dp0 | ||||
| if "%DIRNAME%" == "" set DIRNAME=. | ||||
| set APP_BASE_NAME=%~n0 | ||||
| set APP_HOME=%DIRNAME% | ||||
|  | ||||
| @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| set DEFAULT_JVM_OPTS= | ||||
|  | ||||
| @rem Find java.exe | ||||
| if defined JAVA_HOME goto findJavaFromJavaHome | ||||
|  | ||||
| set JAVA_EXE=java.exe | ||||
| %JAVA_EXE% -version >NUL 2>&1 | ||||
| if "%ERRORLEVEL%" == "0" goto init | ||||
|  | ||||
| echo. | ||||
| echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||||
| echo. | ||||
| echo Please set the JAVA_HOME variable in your environment to match the | ||||
| echo location of your Java installation. | ||||
|  | ||||
| goto fail | ||||
|  | ||||
| :findJavaFromJavaHome | ||||
| set JAVA_HOME=%JAVA_HOME:"=% | ||||
| set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||||
|  | ||||
| if exist "%JAVA_EXE%" goto init | ||||
|  | ||||
| echo. | ||||
| echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||||
| echo. | ||||
| echo Please set the JAVA_HOME variable in your environment to match the | ||||
| echo location of your Java installation. | ||||
|  | ||||
| goto fail | ||||
|  | ||||
| :init | ||||
| @rem Get command-line arguments, handling Windows variants | ||||
|  | ||||
| if not "%OS%" == "Windows_NT" goto win9xME_args | ||||
|  | ||||
| :win9xME_args | ||||
| @rem Slurp the command line arguments. | ||||
| set CMD_LINE_ARGS= | ||||
| set _SKIP=2 | ||||
|  | ||||
| :win9xME_args_slurp | ||||
| if "x%~1" == "x" goto execute | ||||
|  | ||||
| set CMD_LINE_ARGS=%* | ||||
|  | ||||
| :execute | ||||
| @rem Setup the command line | ||||
|  | ||||
| set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||||
|  | ||||
| @rem Execute Gradle | ||||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||||
|  | ||||
| :end | ||||
| @rem End local scope for the variables with windows NT shell | ||||
| if "%ERRORLEVEL%"=="0" goto mainEnd | ||||
|  | ||||
| :fail | ||||
| rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||||
| rem the _cmd.exe /c_ return code! | ||||
| if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||||
| exit /b 1 | ||||
|  | ||||
| :mainEnd | ||||
| if "%OS%"=="Windows_NT" endlocal | ||||
|  | ||||
| :omega | ||||
| @@ -1,132 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.nio.file.StandardOpenOption; | ||||
| import java.util.Collections; | ||||
| import java.util.HashMap; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.Map; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| public final class TitleConfig{ | ||||
| 	private static final Map<String, String> DEFAULTS; | ||||
| 	 | ||||
| 	static{ | ||||
| 		final Map<String, String> defaults = new LinkedHashMap<>(); | ||||
| 		 | ||||
| 		defaults.put("title", "Minecraft {mcversion}"); | ||||
| 		defaults.put("icon16", ""); | ||||
| 		defaults.put("icon32", ""); | ||||
| 		 | ||||
| 		DEFAULTS = Collections.unmodifiableMap(defaults); | ||||
| 	} | ||||
| 	 | ||||
| 	public static TitleConfig read(final String folder){ | ||||
| 		final Path configFile = Paths.get(folder, "customwindowtitle-client.toml"); | ||||
| 		final Map<String, String> config = new LinkedHashMap<>(DEFAULTS); | ||||
| 		 | ||||
| 		try{ | ||||
| 			if (!Files.exists(configFile)){ | ||||
| 				Files.write(configFile, config.entrySet().stream().map(entry -> String.format("%s = '%s'", entry.getKey(), entry.getValue())).collect(Collectors.toList()), StandardCharsets.UTF_8); | ||||
| 			} | ||||
| 			else{ | ||||
| 				Files.readAllLines(configFile, StandardCharsets.UTF_8).stream().map(String::trim).filter(line -> !line.isEmpty()).forEach(line -> { | ||||
| 					final String[] split = line.split("=", 2); | ||||
| 					 | ||||
| 					if (split.length != 2){ | ||||
| 						throw new RuntimeException("CustomWindowTitle configuration has an invalid line: " + line); | ||||
| 					} | ||||
| 					 | ||||
| 					final String key = split[0].trim(); | ||||
| 					final String value = parseTrimmedValue(split[1].trim()); | ||||
| 					 | ||||
| 					if (config.containsKey(key)){ | ||||
| 						config.put(key, value); | ||||
| 					} | ||||
| 					else{ | ||||
| 						throw new RuntimeException("CustomWindowTitle configuration has an invalid key: " + key); | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration error", e); | ||||
| 		} | ||||
| 		 | ||||
| 		final String icon16 = config.get("icon16"); | ||||
| 		final String icon32 = config.get("icon32"); | ||||
| 		 | ||||
| 		final Path pathIcon16 = icon16.isEmpty() ? null : Paths.get(folder, icon16); | ||||
| 		final Path pathIcon32 = icon32.isEmpty() ? null : Paths.get(folder, icon32); | ||||
| 		 | ||||
| 		if ((pathIcon16 == null) != (pathIcon32 == null)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration specifies only one icon, both 'icon16' and 'icon32' must be set."); | ||||
| 		} | ||||
| 		 | ||||
| 		if (pathIcon16 != null && Files.notExists(pathIcon16)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle 16x16 icon not found: " + pathIcon16); | ||||
| 		} | ||||
| 		 | ||||
| 		if (pathIcon32 != null && Files.notExists(pathIcon32)){ | ||||
| 			throw new RuntimeException("CustomWindowTitle 32x32 icon not found: " + pathIcon32); | ||||
| 		} | ||||
| 		 | ||||
| 		return new TitleConfig(config.get("title"), pathIcon16, pathIcon32); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String parseTrimmedValue(String value){ | ||||
| 		if (value.isEmpty()){ | ||||
| 			return value; | ||||
| 		} | ||||
| 		 | ||||
| 		final char surrounding = value.charAt(0); | ||||
| 		final int length = value.length(); | ||||
| 		 | ||||
| 		if (value.charAt(length - 1) == surrounding){ | ||||
| 			value = value.substring(1, length - 1); | ||||
| 			 | ||||
| 			if (surrounding == '"'){ | ||||
| 				value = value.replace("\\\"", "\"").replace("\\\\", "\\"); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return value; | ||||
| 	} | ||||
| 	 | ||||
| 	private final String title; | ||||
| 	private final Path icon16; | ||||
| 	private final Path icon32; | ||||
| 	 | ||||
| 	private TitleConfig(final String title, final Path icon16, final Path icon32){ | ||||
| 		this.title = title; | ||||
| 		this.icon16 = icon16; | ||||
| 		this.icon32 = icon32; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getTitle(){ | ||||
| 		return title; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean hasIcon(){ | ||||
| 		return icon16 != null && icon32 != null; | ||||
| 	} | ||||
| 	 | ||||
| 	public InputStream readIcon16(){ | ||||
| 		try{ | ||||
| 			return Files.newInputStream(icon16, StandardOpenOption.READ); | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle could not open the specified 16x16 icon: " + icon16, e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public InputStream readIcon32(){ | ||||
| 		try{ | ||||
| 			return Files.newInputStream(icon32, StandardOpenOption.READ); | ||||
| 		}catch(final IOException e){ | ||||
| 			throw new RuntimeException("CustomWindowTitle could not open the specified 32x32 icon: " + icon16, e); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1,7 +0,0 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| public class TokenException extends RuntimeException{ | ||||
| 	public TokenException(final String message){ | ||||
| 		super(message); | ||||
| 	} | ||||
| } | ||||
| @@ -1,40 +0,0 @@ | ||||
| package chylex.customwindowtitle.forge; | ||||
| import chylex.customwindowtitle.TitleConfig; | ||||
| import chylex.customwindowtitle.TitleParser; | ||||
| import net.minecraft.client.MainWindow; | ||||
| import net.minecraft.client.Minecraft; | ||||
| import net.minecraftforge.eventbus.api.SubscribeEvent; | ||||
| import net.minecraftforge.fml.ExtensionPoint; | ||||
| import net.minecraftforge.fml.ModLoadingContext; | ||||
| import net.minecraftforge.fml.common.Mod; | ||||
| import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; | ||||
| import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; | ||||
| import net.minecraftforge.fml.loading.FMLPaths; | ||||
| import net.minecraftforge.fml.network.FMLNetworkConstants; | ||||
| import org.apache.commons.lang3.tuple.Pair; | ||||
|  | ||||
| @Mod("customwindowtitle") | ||||
| public class CustomWindowTitle{ | ||||
| 	private final TitleConfig config; | ||||
| 	 | ||||
| 	public CustomWindowTitle(){ | ||||
| 		config = TitleConfig.read(FMLPaths.CONFIGDIR.get().toString()); | ||||
| 		ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.DISPLAYTEST, () -> Pair.of(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true)); | ||||
| 		FMLJavaModLoadingContext.get().getModEventBus().register(this); | ||||
| 		TokenData.register(); | ||||
| 	} | ||||
| 	 | ||||
| 	@SubscribeEvent | ||||
| 	public void onClientSetup(final FMLClientSetupEvent e){ | ||||
| 		e.getMinecraftSupplier().get().execute(this::updateTitle); | ||||
| 	} | ||||
| 	 | ||||
| 	private void updateTitle(){ | ||||
| 		final MainWindow window = Minecraft.getInstance().getMainWindow(); | ||||
| 		window.func_230148_b_(TitleParser.parse(config.getTitle())); | ||||
| 		 | ||||
| 		if (config.hasIcon()){ | ||||
| 			window.setWindowIcon(config.readIcon16(), config.readIcon32()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1,36 +0,0 @@ | ||||
| package chylex.customwindowtitle.forge; | ||||
| import chylex.customwindowtitle.TokenException; | ||||
| import net.minecraft.util.SharedConstants; | ||||
| import net.minecraftforge.fml.ModList; | ||||
| import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; | ||||
| import net.minecraftforge.forgespi.language.IModInfo; | ||||
| import static chylex.customwindowtitle.TitleTokens.noArgs; | ||||
| import static chylex.customwindowtitle.TitleTokens.oneArg; | ||||
| import static chylex.customwindowtitle.TitleTokens.registerToken; | ||||
|  | ||||
| final class TokenData{ | ||||
| 	static void register(){ | ||||
| 		registerToken("mcversion", noArgs(TokenData::getMinecraftVersion)); | ||||
| 		registerToken("modversion", oneArg(TokenData::getModVersion)); | ||||
| 	} | ||||
| 	 | ||||
| 	static String getMinecraftVersion(){ | ||||
| 		return SharedConstants.getVersion().getName(); | ||||
| 	} | ||||
| 	 | ||||
| 	static String getModVersion(final String modId){ | ||||
| 		final ModFileInfo file = ModList.get().getModFileById(modId); | ||||
| 		 | ||||
| 		if (file == null){ | ||||
| 			throw new TokenException("mod file for '" + modId + "' not found"); | ||||
| 		} | ||||
| 		 | ||||
| 		for(final IModInfo info : file.getMods()){ | ||||
| 			if (info.getModId().equals(modId)){ | ||||
| 				return info.getVersion().toString(); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		throw new TokenException("mod info for '" + modId + "' not found"); | ||||
| 	} | ||||
| } | ||||
| @@ -1,3 +0,0 @@ | ||||
| { | ||||
|   "CustomWindowTitle": "coremods/main.js" | ||||
| } | ||||
| @@ -1,26 +0,0 @@ | ||||
| modLoader = "javafml" | ||||
| loaderVersion = "[31,)" | ||||
|  | ||||
| authors = "chylex" | ||||
| license = "Unlicense" | ||||
| issueTrackerURL = "https://github.com/chylex/Minecraft-Window-Title/issues" | ||||
|  | ||||
| [[mods]] | ||||
| modId = "customwindowtitle" | ||||
| version = "1.1.1" | ||||
| displayName = "Custom Window Title" | ||||
| displayURL = "https://github.com/chylex/Minecraft-Window-Title" | ||||
|  | ||||
| [[dependencies.customwindowtitle]] | ||||
| modId = "minecraft" | ||||
| mandatory = true | ||||
| versionRange = "[1.15.2,)" | ||||
| ordering = "NONE" | ||||
| side = "CLIENT" | ||||
|  | ||||
| [[dependencies.customwindowtitle]] | ||||
| modId = "forge" | ||||
| mandatory = true | ||||
| versionRange = "[31,)" | ||||
| ordering = "NONE" | ||||
| side = "CLIENT" | ||||
| @@ -1,19 +0,0 @@ | ||||
| function initializeCoreMod(){ | ||||
|     var opcodes = Java.type("org.objectweb.asm.Opcodes"); | ||||
|     var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode"); | ||||
|  | ||||
|     return { | ||||
|         "CustomWindowTitle": { | ||||
|             "target": { | ||||
|                 "type": "METHOD", | ||||
|                 "class": "net.minecraft.client.Minecraft", | ||||
|                 "methodName": "func_230150_b_", | ||||
|                 "methodDesc": "()V" | ||||
|             }, | ||||
|             "transformer": function(methodNode){ | ||||
|                 methodNode.instructions.insert(new InsnNode(opcodes.RETURN)); | ||||
|                 return methodNode; | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| } | ||||
| @@ -1,7 +0,0 @@ | ||||
| { | ||||
|     "pack": { | ||||
|         "description": "Custom Window Title", | ||||
|         "pack_format": 5, | ||||
|         "_comment": "" | ||||
|     } | ||||
| } | ||||
| @@ -1,11 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="JAVA_MODULE" version="4"> | ||||
|   <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||||
|     <exclude-output /> | ||||
|     <content url="file://$MODULE_DIR$" /> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|     <orderEntry type="module" module-name="Fabric" /> | ||||
|     <orderEntry type="module" module-name="Forge" /> | ||||
|   </component> | ||||
| </module> | ||||
							
								
								
									
										51
									
								
								NeoForge/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								NeoForge/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| import net.neoforged.moddevgradle.dsl.RunModel | ||||
|  | ||||
| val modId: String by project | ||||
| val modSides: String by project | ||||
| val neoForgeVersion: String by project | ||||
|  | ||||
| plugins { | ||||
| 	id("net.neoforged.moddev") | ||||
| } | ||||
|  | ||||
| neoForge { | ||||
| 	version = neoForgeVersion | ||||
| 	 | ||||
| 	mods { | ||||
| 		register(modId) { | ||||
| 			sourceSet(sourceSets.main.get()) | ||||
| 			sourceSet(rootProject.sourceSets.main.get()) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	runs { | ||||
| 		val runJvmArgs: Set<String> by project | ||||
| 		 | ||||
| 		configureEach { | ||||
| 			gameDirectory = file("../run") | ||||
| 			jvmArguments.addAll(runJvmArgs) | ||||
| 		} | ||||
| 		 | ||||
| 		fun side(name: String, configure: RunModel.() -> Unit) { | ||||
| 			if (modSides == "both" || modSides == name) { | ||||
| 				register(name, configure) | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		side("client") { | ||||
| 			ideName.set("NeoForge Client") | ||||
| 			client() | ||||
| 		} | ||||
| 		 | ||||
| 		side("server") { | ||||
| 			ideName.set("NeoForge Server") | ||||
| 			server() | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| tasks.processResources { | ||||
| 	filesMatching("META-INF/neoforge.mods.toml") { | ||||
| 		expand(inputs.properties) | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package chylex.customwindowtitle.neoforge; | ||||
|  | ||||
| import chylex.customwindowtitle.TitleChanger; | ||||
| import chylex.customwindowtitle.TitleConfig; | ||||
| import chylex.customwindowtitle.data.CommonTokenData; | ||||
| import net.neoforged.bus.api.IEventBus; | ||||
| import net.neoforged.bus.api.SubscribeEvent; | ||||
| import net.neoforged.fml.common.Mod; | ||||
| import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; | ||||
| import net.neoforged.fml.loading.FMLPaths; | ||||
|  | ||||
| @Mod("customwindowtitle") | ||||
| public class CustomWindowTitle { | ||||
| 	 | ||||
| 	private final TitleConfig config; | ||||
| 	 | ||||
| 	public CustomWindowTitle(IEventBus eventBus) { | ||||
| 		config = TitleConfig.load(FMLPaths.CONFIGDIR.get().toString()); | ||||
| 		eventBus.addListener(this::onClientSetup); | ||||
| 	} | ||||
| 	 | ||||
| 	@SubscribeEvent | ||||
| 	public void onClientSetup(final FMLClientSetupEvent e) { | ||||
| 		CommonTokenData.register(new TokenProvider()); | ||||
| 		e.enqueueWork(() -> TitleChanger.setTitle(config)); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| package chylex.customwindowtitle.neoforge; | ||||
|  | ||||
| import chylex.customwindowtitle.TokenException; | ||||
| import chylex.customwindowtitle.data.CommonTokenProvider; | ||||
| import net.neoforged.fml.ModList; | ||||
| import net.neoforged.neoforgespi.language.IModFileInfo; | ||||
| import net.neoforged.neoforgespi.language.IModInfo; | ||||
|  | ||||
| final class TokenProvider implements CommonTokenProvider { | ||||
| 	@Override | ||||
| 	public String getModVersion(final String modId) { | ||||
| 		final IModFileInfo file = ModList.get().getModFileById(modId); | ||||
| 		 | ||||
| 		if (file == null) { | ||||
| 			throw new TokenException("mod file for '" + modId + "' not found"); | ||||
| 		} | ||||
| 		 | ||||
| 		for (final IModInfo info : file.getMods()) { | ||||
| 			if (info.getModId().equals(modId)) { | ||||
| 				return info.getVersion().toString(); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		throw new TokenException("mod info for '" + modId + "' not found"); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										30
									
								
								NeoForge/src/main/resources/META-INF/neoforge.mods.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								NeoForge/src/main/resources/META-INF/neoforge.mods.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| modLoader = "javafml" | ||||
| loaderVersion = "[0,)" | ||||
|  | ||||
| license = "${license}" | ||||
| issueTrackerURL = "${issuesURL}" | ||||
|  | ||||
| [[mods]] | ||||
| modId = "${id}" | ||||
| displayName = "${name}" | ||||
| displayURL = "${sourcesURL}" | ||||
| description = "${description}" | ||||
| authors = "${author}" | ||||
| version = "${version}" | ||||
|  | ||||
| [[mixins]] | ||||
| config = "${id}.mixins.json" | ||||
|  | ||||
| [[dependencies.${id}]] | ||||
| modId = "minecraft" | ||||
| type = "required" | ||||
| versionRange = "[${minimumMinecraftVersion},)" | ||||
| ordering = "NONE" | ||||
| side = "${sidesForNeoForge}" | ||||
|  | ||||
| [[dependencies.${id}]] | ||||
| modId = "neoforge" | ||||
| type = "required" | ||||
| versionRange = "[${minimumNeoForgeVersion},)" | ||||
| ordering = "NONE" | ||||
| side = "${sidesForNeoForge}" | ||||
							
								
								
									
										46
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								README.md
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| The mod supports [Forge](https://files.minecraftforge.net/) and [Fabric](https://fabricmc.net/) (*) mod loaders, **the same mod file will work in both**. Follow either mod loader's installation guide, then [download the mod file](https://www.curseforge.com/minecraft/mc-mods/custom-window-title/files) for your Minecraft version, and install it into the **.minecraft/mods** folder. | ||||
| The mod supports [NeoForge](https://neoforged.net/) and [Fabric](https://fabricmc.net/) (*) mod loaders. Follow either mod loader's installation guide, then download the mod file for your Minecraft version from [CurseForge](https://www.curseforge.com/minecraft/mc-mods/custom-window-title/files) or [Modrinth](https://modrinth.com/mod/custom-window-title/versions), and install it into the `.minecraft/mods` folder. | ||||
|  | ||||
| (*) Fabric API is **not** required. | ||||
|  | ||||
| @@ -10,12 +10,11 @@ The mod supports [Forge](https://files.minecraftforge.net/) and [Fabric](https:/ | ||||
|  | ||||
| Run the game once to create the configuration file. By default, the window title will be set to **Minecraft _<version>_**. Unlike in vanilla 1.15.2 onwards, the title will not change when you enter a world/server. | ||||
|  | ||||
| To change the title or icon, navigate to the **.minecraft/config** folder, and open **customwindowtitle-client.toml** in a text editor. You will see the following entries: | ||||
| To change the title or icon, navigate to the `.minecraft/config` folder, and open `customwindowtitle-client.toml` in a text editor. You will see the following entries: | ||||
|  | ||||
| ```toml | ||||
| title = 'Minecraft {mcversion}'   | ||||
| icon16 = ''   | ||||
| icon32 = '' | ||||
| icon = ''   | ||||
| ``` | ||||
|  | ||||
| Only edit text inside quotes or apostrophes. | ||||
| @@ -24,28 +23,38 @@ Only edit text inside quotes or apostrophes. | ||||
|  | ||||
| You can use the following special tokens in the _title_ configuration entry: | ||||
|  | ||||
| * **{mcversion}** - current Minecraft version | ||||
| * **{modversion:<span style="text-decoration: underline;">modid</span>}** - version of installed mod with the identifier _modid_ | ||||
| * `{mcversion}` - current Minecraft version | ||||
| * `{modversion:<mod_id>}` - version of installed mod with the identifier `<mod_id>` | ||||
| * `{username}` - current username | ||||
|  | ||||
| If any of the tokens aren't working, search the game log for **CustomWindowTitle** and you should see the reason, otherwise please file an issue on the [issue tracker](https://github.com/chylex/Minecraft-Window-Title/issues) with as many details as possible. | ||||
|  | ||||
| ### Changing the Icon | ||||
|  | ||||
| You must create two PNG images with sizes 16x16 and 32x32 pixels. The images **must be saved with transparency** even if they don't use it, **otherwise the icons will appear corrupted**. In Krita for example, you must check _Store alpha channel (transparency)_ when saving the image. | ||||
| #### Minecraft 1.21+ | ||||
|  | ||||
| The _icon16_ and _icon32_ configuration entries point to the PNG files relative to the **.minecraft/config** folder. For example, if you place the two icons in a folder named _customwindowtitle_ as follows: | ||||
| **This feature is only available in Custom Window Title 1.4.0 and newer.** | ||||
|  | ||||
| * `.minecraft/config/customwindowtitle-client.toml` | ||||
| * `.minecraft/config/customwindowtitle/icon16.png` | ||||
| * `.minecraft/config/customwindowtitle/icon32.png` | ||||
| Create a square PNG image whose dimensions are a power of two, such as 32x32 or 48x48. Put the PNG file into the `.minecraft/config` folder, either directly or into a subfolder. | ||||
|  | ||||
| Then, the two icon entries should look like this: | ||||
| The icon **must be saved with transparency** even if it doesn't use it, otherwise the icon may be corrupted or not appear at all. In Krita, for example, you must check _Store alpha channel (transparency)_ when saving. | ||||
|  | ||||
| The _icon_ configuration entry points to the PNG file relative to `.minecraft/config`. | ||||
|  | ||||
| For example, if you placed the icon into `.minecraft/config/customwindowtitle/icon.png`, then the configuration entry should look like this: | ||||
|  | ||||
| ```toml | ||||
| icon16 = 'customwindowtitle/icon16.png'   | ||||
| icon32 = 'customwindowtitle/icon32.png' | ||||
| icon = 'customwindowtitle/icon.png' | ||||
| ``` | ||||
|  | ||||
| #### Minecraft 1.20 | ||||
|  | ||||
| This feature is not available in Minecraft 1.20. | ||||
|  | ||||
| #### Minecraft 1.19 and older | ||||
|  | ||||
| Instead of one `icon` configuration entry, there are two configuration entries `icon16` and `icon32` for icons with dimensions 16x16 and 32x32. | ||||
|  | ||||
| ## Screenshots | ||||
|  | ||||
| These screenshots were taken using the following example configuration: | ||||
| @@ -58,6 +67,11 @@ title = "Minecraft {mcversion} - Custom Window Title {modversion:customwindowtit | ||||
|  | ||||
| # For Developers | ||||
|  | ||||
| Currently the common source files (package `chylex.customwindowtitle`) are just duplicated in the Forge and Fabric folders, and the jar files are combined with a horrible python script. If anyone has the time and patience to clean it up, I'd appreciate a Pull Request :P | ||||
| The mod sources are organized into 3 projects: | ||||
| - `src/` contains common source files and mixins | ||||
| - `Fabric/src/` contains source files specific for Fabric | ||||
| - `NeoForge/src/` contains source files specific for NeoForge | ||||
|  | ||||
| For now, you can build either separate Forge and Fabric projects using `gradlew build` in either folder, or run `python BuildMerge.py` to automatically build both and combine them into a single `.jar` file. | ||||
| The `assemble` Gradle task creates a single `.jar` file for both mod loaders in the `build/dist` folder. | ||||
|  | ||||
| When building against a Minecraft version that is only supported by one mod loader, open `gradle.properties` and comment or remove either `neoForgeVersion` or `fabricVersion` to disable them. | ||||
|   | ||||
							
								
								
									
										214
									
								
								build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,214 @@ | ||||
| @file:Suppress("ConvertLambdaToReference") | ||||
|  | ||||
| import org.gradle.jvm.tasks.Jar | ||||
|  | ||||
| val modId: String by project | ||||
| val modName: String by project | ||||
| val modDescription: String by project | ||||
| val modAuthor: String by project | ||||
| val modVersion: String by project | ||||
| val modLicense: String by project | ||||
| val modSourcesURL: String by project | ||||
| val modIssuesURL: String by project | ||||
| val modSides: String by project | ||||
|  | ||||
| val minecraftVersion: String by project | ||||
| val mixinVersion: String by project | ||||
|  | ||||
| val minimumMinecraftVersion: String by project | ||||
| val minimumNeoForgeVersion: String by project | ||||
| val minimumFabricVersion: String by project | ||||
|  | ||||
| val modNameStripped = modName.replace(" ", "") | ||||
|  | ||||
| plugins { | ||||
| 	idea | ||||
| 	`java-library` | ||||
| 	id("fabric-loom") | ||||
| } | ||||
|  | ||||
| idea { | ||||
| 	module { | ||||
| 		excludeDirs.add(file("gradle")) | ||||
| 		excludeDirs.add(file("run")) | ||||
| 		 | ||||
| 		if (findProject(":NeoForge") == null) { | ||||
| 			excludeDirs.add(file("NeoForge")) | ||||
| 		} | ||||
| 		 | ||||
| 		if (findProject(":Fabric") == null) { | ||||
| 			excludeDirs.add(file("Fabric")) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
|  | ||||
| base { | ||||
| 	archivesName.set("$modNameStripped-Common") | ||||
| } | ||||
|  | ||||
| loom { | ||||
| 	runs { | ||||
| 		named("client") { | ||||
| 			ideConfigGenerated(false) | ||||
| 		} | ||||
| 		 | ||||
| 		findByName("server")?.let(::remove) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
| 	minecraft("com.mojang:minecraft:$minecraftVersion") | ||||
| 	mappings(loom.officialMojangMappings()) | ||||
| 	 | ||||
| 	compileOnly("net.fabricmc:sponge-mixin:$mixinVersion") | ||||
| 	api("com.google.code.findbugs:jsr305:3.0.2") | ||||
| } | ||||
|  | ||||
| allprojects { | ||||
| 	group = "com.$modAuthor.$modId" | ||||
| 	version = modVersion | ||||
| 	 | ||||
| 	apply(plugin = "java-library") | ||||
| 	 | ||||
| 	extensions.getByType<JavaPluginExtension>().apply { | ||||
| 		toolchain.languageVersion.set(JavaLanguageVersion.of(21)) | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.withType<JavaCompile> { | ||||
| 		options.encoding = "UTF-8" | ||||
| 		options.release.set(21) | ||||
| 	} | ||||
| 	 | ||||
| 	val runJvmArgs = mutableSetOf<String>().also { | ||||
| 		extra["runJvmArgs"] = it | ||||
| 	} | ||||
| 	 | ||||
| 	if (project.javaToolchains.launcherFor(java.toolchain).map { it.metadata.vendor }.orNull == "JetBrains") { | ||||
| 		runJvmArgs.add("-XX:+AllowEnhancedClassRedefinition") | ||||
| 	} | ||||
| 	 | ||||
| 	dependencies { | ||||
| 		implementation("org.jetbrains:annotations:24.1.0") | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.withType<ProcessResources> { | ||||
| 		val (sidesForNeoForge, sidesForFabric) = when (modSides) { | ||||
| 			"both"   -> Pair("BOTH", "*") | ||||
| 			"client" -> Pair("CLIENT", "client") | ||||
| 			"server" -> Pair("SERVER", "server") | ||||
| 			else     -> error("Invalid modSides value: $modSides") | ||||
| 		} | ||||
| 		 | ||||
| 		inputs.property("id", modId) | ||||
| 		inputs.property("name", modName) | ||||
| 		inputs.property("description", modDescription) | ||||
| 		inputs.property("version", modVersion) | ||||
| 		inputs.property("author", modAuthor) | ||||
| 		inputs.property("license", modLicense) | ||||
| 		inputs.property("sourcesURL", modSourcesURL) | ||||
| 		inputs.property("issuesURL", modIssuesURL) | ||||
| 		inputs.property("sidesForNeoForge", sidesForNeoForge) | ||||
| 		inputs.property("sidesForFabric", sidesForFabric) | ||||
| 		inputs.property("minimumMinecraftVersion", minimumMinecraftVersion) | ||||
| 		inputs.property("minimumNeoForgeVersion", minimumNeoForgeVersion) | ||||
| 		inputs.property("minimumFabricVersion", minimumFabricVersion) | ||||
| 		 | ||||
| 		from(rootProject.file("logo.png")) { | ||||
| 			into("assets/$modId") | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.withType<AbstractArchiveTask>().configureEach { | ||||
| 		isPreserveFileTimestamps = false | ||||
| 		isReproducibleFileOrder = true | ||||
| 	} | ||||
| } | ||||
|  | ||||
| subprojects { | ||||
| 	dependencies { | ||||
| 		implementation(project(rootProject.path, configuration = "namedElements")) | ||||
| 	} | ||||
| 	 | ||||
| 	base { | ||||
| 		archivesName.set("$modNameStripped-${project.name}") | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.compileJava { | ||||
| 		source({ rootProject.sourceSets.main.get().allSource }) | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.processResources { | ||||
| 		from(rootProject.sourceSets.main.get().resources) { | ||||
| 			expand(inputs.properties) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.jar { | ||||
| 		entryCompression = ZipEntryCompression.STORED // Reduces size of multiloader jar. | ||||
| 		 | ||||
| 		manifest { | ||||
| 			packageInformation(modId, "$modNameStripped-${project.name}") | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	tasks.test { | ||||
| 		onlyIf { false } | ||||
| 	} | ||||
| } | ||||
|  | ||||
| fun Manifest.packageInformation(specificationTitle: String, implementationTitle: String) { | ||||
| 	attributes( | ||||
| 		"Specification-Title" to specificationTitle, | ||||
| 		"Specification-Vendor" to modAuthor, | ||||
| 		"Specification-Version" to "1", | ||||
| 		"Implementation-Title" to implementationTitle, | ||||
| 		"Implementation-Vendor" to modAuthor, | ||||
| 		"Implementation-Version" to modVersion, | ||||
| 	) | ||||
| } | ||||
|  | ||||
| val multiloaderSources = sourceSets.register("multiloader") | ||||
|  | ||||
| val multiloaderJar = tasks.register<Jar>("multiloaderJar") { | ||||
| 	group = "build" | ||||
| 	 | ||||
| 	archiveBaseName.set(modNameStripped) | ||||
| 	archiveVersion.set("$minecraftVersion+v$modVersion") | ||||
| 	 | ||||
| 	destinationDirectory = layout.buildDirectory.dir("dist") | ||||
| 	 | ||||
| 	fun includeJar(project: Project, jarTaskName: String) { | ||||
| 		from(project.tasks.named(jarTaskName).map { it.outputs }) { | ||||
| 			into("jars") | ||||
| 			rename { "$modNameStripped-${project.name}.jar" } | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	findProject(":NeoForge")?.let { includeJar(it, "jar") } | ||||
| 	findProject(":Fabric")?.let { includeJar(it, "uncompressedRemapJar") } | ||||
| 	 | ||||
| 	from(rootProject.file("LICENSE")) | ||||
| 	from(multiloaderSources.map { it.output }) | ||||
| 	 | ||||
| 	manifest { | ||||
| 		packageInformation("$modId-multiloader", modNameStripped) | ||||
| 		attributes("FMLModType" to "GAMELIBRARY") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| tasks.named<ProcessResources>("processMultiloaderResources").configure { | ||||
| 	inputs.property("group", project.group) | ||||
| 	inputs.property("jarPrefix", modNameStripped) | ||||
| 	 | ||||
| 	filesMatching(listOf("fabric.mod.json", "META-INF/jarjar/metadata.json")) { | ||||
| 		expand(inputs.properties) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| tasks.assemble { | ||||
| 	finalizedBy(multiloaderJar) | ||||
| } | ||||
							
								
								
									
										65
									
								
								docs/CURSEFORGE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								docs/CURSEFORGE.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| ## Installation | ||||
|  | ||||
| The mod supports [NeoForge](https://neoforged.net/) and [Fabric](https://fabricmc.net/) (*) mod loaders. Follow either mod loader's installation guide, then [download the mod file](https://www.curseforge.com/minecraft/mc-mods/custom-window-title/files) for your Minecraft version, and install it into the `.minecraft/mods` folder. | ||||
|  | ||||
| (*) Fabric API is **not** required. | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| Run the game once to create the configuration file. By default, the window title will be set to **Minecraft _<version>_**. Unlike in vanilla 1.15.2 onwards, the title will not change when you enter a world/server. | ||||
|  | ||||
| To change the title or icon, navigate to the `.minecraft/config` folder, and open `customwindowtitle-client.toml` in a text editor. You will see the following entries: | ||||
|  | ||||
| ```toml | ||||
| title = 'Minecraft {mcversion}'   | ||||
| icon16 = ''   | ||||
| icon32 = '' | ||||
| ``` | ||||
|  | ||||
| Only edit text inside quotes or apostrophes. | ||||
|  | ||||
| ### Changing the Title | ||||
|  | ||||
| You can use the following special tokens in the _title_ configuration entry: | ||||
|  | ||||
| * `{mcversion}` - current Minecraft version | ||||
| * `{modversion:mod_id}` - version of installed mod with the identifier `mod_id` | ||||
| * `{username}` - current username | ||||
|  | ||||
| If any of the tokens aren't working, search the game log for **CustomWindowTitle** and you should see the reason, otherwise please file an issue on the [issue tracker](https://github.com/chylex/Minecraft-Window-Title/issues) with as many details as possible. | ||||
|  | ||||
| ### Changing the Icon | ||||
|  | ||||
| #### Minecraft 1.21+ | ||||
|  | ||||
| **This feature is only available in Custom Window Title 1.4.0 and newer.** | ||||
|  | ||||
| Create a square PNG image whose dimensions are a power of two, such as 32x32 or 48x48. Put the PNG file into the `.minecraft/config` folder, either directly or into a subfolder. | ||||
|  | ||||
| The icon **must be saved with transparency** even if it doesn't use it, otherwise the icon may be corrupted or not appear at all. In Krita, for example, you must check _Store alpha channel (transparency)_ when saving. | ||||
|  | ||||
| The _icon_ configuration entry points to the PNG file relative to `.minecraft/config`. | ||||
|  | ||||
| For example, if you placed the icon into `.minecraft/config/customwindowtitle/icon.png`, then the configuration entry should look like this: | ||||
|  | ||||
| ```toml | ||||
| icon = 'customwindowtitle/icon.png' | ||||
| ``` | ||||
|  | ||||
| #### Minecraft 1.20 | ||||
|  | ||||
| This feature is not available in Minecraft 1.20. | ||||
|  | ||||
| #### Minecraft 1.19 and older | ||||
|  | ||||
| Instead of one `icon` configuration entry, there are two configuration entries `icon16` and `icon32` for icons with dimensions 16x16 and 32x32. | ||||
|  | ||||
| ## Screenshots | ||||
|  | ||||
| These screenshots were taken using the following example configuration: | ||||
|  | ||||
| ```toml | ||||
| title = "Minecraft {mcversion} - Custom Window Title {modversion:customwindowtitle}" | ||||
| ``` | ||||
|  | ||||
| <img src="https://media.forgecdn.net/attachments/277/212/customwindowtitlefabric.png" width="417" height="284"><img src="https://media.forgecdn.net/attachments/277/213/customwindowtitleforge.png" alt="" width="417" height="284"> | ||||
							
								
								
									
										66
									
								
								docs/MODRINTH.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								docs/MODRINTH.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| ## Installation | ||||
|  | ||||
| The mod supports [NeoForge](https://neoforged.net/) and [Fabric](https://fabricmc.net/) (*) mod loaders. Follow either mod loader's installation guide, then [download the mod file](https://modrinth.com/mod/custom-window-title/versions) for your Minecraft version, and install it into the `.minecraft/mods` folder. | ||||
|  | ||||
| (*) Fabric API is **not** required. | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| Run the game once to create the configuration file. By default, the window title will be set to **Minecraft _<version>_**. Unlike in vanilla 1.15.2 onwards, the title will not change when you enter a world/server. | ||||
|  | ||||
| To change the title or icon, navigate to the `.minecraft/config` folder, and open `customwindowtitle-client.toml` in a text editor. You will see the following entries: | ||||
|  | ||||
| ```toml | ||||
| title = 'Minecraft {mcversion}'   | ||||
| icon16 = ''   | ||||
| icon32 = '' | ||||
| ``` | ||||
|  | ||||
| Only edit text inside quotes or apostrophes. | ||||
|  | ||||
| ### Changing the Title | ||||
|  | ||||
| You can use the following special tokens in the _title_ configuration entry: | ||||
|  | ||||
| * `{mcversion}` - current Minecraft version | ||||
| * `{modversion:<mod_id>}` - version of installed mod with the identifier `<mod_id>` | ||||
| * `{username}` - current username | ||||
|  | ||||
| If any of the tokens aren't working, search the game log for **CustomWindowTitle** and you should see the reason, otherwise please file an issue on the [issue tracker](https://github.com/chylex/Minecraft-Window-Title/issues) with as many details as possible. | ||||
|  | ||||
| ### Changing the Icon | ||||
|  | ||||
| #### Minecraft 1.21+ | ||||
|  | ||||
| **This feature is only available in Custom Window Title 1.4.0 and newer.** | ||||
|  | ||||
| Create a square PNG image whose dimensions are a power of two, such as 32x32 or 48x48. Put the PNG file into the `.minecraft/config` folder, either directly or into a subfolder. | ||||
|  | ||||
| The icon **must be saved with transparency** even if it doesn't use it, otherwise the icon may be corrupted or not appear at all. In Krita, for example, you must check _Store alpha channel (transparency)_ when saving. | ||||
|  | ||||
| The _icon_ configuration entry points to the PNG file relative to `.minecraft/config`. | ||||
|  | ||||
| For example, if you placed the icon into `.minecraft/config/customwindowtitle/icon.png`, then the configuration entry should look like this: | ||||
|  | ||||
| ```toml | ||||
| icon = 'customwindowtitle/icon.png' | ||||
| ``` | ||||
|  | ||||
| #### Minecraft 1.20 | ||||
|  | ||||
| This feature is not available in Minecraft 1.20. | ||||
|  | ||||
| #### Minecraft 1.19 and older | ||||
|  | ||||
| Instead of one `icon` configuration entry, there are two configuration entries `icon16` and `icon32` for icons with dimensions 16x16 and 32x32. | ||||
|  | ||||
| ## Screenshots | ||||
|  | ||||
| These screenshots were taken using the following example configuration: | ||||
|  | ||||
| ```toml | ||||
| title = "Minecraft {mcversion} - Custom Window Title {modversion:customwindowtitle}" | ||||
| ``` | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										32
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| # Mod | ||||
| modId=customwindowtitle | ||||
| modName=Custom Window Title | ||||
| modDescription=Customize window title and icon. | ||||
| modAuthor=chylex | ||||
| modVersion=1.4.1 | ||||
| modLicense=Unlicense | ||||
| modSourcesURL=https://github.com/chylex/Minecraft-Window-Title | ||||
| modIssuesURL=https://github.com/chylex/Minecraft-Window-Title/issues | ||||
| modSides=client | ||||
|  | ||||
| # Dependencies | ||||
| minecraftVersion=1.21.4 | ||||
| neoForgeVersion=21.4.77-beta | ||||
| neoModDevVersion=2.0.76 | ||||
| fabricVersion=0.16.10 | ||||
| loomVersion=1.9 | ||||
| mixinVersion=0.12.5+mixin.0.8.5 | ||||
|  | ||||
| # https://projects.neoforged.net/neoforged/neoforge | ||||
| # https://projects.neoforged.net/neoforged/moddevgradle | ||||
| # https://fabricmc.net/develop/ | ||||
| # https://github.com/FabricMC/fabric-loom/releases | ||||
|  | ||||
| # Constraints | ||||
| minimumMinecraftVersion=1.21 | ||||
| minimumNeoForgeVersion=21.0.0-beta | ||||
| minimumFabricVersion=0.12.3 | ||||
|  | ||||
| # Gradle | ||||
| org.gradle.jvmargs=-Xmx3G | ||||
| org.gradle.daemon=false | ||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,5 +1,7 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip | ||||
| networkTimeout=10000 | ||||
| validateDistributionUrl=true | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
							
								
								
									
										251
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,251 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # | ||||
| # Copyright © 2015-2021 the original authors. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #      https://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| # | ||||
|  | ||||
| ############################################################################## | ||||
| # | ||||
| #   Gradle start up script for POSIX generated by Gradle. | ||||
| # | ||||
| #   Important for running: | ||||
| # | ||||
| #   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is | ||||
| #       noncompliant, but you have some other compliant shell such as ksh or | ||||
| #       bash, then to run this script, type that shell name before the whole | ||||
| #       command line, like: | ||||
| # | ||||
| #           ksh Gradle | ||||
| # | ||||
| #       Busybox and similar reduced shells will NOT work, because this script | ||||
| #       requires all of these POSIX shell features: | ||||
| #         * functions; | ||||
| #         * expansions «$var», «${var}», «${var:-default}», «${var+SET}», | ||||
| #           «${var#prefix}», «${var%suffix}», and «$( cmd )»; | ||||
| #         * compound commands having a testable exit status, especially «case»; | ||||
| #         * various built-in commands including «command», «set», and «ulimit». | ||||
| # | ||||
| #   Important for patching: | ||||
| # | ||||
| #   (2) This script targets any POSIX shell, so it avoids extensions provided | ||||
| #       by Bash, Ksh, etc; in particular arrays are avoided. | ||||
| # | ||||
| #       The "traditional" practice of packing multiple parameters into a | ||||
| #       space-separated string is a well documented source of bugs and security | ||||
| #       problems, so this is (mostly) avoided, by progressively accumulating | ||||
| #       options in "$@", and eventually passing that to Java. | ||||
| # | ||||
| #       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, | ||||
| #       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; | ||||
| #       see the in-line comments for details. | ||||
| # | ||||
| #       There are tweaks for specific operating systems such as AIX, CygWin, | ||||
| #       Darwin, MinGW, and NonStop. | ||||
| # | ||||
| #   (3) This script is generated from the Groovy template | ||||
| #       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||
| #       within the Gradle project. | ||||
| # | ||||
| #       You can find Gradle at https://github.com/gradle/gradle/. | ||||
| # | ||||
| ############################################################################## | ||||
|  | ||||
| # Attempt to set APP_HOME | ||||
|  | ||||
| # Resolve links: $0 may be a link | ||||
| app_path=$0 | ||||
|  | ||||
| # Need this for daisy-chained symlinks. | ||||
| while | ||||
|     APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path | ||||
|     [ -h "$app_path" ] | ||||
| do | ||||
|     ls=$( ls -ld "$app_path" ) | ||||
|     link=${ls#*' -> '} | ||||
|     case $link in             #( | ||||
|       /*)   app_path=$link ;; #( | ||||
|       *)    app_path=$APP_HOME$link ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| # This is normally unused | ||||
| # shellcheck disable=SC2034 | ||||
| APP_BASE_NAME=${0##*/} | ||||
| # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) | ||||
| APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit | ||||
|  | ||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||
| MAX_FD=maximum | ||||
|  | ||||
| warn () { | ||||
|     echo "$*" | ||||
| } >&2 | ||||
|  | ||||
| die () { | ||||
|     echo | ||||
|     echo "$*" | ||||
|     echo | ||||
|     exit 1 | ||||
| } >&2 | ||||
|  | ||||
| # OS specific support (must be 'true' or 'false'). | ||||
| cygwin=false | ||||
| msys=false | ||||
| darwin=false | ||||
| nonstop=false | ||||
| case "$( uname )" in                #( | ||||
|   CYGWIN* )         cygwin=true  ;; #( | ||||
|   Darwin* )         darwin=true  ;; #( | ||||
|   MSYS* | MINGW* )  msys=true    ;; #( | ||||
|   NONSTOP* )        nonstop=true ;; | ||||
| esac | ||||
|  | ||||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||||
|  | ||||
|  | ||||
| # Determine the Java command to use to start the JVM. | ||||
| if [ -n "$JAVA_HOME" ] ; then | ||||
|     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||||
|         # IBM's JDK on AIX uses strange locations for the executables | ||||
|         JAVACMD=$JAVA_HOME/jre/sh/java | ||||
|     else | ||||
|         JAVACMD=$JAVA_HOME/bin/java | ||||
|     fi | ||||
|     if [ ! -x "$JAVACMD" ] ; then | ||||
|         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
|     fi | ||||
| else | ||||
|     JAVACMD=java | ||||
|     if ! command -v java >/dev/null 2>&1 | ||||
|     then | ||||
|         die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||||
|  | ||||
| Please set the JAVA_HOME variable in your environment to match the | ||||
| location of your Java installation." | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| # Increase the maximum file descriptors if we can. | ||||
| if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | ||||
|     case $MAX_FD in #( | ||||
|       max*) | ||||
|         # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC2039,SC3045 | ||||
|         MAX_FD=$( ulimit -H -n ) || | ||||
|             warn "Could not query maximum file descriptor limit" | ||||
|     esac | ||||
|     case $MAX_FD in  #( | ||||
|       '' | soft) :;; #( | ||||
|       *) | ||||
|         # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC2039,SC3045 | ||||
|         ulimit -n "$MAX_FD" || | ||||
|             warn "Could not set maximum file descriptor limit to $MAX_FD" | ||||
|     esac | ||||
| fi | ||||
|  | ||||
| # Collect all arguments for the java command, stacking in reverse order: | ||||
| #   * args from the command line | ||||
| #   * the main class name | ||||
| #   * -classpath | ||||
| #   * -D...appname settings | ||||
| #   * --module-path (only if needed) | ||||
| #   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. | ||||
|  | ||||
| # For Cygwin or MSYS, switch paths to Windows format before running java | ||||
| if "$cygwin" || "$msys" ; then | ||||
|     APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) | ||||
|     CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) | ||||
|  | ||||
|     JAVACMD=$( cygpath --unix "$JAVACMD" ) | ||||
|  | ||||
|     # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||||
|     for arg do | ||||
|         if | ||||
|             case $arg in                                #( | ||||
|               -*)   false ;;                            # don't mess with options #( | ||||
|               /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath | ||||
|                     [ -e "$t" ] ;;                      #( | ||||
|               *)    false ;; | ||||
|             esac | ||||
|         then | ||||
|             arg=$( cygpath --path --ignore --mixed "$arg" ) | ||||
|         fi | ||||
|         # Roll the args list around exactly as many times as the number of | ||||
|         # args, so each arg winds up back in the position where it started, but | ||||
|         # possibly modified. | ||||
|         # | ||||
|         # NB: a `for` loop captures its iteration list before it begins, so | ||||
|         # changing the positional parameters here affects neither the number of | ||||
|         # iterations, nor the values presented in `arg`. | ||||
|         shift                   # remove old arg | ||||
|         set -- "$@" "$arg"      # push replacement arg | ||||
|     done | ||||
| fi | ||||
|  | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||
|  | ||||
| # Collect all arguments for the java command: | ||||
| #   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, | ||||
| #     and any embedded shellness will be escaped. | ||||
| #   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be | ||||
| #     treated as '${Hostname}' itself on the command line. | ||||
|  | ||||
| set -- \ | ||||
|         "-Dorg.gradle.appname=$APP_BASE_NAME" \ | ||||
|         -classpath "$CLASSPATH" \ | ||||
|         org.gradle.wrapper.GradleWrapperMain \ | ||||
|         "$@" | ||||
|  | ||||
| # Stop when "xargs" is not available. | ||||
| if ! command -v xargs >/dev/null 2>&1 | ||||
| then | ||||
|     die "xargs is not available" | ||||
| fi | ||||
|  | ||||
| # Use "xargs" to parse quoted args. | ||||
| # | ||||
| # With -n1 it outputs one arg per line, with the quotes and backslashes removed. | ||||
| # | ||||
| # In Bash we could simply go: | ||||
| # | ||||
| #   readarray ARGS < <( xargs -n1 <<<"$var" ) && | ||||
| #   set -- "${ARGS[@]}" "$@" | ||||
| # | ||||
| # but POSIX shell has neither arrays nor command substitution, so instead we | ||||
| # post-process each arg (as a line of input to sed) to backslash-escape any | ||||
| # character that might be a shell metacharacter, then use eval to reverse | ||||
| # that process (while maintaining the separation between arguments), and wrap | ||||
| # the whole thing up as a single "set" statement. | ||||
| # | ||||
| # This will of course break if any of these variables contains a newline or | ||||
| # an unmatched quote. | ||||
| # | ||||
|  | ||||
| eval "set -- $( | ||||
|         printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | | ||||
|         xargs -n1 | | ||||
|         sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | | ||||
|         tr '\n' ' ' | ||||
|     )" '"$@"' | ||||
|  | ||||
| exec "$JAVACMD" "$@" | ||||
							
								
								
									
										60
									
								
								Fabric/gradlew.bat → gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								Fabric/gradlew.bat → gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @@ -13,8 +13,10 @@ | ||||
| @rem See the License for the specific language governing permissions and | ||||
| @rem limitations under the License. | ||||
| @rem | ||||
| @rem SPDX-License-Identifier: Apache-2.0 | ||||
| @rem | ||||
| 
 | ||||
| @if "%DEBUG%" == "" @echo off | ||||
| @if "%DEBUG%"=="" @echo off | ||||
| @rem ########################################################################## | ||||
| @rem | ||||
| @rem  Gradle startup script for Windows | ||||
| @@ -25,10 +27,14 @@ | ||||
| if "%OS%"=="Windows_NT" setlocal | ||||
| 
 | ||||
| set DIRNAME=%~dp0 | ||||
| if "%DIRNAME%" == "" set DIRNAME=. | ||||
| if "%DIRNAME%"=="" set DIRNAME=. | ||||
| @rem This is normally unused | ||||
| set APP_BASE_NAME=%~n0 | ||||
| set APP_HOME=%DIRNAME% | ||||
| 
 | ||||
| @rem Resolve any "." and ".." in APP_HOME to make it shorter. | ||||
| for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | ||||
| 
 | ||||
| @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | ||||
| 
 | ||||
| @@ -37,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome | ||||
| 
 | ||||
| set JAVA_EXE=java.exe | ||||
| %JAVA_EXE% -version >NUL 2>&1 | ||||
| if "%ERRORLEVEL%" == "0" goto init | ||||
| if %ERRORLEVEL% equ 0 goto execute | ||||
| 
 | ||||
| echo. | ||||
| echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||||
| echo. | ||||
| echo Please set the JAVA_HOME variable in your environment to match the | ||||
| echo location of your Java installation. | ||||
| echo. 1>&2 | ||||
| echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 | ||||
| echo. 1>&2 | ||||
| echo Please set the JAVA_HOME variable in your environment to match the 1>&2 | ||||
| echo location of your Java installation. 1>&2 | ||||
| 
 | ||||
| goto fail | ||||
| 
 | ||||
| @@ -51,48 +57,36 @@ goto fail | ||||
| set JAVA_HOME=%JAVA_HOME:"=% | ||||
| set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||||
| 
 | ||||
| if exist "%JAVA_EXE%" goto init | ||||
| if exist "%JAVA_EXE%" goto execute | ||||
| 
 | ||||
| echo. | ||||
| echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||||
| echo. | ||||
| echo Please set the JAVA_HOME variable in your environment to match the | ||||
| echo location of your Java installation. | ||||
| echo. 1>&2 | ||||
| echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 | ||||
| echo. 1>&2 | ||||
| echo Please set the JAVA_HOME variable in your environment to match the 1>&2 | ||||
| echo location of your Java installation. 1>&2 | ||||
| 
 | ||||
| goto fail | ||||
| 
 | ||||
| :init | ||||
| @rem Get command-line arguments, handling Windows variants | ||||
| 
 | ||||
| if not "%OS%" == "Windows_NT" goto win9xME_args | ||||
| 
 | ||||
| :win9xME_args | ||||
| @rem Slurp the command line arguments. | ||||
| set CMD_LINE_ARGS= | ||||
| set _SKIP=2 | ||||
| 
 | ||||
| :win9xME_args_slurp | ||||
| if "x%~1" == "x" goto execute | ||||
| 
 | ||||
| set CMD_LINE_ARGS=%* | ||||
| 
 | ||||
| :execute | ||||
| @rem Setup the command line | ||||
| 
 | ||||
| set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||||
| 
 | ||||
| 
 | ||||
| @rem Execute Gradle | ||||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* | ||||
| 
 | ||||
| :end | ||||
| @rem End local scope for the variables with windows NT shell | ||||
| if "%ERRORLEVEL%"=="0" goto mainEnd | ||||
| if %ERRORLEVEL% equ 0 goto mainEnd | ||||
| 
 | ||||
| :fail | ||||
| rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||||
| rem the _cmd.exe /c_ return code! | ||||
| if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||||
| exit /b 1 | ||||
| set EXIT_CODE=%ERRORLEVEL% | ||||
| if %EXIT_CODE% equ 0 set EXIT_CODE=1 | ||||
| if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% | ||||
| exit /b %EXIT_CODE% | ||||
| 
 | ||||
| :mainEnd | ||||
| if "%OS%"=="Windows_NT" endlocal | ||||
							
								
								
									
										29
									
								
								settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| rootProject.name = "Minecraft-Window-Title" | ||||
|  | ||||
| pluginManagement { | ||||
| 	repositories { | ||||
| 		gradlePluginPortal() | ||||
| 		maven(url = "https://maven.neoforged.net/releases") { name = "NeoForge" } | ||||
| 		maven(url = "https://maven.fabricmc.net/") { name = "Fabric" } | ||||
| 	} | ||||
| 	 | ||||
| 	plugins { | ||||
| 		val neoModDevVersion = settings.extra.get("neoModDevVersion") as? String | ||||
| 		if (neoModDevVersion != null) { | ||||
| 			id("net.neoforged.moddev") version neoModDevVersion | ||||
| 		} | ||||
| 		 | ||||
| 		val loomVersion = settings.extra.get("loomVersion") as? String | ||||
| 		if (loomVersion != null) { | ||||
| 			id("fabric-loom") version "$loomVersion-SNAPSHOT" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| if (settings.extra.has("neoForgeVersion")) { | ||||
| 	include("NeoForge") | ||||
| } | ||||
|  | ||||
| if (settings.extra.has("fabricVersion")) { | ||||
| 	include("Fabric") | ||||
| } | ||||
							
								
								
									
										65
									
								
								src/main/java/chylex/customwindowtitle/IconChanger.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/main/java/chylex/customwindowtitle/IconChanger.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| import net.minecraft.client.Minecraft; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
| import org.lwjgl.glfw.GLFW; | ||||
| import org.lwjgl.glfw.GLFWImage; | ||||
| import org.lwjgl.stb.STBImage; | ||||
| import org.lwjgl.system.MemoryStack; | ||||
| import java.io.IOException; | ||||
| import java.nio.ByteBuffer; | ||||
| import java.nio.IntBuffer; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
|  | ||||
| public final class IconChanger { | ||||
| 	private static final Logger LOGGER = LogManager.getLogger("CustomWindowTitle"); | ||||
| 	 | ||||
| 	private IconChanger() {} | ||||
| 	 | ||||
| 	public static void setIcon(Path iconPath) { | ||||
| 		long windowHandle = Minecraft.getInstance().getWindow().getWindow(); | ||||
| 		setWindowIcon(windowHandle, iconPath); | ||||
| 	} | ||||
| 	 | ||||
| 	private static void setWindowIcon(long windowHandle, Path iconPath) { | ||||
| 		ByteBuffer icon = null; | ||||
| 		try (MemoryStack stack = MemoryStack.stackPush()) { | ||||
| 			IntBuffer w = stack.mallocInt(1); | ||||
| 			IntBuffer h = stack.mallocInt(1); | ||||
| 			IntBuffer channels = stack.mallocInt(1); | ||||
| 			 | ||||
| 			icon = loadIcon(iconPath, w, h, channels); | ||||
| 			if (icon == null) { | ||||
| 				return; | ||||
| 			} | ||||
| 			 | ||||
| 			try (GLFWImage.Buffer icons = GLFWImage.malloc(1)) { | ||||
| 				GLFWImage iconImage = icons.get(0); | ||||
| 				iconImage.set(w.get(0), h.get(0), icon); | ||||
| 				 | ||||
| 				GLFW.glfwSetWindowIcon(windowHandle, icons); | ||||
| 			} | ||||
| 		} catch (Exception e) { | ||||
| 			LOGGER.error("Failed to set window icon from path: {}", iconPath, e); | ||||
| 		} finally { | ||||
| 			if (icon != null) { | ||||
| 				STBImage.stbi_image_free(icon); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private static ByteBuffer loadIcon(Path path, IntBuffer w, IntBuffer h, IntBuffer channels) throws IOException { | ||||
| 		byte[] iconBytes = Files.readAllBytes(path); | ||||
| 		 | ||||
| 		ByteBuffer buffer = ByteBuffer.allocateDirect(iconBytes.length).put(iconBytes).flip(); | ||||
| 		ByteBuffer icon = STBImage.stbi_load_from_memory(buffer, w, h, channels, 4); | ||||
| 		 | ||||
| 		if (icon == null) { | ||||
| 			LOGGER.error("Failed to load image from path: {} - {}", path, STBImage.stbi_failure_reason()); | ||||
| 		} | ||||
| 		 | ||||
| 		return icon; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										11
									
								
								src/main/java/chylex/customwindowtitle/TitleChanger.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/main/java/chylex/customwindowtitle/TitleChanger.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| import net.minecraft.client.Minecraft; | ||||
|  | ||||
| public final class TitleChanger { | ||||
| 	private TitleChanger() {} | ||||
| 	 | ||||
| 	public static void setTitle(TitleConfig config) { | ||||
| 		Minecraft.getInstance().getWindow().setTitle(TitleParser.parse(config.getTitle())); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										127
									
								
								src/main/java/chylex/customwindowtitle/TitleConfig.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								src/main/java/chylex/customwindowtitle/TitleConfig.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| import com.google.common.collect.ImmutableMap; | ||||
| import java.io.IOException; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.Map; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| public final class TitleConfig { | ||||
| 	private static final String KEY_TITLE = "title"; | ||||
| 	private static final String KEY_ICON = "icon"; | ||||
| 	 | ||||
| 	private static final ImmutableMap<String, String> DEFAULTS = ImmutableMap.<String, String>builder() | ||||
| 		.put(KEY_TITLE, "Minecraft {mcversion}") | ||||
| 		.put(KEY_ICON, "") | ||||
| 		.buildOrThrow(); | ||||
| 	 | ||||
| 	private static volatile TitleConfig instance; | ||||
| 	 | ||||
| 	public static TitleConfig getInstance() { | ||||
| 		return instance; | ||||
| 	} | ||||
| 	 | ||||
| 	public static TitleConfig load(String folder) { | ||||
| 		if (instance != null) { | ||||
| 			throw new IllegalStateException("TitleConfig has already been loaded and cannot be loaded again."); | ||||
| 		} | ||||
| 		 | ||||
| 		if (instance == null) { | ||||
| 			synchronized(TitleConfig.class) { | ||||
| 				if (instance == null) { | ||||
| 					instance = loadImpl(folder); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return instance; | ||||
| 	} | ||||
| 	 | ||||
| 	private static TitleConfig loadImpl(String folder) { | ||||
| 		Path configFile = Paths.get(folder, "customwindowtitle-client.toml"); | ||||
| 		Map<String, String> config = new LinkedHashMap<>(DEFAULTS); | ||||
| 		 | ||||
| 		try { | ||||
| 			if (!Files.exists(configFile)) { | ||||
| 				Files.write(configFile, config.entrySet().stream() | ||||
| 					.map(entry -> String.format("%s = '%s'", entry.getKey(), entry.getValue())) | ||||
| 					.collect(Collectors.toList()), StandardCharsets.UTF_8); | ||||
| 			} | ||||
| 			else { | ||||
| 				Files.readAllLines(configFile, StandardCharsets.UTF_8).stream() | ||||
| 					.map(String::trim) | ||||
| 					.filter(line -> !line.isEmpty()) | ||||
| 					.forEach(line -> { | ||||
| 						String[] split = line.split("=", 2); | ||||
| 						 | ||||
| 						if (split.length != 2) { | ||||
| 							throw new RuntimeException("CustomWindowTitle configuration has an invalid line: " + line); | ||||
| 						} | ||||
| 						 | ||||
| 						String key = split[0].trim(); | ||||
| 						String value = parseTrimmedValue(split[1].trim()); | ||||
| 						 | ||||
| 						if (config.containsKey(key)) { | ||||
| 							config.put(key, value); | ||||
| 						} | ||||
| 						else { | ||||
| 							throw new RuntimeException("CustomWindowTitle configuration has an invalid key: " + key); | ||||
| 						} | ||||
| 					}); | ||||
| 			} | ||||
| 		} catch (IOException e) { | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration error", e); | ||||
| 		} | ||||
| 		 | ||||
| 		String iconPathStr = config.get(KEY_ICON); | ||||
| 		Path iconPath = iconPathStr.isEmpty() ? null : Paths.get(folder, iconPathStr); | ||||
| 		if (iconPath != null && Files.notExists(iconPath)) { | ||||
| 			throw new RuntimeException("CustomWindowTitle configuration points to a missing icon: " + iconPath); | ||||
| 		} | ||||
| 		 | ||||
| 		return new TitleConfig(config.get(KEY_TITLE), iconPath); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String parseTrimmedValue(String value) { | ||||
| 		if (value.isEmpty()) { | ||||
| 			return value; | ||||
| 		} | ||||
| 		 | ||||
| 		final char surrounding = value.charAt(0); | ||||
| 		final int length = value.length(); | ||||
| 		 | ||||
| 		if (value.charAt(length - 1) == surrounding) { | ||||
| 			value = value.substring(1, length - 1); | ||||
| 			 | ||||
| 			if (surrounding == '"') { | ||||
| 				value = value.replace("\\\"", "\"").replace("\\\\", "\\"); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return value; | ||||
| 	} | ||||
| 	 | ||||
| 	private final String title; | ||||
| 	private final Path icon; | ||||
| 	 | ||||
| 	private TitleConfig(final String title, final Path icon) { | ||||
| 		this.title = title; | ||||
| 		this.icon = icon; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getTitle() { | ||||
| 		return title; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean hasIcon() { | ||||
| 		return icon != null; | ||||
| 	} | ||||
| 	 | ||||
| 	public Path getIconPath() { | ||||
| 		return icon; | ||||
| 	} | ||||
| } | ||||
| @@ -1,4 +1,5 @@ | ||||
| package chylex.customwindowtitle; | ||||
| 
 | ||||
| import org.apache.commons.lang3.ArrayUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| @@ -6,32 +7,32 @@ import org.apache.logging.log4j.Logger; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
| 
 | ||||
| public final class TitleParser{ | ||||
| final class TitleParser { | ||||
| 	private static final Pattern tokenRegex = Pattern.compile("\\{([a-z]+)(?::([^}]+))?}"); | ||||
| 	private static final Logger logger = LogManager.getLogger("CustomWindowTitle"); | ||||
| 	 | ||||
| 	public static String parse(final String input){ | ||||
| 		final StringBuffer buffer = new StringBuffer(); | ||||
| 	public static String parse(final String input) { | ||||
| 		final StringBuilder buffer = new StringBuilder(); | ||||
| 		final Matcher matcher = tokenRegex.matcher(input); | ||||
| 		 | ||||
| 		while(matcher.find()){ | ||||
| 		while (matcher.find()) { | ||||
| 			final String token = matcher.group(1); | ||||
| 			final String[] args = StringUtils.split(matcher.group(2), ','); | ||||
| 			 | ||||
| 			String result = null; | ||||
| 			 | ||||
| 			try{ | ||||
| 			try { | ||||
| 				result = TitleTokens.getTokenFunction(token).apply(args == null ? ArrayUtils.EMPTY_STRING_ARRAY : args); | ||||
| 			}catch(final TokenException e){ | ||||
| 			} catch (final TokenException e) { | ||||
| 				logger.warn("Error processing token '" + token + "': " + e.getMessage()); | ||||
| 			}catch(final Throwable t){ | ||||
| 			} catch (final Throwable t) { | ||||
| 				logger.warn("Error processing token '" + token + "': " + t.getMessage(), t); | ||||
| 			} | ||||
| 			 | ||||
| 			if (result == null){ | ||||
| 			if (result == null) { | ||||
| 				matcher.appendReplacement(buffer, input.substring(matcher.start(), matcher.end())); | ||||
| 			} | ||||
| 			else{ | ||||
| 			else { | ||||
| 				matcher.appendReplacement(buffer, result); | ||||
| 			} | ||||
| 		} | ||||
| @@ -42,5 +43,5 @@ public final class TitleParser{ | ||||
| 	 | ||||
| 	// Static class | ||||
| 	 | ||||
| 	private TitleParser(){} | ||||
| 	private TitleParser() {} | ||||
| } | ||||
| @@ -1,43 +1,44 @@ | ||||
| package chylex.customwindowtitle; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.function.Function; | ||||
| import java.util.function.Supplier; | ||||
| import java.util.function.UnaryOperator; | ||||
| 
 | ||||
| public final class TitleTokens{ | ||||
| public final class TitleTokens { | ||||
| 	 | ||||
| 	// Registry | ||||
| 	 | ||||
| 	private static final Map<String, Function<String[], String>> tokenMap = new HashMap<>(); | ||||
| 	 | ||||
| 	public static void registerToken(final String token, final Function<String[], String> processor){ | ||||
| 	public static void registerToken(final String token, final Function<String[], String> processor) { | ||||
| 		tokenMap.putIfAbsent(token, processor); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> getTokenFunction(final String token){ | ||||
| 	public static Function<String[], String> getTokenFunction(final String token) { | ||||
| 		return tokenMap.getOrDefault(token, args -> null); | ||||
| 	} | ||||
| 	 | ||||
| 	// Arguments | ||||
| 	 | ||||
| 	public static Function<String[], String> noArgs(final Supplier<String> func){ | ||||
| 	public static Function<String[], String> noArgs(final Supplier<String> func) { | ||||
| 		return args -> args.length > 0 ? fail("expected no arguments, got " + args.length) : func.get(); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> oneArg(final UnaryOperator<String> func){ | ||||
| 	public static Function<String[], String> oneArg(final UnaryOperator<String> func) { | ||||
| 		return args -> args.length != 1 ? fail("expected 1 argument, got " + args.length) : func.apply(args[0]); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Function<String[], String> rangeArgs(final int min, final int max, final Function<String[], String> func){ | ||||
| 	public static Function<String[], String> rangeArgs(final int min, final int max, final Function<String[], String> func) { | ||||
| 		return args -> args.length < min || args.length > max ? fail("expected between " + min + " and " + max + " arguments, got " + args.length) : func.apply(args); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String fail(final String message){ | ||||
| 	private static String fail(final String message) { | ||||
| 		throw new TokenException(message); | ||||
| 	} | ||||
| 	 | ||||
| 	// Static class | ||||
| 	 | ||||
| 	private TitleTokens(){} | ||||
| 	private TitleTokens() {} | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| package chylex.customwindowtitle; | ||||
|  | ||||
| public class TokenException extends RuntimeException { | ||||
| 	public TokenException(final String message) { | ||||
| 		super(message); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package chylex.customwindowtitle.data; | ||||
|  | ||||
| import static chylex.customwindowtitle.TitleTokens.noArgs; | ||||
| import static chylex.customwindowtitle.TitleTokens.oneArg; | ||||
| import static chylex.customwindowtitle.TitleTokens.registerToken; | ||||
|  | ||||
| public final class CommonTokenData { | ||||
| 	public static void register(final CommonTokenProvider provider) { | ||||
| 		registerToken("mcversion", noArgs(provider::getMinecraftVersion)); | ||||
| 		registerToken("modversion", oneArg(provider::getModVersion)); | ||||
| 		registerToken("username", noArgs(provider::getUsername)); | ||||
| 	} | ||||
| 	 | ||||
| 	private CommonTokenData() {} | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| package chylex.customwindowtitle.data; | ||||
|  | ||||
| import net.minecraft.SharedConstants; | ||||
| import net.minecraft.client.Minecraft; | ||||
|  | ||||
| public interface CommonTokenProvider { | ||||
| 	default String getMinecraftVersion() { | ||||
| 		return SharedConstants.getCurrentVersion().getName(); | ||||
| 	} | ||||
| 	 | ||||
| 	String getModVersion(final String modId); | ||||
| 	 | ||||
| 	default String getUsername() { | ||||
| 		return Minecraft.getInstance().getUser().getName(); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package chylex.customwindowtitle.mixin; | ||||
|  | ||||
| import net.minecraft.client.Minecraft; | ||||
| 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(Minecraft.class) | ||||
| public final class DisableVanillaTitle { | ||||
| 	@Inject(method = "updateTitle()V", at = @At("HEAD"), cancellable = true) | ||||
| 	private void updateTitle(final CallbackInfo info) { | ||||
| 		info.cancel(); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| package chylex.customwindowtitle.mixin; | ||||
|  | ||||
| import chylex.customwindowtitle.IconChanger; | ||||
| import chylex.customwindowtitle.TitleConfig; | ||||
| import net.minecraft.client.Minecraft; | ||||
| 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(Minecraft.class) | ||||
| public final class InitializeCustomIcon { | ||||
| 	@Inject(method = "onResourceLoadFinished", at = @At("HEAD")) | ||||
| 	private void onFinishedLoading(CallbackInfo callbackInfo) { | ||||
| 		TitleConfig config = TitleConfig.getInstance(); | ||||
| 		if (config != null && config.hasIcon()) { | ||||
| 			IconChanger.setIcon(config.getIconPath()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										14
									
								
								src/main/resources/customwindowtitle.mixins.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/main/resources/customwindowtitle.mixins.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| { | ||||
|   "required": true, | ||||
|   "minVersion": "0.8", | ||||
|   "package": "chylex.customwindowtitle.mixin", | ||||
|   "refmap": "customwindowtitle.refmap.json", | ||||
|   "compatibilityLevel": "JAVA_17", | ||||
|   "client": [ | ||||
|     "DisableVanillaTitle", | ||||
|     "InitializeCustomIcon" | ||||
|   ], | ||||
|   "injectors": { | ||||
|     "defaultRequire": 1 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										7
									
								
								src/main/resources/pack.mcmeta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/main/resources/pack.mcmeta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
|     "pack": { | ||||
|         "description": "${name}", | ||||
|         "pack_format": 7, | ||||
|         "_comment": "" | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/multiloader/resources/META-INF/jarjar/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/multiloader/resources/META-INF/jarjar/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| { | ||||
|   "jars": [{ | ||||
|     "identifier": { | ||||
|       "group": "${group}", | ||||
|       "artifact": "${id}" | ||||
|     }, | ||||
|     "version": { | ||||
|       "artifactVersion": "${version}", | ||||
|       "range": "[${version}]" | ||||
|     }, | ||||
|     "path": "jars/${jarPrefix}-NeoForge.jar" | ||||
|   }] | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/multiloader/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/multiloader/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| { | ||||
|   "schemaVersion": 1, | ||||
|   "id": "${id}_multiloader", | ||||
|   "name": "${name} (Multiloader)", | ||||
|   "description": "${description}", | ||||
|   "version": "${version}", | ||||
|   "license": "${license}", | ||||
|    | ||||
|   "authors": [ | ||||
|     "${author}" | ||||
|   ], | ||||
|    | ||||
|   "contact": { | ||||
|     "homepage": "https://chylex.com", | ||||
|     "issues": "${issuesURL}", | ||||
|     "sources": "${sourcesURL}" | ||||
|   }, | ||||
|    | ||||
|   "environment": "${sidesForFabric}", | ||||
|    | ||||
|   "jars": [{ | ||||
|       "file": "jars/${jarPrefix}-Fabric.jar" | ||||
|   }], | ||||
|    | ||||
|   "custom": { | ||||
|     "modmenu": { | ||||
|       "parent": "${id}", | ||||
|       "badges": [ "library" ], | ||||
|       "update_checker": false | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user