Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
836f26b
fix: handle inventory closure for VInventory on player quit
1robie Apr 12, 2026
deba6b6
refactor: rename and reorganize item component loaders for max stack …
1robie Apr 12, 2026
4fb52e6
feat: add Spigot components for attack range + fix maxstacksize parse…
1robie Apr 12, 2026
d7e43e1
chore: update Gradle wrapper to version 9.3.0 (support java 25))
1robie Apr 28, 2026
96b5dd0
chore: update Gradle wrapper to version 9.4.0
1robie Apr 28, 2026
c95b5ee
Merge branch 'Maxlego08:main' into developement
1robie Apr 28, 2026
7c86b7f
Merge remote-tracking branch 'origin/developement' into developement
1robie Apr 28, 2026
5f5bc3d
feat: add new annotations for component loaders and update plugin.yml…
1robie Apr 28, 2026
59c578b
feat: implement variant loaders for Axolotl, Cat, Fox, and other enti…
1robie Apr 29, 2026
9a29afd
feat: add GEMINI.md to .gitignore
1robie Apr 29, 2026
8bd49c1
feat: implement automatic listener registration using AutoListener an…
1robie Apr 29, 2026
165044f
feat: support for view-requirement for CustomRender buttons
1robie May 1, 2026
8102644
feat: replace NmsVersion with MinecraftVersion for version checks acr…
1robie May 1, 2026
9b82328
fix: remove debug logs
1robie May 5, 2026
93ffca1
feat: add TakeItemAction and TakeItemLoader for item removal function…
1robie May 5, 2026
3ba5e95
refactor: remove debug logging from VersionFilter class
1robie May 5, 2026
f7402b9
fix: update loadItemStack to use createSection for item map
1robie May 6, 2026
78b075b
fix: TakeItemAction and improve item loading requirement for TakeItem…
1robie May 6, 2026
a6da9a6
remove debug message
1robie May 6, 2026
439ef38
fix: switch with clear-inv and packet event don't hide items in playe…
1robie May 7, 2026
b1f08bc
feat: add support for command action requirements
1robie May 8, 2026
8a7bf09
fix: enhance error handling and debug logging in MMOItemsLoader
1robie May 8, 2026
3af2842
feat: add debug logging functionality to TakeItemAction and Action cl…
1robie May 8, 2026
6ad9326
Merge remote-tracking branch 'upstream/develop' into developement
1robie May 8, 2026
a84d288
fix: add nullable annotation import in ZInventory
1robie May 8, 2026
6121ce2
feat: update changelog.md
1robie May 8, 2026
21bdc8e
feat: enhance ButtonLoader to support aliases and update dialog type …
1robie May 10, 2026
924fc67
refactor: convert several classes to use records and improve method c…
1robie May 12, 2026
79b7e85
fix: add nullable and not-null annotations to improve code safety
1robie May 12, 2026
adc93d4
fix: correct typo in draggable button comment and update target playe…
1robie May 14, 2026
8dea31a
fix: initialize targetPlayerNamePlaceholder to null
1robie May 14, 2026
23aebeb
refactor: update Logger class to abstract and improve logging methods…
1robie May 14, 2026
a1946c2
fix: enhance item loading with debug logging for invalid Mythic items
1robie May 19, 2026
d2b740b
refactor: replace plugin logger calls with Logger class for consisten…
1robie May 19, 2026
40f2e1b
Update:
1robie May 27, 2026
0ac68ba
feat: add RefreshSlotAction and SetItemAction for improved inventory …
1robie May 28, 2026
72fd7a1
Merge remote-tracking branch 'upstream/develop' into developement
1robie May 28, 2026
cb9da96
refactor: update dependencies to use a toml
1robie May 28, 2026
f869d18
feat: update Java version to 25 in build configuration
1robie May 28, 2026
decaf13
PLS Github
1robie May 28, 2026
fd327ba
fix: always use zmenu as owner of the inventory
1robie May 28, 2026
a9d5394
fix: compatibility with old buttonloader
1robie May 28, 2026
de5faad
feat: implement AnvilInventoryEngine interface and add text change ha…
1robie May 28, 2026
0b2bbf2
feat: update SetItemAction to support multiple slots and adjust loade…
1robie May 28, 2026
95920f4
feat: add ChestInventoryLoader and related classes for chest inventor…
1robie May 28, 2026
25c2039
feat: add rule system with various rule implementations and loaders f…
1robie May 29, 2026
a61c3d1
fix: issue when switching between 2 anvil inventory
1robie May 29, 2026
2e153ff
GITHUB CI PLS :'(
1robie May 30, 2026
6526ff3
GITHUB CI PLS :'(
1robie May 30, 2026
e2e0643
Merge remote-tracking branch 'origin/developement' into developement
1robie May 30, 2026
e4f6ffd
GITHUB CI PLS :'(
1robie May 30, 2026
e53f6cc
fix: inventory with clearinventory set items in the wrong slot + clea…
1robie May 30, 2026
08a8ada
Merge remote-tracking branch 'origin/developement' into developement
1robie May 30, 2026
0ce5df9
rollback build.yml for github ci action
1robie May 30, 2026
7ca88de
try enabled gradle cache
1robie May 30, 2026
e98c691
refactor: change item model type from NamespacedKey to String and upd…
1robie Jun 2, 2026
8c3df51
fix: build for paper-user-dev in common
1robie Jun 2, 2026
a85601a
feat: remove stacktrace and info in build command
1robie Jun 2, 2026
18a4133
feat: add amount type handling for item stacks inside ZMenuItemStack
1robie Jun 2, 2026
5bf6fa0
fix: when the error item disappear they break the onClick + player ca…
1robie Jun 2, 2026
fe2f18e
refactor: simplify success condition logic in ZItemDragButton and ext…
1robie Jun 2, 2026
ab7de29
Remove TODO.md from repository
1robie Jun 2, 2026
ef9d269
Ignore TODO.md
1robie Jun 2, 2026
f539ff7
Revert "Ignore TODO.md"
1robie Jun 2, 2026
db9b9af
Ignore TODO.md
1robie Jun 2, 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ jobs:
uses: GroupeZ-dev/actions/.github/workflows/build.yml@main
with:
project-name: "zMenu"
java-version: '25'
publish: true
project-to-publish: "API:publish"
build-command: './gradlew build'
discord-avatar-url: "https://minecraft-inventory-builder.com/storage/images/9UgcfGZyrmbVrXw5lbj5kXq6fW8F4nhwj6Cx4nVG.png"
secrets:
WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ opencode.json
CLAUDE.md
.claude/settings.local.json
build-and-deploy.sh
GEMINI.md

