Replay Mod (Fabric & Forge)

Replay Mod (Fabric & Forge)

787k Downloads

Unable to compile the WIP 1.15 branch

Xanton19 opened this issue · 30 comments

commented

Hello Johni0702,
first of all, I really want to thank you for maintaining ReplayMod up until 1.14.4.

I heard that you are not more actively developing on ReplayMod, which I can completely understand that there are many other great things to do in life.

To my surprise, I saw a 1.15 branch of ReplayMod and I wanted to see if it at least compiles.

When trying to compile the latest 1.15 WIP branch from ReplayMod with " ./gradlew clean cleanCache setupDevWorkspace --refresh-dependencies ", I get the error:


Task :1.10.2:applyBinaryPatches FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':1.10.2:applyBinaryPatches'.

There is a binary discrepency between the expected input class net.minecraft.client.renderer.block.model.ModelBakery$1 (byo$1) and the actual class. Checksum on disk is c546d774, in patch 97c0d774. Things are probably about to go very wrong. Did you put something into the jar file?


As it is obligatory to run the " ./gradlew setupDecompWorkspace " command, I have tried to run the command, but I get the same error as in this forum post (https://www.minecraftforge.net/forum/topic/41418-execution-failed-for-task-applysourcepatches-1102-121812011/) and there I found the solution to run " ./gradlew clean cleanCache setupDevWorkspace --refresh-dependencies " and it worked for the compilation of default ReplayMod development branch, but the 1.15 branch stops compiling at " > Task :1.10.2:applyBinaryPatches ".

Is there a solution to solve this compiling issue, or is it that the code is still incomplete?

People might hate me for saying this, but as you are time constraint and have better things to do in life, maybe it is a better idea to skip the 1.15 version (as you did with the 1.13 version) and work on a later date if you have the time and will on a 1.16 version, of the ReplayMod.

Again, thank you for your time.

Herzliche Grüße aus Deutschland ;)

commented

Thanks for the fast reply.

When removing the ~/.gradle folder, re-cloning the entire RM folder and then running ./gradlew setupDecompWorkspace I get:


Task :1.10.2:fixMcSources FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':1.10.2:fixMcSources'.

com.cloudbees.diff.PatchException: Cannot find hunk target

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 11m 29s
14 actionable tasks: 14 executed

Then I removed the older versions, except the 1.14.4 and 1.15.1 from the settings.gradle.kts file and run it with ./gradlew setupDecompWorkspace and it run for a few minutes, then I got a funny but stupid error:


FAILURE: Build failed with an exception.

  • What went wrong:
    Task 'setupDecompWorkspace' not found in root project 'ReplayMod'.

  • Try:
    Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 8m 11s

Here is my settings.gradle.kts file:
settings.gradle.kts.zip

commented

Update: I have read that ./gradlew setupDecompWorkspace is not more supported since 1.13 and ./gradlew eclipse is supported.

And I got a build successful, but more problems started arising when I tried to compile the mod to a .jar file.

The strange problem is, that it cant find ReplayStudio, even though I updated the git submodules with the command provided.

I used the settings.gradle.kts file without the older MC versions, just the 1.14.4 and 1.15.1, as you suggested.

Edit: I tried ./gradlew :1.15.1:build and ./gradlew build

The Error is:

FAILURE: Build failed with an exception.

  • What went wrong:
    Could not determine the dependencies of task ':1.14.4:shadowJar'.

Could not resolve all dependencies for configuration ':1.14.4:shadow'.
Could not find com.replaymod.replaystudio:ReplayStudio:120feb9.
Searched in the following locations:
- https://libraries.minecraft.net/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- https://libraries.minecraft.net/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- file:/C:/Users/Xanton/.m2/repository/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- file:/C:/Users/Xanton/.m2/repository/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- http://repo.spongepowered.org/maven/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- http://repo.spongepowered.org/maven/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- https://maven.fabricmc.net/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- https://maven.fabricmc.net/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- https://jitpack.io/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- https://jitpack.io/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- file:/C:/Users/Xanton/.gradle/caches/fabric-loom/ReplayStudio-120feb9.jar
- file:/C:/Users/Xanton/.gradle/caches/fabric-loom/ReplayStudio.jar
- file:/C:/Users/Xanton/Desktop/ReplayMod/build/loom-cache/ReplayStudio-120feb9.jar
- file:/C:/Users/Xanton/Desktop/ReplayMod/build/loom-cache/ReplayStudio.jar
- file:/C:/Users/Xanton/Desktop/ReplayMod/.gradle/loom-cache/remapped_mods/ReplayStudio-120feb9.jar
- file:/C:/Users/Xanton/Desktop/ReplayMod/.gradle/loom-cache/remapped_mods/ReplayStudio.jar
- https://repo.maven.apache.org/maven2/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- https://repo.maven.apache.org/maven2/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
- https://jcenter.bintray.com/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.pom
- https://jcenter.bintray.com/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar
Required by:
project :1.14.4

