// Path: src/main/java/net/darkhax/darkutils/addons/curio/CurioAddon.java
// public class CurioAddon implements ICurioAddon {
//     
//     @Override
//     public boolean isCurioApiAvailable () {
//         
//         return true;
//     }
//     
//     @Override
//     public boolean hasCurioItem (Item item, LivingEntity user) {
//         
//         return !this.getCurioOfType(item, user).isEmpty();
//     }
//     
//     @Override
//     public ItemStack getCurioOfType (Item item, LivingEntity user) {
//         
//         final Optional<ImmutableTriple<String, Integer, ItemStack>> curio = CuriosAPI.getCurioEquipped(item, user);
//         return curio.isPresent() ? curio.get().getRight() : ItemStack.EMPTY;
//     }
//     
//     @Override
//     public void enqueCommunication () {
//         
//         InterModComms.sendTo("curios", "register_type", () -> new CurioIMCMessage("charm").setSize(2).setEnabled(true).setHidden(false));
//     }
// }
// 
// Path: src/main/java/net/darkhax/darkutils/addons/curio/ICurioAddon.java
// public interface ICurioAddon {
//     
//     public static final ICurioAddon DEFAULT = new ICurioAddon() {
//     };
//     
//     default boolean isCurioApiAvailable () {
//         
//         return false;
//     }
//     
//     default boolean hasCurioItem (Item item, LivingEntity user) {
//         
//         return false;
//     }
//     
//     default ItemStack getCurioOfType (Item item, LivingEntity user) {
//         
//         return ItemStack.EMPTY;
//     }
//     
//     default void enqueCommunication () {
//         
//     }
// }


import net.darkhax.bookshelf.util.ModUtils;
import net.darkhax.darkutils.addons.curio.CurioAddon;
import net.darkhax.darkutils.addons.curio.ICurioAddon;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
package net.darkhax.darkutils.addons;


public class AddonManager {
    
    private ICurioAddon curio;
    
    public AddonManager() {
        
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueIMC);
    }
    
    private void onCommonSetup (FMLCommonSetupEvent event) {
        
// Path: src/main/java/net/darkhax/darkutils/addons/curio/CurioAddon.java
// public class CurioAddon implements ICurioAddon {
//     
//     @Override
//     public boolean isCurioApiAvailable () {
//         
//         return true;
//     }
//     
//     @Override
//     public boolean hasCurioItem (Item item, LivingEntity user) {
//         
//         return !this.getCurioOfType(item, user).isEmpty();
//     }
//     
//     @Override
//     public ItemStack getCurioOfType (Item item, LivingEntity user) {
//         
//         final Optional<ImmutableTriple<String, Integer, ItemStack>> curio = CuriosAPI.getCurioEquipped(item, user);
//         return curio.isPresent() ? curio.get().getRight() : ItemStack.EMPTY;
//     }
//     
//     @Override
//     public void enqueCommunication () {
//         
//         InterModComms.sendTo("curios", "register_type", () -> new CurioIMCMessage("charm").setSize(2).setEnabled(true).setHidden(false));
//     }
// }
// 
// Path: src/main/java/net/darkhax/darkutils/addons/curio/ICurioAddon.java
// public interface ICurioAddon {
//     
//     public static final ICurioAddon DEFAULT = new ICurioAddon() {
//     };
//     
//     default boolean isCurioApiAvailable () {
//         
//         return false;
//     }
//     
//     default boolean hasCurioItem (Item item, LivingEntity user) {
//         
//         return false;
//     }
//     
//     default ItemStack getCurioOfType (Item item, LivingEntity user) {
//         
//         return ItemStack.EMPTY;
//     }
//     
//     default void enqueCommunication () {
//         
//     }
// }


// Path: src/main/java/net/darkhax/darkutils/addons/AddonManager.java
import net.darkhax.bookshelf.util.ModUtils;
import net.darkhax.darkutils.addons.curio.CurioAddon;
import net.darkhax.darkutils.addons.curio.ICurioAddon;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

package net.darkhax.darkutils.addons;


public class AddonManager {
    
    private ICurioAddon curio;
    
    public AddonManager() {
        
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueIMC);
    }
    
    private void onCommonSetup (FMLCommonSetupEvent event) {
        
        this.curio = ModUtils.callIfPresent("curios", () -> () -> new CurioAddon(), () -> () -> ICurioAddon.DEFAULT);