package com.rsscripting.mobstand.gui; import com.rsscripting.mobstand.RSMobStandPlugin; import com.rsscripting.mobstand.managers.StandManager; import com.rsscripting.mobstand.utils.RSMenuUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; import java.util.Collections; import java.util.List; public class StandMenu { public static final String MENU_TITLE = ChatColor.BLUE + "RS MobStand"; public static void open( RSMobStandPlugin plugin, Player player, ArmorStand armorStand ) { Inventory inventory = Bukkit.createInventory( new RSMenuHolder( "MAIN" ), 36, MENU_TITLE ); StandManager standManager = plugin.getStandManager(); double radius = standManager.getRadius(armorStand); int maxRadius = plugin.getConfig() .getInt( "max-player-scan-radius" ); radius = Math.min( radius, maxRadius ); standManager.setRadius( armorStand, radius ); boolean gravity = standManager.hasGravity(armorStand); boolean paused = standManager.isPaused(armorStand); boolean arms = armorStand.hasArms(); ItemStack filler = RSMenuUtils.createFillerPane(); for (int i = 0; i < inventory.getSize(); i++) { inventory.setItem(i, filler); } // Convert back item ItemStack revertItem = new ItemStack(Material.COMPOSTER); ItemMeta revertMeta = revertItem.getItemMeta(); if (revertMeta != null) { revertMeta.setDisplayName( ChatColor.RED + "Convert Back to Armor Stand" ); revertMeta.setLore( Collections.singletonList( ChatColor.GRAY + "Remove MobStand functionality." ) ); revertItem.setItemMeta(revertMeta); } inventory.setItem(2, revertItem); /* |-------------------------------------------------------------------------- | ADMIN MENU |-------------------------------------------------------------------------- */ if (player.isOp()) { ItemStack adminItem = new ItemStack( Material.COMMAND_BLOCK ); ItemMeta adminMeta = adminItem.getItemMeta(); if (adminMeta != null) { adminMeta.setDisplayName( ChatColor.GOLD + "Admin" ); adminMeta.setLore( java.util.Collections.singletonList( "ยง7Administrative options." ) ); adminItem.setItemMeta( adminMeta ); } inventory.setItem( 4, adminItem ); } // Pause item ItemStack pauseItem = new ItemStack( paused ? Material.RED_DYE : Material.GREEN_DYE ); ItemMeta pauseMeta = pauseItem.getItemMeta(); if (pauseMeta != null) { pauseMeta.setDisplayName( paused ? ChatColor.GREEN + "Enable Processing" : ChatColor.RED + "Disable Processing" ); pauseMeta.setLore(List.of( paused ? ChatColor.GRAY + "Click to resume processing." : ChatColor.GRAY + "Click to pause processing." )); pauseMeta.addItemFlags( ItemFlag.HIDE_ATTRIBUTES ); pauseItem.setItemMeta(pauseMeta); } inventory.setItem(6, pauseItem); // View Radius item ItemStack viewRadiusItem = new ItemStack( Material.ENDER_EYE ); ItemMeta viewRadiusMeta = viewRadiusItem.getItemMeta(); if (viewRadiusMeta != null) { viewRadiusMeta.setDisplayName( ChatColor.GREEN + "View Radius" ); viewRadiusMeta.setLore(List.of( ChatColor.GRAY + "Display the current scan area.", ChatColor.GRAY + "Shows horizontal radius", ChatColor.GRAY + "and vertical scan height.", "", ChatColor.YELLOW + "Click to view." )); viewRadiusItem.setItemMeta( viewRadiusMeta ); } inventory.setItem( 31, viewRadiusItem ); // Adult filters item ItemStack adultFilters = new ItemStack(Material.BEEF); ItemMeta adultMeta = adultFilters.getItemMeta(); if (adultMeta != null) { adultMeta.setDisplayName( ChatColor.YELLOW + "Adult Filters" ); adultMeta.setLore(List.of( ChatColor.YELLOW + "Configure adult mob filters." )); adultFilters.setItemMeta(adultMeta); } inventory.setItem(15, adultFilters); // Baby filters item ItemStack babyFilters = new ItemStack(Material.BEE_SPAWN_EGG); ItemMeta babyMeta = babyFilters.getItemMeta(); if (babyMeta != null) { babyMeta.setDisplayName( ChatColor.YELLOW + "Baby Filters" ); babyMeta.setLore(List.of( ChatColor.YELLOW + "Configure baby mob filters." )); babyFilters.setItemMeta(babyMeta); } inventory.setItem(17, babyFilters); // Display Name item ItemStack displayNameItem = new ItemStack(Material.NAME_TAG); ItemMeta displayNameMeta = displayNameItem.getItemMeta(); if (displayNameMeta != null) { boolean visible = armorStand.isCustomNameVisible(); displayNameMeta.setDisplayName( (visible ? ChatColor.GREEN : ChatColor.RED) + "Display Name" ); displayNameMeta.setLore(List.of( ChatColor.GRAY + "Show or hide the", ChatColor.GRAY + "RS MobStand name.", "", ChatColor.GRAY + "Current: " + (visible ? ChatColor.GREEN + "Visible" : ChatColor.RED + "Hidden"), "", ChatColor.YELLOW + "Click to toggle." )); displayNameItem.setItemMeta( displayNameMeta ); } inventory.setItem( 20, displayNameItem ); // Leave Alive item int leaveAlive = standManager.getLeaveAlive( armorStand ); ItemStack leaveAliveItem = new ItemStack( Material.TOTEM_OF_UNDYING ); ItemMeta leaveAliveMeta = leaveAliveItem.getItemMeta(); if (leaveAliveMeta != null) { leaveAliveMeta.setDisplayName( ChatColor.YELLOW + "Leave Alive:" ); leaveAliveMeta.setLore(List.of( ChatColor.GRAY + "Current: " + ChatColor.WHITE + leaveAlive, "", ChatColor.YELLOW + "Click to adjust." )); leaveAliveItem.setItemMeta(leaveAliveMeta); } inventory.setItem(13, leaveAliveItem); // Radius item ItemStack radiusItem = new ItemStack( Material.COMPASS ); ItemMeta radiusMeta = radiusItem.getItemMeta(); if (radiusMeta != null) { radiusMeta.setDisplayName( ChatColor.YELLOW + "Scan Radius" ); radiusMeta.setLore(List.of( ChatColor.GRAY + "Current: " + ChatColor.WHITE + (int) radius, "", ChatColor.YELLOW + "Click to adjust radius." )); radiusItem.setItemMeta(radiusMeta); } inventory.setItem(9, radiusItem); ItemStack gravityItem = new ItemStack(Material.FEATHER); ItemMeta gravityMeta = gravityItem.getItemMeta(); if (gravityMeta != null) { gravityMeta.setDisplayName( (gravity ? ChatColor.GREEN : ChatColor.RED) + "Gravity" ); gravityMeta.setLore(List.of( ChatColor.GRAY + "Current: " + (gravity ? ChatColor.GREEN + "Enabled" : ChatColor.RED + "Disabled"), "", ChatColor.YELLOW + "Left Click: Toggle" )); // Add enchant glow if gravity enabled if (gravity) { gravityMeta.addEnchant( Enchantment.UNBREAKING, 1, true ); gravityMeta.addItemFlags( ItemFlag.HIDE_ENCHANTS ); } gravityItem.setItemMeta(gravityMeta); } inventory.setItem(11, gravityItem); // Arm Poses ItemStack armsItem = new ItemStack( Material.IRON_SWORD ); ItemMeta armsMeta = armsItem.getItemMeta(); if (armsMeta != null) { armsMeta.setDisplayName( arms ? ChatColor.GREEN + "Arm Poses" : ChatColor.RED + "Arm Poses" ); armsMeta.setLore(List.of( ChatColor.GRAY + "Configure the Main Hand", ChatColor.GRAY + "and Off Hand arm poses.", "", ChatColor.GRAY + "Arms: " + (arms ? ChatColor.GREEN + "Enabled" : ChatColor.RED + "Disabled"), "", ChatColor.YELLOW + "Click to configure." )); armsMeta.addItemFlags( ItemFlag.HIDE_ATTRIBUTES ); if (arms) { armsMeta.addEnchant( Enchantment.UNBREAKING, 1, true ); armsMeta.addItemFlags( ItemFlag.HIDE_ENCHANTS ); } armsItem.setItemMeta( armsMeta ); } inventory.setItem( 22, armsItem ); player.openInventory(inventory); } }