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.
498 lines
13 KiB
Java
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);
|
|
|
|
}
|
|
|
|
} |