possess-4.1.2.jar
Curse Maven Snippet
What's new
Added
- Click-and-drag item distribution in the possessor's interactive inventory screen: left (even split), right (one item each), middle (creative fill) - sent as the real vanilla START/ADD/END protocol.
- Creative middle-click: clones a creative stack onto the cursor (creative possessee only).
- Generic menu buttons: the enchanting table's three rows, showing their real lapis/level cost.
- Anvil rename box: a real, live text field; typing sends the new name to the server as you go.
- GUI mirroring: opening the possessor's inventory view also opens the real inventory screen on the possessee's own client (if they have the module). Whether they can close/click it follows the existing target-input lock ("possess control").
- Fire mirroring: the possessor's HUD shows the real vanilla fire overlay whenever the possessed target is on fire, via
ScreenEffectRenderer.renderFireOverlay(not a reimplementation). - Enchantment/potion/terrain-aware possessed movement (
TerrainSpeed.java, new):- Swift Sneak - now reads the real
SNEAKING_SPEEDattribute instead of a flat 0.3. - Depth Strider - approximated via the
WATER_MOVEMENT_EFFICIENCYattribute. - Soul sand / honey block (and the Movement Efficiency attribute's interaction with them) - read live via
Entity#getBlockSpeedFactor()(reflection). - Cobwebs / sweet berry bushes / powder snow - read live via
Entity#stuckSpeedMultiplier(reflection). - Speed/Slowness potions and Soul Speed already worked automatically; confirmed, not changed.
- Swift Sneak - now reads the real
- Momentum tracking / ice sliding: horizontal momentum (
Session#vx/vz) is now carried between ticks. A no-op on ordinary ground; on ice/packed ice/blue ice the target keeps sliding after input stops (TerrainSpeed#momentumGrip), applied to both players (Driver) and mobs (MobDriver). /possess swap <player1> <player2>: cross-wires two players' real input (movement, look, jump, sneak, sprint) so each one's body is driven by the OTHER's keys, while both stay in their own first-person view the whole time - no spectating, no camera swap. Requires BOTH players to have the client module (allowSwapconfig)./possess unswapends it. Built as entirely separate code (SwapPair/SwapSessions/SwapDriver), so the existing possession feature was not touched.
Fixed
- Shared/unlocked control mode only properly freed the target for operators using the client module; an operator on plain flight input still had their own computed falling physics fight the target's real movement even while unlocked. Both input paths now hand off identically.
- Removed a dead
interactablefield fromForceScreenPayloadthat nothing on the client ever read (the real lock state always came from a different packet) - one source of truth now instead of two that could disagree. - The mirrored inventory screen was being torn down and recreated every ~2 second heartbeat; it's now only (re)opened on an actual state change.
- Removed a
targetMenuInputAllowedhelper that was never called and implied a server-side protection that doesn't exist (no NeoForge event can intercept that packet without a mixin). - Cross-feature conflict: a normal possession could be started on (or by) a player currently in an active
/possess swap, which would have fought the swap's own teleports on the same body every tick. Both directions are now blocked. - Swap rubber-banding: a swapped player's own client was still fully predicting its own WASD/jump/sneak locally, fighting the server's per-tick override from their partner's keys. The same local-input suppression already used for a locked possession target now also covers swap participants.
This mod has no additional files

