/Icicle

Icicle is a library that aims at bukkit developers seeking easier development.

Primary LanguageJavaMIT LicenseMIT


🧊 Icicle is a Spring inspired framework designed mainly for Bukkit/Spigot plugin development. 🧊


β›” This framework is in heavy development, get ready for loads of bad code and heaps of bugs. β›”
Until the framework's first release please do not contribute or create issues!

✨ Features

Icicle is loaded to the brim with features off-the-shelf, but for simplicity sake, here are some of the main features:

  • πŸ’¨ Lightweight, easy-to-use design
    Icicle was designed to be as easy to use as possible, meanwhile maintaining the least amount of code needed to be written. Exactly because of this, we have implemented an "annotation-first" style into Icicle to minimize on the number of lines needed to be written by the end-users, the developers. There ARE exceptions to this, especially when annotations don't suit a task, for instance calculations, or accessing somethings properties. In those instances, we use "normal object-style."
  • ➿ Auto-wiring and beans (or in other words: Spring features in Spigot)
    Resolving one of the quirks of object-oriented programming languages, with yet another quirk of its own. Auto-wiring makes sure there is ONLY one instance of a given class, and that every class has access to it. No more bulky constructors and long argument lines.
  • πŸ“– Easy configuration management
    Write configurations in a single class with a few annotations that have self-describing names. Currently only YAML is supported, but a rewrite of the configuration system is imminent and as such, will include support for most formats that make sense to be included. Few key features that make it worthwhile include, but are not limited to:
        πŸ’¬ Comments!
        πŸ›Έ Object conversion out-of-the-box!
  • πŸ–¨  Serialization
    Instead of spending development time on saving the structure of an important class, and then loading it back in, you can instead focus on the logic of your project. Built on speed and size, rather than format support, our serialization module is extremely agile. Serialization handles most of the formats needed for a normal Minecraft developer, and probably some more on top of that. It is by no means a perfect module, though it should work in most, if not all cases.
  • πŸ“‹ Extending base classes
    Reflections are good'n'all, but then again, wouldn't it be reaaaal good, if you could just edit parts of the source code? Icicle has many ways of doing such things, and as such should be a good starting point for those looking to fiddle with the source.
  • ♾️ and so on...
    Many more are features yet to be explored, yet alone listed, so I'd advise you check out what we have at our repertoire!
    Anything missing? Create an issue, or contribute.

πŸš€ Modules

Icicle is split into separate modules, which all add additional functionality to the core. These modules don't need to be downloaded: when the core reads the metadata of a project that is built around Icicle it will download and load the necessary Icicle modules for it automagically.

Icicle currently has the following official modules:

βœ… ⚠️ ☒️ πŸ“ πŸ’€
RELEASE
Ready for use.
BETA
Unstable.
ALPHA
Use with caution!
PLANNED
Stubs, or just plans.
DROPPED
Support is non-existent.
Status Name Description Recommended Version
βœ… icicle-core This is the base of the operations, the almighty overlord of the whole project. 1.0.0-beta
βœ… icicle-serialization This module contains everything you need for serializing objects. 1.0.0-beta
βœ… icicle-utilities Utility classes containing useful methods for development. 1.0.0
βœ… icicle-commands Module containing all the stuff needed to create a good user-experience with just commands. 1.0.0
⚠️ icicle-gradle Our Gradle plugin to assist in the creation of Icicle-based projects. 1.0.0
⚠️ icicle-bukkit Implementation of Icicle for Bukkit environments. 1.0.0-beta
☒️ icicle-nms Wrapping of NMS and CraftBukkit. 0.0.1-alpha
☒️ icicle-gui Easy creation of complex and simple guis. 0.1.0-alpha
☒️ icicle-protocol Features for messing with the Minecraft protocol & packets. 0.0.1-alpha
πŸ“ icicle-kotlin Utilities for Kotlin to speed up your workflow even more! -
πŸ“ icicle-database This module is used to interact with many database engines with a common interface. -
πŸ“ icicle-intellij Our IntelliJ Idea plugin to speed up development further, and to bring syntax highlighting. -
πŸ“ icicle-entity-ai A library to simplify entity movement generation and traversing. -
πŸ“ icicle-ocl OpenCL API implementation. A solution to problems that can be broken up into multiple smaller problems. -
πŸ’€ icicle-addon-server This module is responsible for serving the modules to the instance of Icicle. 0.0.1

πŸ› οΈ Installation & Setup

Please read our wiki on GitBook, here.

🎁 Contributing

Everyone is welcome to contribute to Icicle. If you want to do so, please start, by reading our Contribution Guidelines. Alt

🧾 License

Icicle is licensed under the permissive MIT License. You can read ours here.

🀝🏼 Our Supporters

GitBook happily hooked us up with their powerful documentation tool/service.
Check them out here!
This project is developed with the help of JetBrains' products. We have access to such tools with an open source license.
Check them out here!