A simple library mod for minecraft, made mostly to develop my mods easier, but can be used by anyone! Currently supported loaders: Fabric, Spigot, & Paper
Use in your projects! 👍️
Want to use OtterLib in your project? You can add it as a dependency in your build.gradle file:
repositories {
maven {
name "oth3rMavenSnapshots"
url "https://maven.oth3r.one/snapshots"
}
}
Implementing on each loader, where ${project.otterlib_version} is the current version of OtterLib for the loader (e.g. 0.2.0.0+1.21.6, 0.2.0.0+1.20-1.21.6)
// fabric
modImplementation "one.oth3r:otterlib:${project.otterlib_version}-fabric"
// spigot
implementation "one.oth3r:otterlib:${project.otterlib_version}-spigot"
// paper
implementation "one.oth3r:otterlib:${project.otterlib_version}-paper"
Visit the maven repository to see more indepth information about the library, including the latest versions.
Features
💬 Simple Chat Builder
sample usage:
player.sendMessage(new CTxT("Hello").color(Color.BLUE).bold(true).strikethrough(true)
.append(new CTxT("World!!!!!!!!!").rainbow(new Rainbow(true)).underline(true).italic(true)).b());
in game example:

📜 Custom Language Reader
OtterLib provides a custom language reader that allows you to easily have server-side localization on all supported loaders. There is also support for a secondary location for locales for easy player overrides.
🗃️ Robust file saving and loading
Adds an interface that enables easy config file creation with support for saving, loading, and updating versions easily.
updating an old entry from the json to the new version:
@Override
public void update(JsonElement jsonElement) {
JsonObject file = jsonElement.getAsJsonObject();
if (file.get("version").getAsDouble() == 1.0) {
this.version = 1.1;
this.test = file.get("test-bool").getAsBoolean();
}
}
⚙️ Custom config screen
OtterLib offers a custom config screen that can be cuztomized to offer a way to edit multiple config files, link to social media, or even open different screens.
creating the screen:
client.setScreen(new ConfigScreen(client.currentScreen, Text.of("test"),
new CustomImage(Identifier.of(FabricTest.MOD_ID, "textures/gui/banner.png"),240, 60),
// the list of buttons to be displayed in the middle
List.of(
SimpleButton.Templates.fileEditor(new CTxT("Test File"), FabricTest.testFile, new CustomImage(Identifier.of(FabricTest.MOD_ID, "button/server_button"),246,26)).build(),
SimpleButton.Templates.fileEditor(new CTxT("Test File No Image"), FabricTest.testFile).build(),
SimpleButton.Templates.wiki(new CTxT("Help")).openLink("https://oth3r.one").size(30,30).build(),
SimpleButton.Templates.wiki(new CTxT("Help")).openLink("https://oth3r.one").size(30,30).build(),
SimpleButton.Templates.warning(new CTxT("Help")).openLink("https://oth3r.one").size(150,15).hideText(false).build()
),
// the bottom buttons can be customized!
List.of(
new SimpleButton.Builder(new CTxT("Donate"))
.miniIcon(new CustomImage(Identifier.of(Assets.ID, "icon/donate"),15,15)).build(),
SimpleButton.Templates.donate(new CTxT("Donate")).openLink(URI.create("https://ko-fi.com/oth3r")).build(),
SimpleButton.Templates.done(new CTxT("Done")).build(),
SimpleButton.Templates.wiki(new CTxT("Wiki")).openLink("https://oth3r.one").build()
)));
main config screen in game:

file editor in game: (individual entry editor is planned, this is just a simple placeholder)

All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 |
- fixed button hovering for OtterLib config button lists
#### b0.4.0.1
- fixed file names for spigot and paper versions being confusing
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- fixed file names for spigot and paper versions being confusing
#### b0.4.0.0
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- fixed file names for spigot and paper versions being confusing
#### b0.4.0.0
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- improved custom loader text and language translation support
- updated Paper and Spigot API/build configuration
- fixed mod versioning for the new minecraft version system
- fixed mod versioning for the new minecraft version system
- added the nothing click action
- added the HoverActions class
- added another superclass to CTxT for better adaptability
- make color default to null, and null default to white
- make rainbow default to null
- switch from button to chat wrapper system
- other ChatText changes and improvements
- added the nothing click action
- added the HoverActions class
- added another superclass to CTxT for better adaptability
- make color default to null, and null default to white
- make rainbow default to null
- switch from button to chat wrapper system
- other ChatText changes and improvements
- increased supported version range (eg. 1.21.8 now runs on 1.21.6 and 1.21.7 as well) [Fabric]
# b0.2.2.0
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
- increased supported version range (eg. 1.21.8 now runs on 1.21.6 and 1.21.7 as well) [Fabric]
# b0.2.2.0
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
- increased supported version range (eg. 1.21.8 now runs on 1.21.6 and 1.21.7 as well) [Fabric]
# b0.2.2.0
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
- increased supported version range (eg. 1.21.8 now runs on 1.21.6 and 1.21.7 as well) [Fabric]
# b0.2.2.0
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
- fixed OtterLib not working properly on 1.20.4 and below
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths
- fixed OtterLib not working properly on 1.20.4 and below
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
A new file registration system is here! (for both config and language files)
\
OtterLib will now handle storing, loading and saving config files! Auto loading and saving can be configured, and the file will be registered via queried via ModID and FileID.
- added a config file registration system (CustomFileReg)
- added a language file registration system (LanguageReg)
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths
Fixed support for reading language files inside of jars.
- added ResourceReader, allowing for the reading of resources in the jar
- updated LanguageReader to use ResourceReaders instead of normal paths