Uploaded May 2023 | Updated September 2026, 2 weeks ago
Write a descriptive title without sounding pretentious challenge.
This video is a short demo of a couple things, but nothing super useful (yet).
As a quick overview, you basically have two velocities. Your client velocity, and your server velocity. Each are used for different things, but for most intents and purposes they work in tandem, staying almost identical. However, if you're careful, you can manipulate them semi-independently. I've been toying with this idea for a couple days(except I wrote/recorded this back in February and promptly got distracted by ): ), as a way to sort of "store" speed to be utilized later. I've yet to be able to do this effectively or usefully because it's frankly quite difficult, but I suspect it to be possible. In the meantime, here's a rather goofy video kinda demonstrating the main idea of it. You can look in the upper left corner to see how each of the variables relate and end up being used, plus here's a lil breakdown:
So for starters: jumping. In this case, jumping is basically just the act of setting your y velocity to 0.42. Your client velocity "jumps" when it sees you press the jump key. But the server(in most cases) doesn't know when you press the jump key, so it can't(normally) do this. Instead! Whenever it detects that you move, it looks at the change in position and "guesses" when you might have jumped. Only when it detects one does you server velocity "jump." The criteria for this jump is: be both leaving the ground, AND moving upwards. And this works pretty well if you disregard everywhere it doesn't. One case where it fails is running off the side of a block and then jumping, as I do in the start of the video. I get a jump on the client just fine, but the server is none the wiser. So, my velocity just enters freefall on the server. It detects that I leave the ground when I run off the edge, but since I'm not moving upwards it doesn't think it's a jump(cuz its not!). Then when I do actually jump, my position moves upwards, but since I already left the ground earlier in that tick, it still doesn't count it as a jump. The result is my server velocity falling straight down, meanwhile my client velocity is going upwards, desyncing the two significantly. That prolly doesn't make sense if it’s even correct but I'm already ignoring a lot.
Anywho keeping them desynced like this for more than the duration of a jump is difficult. If the server ever sees me hit the ground again, it'll reset all of this downward velocity cuz collision. This is doubly annoying because server velocity significantly offsets your server position from your client position. Your client position is constantly copied over to your server position, but then gets offset by the server velocity.(*"constantly copied over" as in every 20 ticks/whenever you move more than 0.03m(this causes what rsg players call "desync" when measuring eyes)). So even if I'm 0.5m above the ground, if I have -0.5+m/t of server velocity then it’ll hit the ground and kill it. That’s ofc annoying cuz you have to touch the ground to jump again. Here i prevent this just by raising my render distance right as I'm about to hit a ledge. This stops my server position from updating for a wee bit. During this lull I can hit the ground and jump again on the client, while the server didn’t notice. I guess it just goes from being too high in the air to touch the ground at one point, to being completely past the ledge and in the air again on the next. I've done it without the the render distance without recording, but it just comes down to irl lag rng. Anyway, this lets me jump upwards again even though my server velocity is still completely in freefall.
(5/1 edit:) Realistically you’d do something more useful to get velocity, since going down isn’t too interesting, but that was easy enough at the time.
But once you have a bunch of extra server velocity, you have to figure out how to use it. This is really the only interesting part of this. One way is just abuse the position offset I mentioned earlier, which has some interesting uses. Or you could throw a projectile, which would transfer that velocity to the projectile(also very cool). But here I just transfer this server velocity over to the client, which I think has the most interesting results. Whenever you take damage, your server velocity gets copied back over to your client velocity. Here I just take damage using a fire, which turns my -1.7m/t server velocity into -1.7m/t client velocity(I actually touch it while I'm still above it because of the server offset thing). The slime block is then just for fun since it turns the negative velocity into positive velocity and looks silly. The velocity you get from this damage transfer is actually capped at 3.9m/t in each axis, which is sad, but its also the only reason dragon knockback doesn't send you 1k blocks out lol. Which now that I think about it is also sad cuz that'd be hilarious.
Write a descriptive title without sounding pretentious challenge.
This video is a short demo of a couple things, but nothing super useful (yet).
As a quick overview, you basically have two velocities. Your client velocity, and your server velocity. Each are used for different things, but for most intents and purposes they work in tandem, staying almost identical. However, if you're careful, you can manipulate them semi-independently. I've been toying with this idea for a couple days(except I wrote/recorded this back in February and promptly got distracted by ): ), as a way to sort of "store" speed to be utilized later. I've yet to be able to do this effectively or usefully because it's frankly quite difficult, but I suspect it to be possible. In the meantime, here's a rather goofy video kinda demonstrating the main idea of it. You can look in the upper left corner to see how each of the variables relate and end up being used, plus here's a lil breakdown:
So for starters: jumping. In this case, jumping is basically just the act of setting your y velocity to 0.42. Your client velocity "jumps" when it sees you press the jump key. But the server(in most cases) doesn't know when you press the jump key, so it can't(normally) do this. Instead! Whenever it detects that you move, it looks at the change in position and "guesses" when you might have jumped. Only when it detects one does you server velocity "jump." The criteria for this jump is: be both leaving the ground, AND moving upwards. And this works pretty well if you disregard everywhere it doesn't. One case where it fails is running off the side of a block and then jumping, as I do in the start of the video. I get a jump on the client just fine, but the server is none the wiser. So, my velocity just enters freefall on the server. It detects that I leave the ground when I run off the edge, but since I'm not moving upwards it doesn't think it's a jump(cuz its not!). Then when I do actually jump, my position moves upwards, but since I already left the ground earlier in that tick, it still doesn't count it as a jump. The result is my server velocity falling straight down, meanwhile my client velocity is going upwards, desyncing the two significantly. That prolly doesn't make sense if it’s even correct but I'm already ignoring a lot.
Anywho keeping them desynced like this for more than the duration of a jump is difficult. If the server ever sees me hit the ground again, it'll reset all of this downward velocity cuz collision. This is doubly annoying because server velocity significantly offsets your server position from your client position. Your client position is constantly copied over to your server position, but then gets offset by the server velocity.(*"constantly copied over" as in every 20 ticks/whenever you move more than 0.03m(this causes what rsg players call "desync" when measuring eyes)). So even if I'm 0.5m above the ground, if I have -0.5+m/t of server velocity then it’ll hit the ground and kill it. That’s ofc annoying cuz you have to touch the ground to jump again. Here i prevent this just by raising my render distance right as I'm about to hit a ledge. This stops my server position from updating for a wee bit. During this lull I can hit the ground and jump again on the client, while the server didn’t notice. I guess it just goes from being too high in the air to touch the ground at one point, to being completely past the ledge and in the air again on the next. I've done it without the the render distance without recording, but it just comes down to irl lag rng. Anyway, this lets me jump upwards again even though my server velocity is still completely in freefall.
(5/1 edit:) Realistically you’d do something more useful to get velocity, since going down isn’t too interesting, but that was easy enough at the time.
But once you have a bunch of extra server velocity, you have to figure out how to use it. This is really the only interesting part of this. One way is just abuse the position offset I mentioned earlier, which has some interesting uses. Or you could throw a projectile, which would transfer that velocity to the projectile(also very cool). But here I just transfer this server velocity over to the client, which I think has the most interesting results. Whenever you take damage, your server velocity gets copied back over to your client velocity. Here I just take damage using a fire, which turns my -1.7m/t server velocity into -1.7m/t client velocity(I actually touch it while I'm still above it because of the server offset thing). The slime block is then just for fun since it turns the negative velocity into positive velocity and looks silly. The velocity you get from this damage transfer is actually capped at 3.9m/t in each axis, which is sad, but its also the only reason dragon knockback doesn't send you 1k blocks out lol. Which now that I think about it is also sad cuz that'd be hilarious.