commented

The 1.14.4 and 1.15.1 versions are no longer built using ForgeGradle, instead we're using Fabric's "loom" gradle plugin which doesn't require ./gradlew setupDecompWorkspace or in fact any additional manual setup.

It should find ReplayStudio at https://jitpack.io/com/replaymod/replaystudio/ReplayStudio/120feb9/ReplayStudio-120feb9.jar but it seems like jitpack is acting strangely: https://jitpack.io/com/github/ReplayMod/ReplayStudio/120feb9/build.log, so I'd suggest you change the version specified at

shadow "com.replaymod.replaystudio:ReplayStudio:120feb9", shadeExclusions

to 120feb. That should result in the same version but will hopefully prompt jitpack to rebuild it.

Edit: I logged into jitpack and manually reset that build. It should now be available again without that workaround.

commented

Fixed the ReplayStudio issue with replacing shadow "com.replaymod.replaystudio:ReplayStudio:120feb9", shadeExclusions to shadow "com.github.ReplayMod:ReplayStudio:120feb9", shadeExclusions. Then I run ./gradlew build and got:

Task :1.14.4:compileJava
:setting java compiler args
Note: SpongePowered MIXIN Annotation Processor Version=0.7.11
Note: ObfuscationServiceFabric supports type: "official:intermediary"
Note: ObfuscationServiceFabric supports type: "official:named"
Note: ObfuscationServiceFabric supports type: "intermediary:official"
Note: ObfuscationServiceFabric supports type: "intermediary:named"
Note: ObfuscationServiceFabric supports type: "named:official"
Note: ObfuscationServiceFabric supports type: "named:intermediary"
Note: ObfuscationServiceMCP supports type: "searge"
Note: ObfuscationServiceMCP supports type: "notch"
Note: Loading named:intermediary mappings from C:\Users\Xanton.gradle\caches\fabric-loom\mappings\net.fabricmc.yarn-tiny-1.14.4-1
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\render\blend\mixin\ContainerLocalRenderInformationAccessor.java:22: warning: Unable to locate obfuscation mapping for @Accessor target renderer
@Accessor("renderer")
^
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
Note: Writing named:intermediary output TinyMappings to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\loom-cache\mixin-map-1.14.4-1.tiny
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
Note: Writing named:intermediary output TinyMappings to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\loom-cache\mixin-map-1.14.4-1.tiny
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
Note: Writing refmap to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\classes\java\main\mixins.replaymod.refmap.json
Note: Writing named:intermediary output TinyMappings to C:\Users\Xanton\Desktop\ReplayMod\versions\1.14.4\build\loom-cache\mixin-map-1.14.4-1.tiny
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\replay\FullReplaySender.java:468: error: cannot find symbol
NetworkState state = loginPhase ? NetworkState.field_11688 : NetworkState.field_11690;
^
symbol: variable field_11688
location: class NetworkState
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\replay\FullReplaySender.java:468: error: cannot find symbol
NetworkState state = loginPhase ? NetworkState.field_11688 : NetworkState.field_11690;
^
symbol: variable field_11690
location: class NetworkState
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\replay\QuickReplaySender.java:101: error: cannot find symbol
mcPacket = NetworkState.field_11690.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
^
symbol: variable field_11690
location: class NetworkState
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\render\RenderSettings.java:181: error: an enum switch case label must be the unqualified name of an enumeration constant
case field_1133:
^
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\render\RenderSettings.java:194: error: an enum switch case label must be the unqualified name of an enumeration constant
case field_1137:
^
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\extras\urischeme\UriScheme.java:82: error: an enum switch case label must be the unqualified name of an enumeration constant
case field_1133:
^
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\extras\urischeme\UriScheme.java:84: error: an enum switch case label must be the unqualified name of an enumeration constant
case field_1137:
^
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\recording\packet\PacketListener.java:99: error: cannot find symbol
private NetworkState connectionState = NetworkState.field_11688;
^
symbol: variable field_11688
location: class NetworkState
C:\Users\Xanton\Desktop\ReplayMod\src\main\java\com\replaymod\recording\packet\PacketListener.java:196: error: cannot find symbol
connectionState = NetworkState.field_11690;
^
symbol: variable field_11690
location: class NetworkState
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
9 errors
1 warning

