Voxel Shop beta is live. Expect occasional bugs. Learn more
Powerful spigot development library that supercharges your plugins
- Added support for MythicMobs drops; you can specify a drop with eco{type=<item lookup string>} (You can use type, item, i, or t). Invalid items will not be added and will log a warning to console. Thanks to OfTeN and LoJoSho for this change!
- Updated guava version
- Slightly improved performance of Custom Item cache
- Added support for 1.18.2
- Added complete Entity/Mob AI system: Full mappings for all generic entity goals (of Mob type) and some entity-specific goals (not all of them, it's incomplete). You can add and remove entity and target goals to any entity to change it's behavior. It's a relatively low-level api, the goals in the api all map to nms goals almost 1:1, with some QOL changes, such as switching them over to use TestableEntity and TestableItem where possible. You can also create custom Entity and Target goals, which work exactly the same as writing them in NMS, if you're familiar with that workflow. This was a massive undertaking, and included completely rewriting the entire NMS backend.
- Completely rewrote the entire nms backend: version-specific modules (v1_17_R1, v1_18_R1, v1_18_R2) now shade in a common CraftBukkit-less module: nms-common, which is then remapped by each version. Many proxies have been removed, moved around, rewritten, et cetera.
- Updated/Fixed KingdomsX integration
- Reworked MiniMessage support thanks to big changes introduced in Paper 1.18.2. This is mostly an internal change, but there may be some visible changes thanks to a change in processing order. Spigot users will also now be able to use MiniMessage syntax.
- Updated adventure / adventure-platform
- Various minor changes / tweaks / fixes
This is a huge update, nearly doubling the size of the eco jar! (thanks to the nms / minimessage changes)
- Recipes with multiple options will now show all the options to players
- Dummy entities are now instance of a new DummyEntity interface (Delegated Entity internally) rather than CraftZombie
- Reworked Item and Entity lookup systems to share code into a new Lookups system; This includes Segment Parsers for more complex / powerful options: ? denotes an if check: if the left statement is not validated (ie empty item, dummy entity) then the right statement will be used instead. These can be chained together and have existed in the previous version. || denotes a group, so you can have multiple options for an item or entity. For items, this will always choose the first valid item to display/give, whereas for entities it will always choose a random entity to spawn.
- Generalized TestableItem and TestableEntity into new Testable<T> interface.
- Lookups are now handled by a new LookupHandler interface.
- Updated ExecutableItems depednency
- Build changes with tests (fixed dependencies)
- Added StringUtils#toNiceString, replacing the now-deprecated StringUtils#internalToString
- Added StringUtils#splitAround, which will split a string on a substring separated by spaces (eg " ? " and " || ", used in lookups)
- Removed requirements from backend, adding warnings into static initializers. These will be removed in 6.27.0.
- Fixed equipment and name arg parsers for entites and items
- Moved supported versions into ProxyConstants
- Various minor changes / fixes
- Rewrote MySQL data handler, bringing massive performance improvements, splitting off server data to be in a separate table (finally)
- Persistent Data Keys are now registered on first use, allowing for eco to dynamically categorize keys as either player or server keys, to put them in the right place (previously, the server was treated as a player, which was a problem in MySQL as the columns were added for all players). Persistent Data Keys can be registered on creation by calling .server() or .player() on them - this is preferred for performance reasons.
- Fixed Persistent Data Keys not having .equals() and .hashCode() methods, causing weird bugs.
- eco will save Persistent Data Keys serialized in data.yml for MySQL users; moving the load to startup.
- Fixed underflow bug with shift-clicking stacked recipes (Thanks Casper!)
- Switched SkullProxy NMS Implementation off to use lazy initializers (Thanks Racci!)
- Fixed internal Profile saveAll method causing bugs
- Updated shadow to 7.1.2
- Added entity arg parsers for equipment slots: head, chest, legs, feet, hand, off_hand
- Deprecated SlotModifier, replaced with SlotUpdater
- Player-only commands can now have non player-only subcommands
- Added kotlin ubilder for commands and PlayerUtils#runExempted
- Added kotlin extensions for NumberUtils
- Renamed FastItemStack methods, deprecating old names
- Added more kotlin utilities for lists and NamespacedKeys
- Added safer NamespacedKey creation, used in FastItemStack to mitigate broken keys
- Deprecated and marked requirement system for removal
- Deprecated TeamUtils#getMaterialColorTeam
- Changed Proxy error handling to be more consistent and understandable; Deprecated UnsupportedVersionException in favour of UnsupportedVersionError, changed ProxyError from Exception to Error
- Improved durability utils
- Added props system: instead of specifying plugin properties in the constructor, you can now opt to use eco.yml - check the eco source code (eco-core/core-plugin) to find out how to use it; also added EcoPlugin#mutateProps to enforce certain properties for libraries such as libreforge
- Deprecated MaskMaterials in favour of MaskItems
- Added more utility methods to Items
- Updated build logic to move kotlin to root project, updated to kotlin 1.6.10
- Fixed several javadoc issues
- Fixed several minor errors and tweaked internal naming
- Added API extensions in Kotlin for: Utility Classes, FastItemStack, Profiles (Data), and GUI (type-safe builders)
- Added option to display extension load stack-traces for developers
- Various misc changes
- Added RPGHorses Integration (Thanks OfTeN!)
- Fixed WorldGuard integration (Thanks OfTeN!)
- Added silent arg parser for entities (Thanks OfTeN!)
- Added caches for JSON <-> Legacy conversion, Placeholders, and String lookups with Caffeine
- Fixed CrashClaim integration not being loaded
- Added ServerProfile to store persistent data on the server
- Rewrote Custom Recipe listener in Kotlin, finally removing the last bit of java from the backend
- Added CustomCrafting support (Thanks OfTeN!)
- Rewrote Item cache to use Caffeine, removed ttl option from config
- Improved performance of ShopGUI+ Hook by improving custom item cache (Thanks NicoNeko!)
- Switched PersistentDataKeyType from an enum to a functionally indentical class with static fields (in order to infer types better in kotlin)
- Reworked backend of NamespacedKey creation: to get around the slow performance of the NamespacedKey constructor, eco will now use Objenesis to create a blank key and then set the fields reflectively - this is potentially unsafe, and so there is an option in config to disable it (however that shouldn't be a problem unless you royally screw up your config)