A cross API code library that allows developers to write code that works across multiple modding platforms, and across a wide range of Minecraft versions, all with one JAR file. If TaterLib runs on it, so can your plugin/mod.
Please note, some abstractions may not be fully implemented yet, and some may be missing. If you're looking for a specific abstraction/game event, please open an issue, and we'll get to it as soon as possible, or feel free to open a PR with an implementation. Contributions are always welcome!
Let's cut to the chase, why should you use and/or contribute to TaterLib? Well, let's say you have a mod/plugin that you want to port to a different modding API. You could go through the laborious task of implementing all the events, commands, etc. on each platform and create all your own cool fancy abstractions for each game object, or you could use TaterLib and save yourself a lot of time. (which is why I started this project in the first place)
There's two ways to use TaterLib, you can depend on the general API, then implement any missing features yourself on each platform, or if something's missing, you can start a PR with either a basic or full implementation, and we can improve TaterLib and save you a lot of time in the future. (a bit of a win-win)
Link to our support: Discord
repositories {
maven {
name = 'NeuralNexus'
url = 'https://maven.neuralnexus.dev/releases'
}
}
dependencies {
compileOnly('dev.neuralnexus:taterlib-api:<version>')
}
There's also a snapshot repository available at https://maven.neuralnexus.dev/repository/snapshots
TaterLib supports: Bukkit, BungeeCord, Fabric, Forge, Sponge, and Velocity
General notes:
- No Fabric on 1.13
- No Fabric/Forge below 1.7.10
Server type | Versions | Jar Name |
---|---|---|
1.20.x | 1.20-1.20.4 | TaterLib-1.20.x-<version>.jar |
1.19.4 | 1.19.4 | TaterLib-1.19.4-<version>.jar |
1.19.2 | 1.19.2 | TaterLib-1.19.2-<version>.jar |
1.19 | 1.19 | TaterLib-1.19-<version>.jar |
1.18.2 | 1.18.2 | TaterLib-1.18.2-<version>.jar |
1.18 | 1.18 | TaterLib-1.18-<version>.jar |
1.17 | 1.17-1.17.1 | TaterLib-1.17-<version>.jar |
1.16 | 1.16-1.16.5 | TaterLib-1.16-<version>.jar |
1.15 | 1.15-1.15.2 | TaterLib-1.15-<version>.jar |
1.14 | 1.14-1.14.3 | TaterLib-1.14-<version>.jar |
1.13 | 1.13-1.13.2 | TaterLib-1.13-<version>.jar |
1.12 | 1.12-1.12.2 | TaterLib-1.12-<version>.jar |
1.11 | 1.11-1.11.2 | TaterLib-1.11-<version>.jar |
1.10 | 1.10-1.10.2 | TaterLib-1.10-<version>.jar |
1.9 | 1.9-1.9.4 | TaterLib-1.9-<version>.jar |
1.8 | 1.8-1.8.8 | TaterLib-1.8-<version>.jar |
1.7 | 1.7-1.7.10 | TaterLib-1.7.10-<version>.jar |
1.6.4 | 1.6.4 | TaterLib-1.6.4-<version>.jar |
1.2.5 | 1.2.5 | TaterLib-1.2.5-<version>.jar |
b1.7.3 | b1.7.3 | TaterLib-b1.7.3-<version>.jar |
- Fabric API - Required on Fabric
- Legacy Fabric API - Required on Fabric 1.12.2 and below
- LuckPerms - For permissions/prefix/suffix support
Command | Permission | Description |
---|---|---|
/taterlib version |
taterlib.command.version |
Get the TaterLib version |
/taterlib reload |
taterlib.command.reload |
Reload TaterLib config |
/taterlib dump |
taterlib.command.dump |
Dump TaterLib info |
/taterlib fulldump |
taterlib.command.fulldump |
Dump TaterLib info |
Feel free to open a PR to add your plugin/mod to this list!
- Fixes to Sponge8-11 component serialization
- Fixed
SpongeEntity.getType
returning a properly formatted entity resource - Reworked the entire event system
- Added
getEntity
toAbstractEntity
implementations - Removed redundant event abstraction
- Reworked TaterLib PlayerListener and reload command
- Implemented
EntitySpawnEvent
for 1.7.10-b1.7.3 - Implemented rudimentary
PlayerDeathEvent
for b1.7.3 - Added support for NeoForge 1.20.2
- Removed the
...taterlib.{platform}.abstractions
package name - Renamed
...taterlib.{platform}.abstractions.events
to...taterlib.{platform}.event.api
- Moved
...taterlib.{platform}.abstractions.item.*
to...taterlib.{platform}.inventory
- Moved
...taterlib.{platform}.player.PlayerInventory
to...taterlib.{platform}.inventory.PlayerInventory
- Removed the
Abstract
prefix from all common interfaces - Added the ability to set a player's prefix/suffix
- Added numerical permission checks to
Player
for Forge/Fabric - Abstracted Brigadier commands
- Abstracted simple commands
- Simplified Plugin abstractions so depending on TaterLib is easier
- Refactored TaterLib helper methods to be wrapped in the
TaterAPI
class - Added MinecraftVersion and ServerType enums.
- Created
TaterAPI#isBrigadierSupported()
- Abstracted plugin/mod isLoaded checks
Player
now inheritsEntity
- Added
Entity#teleport(Location)
andEntity#teleport(Entity)
- Abstracted brigadier helper into a wrapper class
- Implemented registering simple commands for Forge/Fabric
- Updated database utils
- Added
Server
abstraction andTaterAPI#getServer()
- Ported to:
- 1.20.4
- Bukkit 1.8.8, 1.13.2
- BungeeCord 1.4.7, 1.8, 1.12
- Fabric 1.7.10, 1.8.9, 1.9.4, 1.10.2, 1.11.2, 1.12.2
- Forge 1.7.10, 1.8.9, 1.9.4, 1.10.2, 1.11.2, 1.18.2, 1.19.2, 1.19.4
- Sponge 4, 5
- Abstracted
ProxyPlayer
s, specifically adding aconnect
method - Added
Block
abstraction andBlockBreakEvent
- Updated
Server
implementation and addedProxyServer
for proxies - Added
ServerEvent#getServer()
- Fixes to
BukkitPlayerAdvancementEvent
getPlayer
was returning nullgetAdvancement
was returning the wrong string
- Abstracted
TaterAPI#registerChannels(Set<String>)
intoRegisterPluginMessagesEvent
- Added
PluginEnableEvent
andPluginDisableEvent
- Modified TaterAPIProvider to handle multiple API implementations simultaneously
- Added basic hybrid API hooks: Arclight, Ketting, Magma, Mohist
- Renamed
isPluginLoaded
toisPluginModLoaded
and split it intoisPluginLoaded
andisModLoaded
, while adding helper instantiations from hybrid hooks - Added
Server#broadcastMessage(String)
- Renamed path
dev.neuralnexus.taterlib.common
todev.neuralnexus.taterlib
to simplify imports - Improved the hook system to allow for multiple permission managers to be used simultaneously
- Build system overhaul, no sketchy
build.sh
anymore - Added
GameMode
enum,Player#getPing()
,Player#getGameMode()
andPlayer#setGameMode()
- Added
Sender#isPlayer()
- Fixed
Entity#teleport(Location)
andEntity#teleport(Entity)
in cross-dimensional cases - Added
Player#getIPAddress()
- Created a custom loader implementation, to allow for better compatibility with hybrids, Sinytra Connector, and SpongeForge
- Added
SpongeForge
server type - Added Brigadier support for Sponge and Bukkit
- Renamed
Sender
toCommandSender
- Split
Server
intoSimpleServer
andProxyServer
- Added some tests and more
MinecraftVersion
utilities - Renamed
Event
toEventManager
and created a baseEvent
interface - Added
Event#getName()
- Created generic event handler
- Renamed
PluginMessageEvents
toNetworkEvents
- Split out
SimplePlayer
andProxyPlayer
- Created
Connection
interface for kick/disconnect/ping/pluginMessage - Loader can now detect and register more plugin instances in multi-API environments
- Added
ServerType.NEOFORGE_HYBRID
- Events should no longer register twice in multi-API environments
- Pulled
CommonPluginEnableEvent
into the loader - Added
Damageable
andLivingEntity
interfaces - Added dummy entity interfaces all set up for adding new Entity interfaces
- Added
Player.allowFlight
/canFly
/isFlying
/setFlying
- Added single-version support for
MinecraftVersion.parseRange
- Used configurate to create config system
- Refactored TaterLib common logic into CommonModule, added TaterModuleLoader, and overall improved module support
- Reformatted getters to be more idiomatic (e.g.
getInventory
->inventory
) - Refactor
Player.serverName
intoPlayer.server().name()
and addServer#name()
- Added
Permissible
toCommandSender
, refactored permission hooks to usePermissible
- Added
ModInfo
andPluginInfo
abstractions - Added
DumpInfo
andFullDumpInfo
, along with the/taterlib dump | fulldump
commands - Added bStats support for Bukkit, Bungee, Sponge, and Velocity
- Added Arclight Fabric server type
- Merged
ItemMeta
intoItemStack
- Created player metadata API
- Added
Server.currentTPS()
,SimpleServer.getPlayer(String)
, andSimpleServer.getPlayer(UUID)
PlayerServerSwitchEvent.toServer
/fromServer
now return aServer
rather than aString
- Overhauled the
Inventory
/PlayerInventory
interfaces - Created
World
andServerWorld
abstractions