Task :1.14.4:compileJava FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':1.14.4:compileJava'.

Compilation failed; see the compiler error output for details.

commented

As I understand it, it is not necessary to run ./gradlew setupDecompWorkspace when compiling fabric versions (1.14.4/1.15.1).

Is "./gradlew build" the only command required and does compiling a 1.15.1 JAR from your ReplayMod workspace work?

commented

Oh, you're right about ReplayStudio, I changed that to point to my local build and forgot to change it back before committing.

As I understand it, it is not necessary to run ./gradlew setupDecompWorkspace when compiling fabric versions (1.14.4/1.15.1).

The 1.14.4 and 1.15.1 versions are no longer built using ForgeGradle, instead we're using Fabric's "loom" gradle plugin which doesn't require ./gradlew setupDecompWorkspace or in fact any additional manual setup.

Is "./gradlew build" the only command required and does compiling a 1.15.1 JAR from your ReplayMod workspace work?

Yes, and no, I'm getting the same error. I probably switched from 1.15.1 code to 1.14.4 code without testing if that worked properly.
You'll have to fix those manually, checking how they were (unintentionally) modified in my WIP commit will probably help.

commented

Gosh I hate ForgeGradle.
The 1.15 branch should compile. I had it running in intellij (not yet outside of it) and at least basic recording and playback was working, iirc I gave up trying to figure out why entities were broken during rendering.
What you're seeing is the ForgeGradle plugin for 1.10.2 spontaneously failing. Don't bother using setupCIWorkspace or setupDevWorkspace, they're broken in other ways as well. I'm always using setupDecompWorkspace.

Try removing the ~/.gradle folder, re-cloning the entire RM folder and then running ./gradlew setupDecompWorkspace.
If that doesn't help, you can disable old versions by removing them (and all older versions) from

"1.7.10",
"1.8",
"1.8.9",
"1.9.4",
"1.12",
"1.14.4-forge",
"1.14.4",
"1.15.1"

and
"1.7.10",
"1.8",
"1.8.9",
"1.9.4",
"1.10.2",
"1.11",
"1.11.2",
"1.12",
"1.12.1",
"1.12.2",
"1.14.4-forge",
"1.14.4",
"1.15.1"

The RM source code is on 1.14.4 (which is fabric and considered more recent than the 1.14.4-forge version), so that one and more recent ones cannot be removed. I.e. if you only care about 1.15, remove all of them except for 1.14.4 and 1.15.1.

commented

Thank you for your answer and help. To be honest, I'm inexperienced in programming and the WIP 1.15 commit is quite extensive and I don't know where to start making manual corrections in the code. I hope I don't bother you with this problem.

commented

In that case I'm afraid to tell you that you're probably better off not bothering with the 1.15 version, it still needs quite a bit of (partially fairly difficult) work before I'd call it usable.
Unless you've got a good bit of experience with Minecraft modding and the Minecraft network protocol, or you can find an experienced modder willing to tutor you (I don't have the time), you probably won't get there any time soon.

commented

Ok thanks, then I will not bother with the WIP 1.15 branch of this project as I will fail with the rather difficult work you mentioned.

Speaking of the Minecraft network protocol, I have seen code related to ViaVersion in this project.

It is easier said than done, but will it make porting faster/easier using ViaVersion/ViaBackwards or ProtocolSupport for the Minecraft protocols, as it would "translate/ convert" them to the current protocol you have implemented for the ReplayMod?

Then it is theoretically only necessary to update the Minecraft / Fabric mappings to a newer version.

commented

Not really. The recording would be 1.15, then we'd have to apply ViaBackwards to get it to 1.14 (if one can even do that on the client) where we could apply the existing ReplayStudio code and then we'd have to convert it back to 1.15 so MC can actually use them.
That won't work at all for Quick Mode though because it depends on having as little as possible of an overhead between the parsed packets and actually applying them (i.e. it operates shortly before the "MC can actually use them" part).
Updating ReplayStudio is usually not that difficult, it just is this time because I decided it'd be better long term if I re-wrote a significant chunk of it.