TODO.md
4 changes: 2 additions & 2 deletions API/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
plugins {
id("re.alwyn974.groupez.publish") version "1.0.0"
alias(libs.plugins.groupez.publish)
}

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

rootProject.extra.properties["sha"]?.let { sha ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.maxlego08.menu.api.exceptions.DialogException;
import fr.maxlego08.menu.api.exceptions.InventoryException;
import fr.maxlego08.menu.api.inventory.bedrock.BedrockInventory;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

Expand Down
1 change: 1 addition & 0 deletions API/src/main/java/fr/maxlego08/menu/api/DialogManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.maxlego08.menu.api.configuration.ConfigManagerInt;
import fr.maxlego08.menu.api.exceptions.DialogException;
import fr.maxlego08.menu.api.exceptions.InventoryException;
import fr.maxlego08.menu.api.inventory.dialog.DialogInventory;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

Expand Down
77 changes: 76 additions & 1 deletion API/src/main/java/fr/maxlego08/menu/api/Inventory.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
Expand All @@ -34,7 +35,14 @@ public interface Inventory {
* Returns the size of the inventory.
*
* @return The size of the inventory. This value is the number of slots in the inventory.
* @deprecated Use:
* <pre>
* if (inventory instanceof ChestInventory chestInventory) {
* int size = chestInventory.size();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
int size();

/**
Expand All @@ -49,19 +57,33 @@ public interface Inventory {
*
* @return The name of the inventory, translated to the player's language.
*/
String getName(Player player, InventoryEngine InventoryEngine, Placeholders placeholders);
String getName(@NotNull Player player, InventoryEngine InventoryEngine, Placeholders placeholders);

/**
* Returns the type of the inventory.
*
* @return The type of the inventory.
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* InventoryType type = containerInventory.getType();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
InventoryType getType();

/**
* Indicates whether the inventory prevents the player from picking up items from the ground.
* @return true if item pickup is blocked while this inventory is open, false otherwise.
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* boolean shouldCancel = containerInventory.shouldCancelItemPickup();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
boolean shouldCancelItemPickup();

/**
Expand Down Expand Up @@ -159,7 +181,14 @@ public interface Inventory {
* Returns the item stack used to fill empty slots in the inventory.
*
* @return The fill item stack.
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* MenuItemStack fillItemStack = containerInventory.getFillItemStack();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
MenuItemStack getFillItemStack();

/**
Expand All @@ -180,7 +209,14 @@ public interface Inventory {
* Determines whether the player's inventory should be cleared upon closing the inventory.
*
* @return True if the player's inventory should be cleaned, false otherwise.
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* boolean shouldClear = containerInventory.clearInventory();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
boolean cleanInventory();

/**
Expand Down Expand Up @@ -222,16 +258,55 @@ public interface Inventory {
*/
String getTargetPlayerNamePlaceholder();


/**
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* containerInventory.setTitleAnimation(animation);
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
void setTitleAnimation(TitleAnimation load);

/**
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* TitleAnimation animation = containerInventory.getTitleAnimation();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
@Nullable
TitleAnimation getTitleAnimation();

List<Action> getOpenActions();

List<Action> getCloseActions();

/**
*
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* ClearInvType clearInvType = containerInventory.getClearInvType();
* }
* </pre>
*/
ClearInvType getClearInvType();

/**
*
* @deprecated Use:
* <pre>
* if (inventory instanceof ContainerInventory containerInventory) {
* boolean isEnabled = containerInventory.isClickLimiterEnabled();
* }
* </pre>
*/
@Deprecated(since = "1.1.1.5")
boolean isClickLimiterEnabled();

@Nullable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.maxlego08.menu.api;

import fr.maxlego08.menu.api.engine.BaseInventory;
import fr.maxlego08.menu.api.engine.InventoryEngine;
import fr.maxlego08.menu.api.engine.ItemButton;
import org.bukkit.entity.Player;

Expand All @@ -25,4 +26,8 @@ default void onInventoryClose(Player player, BaseInventory baseInventory){
default void onButtonClick(Player player, ItemButton button){

}

default void onInventorySwitch(Player player, InventoryEngine oldInventoryEngine, InventoryEngine newInventoryEngine) {

}
}
2 changes: 2 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 @@ -598,6 +598,8 @@ public interface InventoryManager extends Listener {
*/
MenuItemStack loadItemStack(File file, String path, Map<String, Object> map);

MenuItemStack loadItemStack(File file, Map<String, Object> map);

/**
* Provides access to the pagination manager for handling paginated content in inventories.
*
Expand Down
14 changes: 14 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/MenuItemStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import fr.maxlego08.menu.api.attribute.AttributeWrapper;
import fr.maxlego08.menu.api.context.BuildContext;
import fr.maxlego08.menu.api.context.MenuItemStackContext;
import fr.maxlego08.menu.api.enums.AmountType;
import fr.maxlego08.menu.api.enums.MenuItemRarity;
import fr.maxlego08.menu.api.itemstack.*;
import fr.maxlego08.menu.api.utils.LoreType;
Expand Down Expand Up @@ -82,6 +83,13 @@ public interface MenuItemStack extends MenuItemStackContext {
*/
void setAmount(String amount);

/**
* Updates the configured amount type for the item stack.
*
* @param amountType the amount type to set.
*/
void setAmountType(AmountType amountType);

/**
* Defines the skull texture URL for this item stack.
*
Expand Down Expand Up @@ -401,6 +409,12 @@ public interface MenuItemStack extends MenuItemStackContext {
*/
void setItemModel(NamespacedKey itemModel);

/**
* Sets the item model identifier using a string value.
* @param itemModel the item model identifier to set, as a string.
*/
void setItemModel(String itemModel);

/**
* Sets the equipped model identifier used for wearable items.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ public interface TitleAnimation {
* @return A PlayerTitleAnimation if started, otherwise null.
*/
@Nullable
PlayerTitleAnimation playTitleAnimation(@NotNull MenuPlugin plugin, int containerId, @NotNull InventoryType type, int size, Object... args);
PlayerTitleAnimation playTitleAnimation(@NotNull MenuPlugin plugin, int containerId, @NotNull InventoryType type, int size, @NotNull Object... args);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.maxlego08.menu.api.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoListener {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.maxlego08.menu.api.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoRuleLoader {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.maxlego08.menu.api.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ComponentLoader {
}
11 changes: 11 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/annotations/PaperOnly.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.maxlego08.menu.api.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PaperOnly {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package fr.maxlego08.menu.api.annotations;

import org.jetbrains.annotations.NotNull;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SinceVersion {
@NotNull
String value();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package fr.maxlego08.menu.api.annotations;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SpigotOnly {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package fr.maxlego08.menu.api.annotations;

import org.jetbrains.annotations.NotNull;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface UntilVersion {

@NotNull
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@

import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.jetbrains.annotations.NotNull;

public record AttributeEntry(Attribute attribute, AttributeModifier modifier) {}
public record AttributeEntry(@NotNull Attribute attribute,@NotNull AttributeModifier modifier) {}
4 changes: 4 additions & 0 deletions API/src/main/java/fr/maxlego08/menu/api/button/Button.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.maxlego08.menu.api.Inventory;
import fr.maxlego08.menu.api.MenuItemStack;
import fr.maxlego08.menu.api.MenuPlugin;
import fr.maxlego08.menu.api.engine.AnvilInventoryEngine;
import fr.maxlego08.menu.api.engine.InventoryEngine;
import fr.maxlego08.menu.api.engine.Pagination;
import fr.maxlego08.menu.api.players.DataManager;
Expand All @@ -13,6 +14,7 @@
import fr.maxlego08.menu.api.sound.SoundOption;
import fr.maxlego08.menu.api.utils.OpenLink;
import fr.maxlego08.menu.api.utils.Placeholders;
import fr.maxlego08.menu.api.utils.TextChange;
import fr.maxlego08.menu.zcore.utils.PerformanceDebug;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
Expand Down Expand Up @@ -212,6 +214,8 @@ public void onLeftClick(@NotNull Player player, @NotNull InventoryClickEvent eve
public void onRightClick(@NotNull Player player, @NotNull InventoryClickEvent event, @NotNull InventoryEngine inventory, int slot) {
}

public void onAnvilTextChange(@NotNull Player player, AnvilInventoryEngine inventoryEngine, TextChange textChange, Placeholders placeholders) {}

/**
* Called when the middle mouse button is clicked
*
Expand Down
Loading
Loading