Commit Graph

78 Commits

Author SHA1 Message Date
Jonas Herzig
73fe633819 Update preprocessor 2024-09-09 13:22:04 +02:00
Jonas Herzig
5959da8744 Fix LoginSuccess packet being recorded with incorrect id on 1.20.2-4 2024-07-12 12:38:17 +02:00
Jonas Herzig
310dc90e11 Remove WrappedTimer 2024-06-23 20:24:57 +02:00
Jonas Herzig
76a68b7867 Prevent pausing in the middle of a bundle packet
Because certain actions (e.g. switching to Quick Mode) will fail in this
state.
2024-06-23 20:24:57 +02:00
Jonas Herzig
5218feb6b6 Update to 1.20.6 2024-06-23 20:24:57 +02:00
Jonas Herzig
675134e6d6 Split outbound handler from FullReplaySender
This because with 1.20.6, MC will require outbound messages to reach its
handlers to switch between protocol versions. So we need our drop
handler two be at the very end of the write processing chain.
2024-06-23 20:07:57 +02:00
Jonas Herzig
fe0677923c Let Minecraft handle packet decoding during playback
We've done this ourselves only because it was easier at the beginning.
However by now (and especially with 1.20.5), Minecraft's packet decoding
has become substantially more sophisticated, to the point that it's
probably a bad idea to try to do it ourselves.

This commit gives back that responsibility to Minecraft by adding the
standard decoder (and encoder because it's required for proper
connection state management on modern versions) to our channel pipeline,
changes the full and the quick replay sender to send raw `ByteBuf`s into
the front of the channel, and moves the posititon of the full replay
sender in the channel pipeline such that it can see and modify packets
after Minecraft has decoded them.
2024-05-13 15:25:50 +02:00
Jonas Herzig
ad49a69f37 Switch from FG to archloom + essential-gradle-toolkit
- Upgrade Gradle to 8.7
- Increase build daemon max memory to 8GB because archloom can compile a lot
  more projects at the same time.
