feat: add actions to menu

This commit is contained in:
TheClashFruit 2023-06-11 19:54:01 +02:00
parent a76a22a662
commit 5da010de52
Signed by: TheClashFruit
GPG key ID: CF4A319B9A73290C
9 changed files with 57 additions and 5 deletions

View file

@ -1,6 +1,5 @@
package me.theclashfruit.hubbit.commands; package me.theclashfruit.hubbit.commands;
import me.theclashfruit.hubbit.Hubbit;
import me.theclashfruit.hubbit.utils.ConfigLoaderSingleton; import me.theclashfruit.hubbit.utils.ConfigLoaderSingleton;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -9,19 +8,17 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import static org.bukkit.Bukkit.getLogger; import static org.bukkit.Bukkit.getLogger;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
public class MenuCommand implements CommandExecutor { public class MenuCommand implements CommandExecutor {
@Override @Override
@ -53,7 +50,13 @@ public class MenuCommand implements CommandExecutor {
} }
} }
AtomicInteger currentPage = new AtomicInteger();
menuConfig.getMapList("pages").forEach(page -> { menuConfig.getMapList("pages").forEach(page -> {
if(currentPage.get() > 0 && !menuConfig.getBoolean("navigation")) {
return;
}
List<Map<?, ?>> items = (List<Map<?, ?>>) page.get("items"); List<Map<?, ?>> items = (List<Map<?, ?>>) page.get("items");
items.forEach(item -> { items.forEach(item -> {
@ -75,6 +78,8 @@ public class MenuCommand implements CommandExecutor {
menu.setItem((int) item.get("slot"), itemStack); menu.setItem((int) item.get("slot"), itemStack);
}); });
currentPage.getAndIncrement();
}); });
player.openInventory(menu); player.openInventory(menu);

View file

@ -3,16 +3,63 @@ package me.theclashfruit.hubbit.events;
import me.theclashfruit.hubbit.utils.ConfigLoaderSingleton; import me.theclashfruit.hubbit.utils.ConfigLoaderSingleton;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import java.util.List;
import java.util.Map;
import static org.bukkit.Bukkit.getLogger;
public class MenuListener implements Listener { public class MenuListener implements Listener {
@EventHandler @EventHandler
public void onClick(InventoryClickEvent event) { public void onClick(InventoryClickEvent event) {
FileConfiguration menuConfig = ConfigLoaderSingleton.getInstance().getMenuFileConfig(); FileConfiguration menuConfig = ConfigLoaderSingleton.getInstance().getMenuFileConfig();
Player player = (Player) event.getWhoClicked();
if(event.getView().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&', menuConfig.getString("title")))) { if(event.getView().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&', menuConfig.getString("title")))) {
int eventSlot = event.getSlot();
menuConfig.getMapList("pages").forEach(page -> {
List<Map<?, ?>> items = (List<Map<?, ?>>) page.get("items");
items.forEach(item -> {
if(item.get("slot").equals(eventSlot)) {
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
events.forEach(menuEvent -> {
switch (menuEvent.get("action").toString().toLowerCase()) {
case "send_message" -> {
player.closeInventory();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', menuEvent.get("data").toString()));
}
case "join_server" -> {
player.closeInventory();
player.performCommand("/server " + menuEvent.get("data").toString());
}
case "execute_command" -> {
player.closeInventory();
player.performCommand(menuEvent.get("data").toString());
}
case "do_nothing" -> {}
default -> {
player.closeInventory();
player.sendMessage(ChatColor.RED + "An error occurred while executing the action of the item.");
player.sendMessage(ChatColor.RED + "Please contact an administrator.");
}
}
});
}
});
});
event.setCancelled(true); event.setCancelled(true);
} }
} }

View file

@ -1 +1 @@
yes: 'yes' message_prefix: '[Hubbit]'