Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

Awesome Lists containing this project

README

        


Tests coverage
Codacy Grade
Lines of Code






















Latest version
Java version
Gradle version


GitHub commits
Issues




**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;