Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
f6f08cf
feat: implement title animation functionality and related classes
1robie Jan 13, 2026
a45bdbc
feat: add item component system with BlockStateComponent and loader
1robie Jan 14, 2026
8a3e0e6
feat: enhance ItemComponentLoader with owner type and plugin support
1robie Jan 14, 2026
c7f78db
feat: introduce new item component system with support for Minecraft …
1robie Jan 14, 2026
ff3a6e4
delete: instruction.md
1robie Jan 14, 2026
373ffc2
feat: add various item component loaders and components for enhanced …
1robie Jan 15, 2026
460f9a1
feat: implement custom model data and name components with loaders fo…
1robie Jan 15, 2026
9b2a0cf
feat: enhance LuckpermAction and LuckPermissionSetLoader to support p…
1robie Jan 15, 2026
6f3efcd
feat: refactor item component loaders to support new damage and effec…
1robie Jan 15, 2026
3868e6d
feat: add enchantments component and loader for item customization
1robie Jan 15, 2026
6806a46
feat: add new item components for glider, item model, and fireworks f…
1robie Jan 16, 2026
ad37874
feat: add LodestoneTracker and KineticWeapon components with loaders …
1robie Jan 16, 2026
2d5c3ba
feat: add Lore and Map components with loaders for enhanced item cust…
1robie Jan 16, 2026
eba3dd5
feat: add MaxDamage and MaxStackSize components with loaders for item…
1robie Jan 16, 2026
4a2ca45
feat: add MaxDamage and MaxStackSize components with loaders for item…
1robie Jan 16, 2026
ba16c94
feat: add OminousBottleAmplifier and PiercingWeapon components with l…
1robie Jan 16, 2026
7034368
feat: add PotionContents and PaperPotDecorations components with load…
1robie Jan 16, 2026
f885a56
feat: add new item components and loaders for enhanced item customiza…
1robie Jan 16, 2026
32fc948
feat: add new item components for rarity, recipes, and repair cost fu…
1robie Jan 16, 2026
db37103
feat: add StoredEnchant and Suspicious Stew Effects components with l…
1robie Jan 16, 2026
6909064
feat: add Tool and TooltipDisplay components with loaders for enhance…
1robie Jan 17, 2026
a847195
feat: add Trim and Unbreakable components with loaders for enhanced i…
1robie Jan 17, 2026
3a0906f
feat: add UseEffects and UseRemainder components with loaders for enh…
1robie Jan 17, 2026
34abed3
feat: add WritableBook and WrittenBook components with loaders for en…
1robie Jan 17, 2026
2db3127
feat: add VariantItemComponentLoader and related classes for enhanced…
1robie Jan 18, 2026
f828691
feat: enhance BukkitVariantItemComponentLoader to handle case sensiti…
1robie Jan 18, 2026
0244676
feat: improve AbstractFireworkItemComponentLoader to enhance shape pa…
1robie Jan 18, 2026
941a038
feat: enhance item component loaders with improved error handling and…
1robie Jan 18, 2026
5e632a5
feat: refactor VariantComponent to use interfaces and update related …
1robie Jan 18, 2026
2ecb6fd
Remove opencode.json from version control
1robie Jan 18, 2026
3e1f31f
feat: rename item component loaders to include 'Spigot' prefix and up…
1robie Jan 18, 2026
856e543
feat: add ItemComponentAlreadyRegisterException for handling duplicat…
1robie Jan 18, 2026
063c408
refactor: update package structure for item component loaders and rel…
1robie Jan 18, 2026
99ae671
refactor: rename package structure from 'zcore' to 'common' and updat…
1robie Jan 18, 2026
0e071e6
refactor: add nullability annotations to method parameters and return…
1robie Jan 18, 2026
7444270
fix: correct reference to brewer variable in getBrewer method
1robie Jan 18, 2026
819cd6c
docs: add Javadoc comments for classes and methods to improve code do…
1robie Jan 18, 2026
273333a
feat: add animated title inventory with configuration options
1robie Jan 18, 2026
57a8e12
feat: add message-to action to specify target player for messages
1robie Jan 18, 2026
53205e9
fix: delegate createInventory call to overloaded method with inventor…
1robie Jan 19, 2026
2fb8c5a
feat: implement YamlFileCache (Guava cache) and YamlParser for improv…
1robie Jan 19, 2026
bd50ffe
feat: refactor BukkitVariantComponent to apply variants using a reusa…
1robie Jan 19, 2026
354de3f
refactor: rename BukkitVariantComponent to SpigotVariantComponent and…
1robie Jan 19, 2026
a77b352
feat: introduce BuildContext interface and refactor item components t…
1robie Jan 20, 2026
c03e353
fix: error
1robie Jan 20, 2026
1b949dd
refactor: clean up BuildContext and ZBuildContext by removing unneces…
1robie Jan 20, 2026
4ee12d7
refactor: change placeholders field in Builder to final for immutability
1robie Jan 20, 2026
fd0f79e
feat: add skipItemUpdate flag to CustomItemData and update related it…
1robie Jan 20, 2026
8e166f0
refactor: streamline debug logging in item component apply methods + …
1robie Jan 20, 2026
253be71
fix: async access block
1robie Jan 20, 2026
f3c251f
refactor: update PaperCustomNameComponent to support papi
1robie Jan 20, 2026
613633b
update: changelog
1robie Jan 20, 2026
842d0c7
fix: changelog
1robie Jan 20, 2026
993bafa
move: Component to API
1robie Jan 20, 2026
a97c749
Fix attack range error message
1robie Jan 20, 2026
fdb1f6c
fix: correct button reference in updatedButtons iteration
1robie Jan 20, 2026
7619654
Merge remote-tracking branch 'origin/developement' into developement
1robie Jan 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,9 @@ target
target-api
*.java~
*.kts~

