diff --git a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java index 658163c71..6b8fc1d7d 100644 --- a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java +++ b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java @@ -8,25 +8,27 @@ package com.dfsek.terra.addons.ore; import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; import com.dfsek.terra.addons.manifest.api.monad.Get; import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.util.function.monad.Monad; public class OreAddon implements MonadAddonInitializer { @Override - public Init initialize() { - return Get.eventManager() - .map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)) - .bind(functionalEventHandler -> - Get.addon() - .map(addon -> functionalEventHandler - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event - .getPack() - .registerConfigType(new OreConfigType(), addon.key("ORE"), 1)) - .failThrough() - )); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(manager -> manager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((eventHandler, addon) -> Init + .ofPure(eventHandler + .register(addon, ConfigPackPreLoadEvent.class) + .then(event -> event + .getPack() + .registerConfigType(new OreConfigType(), addon.key("ORE"), 1)) + .failThrough())) + ); } } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/MonadAddonInitializer.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/MonadAddonInitializer.java index 594c8bf23..d1e4452ec 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/MonadAddonInitializer.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/MonadAddonInitializer.java @@ -1,8 +1,9 @@ package com.dfsek.terra.addons.manifest.api; import com.dfsek.terra.addons.manifest.api.monad.Init; +import com.dfsek.terra.api.util.function.monad.Monad; public interface MonadAddonInitializer { - Init initialize(); + Monad> initialize(); } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Do.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Do.java index 3ab297e2d..7a64611bd 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Do.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Do.java @@ -32,6 +32,12 @@ public final class Do { .bind(bind2.apply(t))); } + public static > Monad with(Monad monad, + Monad monad2, + Function2> bind2) { + return with(monad, Function1.constant(monad2), bind2); + } + public static > Monad with(Monad monad, Function1> bind, Function2> bind2, @@ -45,6 +51,20 @@ public final class Do { .apply(u))); } + public static > Monad with(Monad monad, + Monad monad2, + Function2> bind2, + Function3> bind3) { + return with(monad, Function1.constant(monad2), bind2, bind3); + } + + public static > Monad with(Monad monad, + Monad monad2, + Monad monad3, + Function3> bind3) { + return with(monad, monad2, Function2.constant(monad3), bind3); + } + public static > Monad with(Monad monad, Function1> bind, Function2> bind2, @@ -61,4 +81,28 @@ public final class Do { .apply(v))) .apply(u))); } + + public static > Monad with(Monad monad, + Monad monad2, + Function2> bind2, + Function3> bind3, + Function4> bind4) { + return with(monad, Function1.constant(monad2), bind2, bind3, bind4); + } + + public static > Monad with(Monad monad, + Monad monad2, + Monad monad3, + Function3> bind3, + Function4> bind4) { + return with(monad, monad2, Function2.constant(monad3), bind3, bind4); + } + + public static > Monad with(Monad monad, + Monad monad2, + Monad monad3, + Monad monad4, + Function4> bind4) { + return with(monad, monad2, monad3, Function3.constant(monad4), bind4); + } } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Init.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Init.java index b782712f5..3eaa9a7af 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Init.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/api/monad/Init.java @@ -34,6 +34,10 @@ public class Init implements Monad> { @Override public Monad> pure(U u) { - return of(Functions.constant(u)); + return ofPure(u); + } + + public static Init ofPure(T t) { + return of(Functions.constant(t)); } } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/Initializer.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/Initializer.java index 58df34f0c..0d9ab4486 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/Initializer.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/Initializer.java @@ -2,6 +2,7 @@ package com.dfsek.terra.addons.manifest.impl; import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.inject.Injector; @@ -34,7 +35,7 @@ public abstract class Initializer { @Override public void initialize(InitInfo info) { - addon.initialize().apply(info); + ((Init) addon.initialize()).apply(info); } }