Details

Last Updated
last week
First Uploaded
last week
Downloads
25K
Likes
10
Size
81KB
Dependency string
hiccup-ModSync-1.1.0
Dependants

Categories

ModSync - Chat-Based Mod Synchronization

A plugin for Mage Arena that synchronizes mods between host and clients.

NEW: FRIENDSMODE configuration! Press F8 to disable all kicking/leaving functionality of modsync, to guarantee your private lobbies arent messed with by modsync.

Features

  • Automatic Detection: Detects when players join and automatically checks their mod compatibility
  • Lobby Lock: Host can enable lobby lock (F9) to kick players with mismatched mods (clients get 10 seconds to respond to mod requests)
  • Visual Feedback: Shows success/error messages in the game UI
  • Renames Lobbies: Automatically names lobbies MODDED: (list of mods)

How It Works

For Hosts:

  1. When a player joins, ModSync sends a mod request to the player.
  2. If the player has ModSync, they respond with their mod list
  3. Host compares mod lists automatically and either accepts or kicks the player.
  • Mods with the "all" tag will be considered when matching mod lists. This means that client side mods should not affect the compatibility between host and player.

For Clients:

  1. When joining a lobby, clients automatically send their mod list to the host
  2. Clients respond to mod requests from the host
  3. If mods don't match, clients receive a mismatch message
  • Most client side mods should be fine to run without getting a mismatch error.

Installation

  1. Install BepInEx for Mage Arena
  2. Place ModSync.dll in the BepInEx/plugins folder

Usage

For Hosts:

  • Press F9 to toggle lobby lock on/off

  • When lobby lock is enabled, players with mismatched mods will be automatically kicked

  • Press F8 to toggle FRIENDSMODE. This will disable all kicking/leaving functionality so modsync does not mess up your private lobbies.

  • This can also be modified in the config file.

For Clients:

  • No manual intervention required
  • ModSync automatically handles synchronization when joining lobbies
  • Check the game logs for detailed ModSync information

Configuration

If your mod can be considered a "cheat" - You MUST add the "all" tag and follow below, or you risk your mod being removed.

Mod developers can specify their mod's sync type by adding a static field or property named modsync:

public static string modsync = "all"; // Requires matching on both host and client - This is what is considered when syncing lobbies
public static string modsync = "host"; // Only required on host - These do not count for syncing lobbies
public static string modsync = "client"; // Only required on client - These do not count for syncing lobbies

here is an example of how an all mod should act:

namespace ExampleMod
{
    [BepInPlugin("com.example.mymod", "My Example Mod", "1.0.0")]
    [BepInProcess("MageArena.exe")]
    [BepInDependency("com.magearena.modsync", BepInDependency.DependencyFlags.HardDependency)]
    public class ExampleMod : BaseUnityPlugin
    {
        // This mod requires both client and host to have it
        public static string modsync = "all";
        
        private void Awake()
        {
            // ModSync dependency is guaranteed by BepInEx hard dependency
            // If ModSync is not present, this mod won't even load
            Logger.LogInfo("ModSync found! Initializing mod...");
            // Your mod initialization code here
        }
    }
}

Note the Bepinex Hard Dependency. This is REQUIRED for mods that can be considered cheats.

Donations

Donations are never required, but appreciated. The mod will always remain free and up-to-date.

Support Development

Modding Discord & Support

You can submit issues or questions in the modding discord, on my mod-releases thread.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.