Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fulminazzo/yagl
Yet Another GUI Library.
https://github.com/fulminazzo/yagl
bukkit effects gui item java library minecraft particles serialization serialization-library
Last synced: about 1 month ago
JSON representation
Yet Another GUI Library.
- Host: GitHub
- URL: https://github.com/fulminazzo/yagl
- Owner: Fulminazzo
- Created: 2024-03-03T15:47:54.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-12-23T00:59:16.000Z (about 2 months ago)
- Last Synced: 2024-12-23T01:30:40.120Z (about 2 months ago)
- Topics: bukkit, effects, gui, item, java, library, minecraft, particles, serialization, serialization-library
- Language: Java
- Homepage:
- Size: 2.27 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
**Need help?**
[![Read the wiki](https://img.shields.io/badge/read-the_wiki-blue?style=for-the-badge)](../../wiki)
[![Read the docs](https://img.shields.io/badge/read-the_docs-orange?style=for-the-badge)](https://yagl.fulminazzo.it/docs)**Welcome to the official YAGL page**
**Yet Another GUI Library** (**YAGL** for short) is a **Java library** created to generate and manage **graphical user interfaces** in game.
If you are a **server admin**, I suggest you [read the documentation](../../wiki) to learn how to properly configure and change default values.
If you are a **developer**, **YAGL** is composed of **three main modules**:
- [wrappers](tree/main/wrappers), a module that contains common **Minecraft** objects like **enchantments**, **sounds**, **particles**. It offers the capability of **saving and loading** them in a **nice format** for the end user;
- [item](tree/main/item), a module to **generate and customize items** and even **apply textures** to them;
- [gui](tree/main/gui), the **core module**, that **displays the actual interfaces** to players.Each one of them is made of three submodules:
**base** (the core function of the module),
**serializer** (saving and loading capabilities of the module) and **bukkit**
(an implementation of the module for [Bukkit plugins](https://getbukkit.org/)).They can all be imported separately or together, following one of the three common methods:
- **Gradle** (preferred):
```groovy
repositories {
maven { url = 'https://repo.fulminazzo.it/releases' }
}dependencies {
implementation 'it.fulminazzo:yagl:latest'
}
```
- **Maven** (alternative):
```xml
fulminazzo
https://repo.fulminazzo.it/releases
```
```xml
it.fulminazzo
yagl
LATEST
```
- **Manual** (discouraged): download the JAR file from the [latest release](../../releases/latest) and import it using your IDE.For more information, [check the wiki](../../wiki).
## Why?
> Wait, so in 2024 you wrote another GUI library, totally ignoring all the better options available?
> You are not that smart, are you?When **YAGL** was nothing more than a simple thought, it had many goals:
- it had to be **platform independent**, meaning that it could potentially be used by even other platforms to implement their own versions (check [Roadmap](#roadmap) for more);
- it had to be **cross-compatible** among **older Minecraft versions**, specifically from **1.8**.
Many may argue that such a version is so obsolete that it should not even be distributed anymore,
and I totally agree with that.
However, while working in the Minecraft industry for a long time,
I noticed that many still require the **retro-compatibility** option,
that is why **YAGL** is tested on **every Minecraft version from 1.8**;
- it had to create a **fast**, **easy** and **scalable** system for developers to create **custom items** and **guis**, without the overhead created by **Bukkit** methods like **ItemMeta**.During the production, **YAGL** expanded even more, and right now is not just a **GUI** library:
it took its idea of independence and extended to many aspects of Minecraft, allowing **independent serializing** of **particles**, **sounds**, **enchantments**, **items**, **guis** and **more**!However, its development is not over yet.
Because of its incredible modularity, **YAGL** can be used for more projects related to Minecraft, like [Fabric](https://fabricmc.net/) and [Forge](https://files.minecraftforge.net/net/minecraftforge/forge/).
As of right now, **they are not planned**, but there is possibility in the future.## Roadmap
While it being such a huge project, **YAGL** can still be expanded a lot.
These are some of the pending features that are planned for the future:- [x] possibility to serialize data to **different file formats** like **JSON**, **XML**, **properties**.
Completed using the [Configurations library](https://github.com/Fulminazzo/Configurations);
- [ ] add support for [PlaceholderAPI](https://github.com/PlaceholderAPI/PlaceholderAPI) in variable replacements;
- [ ] a special `GUIContent` that allows animated items;
- [ ] a special `GUIContent` that allows items which can be toggled based on user click;
- [ ] online web editor to customize and visualize data in real time;