Aptivi - Manual
ProjectsWebsiteBlog
Nitrocid KS v0.1.0 - Rolling Manual
Nitrocid KS v0.1.0 - Rolling Manual
  • Welcome!
  • Version Release Notes
  • Installation and Maintenance
    • Installing the Kernel
      • Windows
      • macOS
      • Linux
      • Android
    • Upgrading the Kernel
      • Windows
      • macOS
      • Linux
      • Android
    • Dependency Information
  • Fundamentals
    • What is the Kernel?
    • What is Nitrocid KS?
    • Simulated Kernel Features
      • Extra Features
        • More Networking
          • FTP Client
          • SFTP Client
          • RSS Client
          • HTTP Client
          • Mail Client
        • Games and Amusements
          • Hangman
          • BackRace
          • Meteor
          • Russian Roulette
          • ShipDuet
          • Snaker
          • Solver
          • SpeedPress
          • Wordle
        • More Editors
          • JSON Editor
          • SQL Editor
        • Common Programs
          • Archive
          • Caffeine
          • Calendar
          • Calculator
          • Contacts
          • Dictionary
          • Git Shell
          • Music Player
          • Notes
          • SSH Connection
          • Timers
          • To-do List
          • Unit Converter
          • Weather
        • Docking
        • Language Studio
        • Theme Studio
      • Accounts
        • Groups
        • Permissions
      • Editors
        • Text Editor
        • Hex Editor
      • Shells
        • Commands List
        • Addon Commands List
      • Files and Folders
        • Hashing and Encryption
      • Networking
      • Languages
      • Screensavers
  • Advanced and Power Users
    • Building the Kernel
      • Building on Windows
      • Building on macOS
      • Building on Linux
      • Building on Android
    • Kernel Modifications
      • Building your Mod
      • Analyzing your Mod
        • Text - NKS0001
        • ConsoleBase - NKS0002
        • ConsoleBase - NKS0003
        • ConsoleBase - NKS0004
        • ConsoleBase - NKS0005
        • ConsoleBase - NKS0006
        • ConsoleBase - NKS0007
        • ConsoleBase - NKS0008
        • ConsoleBase - NKS0009
        • Files - NKS0010
        • Files - NKS0011
        • Files - NKS0012
        • Files - NKS0013
        • Files - NKS0014
        • Files - NKS0015
        • Files - NKS0016
        • Files - NKS0017
        • Files - NKS0018
        • Files - NKS0019
        • Files - NKS0020
        • Files - NKS0021
        • Files - NKS0022
        • Files - NKS0023
        • Kernel - NKS0024
        • Kernel - NKS0025
        • Kernel - NKS0026
        • Kernel - NKS0027
        • Kernel - NKS0031
        • Kernel - NKS0032
        • Kernel - NKS0033
        • Kernel - NKS0037
        • Kernel - NKS0038
        • Kernel - NKS0039
        • Kernel - NKS0040
        • Kernel - NKS0041
        • Kernel - NKS0042
        • Kernel - NKS0043
        • Kernel - NKS0052
        • Kernel - NKS0053
        • Languages - NKS0044
        • Languages - NKS0045
        • Languages - NKS0046
        • Network - NKS0051
        • Text - NKS0047
        • Text - NKS0048
        • Text - NKS0049
        • Text - NKS0050
        • Text - NKS0054
        • Text - NKS0055
      • Managing your Mod
        • Inter-Mod Communication
        • Inter-Addon Communication
    • Diagnostics
      • Debugging
        • Local Debugging
        • Remote Debugging
      • Testing
      • Other Diagnostics
    • Inner Workings
      • Kernel Settings
        • Mechanics of Settings App
        • Settings Format
        • Custom Settings
      • Shell Structure
        • Help System
        • Command Parsing
        • Command Information
        • Command Switch Management
        • Command Switch Information
        • Shell History
        • Shell Scripting
        • Shell Presets
        • Extra Shell Features
      • Multilingual Kernel
        • Custom Languages
      • Inner Essentials
        • Kernel Drivers
          • Console Drivers
          • Debug Logger Drivers
          • Encoding Drivers
          • Encryption Drivers
          • Filesystem Drivers
          • Hardware Prober Drivers
          • Input Drivers
          • Network Drivers
          • RNG Drivers
          • Regular Expression Drivers
          • Sorting Drivers
        • Kernel Placeholders
        • The Permissions
        • The Users
        • Kernel Threads
        • Kernel Arguments
        • Kernel Journaling
        • Remote Procedure
        • Nitrocid Filesystem
        • Screensaver Internals
        • Splash Internals
        • Kernel Platform
        • Theme Internals
        • Color Internals
        • Privacy Consents
        • System Notifications
        • MAL and MOTD
        • Progress Handlers
        • Assembly Signing
        • Assembly Reflection
        • Random Number Generation
        • Network Tools
        • Date and Time
        • Mod Manual Pages
      • Miscellaneous APIs
  • Project Dependencies
  • Report an issue
  • Source code
  • API Reference
