Views
Actions
Difference between revisions of "Hotswap"
Line 1: | Line 1: | ||
{{Under construction}} <!-- Guide for other IDEs is missing --> | {{Under construction}} <!-- Guide for other IDEs is missing --> | ||
== What is Hot-swapping? == | == What is Hot-swapping? == | ||
− | Hot-swapping is a feature letting you to | + | Hot-swapping is a feature letting you to swap-out parts of game without restarting it, allowing you to see resources and code changes quickly and tinker around with it more easily. |
{{Tip|It is recommended that you run the game with debug mode in order to use hot-swapping, as code changes will only get applied under debug mode.}} | {{Tip|It is recommended that you run the game with debug mode in order to use hot-swapping, as code changes will only get applied under debug mode.}} | ||
Line 18: | Line 18: | ||
[[File:Debugmodeintellij.png]] | [[File:Debugmodeintellij.png]] | ||
=== Hot-swapping code on Intellij Idea === | === Hot-swapping code on Intellij Idea === | ||
− | It's more simple | + | It's more simple than hot-swapping resources. After making changes to the code, just hit the build button. Then It will show you this message on bottom-left corner. If your mod project is big and it takes a long time to do so, hit <code>Build -> Recompile "currently opened file's name"</code>, this will only recompile file that is currently open. This option will not be visible if you don't have compile-able file opened. Files with extensions such as <code>.java</code> or <code>.kt</code> are compile-able. |
[[File:Hotswapmessage.png]] | [[File:Hotswapmessage.png]] | ||
If you changed class's schematics then will show you error messages saying it is unsupported. Head to Applying schema changes section if you need to change schematics. | If you changed class's schematics then will show you error messages saying it is unsupported. Head to Applying schema changes section if you need to change schematics. | ||
=== Applying schema changes === | === Applying schema changes === | ||
− | This requires more setup and specific find of JDK. | + | This requires more setup and specific find of JDK, Jetbrains Runtime (JBR). The reason why JBR is suggested is that it has [https://dcevm.github.io/ DCEVM](It allows class schema change in debug mode) by default and requires less configuration than other JDKs, such as hot-swap agent and IDE-specific plugins, etc. Although, there isn't exactly "installer" for it, you would have to download and unpack it manually. |
− | |||
==== Downloading JBR ==== | ==== Downloading JBR ==== | ||
− | Download | + | Download JBR with right java version and platform from here: https://github.com/JetBrains/JetBrainsRuntime/releases |
There are many different "flavors" but I recommend you downloading "JBR (vanilla)" one if you don't know what are these. | There are many different "flavors" but I recommend you downloading "JBR (vanilla)" one if you don't know what are these. | ||
After downloading has finished unpack it into suitable location | After downloading has finished unpack it into suitable location |
Revision as of 15:36, 6 October 2022
This page is under construction.
This page is incomplete, and needs more work. Feel free to edit and improve this page!
What is Hot-swapping?
Hot-swapping is a feature letting you to swap-out parts of game without restarting it, allowing you to see resources and code changes quickly and tinker around with it more easily.
Hot-swapping resources
Hot-swapping resources on Intellij Idea
After you made changes to resource file, hit this "hammer icon", or build button.
After that, hit F3+T if resources you changed are assets. It's a shortcut-key for reloading assets. If they're data pack, use /datapack command to disable and then re-enable data pack of your mod.
Hot-swapping code
You can also swap out code if only method's internal has been changed. You would still need to restart game if you added/removed/renamed method/variable/class. This change is called "schema change", and guide for applying schema change is in below section.
Ensure that you are running the game on debug mode in IDE. It is usually indicated by green bug-shaped icon.
Hot-swapping code on Intellij Idea
It's more simple than hot-swapping resources. After making changes to the code, just hit the build button. Then It will show you this message on bottom-left corner. If your mod project is big and it takes a long time to do so, hit Build -> Recompile "currently opened file's name"
, this will only recompile file that is currently open. This option will not be visible if you don't have compile-able file opened. Files with extensions such as .java
or .kt
are compile-able.
If you changed class's schematics then will show you error messages saying it is unsupported. Head to Applying schema changes section if you need to change schematics.
Applying schema changes
This requires more setup and specific find of JDK, Jetbrains Runtime (JBR). The reason why JBR is suggested is that it has DCEVM(It allows class schema change in debug mode) by default and requires less configuration than other JDKs, such as hot-swap agent and IDE-specific plugins, etc. Although, there isn't exactly "installer" for it, you would have to download and unpack it manually.
Downloading JBR
Download JBR with right java version and platform from here: https://github.com/JetBrains/JetBrainsRuntime/releases There are many different "flavors" but I recommend you downloading "JBR (vanilla)" one if you don't know what are these. After downloading has finished unpack it into suitable location
Adding JDK to IDE
Adding JDK to Intellij Idea
Go to File -> Project Structure -> Project -> SDK -> Add JDK and then select directory you've unpacked JBR into. After that, It is recommended to choose JBR as project SDK if you're not familiar with gradle and Intellij's run configs
Changing run configuration
Open build.gradle file and then add jvmArg "-XX:+AllowEnhancedClassRedefinition"
to desired run configuration. below is example for adding it into runClient
runs { client { workingDirectory project.file('run') jvmArg "-XX:+AllowEnhancedClassRedefinition" property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' property 'forge.enabledGameTestNamespaces', 'examplemod' mods { examplemod { source sourceSets.main } } } }
Final step
Final configuration for Intellij Idea
Go to File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle
, and use Intellij Idea for running and building and testing
Then re-generate run configurations by running genIntellijRuns
Done! Now launch one of these on debug mode and you can now change classes' schematic as much as you want, it will swap those just fine.