A NeoForge library for extending Applied Energistics 2 terminals.
Myotus exposes a small public API for optional integrations, terminal config tabs, a shared creative tab, and item-based terminal upgrade cards.
Myotus is infrastructure for mods that want to customize or extend AE2 terminal behavior on Minecraft 1.21.1 with NeoForge.
It is not designed as a large standalone content mod. The main purpose of the project is to provide stable hooks that other mods can build on.
The library currently focuses on four areas:
- registration of optional integrations behind marker annotations
- registration of custom terminal configuration tabs
- registration of shared Myotus creative tab entries
- runtime checks for which integrations are active
- item-backed terminal upgrade cards with lifecycle callbacks
See SUMMARY.md if you need a short project blurb.
- Minecraft
1.21.1 - NeoForge
21.1.x - Java
21 - Applied Energistics 2
19.2.x
- Public API entry point via
MyotusAPI - Annotation-driven optional integration registration
- Custom AE2 terminal config tabs through
MyoConfigTab - Shared Myotus creative tab contributions through
ICreativeTabRegistrar - Per-terminal tab visibility rules through
MyoConfigTabVisibility - Terminal upgrade card hooks with
onTerminalOpen,onTerminalClose, andonTerminalTick - Runtime integration state queries through
IModIntegrationManager - Player-persistent terminal upgrade storage
Optional integrations bundled in this repository currently target:
- JEI
- EMI
- REI
- GuideME
- AE2WTLib
- AE2FCT
- AE2TB
If another mod depends on Myotus, install Myotus alongside that mod and AE2.
Myotus is intentionally small on its own because it mainly exists as a shared extension layer.
Myotus is published like a normal Gradle dependency.
Artifact coordinates:
implementation "me.myogoo:myotus:<version>"For local development before a release is available, use mavenLocal():
repositories {
mavenLocal()
mavenCentral()
maven {
url = "https://modmaven.dev"
content {
includeGroup "appeng"
includeGroup "de.mari_023"
}
}
}
dependencies {
implementation "me.myogoo:myotus:<version>"
}Then publish Myotus locally:
./gradlew publishToMavenLocalMarker annotations let Myotus discover integration code only when the target mod is present:
MyotusAPI.modRegistrar()
.registerLoadableMod(MyMarker.class, "examplemod", "[1.0.0,)");At runtime:
if (MyotusAPI.modIntegrationManager().isLoaded("examplemod")) {
// Safe to run optional integration logic.
}Tabs can expose custom UI inside the AE2 terminal settings screen:
MyotusAPI.configRegistrar()
.registerTerminalConfigTab(new MyoConfigTab(
Component.literal("Example"),
Icon.COG,
"example_terminal.json",
new ExampleConfigScreen()));You can also restrict a tab to specific terminal contexts:
MyotusAPI.configRegistrar()
.registerTerminalConfigTab(new MyoConfigTab(
Component.literal("Portable"),
Icon.COG,
"portable_terminal.json",
new PortableConfigScreen())
.visibleWhen(context -> context.isItemHost()));Add-on mods can place their items into the shared Myotus creative tab:
MyotusAPI.creativeTabRegistrar()
.registerCreativeTabItem(MY_ITEM);If you need a preconfigured stack instead of the default item form:
MyotusAPI.creativeTabRegistrar()
.registerCreativeTabStack(() -> new ItemStack(MY_ITEM.get(), 1));Upgrade cards are regular items that implement ITerminalUpgradeCard:
public class MyUpgradeCardItem extends Item implements ITerminalUpgradeCard {
@Override
public void onTerminalOpen(MEStorageMenu menu, ItemStack stack) {
// Apply behavior when the terminal is opened.
}
}Items implementing this interface are automatically listed in empty terminal upgrade-slot tooltips. A terminal can only install one copy of each upgrade item type at a time.
Upgrade cards should use a max stack size of 1, because terminal storage is tracked per installed item stack.
From the repository root:
./gradlew build
./gradlew runClient
./gradlew runGameTestServer
./gradlew publishToMavenLocalOn Windows, use gradlew.bat instead of ./gradlew.
This repository is versioned per Minecraft line.
The current branch targets Minecraft 1.21.1.
Code in this repository is licensed under GNU LGPL 3.0.
See CHANGELOG.md for release notes.
