diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e215fa..1e1d44c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,4 +26,4 @@ jobs: run: chmod +x ./gradlew - name: Build with Gradle Wrapper - run: ./gradlew build -PStaticStudiosUsername=github -PStaticStudiosPassword=${{ secrets.REPOSITORY_SECRET }} \ No newline at end of file + run: ./gradlew :menus:build -PStaticStudiosUsername=github -PStaticStudiosPassword=${{ secrets.REPOSITORY_SECRET }} \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2bdc297..52f7ed2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,4 +19,4 @@ jobs: distribution: 'temurin' cache: 'gradle' - name: Publish to Private Repository - run: ./gradlew publish -PStaticStudiosUsername=github -PStaticStudiosPassword=${{ secrets.REPOSITORY_SECRET }} \ No newline at end of file + run: ./gradlew :menus:publish -PStaticStudiosUsername=github -PStaticStudiosPassword=${{ secrets.REPOSITORY_SECRET }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7cb6b1c..2fe38fa 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,7 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +run +TestCommand.java \ No newline at end of file diff --git a/build.gradle b/menus/build.gradle similarity index 100% rename from build.gradle rename to menus/build.gradle diff --git a/src/main/java/net/staticstudios/menus/StaticMenus.java b/menus/src/main/java/net/staticstudios/menus/StaticMenus.java similarity index 76% rename from src/main/java/net/staticstudios/menus/StaticMenus.java rename to menus/src/main/java/net/staticstudios/menus/StaticMenus.java index c2162ac..abd5350 100644 --- a/src/main/java/net/staticstudios/menus/StaticMenus.java +++ b/menus/src/main/java/net/staticstudios/menus/StaticMenus.java @@ -3,6 +3,8 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.staticstudios.menus.history.MenuHistory; import net.staticstudios.menus.listener.MenuListener; +import net.staticstudios.menus.parser.MenuRegistry; +import net.staticstudios.menus.parser.YamlMenuParser; import net.staticstudios.menus.viewer.MenuViewer; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -17,11 +19,15 @@ public class StaticMenus { private static Function getViewerFunction; private static JavaPlugin plugin; private static MiniMessage miniMessage; + private static MenuRegistry registry; + private static YamlMenuParser parser; public static void enable(JavaPlugin plugin, MiniMessage miniMessage, Function getViewerFunction) { StaticMenus.plugin = plugin; StaticMenus.getViewerFunction = getViewerFunction; StaticMenus.miniMessage = miniMessage; + StaticMenus.registry = new MenuRegistry(); + StaticMenus.parser = new YamlMenuParser(); Bukkit.getPluginManager().registerEvents(new MenuListener(), plugin); } @@ -41,4 +47,12 @@ public static MiniMessage getMiniMessage() { public static MenuViewer getViewer(Player player) { return getViewerFunction.apply(player); } + + public static MenuRegistry getRegistry() { + return registry; + } + + public static YamlMenuParser getParser() { + return parser; + } } diff --git a/src/main/java/net/staticstudios/menus/action/ButtonAction.java b/menus/src/main/java/net/staticstudios/menus/action/ButtonAction.java similarity index 58% rename from src/main/java/net/staticstudios/menus/action/ButtonAction.java rename to menus/src/main/java/net/staticstudios/menus/action/ButtonAction.java index 07e2f4c..534356d 100644 --- a/src/main/java/net/staticstudios/menus/action/ButtonAction.java +++ b/menus/src/main/java/net/staticstudios/menus/action/ButtonAction.java @@ -5,7 +5,7 @@ import java.util.function.Function; -public interface ButtonAction { +public interface ButtonAction extends ViewerAction { static ButtonAction openMenu(Menu menu) { return new OpenMenuAction(menuViewer -> menu); } @@ -14,9 +14,19 @@ static ButtonAction openMenu(Function menuSupplier) { return new OpenMenuAction(menuSupplier); } + static ButtonAction closeMenu() { + return new CloseMenuAction(); + } + static ButtonAction goBack() { return new GoBackAction(); } - void invoke(MenuViewer viewer); + static ButtonAction sendMessage(String message) { + return new SendMessageAction(message); + } + + static ButtonAction command(String command) { + return new CommandAction(command); + } } diff --git a/menus/src/main/java/net/staticstudios/menus/action/CloseMenuAction.java b/menus/src/main/java/net/staticstudios/menus/action/CloseMenuAction.java new file mode 100644 index 0000000..b478e94 --- /dev/null +++ b/menus/src/main/java/net/staticstudios/menus/action/CloseMenuAction.java @@ -0,0 +1,10 @@ +package net.staticstudios.menus.action; + +import net.staticstudios.menus.viewer.MenuViewer; + +public class CloseMenuAction implements ButtonAction { + @Override + public void invoke(MenuViewer viewer) { + viewer.closeMenu(); + } +} diff --git a/menus/src/main/java/net/staticstudios/menus/action/CommandAction.java b/menus/src/main/java/net/staticstudios/menus/action/CommandAction.java new file mode 100644 index 0000000..3d5b5f3 --- /dev/null +++ b/menus/src/main/java/net/staticstudios/menus/action/CommandAction.java @@ -0,0 +1,16 @@ +package net.staticstudios.menus.action; + +import net.staticstudios.menus.viewer.MenuViewer; + +public class CommandAction implements ButtonAction { + private final String command; + + protected CommandAction(String command) { + this.command = command; + } + + @Override + public void invoke(MenuViewer viewer) { + viewer.getPlayer().performCommand(command); + } +} diff --git a/src/main/java/net/staticstudios/menus/action/GoBackAction.java b/menus/src/main/java/net/staticstudios/menus/action/GoBackAction.java similarity index 80% rename from src/main/java/net/staticstudios/menus/action/GoBackAction.java rename to menus/src/main/java/net/staticstudios/menus/action/GoBackAction.java index 33957ca..e173ddc 100644 --- a/src/main/java/net/staticstudios/menus/action/GoBackAction.java +++ b/menus/src/main/java/net/staticstudios/menus/action/GoBackAction.java @@ -11,7 +11,7 @@ protected GoBackAction() { @Override public void invoke(MenuViewer viewer) { StaticMenus.getHistory(viewer).pop(); - Menu menuToOpen = StaticMenus.getHistory(viewer).peek(); + Menu menuToOpen = StaticMenus.getHistory(viewer).isEmpty() ? null : StaticMenus.getHistory(viewer).peek(); if (menuToOpen == null) { return; diff --git a/src/main/java/net/staticstudios/menus/action/OpenMenuAction.java b/menus/src/main/java/net/staticstudios/menus/action/OpenMenuAction.java similarity index 100% rename from src/main/java/net/staticstudios/menus/action/OpenMenuAction.java rename to menus/src/main/java/net/staticstudios/menus/action/OpenMenuAction.java diff --git a/menus/src/main/java/net/staticstudios/menus/action/SendMessageAction.java b/menus/src/main/java/net/staticstudios/menus/action/SendMessageAction.java new file mode 100644 index 0000000..3ae5b1c --- /dev/null +++ b/menus/src/main/java/net/staticstudios/menus/action/SendMessageAction.java @@ -0,0 +1,16 @@ +package net.staticstudios.menus.action; + +import net.staticstudios.menus.viewer.MenuViewer; + +public class SendMessageAction implements ButtonAction { + private final String message; + + protected SendMessageAction(String message) { + this.message = message; + } + + @Override + public void invoke(MenuViewer viewer) { + viewer.sendMessage(message); + } +} diff --git a/src/main/java/net/staticstudios/menus/action/MenuAction.java b/menus/src/main/java/net/staticstudios/menus/action/ViewerAction.java similarity index 80% rename from src/main/java/net/staticstudios/menus/action/MenuAction.java rename to menus/src/main/java/net/staticstudios/menus/action/ViewerAction.java index 470972f..8eab3d9 100644 --- a/src/main/java/net/staticstudios/menus/action/MenuAction.java +++ b/menus/src/main/java/net/staticstudios/menus/action/ViewerAction.java @@ -2,7 +2,7 @@ import net.staticstudios.menus.viewer.MenuViewer; -public interface MenuAction { +public interface ViewerAction { void invoke(MenuViewer viewer); } diff --git a/src/main/java/net/staticstudios/menus/button/BackButton.java b/menus/src/main/java/net/staticstudios/menus/button/BackButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/BackButton.java rename to menus/src/main/java/net/staticstudios/menus/button/BackButton.java diff --git a/src/main/java/net/staticstudios/menus/button/Button.java b/menus/src/main/java/net/staticstudios/menus/button/Button.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/Button.java rename to menus/src/main/java/net/staticstudios/menus/button/Button.java diff --git a/src/main/java/net/staticstudios/menus/button/ButtonBuilder.java b/menus/src/main/java/net/staticstudios/menus/button/ButtonBuilder.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/ButtonBuilder.java rename to menus/src/main/java/net/staticstudios/menus/button/ButtonBuilder.java diff --git a/src/main/java/net/staticstudios/menus/button/ButtonBuilderSelector.java b/menus/src/main/java/net/staticstudios/menus/button/ButtonBuilderSelector.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/ButtonBuilderSelector.java rename to menus/src/main/java/net/staticstudios/menus/button/ButtonBuilderSelector.java diff --git a/src/main/java/net/staticstudios/menus/button/ButtonRegistry.java b/menus/src/main/java/net/staticstudios/menus/button/ButtonRegistry.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/ButtonRegistry.java rename to menus/src/main/java/net/staticstudios/menus/button/ButtonRegistry.java diff --git a/src/main/java/net/staticstudios/menus/button/EmptyButton.java b/menus/src/main/java/net/staticstudios/menus/button/EmptyButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/EmptyButton.java rename to menus/src/main/java/net/staticstudios/menus/button/EmptyButton.java diff --git a/src/main/java/net/staticstudios/menus/button/MutableButton.java b/menus/src/main/java/net/staticstudios/menus/button/MutableButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/MutableButton.java rename to menus/src/main/java/net/staticstudios/menus/button/MutableButton.java diff --git a/src/main/java/net/staticstudios/menus/button/NextPageButton.java b/menus/src/main/java/net/staticstudios/menus/button/NextPageButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/NextPageButton.java rename to menus/src/main/java/net/staticstudios/menus/button/NextPageButton.java diff --git a/src/main/java/net/staticstudios/menus/button/PlayerSkullButtonBuilder.java b/menus/src/main/java/net/staticstudios/menus/button/PlayerSkullButtonBuilder.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/PlayerSkullButtonBuilder.java rename to menus/src/main/java/net/staticstudios/menus/button/PlayerSkullButtonBuilder.java diff --git a/src/main/java/net/staticstudios/menus/button/PreviousPageButton.java b/menus/src/main/java/net/staticstudios/menus/button/PreviousPageButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/PreviousPageButton.java rename to menus/src/main/java/net/staticstudios/menus/button/PreviousPageButton.java diff --git a/src/main/java/net/staticstudios/menus/button/SimpleButton.java b/menus/src/main/java/net/staticstudios/menus/button/SimpleButton.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/SimpleButton.java rename to menus/src/main/java/net/staticstudios/menus/button/SimpleButton.java diff --git a/src/main/java/net/staticstudios/menus/button/SimpleButtonBuilder.java b/menus/src/main/java/net/staticstudios/menus/button/SimpleButtonBuilder.java similarity index 100% rename from src/main/java/net/staticstudios/menus/button/SimpleButtonBuilder.java rename to menus/src/main/java/net/staticstudios/menus/button/SimpleButtonBuilder.java diff --git a/src/main/java/net/staticstudios/menus/history/MenuHistory.java b/menus/src/main/java/net/staticstudios/menus/history/MenuHistory.java similarity index 100% rename from src/main/java/net/staticstudios/menus/history/MenuHistory.java rename to menus/src/main/java/net/staticstudios/menus/history/MenuHistory.java diff --git a/src/main/java/net/staticstudios/menus/listener/MenuListener.java b/menus/src/main/java/net/staticstudios/menus/listener/MenuListener.java similarity index 100% rename from src/main/java/net/staticstudios/menus/listener/MenuListener.java rename to menus/src/main/java/net/staticstudios/menus/listener/MenuListener.java diff --git a/src/main/java/net/staticstudios/menus/menu/Menu.java b/menus/src/main/java/net/staticstudios/menus/menu/Menu.java similarity index 93% rename from src/main/java/net/staticstudios/menus/menu/Menu.java rename to menus/src/main/java/net/staticstudios/menus/menu/Menu.java index 39646c4..e89d8a4 100644 --- a/src/main/java/net/staticstudios/menus/menu/Menu.java +++ b/menus/src/main/java/net/staticstudios/menus/menu/Menu.java @@ -2,6 +2,7 @@ import net.staticstudios.menus.StaticMenus; import net.staticstudios.menus.button.Button; +import net.staticstudios.menus.history.MenuHistory; import net.staticstudios.menus.options.MenuOptions; import net.staticstudios.menus.viewer.MenuViewer; import org.bukkit.inventory.InventoryHolder; @@ -60,7 +61,8 @@ default void updateButton(int slot, Function<@NotNull Button, @NotNull Button> u * Open the menu */ default void open() { - Menu previous = StaticMenus.getHistory(getViewer()).peek(); + MenuHistory history = StaticMenus.getHistory(getViewer()); + Menu previous = history.isEmpty() ? null : history.peek(); open(false, previous == null || !previous.getId().equals(this.getId())); //if we are opening a new menu, push it to the history } diff --git a/src/main/java/net/staticstudios/menus/menu/MenuBuilder.java b/menus/src/main/java/net/staticstudios/menus/menu/MenuBuilder.java similarity index 100% rename from src/main/java/net/staticstudios/menus/menu/MenuBuilder.java rename to menus/src/main/java/net/staticstudios/menus/menu/MenuBuilder.java diff --git a/src/main/java/net/staticstudios/menus/menu/MenuBuilderSelector.java b/menus/src/main/java/net/staticstudios/menus/menu/MenuBuilderSelector.java similarity index 100% rename from src/main/java/net/staticstudios/menus/menu/MenuBuilderSelector.java rename to menus/src/main/java/net/staticstudios/menus/menu/MenuBuilderSelector.java diff --git a/src/main/java/net/staticstudios/menus/menu/PagedMenu.java b/menus/src/main/java/net/staticstudios/menus/menu/PagedMenu.java similarity index 92% rename from src/main/java/net/staticstudios/menus/menu/PagedMenu.java rename to menus/src/main/java/net/staticstudios/menus/menu/PagedMenu.java index 8d3b6b8..0f2ce39 100644 --- a/src/main/java/net/staticstudios/menus/menu/PagedMenu.java +++ b/menus/src/main/java/net/staticstudios/menus/menu/PagedMenu.java @@ -2,7 +2,7 @@ import net.kyori.adventure.text.Component; import net.staticstudios.menus.StaticMenus; -import net.staticstudios.menus.action.MenuAction; +import net.staticstudios.menus.action.ViewerAction; import net.staticstudios.menus.button.Button; import net.staticstudios.menus.options.MenuOptions; import net.staticstudios.menus.viewer.MenuViewer; @@ -18,7 +18,7 @@ public class PagedMenu implements Menu { private final Component inventoryTitle; private final String id; - private final Map> actions; + private final Map> actions; private final List