Keeping the plugin compatible both with Paper and Spigot consumes a lot of time. Now, Mimic is Paper-first as it is the most popular platform. This means that compatibility with Spigot is not guaranteed.
To reduce the maintenance burden, support for versions older than 1.20 has been dropped. Java 17 is required.
Note
This feature requires the CommandAPI plugin to be installed.
Now it is possible to change Mimic config using commands in two ways:
- Using interactive config
/mimic config. Every option in the output is interactive, so you can change it just by mouse click. - Change options by commands:
/mimic config level-system [value]- set the specified level system as preferred for Mimic/mimic config class-system [value]- set the specified class system as preferred for Mimic/mimic config inventory-provider [value]- set the specified inventory provider as preferred for Mimic/mimic config disabled-items-registries add [item-registry]- disable the specified item registry for Mimic/mimic config disabled-items-registries remove [item-registry]- enable the specified item registry for Mimic
- Added tag
@since 0.8.0to all new APIs - Make
BukkitPlayerInventory.collectEquippedItemsprotected. It was public by an accident.
- Command
/mimic inforeplaced with command/mimic - Command
/mimic class hasreplaced with command/mimic class checkwith slightly simpler syntax
- Update required Java 1.8 → 17
- Update Kotlin 1.6.20 → 2.1.20
- Replace ACF with CommandAPI
- Update Gradle 7.4.2 → 8.13
- Update dependencies
- Migrate to version catalogs
v0.8.0 (2022-04-18)
This version introduces new experimental PlayerInventory API. For now, it can be used only to get player's inventory content and equipped items. It can be useful for integration with plugins providing custom player inventory.
// Get player's inventory
Mimic mimic = Mimic.getInstance();
BukkitPlayerInventory inventory = mimic.getPlayerInventory(player);
// Get items equipped on the player
List<ItemStack> equippedItems = inventory.getEquippedItems();
// Get not equipped items stored in the inventory
List<ItemStack> storedItems = inventory.getStoredItems();
// Get both equpped and not equipped items
List<ItemStack> allItems = inventory.getItems();This API is experimental, so it can be changed further. I'll do my best to save backward compatibility but in some cases it is not possible. It also means I'm open for ideas how to improve this API to make it more useful. Please, write me in Discord or file an issue if you have any ideas.
- Make implementations ID validation less strict.
Since now, it may contain more special symbols:
._- - Make
ServicesManagerextensions inaccessible from Java
- Added command
/mimic inventory infoto get info about current player inventory provider
- Catch not only Exceptions from
ItemsRegistryimplementations but also Errors.ItemsRegistrywill not crash other plugins.
- Versioning strategy changed.
Now version always includes
PATCHversion according to SemVer. - Update Kotlin to 1.6.20
- Update bStats to 3.0.0
- Update ACF to 0.5.1-SNAPSHOT
- Update Gradle to 7.4.2
- Update Dokka to 1.6.20
- Update binary-compatibility-validator to 0.9.0
- Update gradle-download-task to 5.0.5
v0.7.1 (2022-02-19)
- Compatibility with Minecraft 1.13 - 1.16.5
- FileNotFoundException on config initialization
v0.7 (2022-02-06)
Registration via ServiceManager is deprecated because it was error-prone and not intuitive.
Since now, you should use class Mimic to register or get APIs implementations.
Mimic mimic = Mimic.getInstance();
// Register ItemsRegistry implementation
mimic.registerItemsRegistry(new MyItemsRegistry(), plugin);
// Get items registry imlpementation
BukkitItemsRegistry registry = mimic.getItemsRegistry();New mechanism allows maintaining better backward compatibility for APIs implementations. It also allows users to select preferred APIs implementation via config.
- Added default implementations for
MimicServicemethods:isEnabled()returnstrueby defaultgetId()returns lowercase plugin name by default
- Breaking change! ID should contain only lowercase Latin letters and digits (a-z, 0-9).
- Breaking change!
BukkitClassSystem.ProviderandBukkitLevelSystem.Providerconverted to interface instead of abstract classes. If you want to use ID different from plugin name, you should overridegetId()method. BukkitClassSystem.ProviderandBukkitLevelSystem.Providerare functional interfaces since now.
- Added config file allowing to specify preferred APIs implementations.
- Fixed errors in case when commands used from console.
v0.6.3 (2022-01-07)
- Update MMOItems and MMOCore to the latest version
v0.6.2 (2021-12-29)
- Added vararg variants of ClassSystem methods
- Check plugin exists before registering built-in integrations
- Isolate
MimicItemsRegistryfrom exceptions thrown from other items registries implementations.
- Update Kotlin to 1.6.10
- Update Gradle to 7.3.3
- Migrate tests to MockK and Kotest assertions
v0.6.1 (2021-08-23)
MimicApiLevel.checkApiLevelnow works correctly
v0.6 (2021-08-19)
- Add
MimicApiLevelclass to check current running Mimic API version:// Specify here the version required for APIs you use. if (!MimicApiLevel.checkApiLevel(MimicApiLevel.VERSION_0_6)) { println("At least Mimic 0.6 is required. Please download it from {link here}") }
- Add optional payload to
ItemsRegistry.getItem. It may be used to customize item.
- More detailed output of command
/mimic items info:Items Service: mimic Known IDs amount: 1161 rpginventory: 4 quantumrpg: 55 mmoitems: 126 minecraft: 976 - Improve integration with Heroes class system (#14)
- Add statistics about used items registries
- Add payload support to
MinecraftItemsRegistry.
- Add API binary compatibility validation
- Publish docs to GitHub Pages
- Update Kotlin to 1.5.21
- Update bukkit-gradle to 0.10.0
- Update Gradle to 7.2