Hello, to make the home system data pack multiplayer-friendly, the core solution is to reliably associate each player with their unique home point (armor stand) and ensure commands execute in the correct player's context.
Identify the Player: When a fishing bobber triggers an action, execute as @s (the bobber) then at @s as @p[distance=..10] to correctly identify and switch context to the player who cast the bobber. This ensures all subsequent commands operate for that specific player.
Player-Armor Stand Link (UUIDs):
Instead of relying on proximity, store the player's unique 128-bit UUID components (e.g., as 4 scoreboard values: uuid-0, uuid-1, uuid-2, uuid-3) on both the player (temporarily) and the armor stand.
When an armor stand is summoned for a home, transfer these UUID scores from the player to the newly summoned armor stand.
Targeted Actions:
Saving: Before creating a new home armor stand, use the player's UUID scores to find and kill any existing home armor stand that belongs to that player.
Loading/Teleporting: When a player wants to go home, find the armor stand whose stored UUID scores exactly match the player's current UUID scores. Then, teleport the player to that specific armor stand. After teleporting, kill only that matched armor stand.