Files
MobStand/src/main/java/com/rsscripting/mobstand/gui/StandMenu.java
T
BigPappa ffd84d2bfa 1.2.0
Fixed:
- Plugin incorrectly reporting update available if installed version was newer than github version.

Added:
- Arm pose position menu.  Each Arm can now be individually posed using the menu.
- Radius View Button. This button initiates a red sprite outline of the scan and slaughter radius that stays for 30 seconds.
- Show/Hide Name button.  This button hides/shows the RS MobStand name above the MobStand.
2026-09-02 15:21:03 -05:00

498 lines
13 KiB
Java

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);
}
}