An unofficial port of Presence Footsteps from Fabric to Forge. For Fabric, check out the original mod.
If you have any problems with this Forge version of the mod, please file an issue here - don't pester Sollace on the original Fabric version of the mod for issues you're having with this Forge version.
Why?
To put it simply, I wanted to continue enjoying this mod on modern versions of Minecraft alongside other Forge mods. In the past, the mod used LiteLoader which could optionally be run on top of Forge, but since the move to Fabric that's no longer possible.
Various people have requested a Forge port however the mod dev has stated that they have no intentions to do so. As the license is MIT, I took it into my own hands and made as close to a 1:1 port as possible in just a few days.
This should be obvious but I'll say it anyway: please don't give Sollace grief over not porting it themselves, it's their decision and I respect that. I made this as it's legally permissable and allows more people to enjoy the mod, in addition to making it easier for Forge users to transition to Fabric if they so desire by having another mod support both platforms (even the configs are compatible between the original Fabric mod and this Forge port!). Note that Sollace recieves a decent portion of the CurseForge rewards program points from this project, despite having no involvement in this port.
How? (1.16.5)
I've ported various small-ish Fabric mods to Forge for personal use in the past, with each port learning more efficient methods along the way.
With Presence Footsteps, I did the following procedure:
1. Clone the repo of the Fabric mod to port
2. Get the Forge MDK, setup Mixin configs and Yarn2MCP's Yarn mappings
3. Use the updateMappings ForgeGradle command to convert Yarn to MCP
By this point a decent chunk of the work was already done!
4. Use the Linkie Discord bot to manually translate the remaining Yarn classnames to MCP classnames, along with translating some Mixin stuff
5. Manually translate Fabric-specific APIs and practices to Forge-equivalents (e.g. separate event systems, separate ways of initialising the mod, etc...)
Notes regarding the port:
- Next time I'll might try using MojMap as the intermediary translation mappings instead of Yarn2MCP, to reduce setup time and allow for flexibility between using either ForgeGradle's updateMappings or Loom's migrateMappings commands. I didn't use them this time because last time I checked, Linkie didn't support translating between MojMap and MCP but this seems to have been resolved now.
- I did try running the code in Yarn2MCP's Yarn mappings directly before conversion to MCP, however due to a mapping error this was unfortunately not possible.
- The mod makes use of some Fabric-only mod libs so I had to also port over the parts that were used. I had a bit of trouble with one particular function in the lib having the same name as an MCP method name causing a compile error due to ambiguity over which method the code was referring to (it was to do with tooltip rendering for buttons in the GUI lib iirc). For now, I've just disabled that one method call as a workaround.
- I recall the dev saying that they didn't like MCP mappings, but funnily enough I found various instances of variable names matching the MCP classnames rather than Yarn ones. Maybe it was just reused code from the LiteLoader days? Who knows...
- It's not my most elegant solution - I was bored so I still did some of it manually by copying over the lib stuff after the updateMappings automation.
What's missing?
- Tooltips on the buttons in the F10 mod settings menu
- Reload listener for custom sounds (you need to restart the game instead atm)
- Multiplayer and server support is untested
- You can't change the keybind for the F10 mod settings menu yet
- Update checking
- On 1.18.2-1.5.0-beta1: The F10 mod settings menu
Sponsors
Thanks to the following GitHub sponsors for donating towards my modding efforts, who help motivate me to continue working on projects like this unofficial port of Presence Footsteps to Forge:
- (None at the moment)