Skip to content

Inter Mod Communication (IMC)

Catharsis provides Fabric entrypoints that other mods can invoke during initialization.

Entrypoint Registry

Catharsis exposes three entrypoints under its IMC setup:

Entrypoint PathPurposeExpected Value Type
catharsis:imc/item_idApplies a specific Catharsis ID to an ItemStack directly.java.util.function.BiConsumer<ItemStack, Identifier>
catharsis:imc/disabledDisables Catharsis retexturing and GUI behaviors for an item stack completely.java.util.function.BiConsumer<ItemStack, Boolean>
catharsis:imc/hidden_gui_elementsChecks if a named UI element is hidden by the currently active GUI modifier.java.util.function.Predicate<String>

Registering Entrypoints

To link your mods compatibility handlers, register static method handles or consumer implementations inside your fabric.mod.json entrypoints block:

json
"entrypoints": {
  "catharsis:imc/item_id": [
    "your.package.CatharsisSupport::id"
  ],
  "catharsis:imc/disabled": [
    "your.package.CatharsisSupport::disabled"
  ],
  "catharsis:imc/hidden_gui_elements": [
    "your.package.CatharsisSupport::hiddenModElements"
  ]
}

Templates

Kotlin Implementation
kotlin
package your.package

import net.minecraft.resources.Identifier
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import java.util.function.BiConsumer
import java.util.function.Predicate

object CatharsisSupport {

    private var idConsumer: BiConsumer<ItemStack, Identifier> = BiConsumer { _, _ -> }
    private var disabledConsumer: BiConsumer<ItemStack, Boolean> = BiConsumer { _, _ -> }
    private var hiddenModElementsProvider: Predicate<String> = Predicate { false }

    @JvmStatic
    fun id(consumer: BiConsumer<ItemStack, Identifier>) {
        this.idConsumer = consumer
    }

    @JvmStatic
    fun disabled(consumer: BiConsumer<ItemStack, Boolean>) {
        this.disabledConsumer = consumer
    }
    
    @JvmStatic
    fun hiddenModElements(provider: Predicate<String>) {
        this.hiddenModElementsProvider = provider
    }

    fun isModElementHidden(element: String): Boolean {
        return hiddenModElementsProvider.test(element)
    }

    fun ItemStack.disableCatharsisModifications() = apply {
        disabledConsumer.accept(this, true)
    }

    fun ItemStack.withCatharsisId(identifier: Identifier): ItemStack = apply {
        idConsumer.accept(this, identifier)
    }

    fun Item.withCatharsisId(identifier: Identifier): ItemStack = defaultInstance.apply {
        idConsumer.accept(this, identifier)
    }
}
Java Implementation
java
package your.package;

import net.minecraft.resources.Identifier;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;

import java.util.function.BiConsumer;
import java.util.function.Predicate;

public class CatharsisSupport {

    private static BiConsumer<ItemStack, Identifier> idConsumer = (stack, id) -> {};
    private static BiConsumer<ItemStack, Boolean> disabledConsumer = (stack, disabled) -> {};
    private static Predicate<String> hiddenModElementsProvider = (element) -> false;

    public static void id(BiConsumer<ItemStack, Identifier> consumer) {
        idConsumer = consumer;
    }

    public static void disabled(BiConsumer<ItemStack, Boolean> consumer) {
        disabledConsumer = consumer;
    }

    public static void hiddenGuiElements(Predicate<String> provider) {
        hiddenModElementsProvider = provider;
    }
    
    public static boolean isGuiElementHidden(String element) {
        return hiddenModElementsProvider.test(element);
    }

    public static ItemStack disableCatharsisModifications(ItemStack stack) {
        disabledConsumer.accept(stack, true);
        return stack;
    }

    public static ItemStack withCatharsisId(ItemStack stack, Identifier identifier) {
        idConsumer.accept(stack, identifier);
        return stack;
    }

    public static ItemStack withCatharsisId(Item item, Identifier identifier) {
        ItemStack stack = item.getDefaultInstance();
        idConsumer.accept(stack, identifier);
        return stack;
    }
}

Tree view icons from the Minecraft.wiki
Not an official Minecraft product. Not approved by or affiliated with Mojang or Microsoft.
Not approved by or affiliated with Hypixel.