Updating the mappings isn't the difficult part either (in fact, I've more or less got that automated for another mod I'm working on: https://github.com/ReplayMod/remap, would just need to update RM to use it which I've done in the 1.15 wip branch), can still be tedious for those changes that cannot be auto-remapped though (like e.g. adding MatrixStack to tons of methods in 1.15).
The difficult part is dealing with non-trivial changes in Minecraft, e.g.:

  • If you render a camera path, entities show up with an offset to position and rotation, could be trivial to fix, could be really difficult, can't really tell without doing it.
  • Changes to the protocol
  • Changes to the internal rendering engine (this is a big annoyance for all the special rendering modes)
  • Changes to how client-side chunk compiling is scheduled (we need to hook into that so we can make sure chunks are all loaded on the first video frame)
commented

Thanks for the detailed explanation and the awesome mod. So the difficult part of porting the mod is due to the significant changes in Minecraft, as in the examples you mentioned. I hope I didn't bother you with my questions. Have a nice day and health during this time :)

commented

Not an answer you are looking for, but you can for the time being use ViaFabric (ViaVersion for Fabric client) to connect to a 1.15.2 Server from a 1.14.4 client with replay mod, but Bees and items related to the 1.15 update will be replaced with other items/ entities in 1.14.

commented

Not an answer you are looking for, but you can for the time being use ViaFabric (ViaVersion for Fabric client) to connect to a 1.15.2 Server from a 1.14.4 client with replay mod, but Bees and items related to the 1.15 update will be replaced with other items/ entities in 1.14.

THank you so much! i hope it works

commented

is it usable enough to just render camera paths? i just want to make a cinematic for a thing i built on my server

No. It can barely do a short SP recording (no replay editor) and appears to be able to play the recording (though I haven't tried much), rendering is definitely broken, I have tried that.

Though FYI I've resumed working on it, so it might be able to do that somewhat soonish (no ETA though).

Using ViaFabric is actually a pretty good idea as long as the reason you need 1.15 RM is the server you're playing on and not the 1.15.

commented

Not an answer you are looking for, but you can for the time being use ViaFabric (ViaVersion for Fabric client) to connect to a 1.15.2 Server from a 1.14.4 client with replay mod, but Bees and items related to the 1.15 update will be replaced with other items/ entities in 1.14.

wait is this a client side or server side mod? because i dont want to mess up my world

commented

Not really. The recording would be 1.15, then we'd have to apply ViaBackwards to get it to 1.14 (if one can even do that on the client) where we could apply the existing ReplayStudio code and then we'd have to convert it back to 1.15 so MC can actually use them.
That won't work at all for Quick Mode though because it depends on having as little as possible of an overhead between the parsed packets and actually applying them (i.e. it operates shortly before the "MC can actually use them" part).
Updating ReplayStudio is usually not that difficult, it just is this time because I decided it'd be better long term if I re-wrote a significant chunk of it.

Updating the mappings isn't the difficult part either (in fact, I've more or less got that automated for another mod I'm working on: https://github.com/ReplayMod/remap, would just need to update RM to use it which I've done in the 1.15 wip branch), can still be tedious for those changes that cannot be auto-remapped though (like e.g. adding MatrixStack to tons of methods in 1.15).
The difficult part is dealing with non-trivial changes in Minecraft, e.g.:

  • If you render a camera path, entities show up with an offset to position and rotation, could be trivial to fix, could be really difficult, can't really tell without doing it.
  • Changes to the protocol
  • Changes to the internal rendering engine (this is a big annoyance for all the special rendering modes)
  • Changes to how client-side chunk compiling is scheduled (we need to hook into that so we can make sure chunks are all loaded on the first video frame)

is it usable enough to just render camera paths? i just want to make a cinematic for a thing i built on my server

commented

What I get is

  • What went wrong:
    A problem occurred configuring project ':jGui:1.14.4'.
    Could not get unknown property 'preshadowJar' for task set of type org.gradle.api.internal.tasks.DefaultTaskContainer.
commented

@NeedNot ViaVersion is a server-side (Bukkit, Sponge, Bungee, etc.) to allow newer clients (which do not need to be modded) to connect to an older server. ViaFabric is the same thing for Fabric but also supports running on the client to allow a newer client to connect to older servers (which do not need to be modded). Both operate more or less as a man in the middle between the server and the client, hence why the latter can be installed on either side. Neither should affect your world.

@HeartyYF Which commit are you on (make sure submodules are up-to-date git submodule update) and which command did you try to run? Try running the same thing with --stacktrace to get more details.

commented

@Johni0702 Thank you for explaining and clarifying the feature.

commented
git submodule
-b434c785291baca42307c6584f3abe99938ca6cf jGui

I suppose that's the latest commit.

And when I try to add --Stacktrace parameter it throws another error, but without this it throws the same one. Here is log.
https://paste.ubuntu.com/p/X9Pb5B8BjJ/

commented

@HeartyYF Ah, looks like it cannot connect to launchermeta.mojang.com (faulty DNS configuration or blocked by something), which it needs to do to download the game.
The preshadowJar error is just collateral afterwards.

commented

OK I've solved the first one, and I get this:
https://paste.ubuntu.com/p/Z5bj2Rzx5p/

commented

@HeartyYF are you certain that the submodule exists while building? In particular the file at /root/ReplayMod/jGui/versions/common.gradle?
The only way I could explain that exception was if it didn't.

Edit: Probably should mention that unless you cloned with --recursive you need to run git submodule update --init at least once.

commented

Re-cloning the repo solves that, I guess something went wrong with the network. Anyway thank you all!

commented

@Johni0702 Not a question related to the problem, but rather a feature request, if possible, since I found it interesting that the following was mentioned on the Replay Mod website:

¹ May work with future Minecraft snapshots and/or (pre-)releases if you are lucky. Version-specific features (e.g. Quick Mode, Replay Editor, etc.) will however always be disabled

It is a great feature if only recording and viewing the replay (of future Minecraft snapshots and/or (pre-) releases) were possible and functions like quick mode, playback editor, rendering, etc. were disabled. Then it is possible to record a replay for a future version of Minecraft, and when Replaymod is released for that version, features like rendering and quick mode can be enabled.

What is your opinion to the feature request? Do you think it is a viable option or is it too difficult to develop and too unstable for newer versions? As the Minecraft code could change drastically.

commented

@NeedNot It is up to you how you want to install it, as @Johni0702 mentioned ViaVersion is Serverside and ViaFabric is Clientside and both perform the same function. So you only need one or the other and not both.

commented

@HeartyYF What I think the problem is, is that it can't find the dependency jGui, which is required for ReplayMod.

So either the dependency is missing/outdated or the path to the dependency cannot be found.

If the dependency is missing/outdated you have to perform the git submodule update command @Johni0702 provided.

commented

@Xanton19 That footnote on the ReplayMod website refers to a feature that fabric builds of RM have which is internally called the minimal mode.
There are basically two more or less distinct things in the RM which need to be updated for most new Minecraft versions:
Compatibility with MC's code (obviously) and compatibility with the protocol.

The former is obviously required but as long as there aren't any changes in MC which affect the code touched by the RM, Fabric's intermediary mappings got us more or less covered there without having to recompile the mod. (Forge has a similar thing called SRG names but since Forge isn't available for snapshots and the RM doesn't support Forge on 1.14+ anyway, minimal mode is only available on Fabric).
The latter is only required for some of the advanced features, specifically quick mode, spectator keyframes, loading older replays on new versions (via integrated ViaVersion), the replay editor and stuff based on it (Start/Stop/Pause/Resume recording). So, with minimal mode active, all of those are disabled, allowing you to create recordings, play them back and even render videos as long as the respective MC code hasn't changed too much.

This is mostly useful for snapshots since the chance that MC's code hasn't changed is fairly small across major updates.

commented

Closing this as the 1.15 branch should now compile (at least the 1.15 version via ./gradlew :1.15.2:shadowJar, result being in versions/1.15.2/build/lib/).

The :1.10.2:applyBinaryPatches and :1.10.2:fixMcSources issues were caused by the same problem which should be fixed by 190210f (or rather the commits in our FG fork which are referenced by that commit).

All the basic stuff should be somewhat close to working on 1.15 (Optifine and Blend export being the two big exceptions I can think of right now), so if you find any bugs, don't hesitate to open issues for them (one issue per bug please, clearly indicate the version you're using and make sure it's still the latest one).