### OpenCode ###

/AGENTS.md

opencode.json
4 changes: 4 additions & 0 deletions API/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ plugins {
id("re.alwyn974.groupez.publish") version "1.0.0"
}

dependencies{
implementation("net.kyori:adventure-api:4.25.0")
}

rootProject.extra.properties["sha"]?.let { sha ->
version = sha
}
Expand Down
28 changes: 28 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/ComponentsManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fr.maxlego08.menu;

import fr.maxlego08.menu.api.MenuPlugin;
import fr.maxlego08.menu.api.exceptions.ItemComponentAlreadyRegisterException;
import fr.maxlego08.menu.api.loader.ItemComponentLoader;
import org.jetbrains.annotations.NotNull;

import java.util.Optional;

public interface ComponentsManager {

void initializeDefaultComponents(MenuPlugin plugin);

/**
* Register a new ItemComponentLoader.
* @param loader The loader to register
* @throws ItemComponentAlreadyRegisterException if a loader with the same name is already registered
**/
void registerComponent(@NotNull ItemComponentLoader loader) throws ItemComponentAlreadyRegisterException;

/**
* Get an ItemComponentLoader by its name.
* @param name The name of the loader
* @return An Optional containing the loader if found, or empty if not found
**/
@NotNull
Optional<ItemComponentLoader> getLoader(@NotNull String name);
}
62 changes: 40 additions & 22 deletions API/src/main/java/fr/maxlego08/menu/api/ButtonManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
import java.util.Collection;
Expand Down Expand Up @@ -43,20 +44,21 @@ public interface ButtonManager {
*
* @param button The {@link ButtonLoader} instance to unregister.
*/
void unregister(ButtonLoader button);
void unregister(@NotNull ButtonLoader button);

/**
* Unregisters all {@link ButtonLoader} instances linked to a specific plugin.
*
* @param plugin The plugin whose loaders should be unregistered.
*/
void unregisters(Plugin plugin);
void unregisters(@NotNull Plugin plugin);

/**
* Retrieves all registered {@link ButtonLoader} instances.
*
* @return A collection containing all registered {@link ButtonLoader} instances.
*/
@NotNull
Collection<ButtonLoader> getLoaders();

/**
Expand All @@ -65,28 +67,31 @@ public interface ButtonManager {
* @param plugin The plugin whose loaders are to be retrieved.
* @return A collection of {@link ButtonLoader} instances or an empty collection if none are found.
*/
Collection<ButtonLoader> getLoaders(Plugin plugin);
@NotNull
Collection<ButtonLoader> getLoaders(@NotNull Plugin plugin);

/**
* Retrieves a {@link ButtonLoader} based on the name of the associated {@link Button}.
*
* @param name The name of the {@link ButtonLoader}.
* @return An {@link Optional} containing the {@link ButtonLoader}, if found.
*/
Optional<ButtonLoader> getLoader(String name);
@NotNull
Optional<ButtonLoader> getLoader(@Nullable String name);

/**
* Registers a new {@link PermissibleLoader} responsible for permissible creation.
*
* @param permissibleLoader The {@link PermissibleLoader} instance to register.
*/
void registerPermissible(PermissibleLoader permissibleLoader);
void registerPermissible(@NotNull PermissibleLoader permissibleLoader);

/**
* Retrieves a mapping of permissible keys to their associated {@link PermissibleLoader} instances.
*
* @return A map linking permissible keys to their corresponding {@link PermissibleLoader} instances.
*/
@NotNull
Map<String, PermissibleLoader> getPermissibles();

/**
Expand All @@ -95,22 +100,24 @@ public interface ButtonManager {
* @param key The key identifying the permissible.
* @return An {@link Optional} containing the {@link PermissibleLoader}, if found.
*/
Optional<PermissibleLoader> getPermission(String key);
@NotNull
Optional<PermissibleLoader> getPermission(@NotNull String key);

/**
* Registers a new {@link ActionLoader} responsible for action creation.
*
* @param actionLoader The {@link ActionLoader} instance to register.
*/
void registerAction(ActionLoader actionLoader);
void registerAction(@NotNull ActionLoader actionLoader);

/**
* Retrieves an {@link Optional} {@link ActionLoader} based on a specific action key.
*
* @param key The key identifying the action.
* @return An {@link Optional} containing the {@link ActionLoader}, if found.
*/
Optional<ActionLoader> getActionLoader(String key);
@NotNull
Optional<ActionLoader> getActionLoader(@NotNull String key);

/**
* Converts a list of map elements from a configuration file into a list of {@link Permissible} objects.
Expand All @@ -120,7 +127,8 @@ public interface ButtonManager {
* @param file The configuration file in use.
* @return A list of {@link Permissible} objects derived from the configuration.
*/
List<Permissible> loadPermissible(List<Map<String, Object>> elements, String path, File file);
@NotNull
List<@NotNull Permissible> loadPermissible(@NotNull List<@NotNull Map<String, Object>> elements,@NotNull String path,@NotNull File file);

/**
* Converts a list of map elements from a configuration file into a list of {@link Permissible} objects.
Expand All @@ -130,7 +138,8 @@ public interface ButtonManager {
* @param file The file where the configuration is located.
* @return A list of {@link Permissible} objects derived from the configuration.
*/
List<Permissible> loadPermissible(YamlConfiguration configuration, String path, File file);
@NotNull
List<@NotNull Permissible> loadPermissible(@NotNull YamlConfiguration configuration,@NotNull String path,@NotNull File file);

/**
* Converts a list of map elements from a configuration file into a list of {@link Action} objects.
Expand All @@ -142,9 +151,11 @@ public interface ButtonManager {
* @param file The configuration file in use.
* @return A list of {@link Action} objects derived from the configuration.
*/
List<Action> loadActions(List<Map<String, Object>> elements, String path, File file);
@NotNull
List<@NotNull Action> loadActions(@NotNull List<@NotNull Map<String, Object>> elements,@NotNull String path,@NotNull File file);

List<Action> loadActions(List<Map<String, Object>> elements, String path, File file, @NotNull List<ActionPattern> defaultActions, boolean useSuccess, boolean stopOnEmpty);
@NotNull
List<@NotNull Action> loadActions(@NotNull List<Map<String, Object>> elements,@NotNull String path,@NotNull File file, @NotNull List<@NotNull ActionPattern> defaultActions, boolean useSuccess, boolean stopOnEmpty);

/**
* Converts a list of map elements from a configuration file into a list of {@link Action} objects.
Expand All @@ -156,13 +167,17 @@ public interface ButtonManager {
* @param file The configuration file in use.
* @return A list of {@link Action} objects derived from the configuration.
*/
List<Action> loadActions(YamlConfiguration configuration, String path, File file);
@NotNull
List<@NotNull Action> loadActions(@NotNull YamlConfiguration configuration,@NotNull String path,@NotNull File file);

List<Action> loadActions(YamlConfiguration configuration, String path, File file, @NotNull List<ActionPattern> defaultActions, boolean useSuccess, boolean stopOnEmpty);
@NotNull
List<@NotNull Action> loadActions(@NotNull YamlConfiguration configuration,@NotNull String path,@NotNull File file, @NotNull List<@NotNull ActionPattern> defaultActions, boolean useSuccess, boolean stopOnEmpty);

List<Requirement> loadRequirements(YamlConfiguration configuration, String path, File file) throws InventoryException;
@NotNull
List<Requirement> loadRequirements(@Nullable YamlConfiguration configuration,@NotNull String path,@NotNull File file) throws InventoryException;

Requirement loadRequirement(YamlConfiguration configuration, String path, File file) throws InventoryException;
@NotNull
Requirement loadRequirement(@NotNull YamlConfiguration configuration,@NotNull String path,@NotNull File file) throws InventoryException;

/**
* Retrieves a list of all empty actions from the given configuration elements.
Expand All @@ -173,7 +188,8 @@ public interface ButtonManager {
* @param elements The list of configuration items detailing an action's entire configuration.
* @return A list of all empty actions from the given configuration elements.
*/
List<String> getEmptyActions(List<Map<String, Object>> elements);
@NotNull
List<String> getEmptyActions(@NotNull List<Map<String, Object>> elements);

/**
* Retrieves a list of all empty permissibles from the given configuration elements.
Expand All @@ -184,18 +200,20 @@ public interface ButtonManager {
* @param elements The list of configuration items detailing a permissible's entire configuration.
* @return A list of all empty permissibles from the given configuration elements.
*/
List<String> getEmptyPermissible(List<Map<String, Object>> elements);
@NotNull
List<String> getEmptyPermissible(@NotNull List<Map<String, Object>> elements);

/**
* Retrieves a {@link Loader} for a {@link Button} object based on the given parameters.
*
* <p>This method is used to create a loader for a button object, given the plugin instance, file, size, and matrix.</p>
*
* @param menuPlugin The plugin instance associated with the button loader.
* @param file The file from which the button configuration is loaded.
* @param size The size of the button.
* @param matrix The matrix containing the button's configuration data.
* @param file The file from which the button configuration is loaded.
* @param size The size of the button.
* @param matrix The matrix containing the button's configuration data.
* @return A {@link Loader} for a {@link Button} object based on the given parameters.
*/
Loader<Button> getLoaderButton(MenuPlugin menuPlugin, File file, int size, Map<Character, List<Integer>> matrix);
@NotNull
Loader<Button> getLoaderButton(@NotNull MenuPlugin menuPlugin,@NotNull File file, int size,@NotNull Map<Character,@NotNull List<Integer>> matrix);
}
3 changes: 2 additions & 1 deletion API/src/main/java/fr/maxlego08/menu/api/DialogInventory.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import fr.maxlego08.menu.api.utils.dialogs.record.ActionButtonRecord;
import fr.maxlego08.menu.api.utils.dialogs.record.ZDialogInventoryBuild;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.List;
Expand Down Expand Up @@ -135,7 +136,7 @@ public interface DialogInventory {

void setActionButtonServerLink(ActionButtonRecord actionButtonRecord);

ActionButtonRecord getActionButtonServerLink(Player player);
ActionButtonRecord getActionButtonServerLink(@NotNull Player player);

ActionButtonRecord getActionButtonServerLink();

Expand Down
5 changes: 5 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/Inventory.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fr.maxlego08.menu.api;

import fr.maxlego08.menu.api.animation.TitleAnimation;
import fr.maxlego08.menu.api.button.Button;
import fr.maxlego08.menu.api.engine.InventoryEngine;
import fr.maxlego08.menu.api.engine.InventoryResult;
Expand Down Expand Up @@ -216,4 +217,8 @@ public interface Inventory {
* @return The player name placeholder.
*/
String getTargetPlayerNamePlaceholder();

void setTitleAnimation(TitleAnimation load);

TitleAnimation getTitleAnimation();
}
3 changes: 3 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/InventoryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import fr.maxlego08.menu.api.loader.MaterialLoader;
import fr.maxlego08.menu.api.utils.Message;
import fr.maxlego08.menu.api.utils.MetaUpdater;
import fr.maxlego08.menu.api.utils.Placeholders;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
Expand Down Expand Up @@ -559,6 +560,8 @@ public interface InventoryManager extends Listener {

ItemStack postProcessSkullItemStack(ItemStack itemStack, Button button, Player player);

ItemStack postProcessSkullItemStack(ItemStack itemStack, Button button, Player player, Placeholders placeholders);

void sendMessage(CommandSender sender, Message message, Object... args);

void load();
Expand Down
2 changes: 2 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/ItemManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public interface ItemManager {

void registerMechanicFactory(MechanicFactory<?> factory);

Optional<MechanicFactory<?>> getMechanicFactory(String mechanicId);

void giveItem(Player player, String itemId);

void executeCheckInventoryItems(Player player);
Expand Down
Loading
Loading