Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MC-ELMA Rope

MC-ELMA Rope is a Fabric mod for Minecraft 1.21.10 that turns the vanilla lead into a server-authoritative player rope system. It is built for multiplayer survival servers that want controllable tying, rescue, escape, anchor, and smooth pulling mechanics without replacing vanilla leash behavior.

The mod can run on a dedicated server as the authority for gameplay and physics. Installing it on the client is optional and enables the lightweight rope visual renderer.

Features

  • Bind another player with a vanilla lead after a timed 3 second action.
  • Pull the tied player with smooth velocity-based rope physics instead of teleport correction.
  • Keep rope physics one-way: the tied player cannot pull the controller.
  • Tie a carried player to configured anchor blocks such as fences, walls, chains, iron bars, lightning rods, end rods, and bells.
  • Release anchored ropes automatically when their anchor block is broken.
  • Release ropes manually with timed actions and return a lead when appropriate.
  • Allow configurable third-party rescue actions for unbound players.
  • Give tied players a difficult, low-chance self-escape attempt.
  • Let a rope slip free at a configurable low chance when the holder takes damage, with optional damage type allow/deny filters.
  • Render active ropes on clients that also install the mod, with smoothed endpoint interpolation, configurable sag, and a vanilla-like braided rope look by default.
  • Keep optional rope visual sync cheap by avoiding active-link processing while no ropes exist and reusing per-world snapshots during sync.
  • Protect selected players and optionally disable binding near spawn.
  • Optionally persist rope state across restart and restore it when endpoint players rejoin.
  • Return a lead to the controller when a held player-player target disconnects, while keeping anchored targets tied through reconnect and orderly server restart when configured.
  • Apply configurable reconnect penalties to discourage disconnect abuse.
  • Log rope lifecycle events for moderation when enabled.
  • Keep all core state server-side and tick only active rope links.
  • Ship Fabric GameTest smoke coverage for config reload, manager, disconnect penalty, lifecycle, performance, persistence, physics, and timed action invariants.

Requirements

  • Minecraft 1.21.10
  • Fabric Loader 0.18.4 or newer
  • Fabric API 0.138.4+1.21.10 or newer
  • Java 21

Installation

Install the jar on the server to enable gameplay and physics. Install the same jar on clients when rope visuals are desired.

The first server launch creates:

config/mc_elma_rope.json

Gameplay

Use a lead on another player and keep the interaction conditions valid until the action completes. Survival and adventure players consume one lead when the rope is created. Creative players can create ropes without item consumption.

The controller can release the rope with an empty main hand after the configured release duration. If the rope was created by consuming a lead, manual release refunds one lead to the releasing player.

When enabled, another unbound player can rescue the tied player with a slower timed release. The tied player cannot release other players' ropes and cannot bind another player while tied.

A tied player can attempt a self-escape with an empty main hand. By default the attempt needs 45 seconds of progress inside a 60 second attempt window and succeeds at 1 in 300. The cooldown starts when the attempt starts. Completed failures are stored on the rope; after 60 completed failures, the next completed attempt succeeds. Canceled attempts do not increase this counter.

The attempt pauses while the holder is within 12 blocks and cancels on excess movement, damage, or an item entering the main hand. A taut player-player rope blocks the attempt. A taut anchored rope remains escapable but progresses at x0.15 speed by default.

Automatic cleanup from death, spectator mode, dimension mismatch, anchor break, or admin clear does not refund leads. Disconnect cleanup can optionally return one lead to the controller when a held player-player target disconnects from a lead-created rope.

When an anchored target disconnects, the rope is saved as an offline anchored rope by default. If the player rejoins in the anchor world and the anchor block is still valid, they are tied back to the same anchor. This does not refund a lead, and the normal reconnect penalty still applies.

If disconnect cleanup happens before Fabric's connection callback, the active anchor rope is still moved to offline state. If a portal or multiworld login temporarily places the player in another dimension, the record is retained and retried once per second instead of being discarded.

During an orderly server shutdown, active anchored ropes are also captured into the same offline anchor state. This keeps anchored players tied after the server starts again without enabling restart persistence for ordinary player-player ropes.

By default, a tied target who disconnects is marked for a reconnect penalty. When they return, they receive 2 minutes of Mining Fatigue I and Slowness I. Server owners can disable this, change effect levels, change duration, or disable persistence of pending penalties.

Commands

Admin commands are intended for testing, moderation, and emergency cleanup.

/mcelmarope anchor <player> <x> <y> <z> <length>
/mcelmarope bind <playerA> <playerB> <length>
/mcelmarope clear <player|all>
/mcelmarope clearall
/mcelmarope status <player>
/mcelmarope inspect <player>
/mcelmarope list
/mcelmarope config
/mcelmarope physics show <player|anchor|all>
/mcelmarope physics preset <player|anchor> <soft|balanced|strict>
/mcelmarope physics set <player|anchor> <stiffness|pull_speed|emergency_stretch|emergency_pull_speed|swing_damping> <value>
/mcelmarope physics apply <player|anchor|all>
/mcelmarope physics save <player|anchor|all>
/mcelmarope physics rollback <player|anchor|all>
/mcelmarope reload