Powered by GitBook
On this page
  • How to make a function publicly accessible?
  • How can I make a property or a field publicly accessible?
  • Listing functions, properties, and fields
Edit on GitHub
  1. Advanced and Power Users
  2. Kernel Modifications
  3. Managing your Mod

Inter-Mod Communication

Two or more than two mods talking to each other in Nitrocid

Inter-Mod Communication allows your mods to execute the publicly-available functions of another mod. It allows you to connect two or more than two mods with each other in a mechanism that doesn't interfere with the other mod's operations.

How to make a function publicly accessible?

You can make a function publicly accessible in one mod by implementing the PubliclyAvailableFunctions with a read-only dictionary that contains all your publicly-available functions in your main mod entry point.

Interface declaration
ReadOnlyDictionary<string, Delegate> PubliclyAvailableFunctions { get; }

The key is the function name that the mod manager uses to search for a function when invoking the function executor. The value, which is a delegate of either a function or a method (subs in Visual Basic), can either take no parameters or take parameters of varying sizes.

To execute custom mod functions in another mod, you must specify the mod name and the function to execute in the ExecuteCustomModFunction() method:

public static object ExecuteCustomModFunction(string modName, string functionName)
public static object ExecuteCustomModFunction(string modName, string functionName, params object[] parameters)

You must specify the main mod name in the above function, since it uses that name to fetch all mod parts and query them for available functions.

ExecuteCustomModFunction() returns null under the following conditions:

  • There are no functions in all the mod parts from your mod.

  • There is no function that goes by the name of the specified function name that you plan to execute.

  • There is a function, but the delegate is unspecified.

How can I make a property or a field publicly accessible?

In your mod, you can make a property or a field publicly accessible by implementing the PubliclyAvailableProperties property with a read-only dictionary that contains all your publicly-available properties in your main mod entry point. Similarly, you can add a field to its own dedicated dictionary, PubliclyAvailableFields.

Interface declaration
ReadOnlyDictionary<string, PropertyInfo> PubliclyAvailableProperties { get; }
ReadOnlyDictionary<string, FieldInfo> PubliclyAvailableFields { get; }

The key is the property or the field name that the mod manager uses to search for a property or a field to get or set its value.

To get a property value or a field value from a mod, you can call the following functions:

public static object GetCustomModPropertyValue(string modName, string propertyName)
public static object GetCustomModFieldValue(string modName, string fieldName)

Similarly, to set a property value or a field value declared publicly by a mod, you can call the following functions:

public static void SetCustomModPropertyValue(string modName, string propertyName, object value)
public static void SetCustomModFieldValue(string modName, string fieldName, object value)

You must specify the main mod name in the above functions, since they use that name to fetch all mod parts and query them for available fields or properties.

GetCustomModPropertyValue() and GetCustomModFieldValue() return null under the following conditions:

  • There are no properties or fields in all the mod parts from your mod.

  • There is no property or field that goes by the name of the specified name that you plan to execute.

  • There is a property or a field, but that item is not static

Listing functions, properties, and fields

You can now list all the available functions, properties, and fields from a specific mod using one of the following functions:

InterAddonTools.cs
public static string[] ListAvailableFunctions(string addonName)
public static string[] ListAvailableProperties(string addonName)
public static string[] ListAvailableFields(string addonName)

You must specify the main mod name in the above functions, since they use that name to fetch all mod parts and query them for available functions, fields, or properties.

The three functions return an empty array under the following conditions:

  • There are no properties or fields in all the mod parts from your mod.

Last updated 7 months ago