- Disable Minecraft 1.8 (not 1.8.9) because archloom fails to set up for that
2024-05-12 14:24:43 +02:00
Jonas Herzig
f8379fa317 Fix thread-unsafe server resource pack playback 2024-03-10 16:29:31 +01:00
Jonas Herzig
faebeb525a Port to 1.20.3-rc1 2023-12-03 18:51:37 +01:00
Jonas Herzig
b8ab7aa5a7 Port to 1.20.2 2023-11-27 19:40:42 +01:00
Jonas Herzig
7726550131 Port to MC 1.20 2023-06-12 10:28:08 +02:00
Jonas Herzig
78bd060249 Port to MC 1.19.4 2023-03-26 18:58:49 +02:00
Jonas Herzig
d571e8fed5 Port to MC 1.19.3
Building against 1.19.3-rc3 for now because 1.19.3 has yet to release.
ReplayStudio/ViaVersion is already targeting the release version though.
2022-12-07 16:34:55 +01:00
Jonas Herzig
06f1e0c36c Fix chat message validation failure when Show Chat is off on 1.19.1+ 2022-08-10 14:22:21 +02:00
Jonas Herzig
7550e3dcb7 Fix race conditions in movement packet filtering (fixes #760)
We cannot filter this packet purely on the netty thread because our filter
depends on the current camera position (if it's too far, we do want to teleport
it closer) and accessing the camera is only safe from the main thread.

Previously the second part had not been considered which could lead to race
conditions where the camera may not yet exist on the netty thread at time of
handling. These appear to have gotten the wholly inappropriate "just put a null
check around it" treatment, but that means that the filter sometimes doesn't
work (hence the bug report).

This commit changes handling such that all access to `allowMovement` is always
done on the main thread and then moves the filtering there as well. And
therefore filtering should now work properly.
2022-07-31 12:55:54 +02:00
Jonas Herzig
af3f6ddbe2 Always handle PlayerPositionLookS2CPacket manually 2022-07-31 12:48:39 +02:00
Jonas Herzig
962f08718f Fix "Show Chat" setting on 1.19+ (fixes #757) 2022-07-31 10:38:14 +02:00
Jonas Herzig
9ce25f711f Port to MC 1.19-pre3 2022-05-27 10:05:50 +02:00
Jonas Herzig
463b947c2b Suppress fabric-screen-handler-api during playback (fixes #713) 2022-04-10 13:36:50 +02:00
Jonas Herzig
4aa667fe04 Port to MC 1.18.2 (closes #697) 2022-03-09 07:08:02 +01:00
Jonas Herzig
0b8a2a107c Use separate thread to send packets, even in sync mode (fixes #674) 2022-03-05 17:21:38 +01:00
Jonas Herzig
ad62e51ab3 Fix lighting when block is placed in same frame as chunk load 2021-12-08 16:22:06 +01:00
Jonas Herzig
d6cd917d9d Fix passengers getting stuck in unloaded chunks (fixes #606)
We need to update the vehicle before its passengers.
2021-12-07 13:35:36 +01:00
Jonas Herzig
6e1febdab8 Port to MC 1.18-pre1 2021-11-14 17:27:35 +01:00
Jonas Herzig
0cb14a9106 Re-introduce entity-in-wrong-chunk-at-unload workaround (fixes #548)
Nope, this was not fixed, they just changed where the chunkCoords are stored but
the interpolation issue remains.
2021-07-24 17:06:46 +02:00
Jonas Herzig
1802b1a7d0 Port to 1.17-pre1 2021-06-06 10:42:16 +02:00
Jonas Herzig
cfb9e15b8a Make use of new @Pattern feature to centralize version-aware code
That is, most of the business code should not be aware that it is being compiled
to multiple versions even when it heavily interacts with MC, preprocessor
statements should be an escape hatch, not the norm.
Similarly, code should not be forced to do `MCVer.getWindow(mc)` instead of the
much more intuitive `mc.getWindow()`, and a new preprocessor (technically remap)
feature makes this possible by defining "search and replace"-like patterns (but
smarter in that they are type-aware) in one or more central places (the
"Patterns.java" files) which then are applied all over the code base.

In a way, this is another step in the automatic back-porting process where
preprocessor statements are used when we cannot yet do something automatically.
Previously we "merely" automatically converted between different mapping, this
new feature now also allows us to automatically perform simple refactoring
tasks like changing field access to a getter+setter (e.g. `mc.getWindow()`), or
changing how a method is called (e.g. `BufferBuilder.begin`), or changing a
method call chain (e.g. `dispatcher.camera.getYaw()`), or most other
search-and-replace-like changes and any combination of those.
The only major limitation is that the replacement itself is not smart, so
arguments must be kept in same order (or be temporarily assigned to local
variables which then can be used in any order).
2021-03-14 12:12:51 +01:00
Jonas Herzig
633bc19650 Use callback-style events throughout all versions
Removes the need for //#if statements on each and every event handler.
Instead we now always use the equivalent Callback and have one central 1.12.2
class which forwards Forge events to the callbacks.
2021-02-23 00:41:22 +01:00
Jonas Herzig
51a4ade37e Fix slow drifting in FullReplaySender replay time (fixes #451) 2021-02-17 15:16:33 +01:00
Jonas Herzig
9af562957f Merge branch 'stable' into develop 2020-09-27 18:48:54 +02:00
Jonas Herzig
a55320030f Fix thread-unsafe mc method call in FullReplaySender (fixes #370) 2020-09-27 15:28:08 +02:00
Jonas Herzig
3db25abe48 Merge branch 'mc-1.16.3' into develop 2020-09-10 17:34:48 +02:00
Jonas Herzig
efd1cebff3 Update to MC 1.16.3 2020-09-10 17:32:21 +02:00
Jonas Herzig
fcd1224fa0 Allow replay to be started in sync mode (required for #349) 2020-09-06 11:45:37 +02:00
Jonas Herzig
c2f51d41fa ./gradlew :1.16.2:setCoreVersion 2020-08-28 14:55:40 +02:00
Jonas Herzig
0e77235ef9 Update to MC 1.16.2-rc1 2020-08-09 13:55:00 +02:00
Jonas Herzig
f1885ece41 Fix non-player entity freezing on chunk unload in 1.14+ (fixes #203) 2020-07-13 19:03:41 +02:00
Jonas Herzig
5bf6773655 Merge remote-tracking branch 'origin/develop' into snapshot 2020-06-28 22:07:49 +02:00
Jonas Herzig
058346d247 Workaround a bug in MC where light is not updated (fixes #209)
MC stores server light data and only applies it during the next frame.
Therefore, if there is no frame between receiving the chunk and block changes in
it (like when jumping in replays), then the light update from the block change
gets lost.
2020-06-28 21:12:12 +02:00
Jonas Herzig
dc9fcb11cd Update to 1.16-rc1 2020-06-21 15:29:07 +02:00
Jonas Herzig
82200a7c34 Update to 1.16-pre6 2020-06-15 21:12:06 +02:00
Jonas Herzig
30aa992ddb Update to 1.16-pre5 2020-06-15 11:14:30 +02:00
Jonas Herzig
2ffde14c60 Update to 1.16-pre1 2020-06-15 09:44:37 +02:00
Jonas Herzig
88be6b3935 Update to 20w22a (minimal mode only) 2020-06-04 13:03:34 +02:00
Jonas Herzig
ef13d020a2 Fix incorrect screen and crash when encountering replay restrictions 2020-05-24 13:39:15 +02:00
Jonas Herzig
b119d2d127 ./gradlew :1.15.2:setCoreVersion
Also `./gradlew :jGui:1.15.2:setCoreVersion`.
2020-04-06 13:18:37 +02:00
Jonas Herzig
b69cd9fb81 Fix mode of various files
None of these should be executable, I blame Marius.
2020-04-02 00:11:06 +02:00
Jonas Herzig
527562549b Update 1.14.4 yarn 2020-04-02 00:11:02 +02:00
Jonas Herzig
b3b73609cb Migrate 1.15.1 project to 1.15.2 2020-03-31 14:04:50 +02:00