preset and set only stage values. apply makes staged values live without reconnecting ropes. save persists the currently applied profile atomically and creates config/mc_elma_rope.json.bak. rollback restores the last saved profile. /mcelmarope reload discards unsaved changes.

Configuration

Important defaults:

  • maxRopeLength: 48.0
  • defaultPlayerRopeLength: 12.0
  • anchorRopeLength: 12.0
  • bindDurationTicks: 60
  • controllerReleaseDurationTicks: 60
  • thirdPartyReleaseDurationTicks: 240
  • enableThirdPartyRelease: true
  • enableSelfEscape: true
  • selfEscapeDurationTicks: 900
  • selfEscapeCooldownTicks: 1200
  • selfEscapeSuccessDenominator: 300
  • selfEscapeAttemptWindowTicks: 1200
  • selfEscapeGuaranteedAfterFailures: 60
  • selfEscapeGuardProgressMultiplier: 0.0
  • playerSelfEscapeTautProgressMultiplier: 0.0
  • anchorSelfEscapeTautProgressMultiplier: 0.15
  • enableHolderDamageDrop: true
  • holderDamageDropDenominator: 100
  • holderDamageDropAllowedDamageTypeIds: []
  • holderDamageDropDeniedDamageTypeIds: []
  • playerPhysics: independent player-player physics profile
  • anchorPhysics: independent player-anchor physics profile
  • commandPermissionLevel: 2
  • maxActiveLinks: 256
  • maxHeldDurationTicks: 0 (0 means disabled)
  • spawnProtectionRadius: 0.0
  • protectedPlayerNames: []
  • protectedPlayerIds: []
  • logRopeEvents: true
  • persistRopes: false
  • persistAnchoredRopesOnDisconnect: true
  • refundLeadToControllerOnTargetDisconnect: true
  • enableDisconnectPenalty: true
  • persistDisconnectPenalties: true
  • disconnectPenaltyOnlyLeadCreatedRopes: true
  • disconnectPenaltyDurationTicks: 2400
  • disconnectPenaltyMiningFatigueLevel: 1
  • disconnectPenaltySlownessLevel: 1
  • disconnectPenaltyShowParticles: true
  • disconnectPenaltyShowIcon: true
  • enableActionFeedbackEffects: true
  • enableActionFeedbackSounds: true
  • ropeVisualEnabled: true
  • ropeVisualSegments: 20
  • ropeVisualSag: 0.045
  • ropeVisualStyle: vanilla_like (vanilla_like, layered_lines)
  • ropeVisualWidthPreset: balanced

Anchor entries support block ids and block tags:

[
  "#minecraft:fences",
  "#minecraft:fence_gates",
  "#minecraft:walls",
  "minecraft:iron_chain",
  "minecraft:chain",
  "minecraft:iron_bars",
  "minecraft:lightning_rod",
  "minecraft:end_rod",
  "minecraft:bell"
]

Use /mcelmarope reload after editing the config.

Each physics profile uses this structure:

{
  "preset": "balanced",
  "stiffness": 0.35,
  "pullSpeed": 0.45,
  "emergencyStretchMultiplier": 2.5,
  "emergencyPullSpeed": 0.8,
  "swingDamping": 0.985
}

Safe hot-edit ranges are: stiffness 0.0-1.0, pull_speed 0.0-1.5, emergency_stretch 1.0-5.0, emergency_pull_speed 0.0-2.0, and swing_damping 0.90-1.0. Editing one field changes that profile to custom.

When persistRopes is enabled, rope state is saved into the world folder as mc_elma_rope_state.json. Player-player ropes restore only after the required players are online again. Normal held player-player disconnect cleanup during gameplay still removes active ropes.

When persistDisconnectPenalties is enabled, pending reconnect penalties are saved into the world folder as mc_elma_rope_disconnect_penalties.json.

When persistAnchoredRopesOnDisconnect is enabled, anchored disconnect state is saved into the world folder as mc_elma_rope_anchored_offline.json. This file also stores active anchored ropes during an orderly server shutdown.

Runtime state files and saved physics config use atomic replacement and keep a .bak recovery file. Do not edit .tmp files; they are incomplete writes and are cleaned on the next successful save.

Compatibility

MC-ELMA Rope does not override the vanilla leash system and does not depend on Create, Create Aeronautics, Sable, NeoForge, or any client optimization mod.

The MVP uses no mixins and no custom rope entity. It is designed to avoid conflicts with optimization-heavy Fabric modpacks. Server gameplay works without the optional client renderer.

Known Limits

  • Rope state persistence is opt-in and disabled by default.
  • The visual renderer is procedural and intentionally lightweight; it imitates vanilla leash visuals without making players vanilla leashable entities.
  • GameTest coverage is currently smoke-level; full multiplayer gameplay validation still belongs in the MC-ELMA test server protocol.

See TESTING_PROTOCOL.md for the dedicated server and gameplay validation checklist.

Build

JDK 21 is required. Use the included Gradle wrapper:

./gradlew build

Successful builds verify the release jar metadata and copy the remapped mod jar into the workspace release folder:

fabric-mod-dev/release/mc_elma_rope-0.9.0-rc.1.jar

License

All Rights Reserved. This repository is public/source-visible for transparency and official distribution preparation, but it is not open-source licensed.

About

Server-authoritative Fabric rope and leash gameplay for Minecraft 1.21.10.

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages