Aptivi - Manual
ProjectsWebsiteBlog
Nitrocid KS - Manual
Nitrocid KS - Manual
  • Welcome!
  • Versions and Compatibility
    • Supported Versions
    • EOL Versions
    • Version Release Notes
      • v0.0.1.x series
      • v0.0.2.x series
      • v0.0.3.x series
      • v0.0.4.x series
      • v0.0.5.x series
        • v0.0.5.0 Beta Versions
      • v0.0.6.x series
        • v0.0.6.0 Beta Versions
      • v0.0.7.x series
        • v0.0.7.0 Beta Versions
      • v0.0.8.x series
      • v0.0.9.x series
      • v0.0.10.x series
      • v0.0.11.x series
      • v0.0.12.x series
      • v0.0.13.x series
      • v0.0.14.x series
      • v0.0.15.x series
      • v0.0.16.x series
      • v0.0.17.x series
      • v0.0.18.x series
      • v0.0.19.x series
      • v0.0.20.x series
      • v0.0.21.x series
      • v0.0.22.x series
      • v0.0.23.x series
      • v0.0.24.x series
      • v0.1.0.x and 0.1.1.x series
      • v0.1.2.x and v0.1.3.x series
    • Compatibility Notes for KS API Revisions
      • Upgrading to API v1.0 series
      • Upgrading to API v1.1 series
      • Upgrading to API v1.2 series
      • Upgrading to API v1.3 series
      • Upgrading to API v2.0 series
      • Upgrading to API v2.1 series
      • Upgrading to API v3.0 series
        • From 0.0.24.x to 0.1.0 Beta 1
        • From 0.1.0 Beta 1 to 0.1.0 Beta 2
        • From 0.1.0 Beta 2 to 0.1.0 Beta 3
        • From 0.1.0 Beta 3 to 0.1.0 RC
        • From 0.1.0 RC to 0.1.0 Final
      • Upgrading to API v3.1 series
  • 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
          • SSH Connection
          • SFTP Client
          • RSS Client
          • HTTP Client
          • Mail Client
        • Games and Amusements
          • Hangman
          • BackRace
          • Meteor
          • Pong
          • Russian Roulette
          • ShipDuet
          • Snaker
          • Solver
          • SpeedPress
          • Wordle
        • More Editors
          • JSON Editor
          • SQL Editor
        • Common Programs
          • Archive
          • Caffeine
          • Calendar
          • Calculator
          • Contacts
          • Dictionary
          • Git Shell
          • Notes
          • Stocks
          • 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
      • The Nitrocid Homepage
      • Networking
      • Localization
      • Screensavers
      • Lockscreen Widgets
      • Audio Cues
  • 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
    • Bootloader
      • Boot Choices
      • Kernel Environments
      • Custom Boot Styles
    • Inner Workings
      • Kernel Settings
        • Mechanics of Settings App
        • Settings Format
        • Custom Settings
      • Shell Structure
        • Help System
        • Command Parsing
        • Command Information
        • Command Switches
        • Shell History
        • Shell Scripting
        • Shell Presets
        • Extra Shell Features
      • Multilingual Kernel
        • Locale Tools
        • 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
  • Prerequisites for inter-mod communication
  • Listing types
  • Getting types
  • Operation
  • How do I call a publicly accessible mod function?
  • How can I get/set a value from/to a property or a field?
  • Listing functions, properties, and fields
  • Listing function and set property parameters
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.

Prerequisites for inter-mod communication

In order to be able to communicate with the other mods in your mod, you'll need to get the mod types and to select a type that you'll need to work on. This is to avoid ambiguity that may be caused by calling functions, properties, or fields that may have the same name. You can do the following:

Listing types

You can now list all the available public types from a mod. You must use this before being able to perform the rest of the communication functions, such as getting functions and executing them.

InterModTools.cs
public static Type[] ListAvailableTypes(string modName)

In order for a type to appear, it must be public and visible.

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

  • There are no public and/or visible types.

Getting types

You can get a specific type from a mod using the fully-qualified type name. These functions are used implicitly when passing the type name instead of the type instance returned by the below functions:

InterModTools.cs
public static Type GetTypeFromMod(string modName, string typeName)

In order for a type to appear, it must be public and visible.

The above functions throw an exception under the following conditions:

  • There are no public and/or visible types under the specified type name.

Operation

After getting a type, you can call the rest of the inter-mod communication functions.

How do I call a publicly accessible mod function?

To execute custom mod functions (which must be public and static) in your mod, you must specify the full mod name, the type that you're working on, and the function to execute in the ExecuteCustomModFunction() method:

public static object? ExecuteCustomModFunction(string modName, string functionName, string typeName)
public static object? ExecuteCustomModFunction(string modName, string functionName, string typeName, params object?[]? parameters)
public static object? ExecuteCustomModFunction(string modName, string functionName, Type type)
public static object? ExecuteCustomModFunction(string modName, string functionName, Type type, params object?[]? parameters)

You must specify the main mod name in the above function, since it uses that name to query an addon for available functions.

ExecuteCustomModFunction() returns null under the following conditions:

  • There are no functions in all the mods.

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

It throws an exception if these conditions are true:

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

How can I get/set a value from/to a property or a field?

To get a property value or a field value (which must be public and static) from a mod, you can call the following functions:

public static object? GetCustomModPropertyValue(string modName, string propertyName, string typeName)
public static object? GetCustomModFieldValue(string modName, string fieldName, string typeName)
public static object? GetCustomModPropertyValue(string modName, string propertyName, Type type)
public static object? GetCustomModFieldValue(string modName, string fieldName, Type type)

Similarly, to set a property value or a field value (which must be public and static) declared publicly by an addon, you can call the following functions:

public static void SetCustomModPropertyValue(string modName, string propertyName, string typeName, object? value)
public static void SetCustomModFieldValue(string modName, string fieldName, string typeName, object? value)
public static void SetCustomModPropertyValue(string modName, string propertyName, Type type, object? value)
public static void SetCustomModFieldValue(string modName, string fieldName, Type type, object? value)

You must specify the main mod name in the above function, since it uses that name to query an addon for available properties or fields.

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

  • There are no properties or fields in all the mods.

  • There is a property or field, but the delegate is unspecified.

  • There is a property or field, but they return null.

It throws an exception if these conditions are true:

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

Listing functions, properties, and fields

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

InterAddonTools.cs
// For functions
public static Dictionary<string, MethodInfo> ListAvailableFunctions(string modName, string typeName)
public static Dictionary<string, MethodInfo> ListAvailableFunctions(string modName, Type type)

// For properties
public static Dictionary<string, PropertyInfo> ListAvailableProperties(string modName, string typeName)
public static Dictionary<string, PropertyInfo> ListAvailableProperties(string modName, Type type)

// For fields
public static Dictionary<string, FieldInfo> ListAvailableFields(string modName, string typeName)
public static Dictionary<string, FieldInfo> ListAvailableFields(string modName, Type type)

You must specify the main mod name in the above functions and the type that this mod exposes.

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

  • There are no accessible public static functions, properties, or fields.

Listing function and set property parameters

You can list all the function and set property parameters in depth by using the following functions:

InterAddonTools.cs
// Normal functions
public static ParameterInfo[]? GetFunctionParameters(string modName, string functionName, string typeName)
public static ParameterInfo[]? GetFunctionParameters(string modName, string functionName, Type type)

// Property setters
public static ParameterInfo[]? GetSetPropertyParameters(string modName, string propertyName, string typeName)
public static ParameterInfo[]? GetSetPropertyParameters(string modName, string propertyName, Type type)

You must specify the main mod name in the above function, since it uses that name to query an addon for available properties or fields.

These functions return null under the following conditions:

  • There are no properties or functions in all the mods.

  • There is a property, but there is no setter.

It throws an exception if these conditions are true:

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

Last updated 4 months ago