bytzo / sessility

AFK utilities for the server: Keeps track of sessile creatures, more often known as "AFK players".
https://modrinth.com/mod/sessility
MIT License
4 stars 4 forks source link

Player is considered AFK when riding a boat #7

Closed JarlPenguin closed 4 months ago

JarlPenguin commented 6 months ago

It seems like the mod thinks a player becomes AFK when riding a boat for some time. This only happens when the player isn't doing anything else besides riding the boat (e.g. left/right clicking).

bytzo commented 6 months ago

Thanks for reporting this!

After looking into the issue, it seems to occur because Sessility doesn't check position when determing a player's motility. This is intentional, as there's nothing sent to the server (to my knowledge) that might differentiate whether a player is actively moving by input or being pushed by the environment for properties like position.

For now, one possible option to help mitigate this might be to set the detect-rotation property to true, if not already (available in Sessility version 0.4 or later). This would detect motility when a player rotates their head, which might be enough to stop a player from being considered sessile when rowing a boat for a long time. However, if a player rows a boat in one direction for a long time without rotating their head, this issue would still occur.

In terms of Sessility itself, it might be possible for the server to use the animation state of the boat paddles to determine if a player is moving by input or not, since the paddle state is only true when a player is actively pressing an input key. However, there seems to be a bug in the vanilla client that may introduce false positives if this method of detecting motility is implemented. When a sessile passenger in a boat is moved to be the controller due to the controller exiting the boat, the passenger will sometimes emit a single paddle state packet with a true value, even if no input is pressed on the client. I have yet to discover the cause of this other issue, and will look into it in the future.

Regardless, this feature will likely be implemented in Sessility even with the chance of a false positive, since it is rare for it to occur. However, it likely will only exist as an optional feature, similar to detect-advancement-action or detect-rotation, because it introduces cases where a sessile player could be falsely considered motile.

bytzo commented 6 months ago

I have now pushed code that implements detecting motility through the boat paddle state! This should fix situations where sessility is falsely triggered when constantly paddling a boat for a long time without otherwise moving.

You can find the build on its Gradle CI run page, which can be downloaded under "Artifacts". A workaround was also implemented for the possible false positive when a sessile passenger becomes a controller, so this should be safe to use by default. Note that this build also includes one other change to motility messages, but its effect should be negligible if you aren't using formatting codes in your motility messages.

Please let me know if this change solves the problems you were having!

alien-sunset commented 5 months ago

we are using 0.5.1 and boating still marks a player as sessile, even with rotation detection set to true and they are moving their head

(also worth noting that the config file for this version does not contain explanations for what all the settings do, and there are settings not shown in the screenshots and things are in a different order and I'm easily confused XD )

bytzo commented 5 months ago

Hi @alien-sunset, the changes mentioned above have not yet been included in a full release of Sessility, so the problem is still present in 0.5.1. You can try the development version from the Gradle CI run page containing the change to see if that works for you. Make sure the detect-boat-paddle property is set to true.

Sorry about the confusing configuration file, that is something I do intend to fix in the future! Currently, Sessility uses the same system the vanilla server uses for its server.properties file, so documentation comments are not present. I'll see if I can move away from this or somehow implement documentation into it in the future.

alien-sunset commented 5 months ago

ah that new build works perfectly! thank you 😄

bytzo commented 4 months ago

This issue should be resolved with the release of Sessility 0.6! A new property titled detect-boat-paddle was added to enable the detection of boat paddling by players.