1.5.0
Added Server Rules Section.
This commit is contained in:
1 parent
d412a96776
commit
1ee460687d
21 files changed
+1845
-3
No files matched your search
@@ -8,7 +8,7 @@
|
|||||||
<groupId>com.rsscripting</groupId>
|
<groupId>com.rsscripting</groupId>
|
||||||
<artifactId>RS-Warehouse</artifactId>
|
<artifactId>RS-Warehouse</artifactId>
|
||||||
<name>RS-Warehouse</name>
|
<name>RS-Warehouse</name>
|
||||||
<version>1.4.0</version>
|
<version>1.5.0</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>21</maven.compiler.source>
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
|
|||||||
@@ -195,6 +195,16 @@ public class AdminMenu {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
14,
|
||||||
|
RSMenuUtils.createMenuItemWithLore(
|
||||||
|
Material.COMMAND_BLOCK,
|
||||||
|
"§aCreate Server Rule",
|
||||||
|
List.of(
|
||||||
|
"§7Create a server rule entry."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
player.openInventory(menu);
|
player.openInventory(menu);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.rsscripting.rswarehouse.adminmenu;
|
package com.rsscripting.rswarehouse.adminmenu;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.serverrule.ServerRuleInternalNameMenu;
|
||||||
import com.rsscripting.rswarehouse.session.admin.ServerCommandCreationSessionManager;
|
import com.rsscripting.rswarehouse.session.admin.ServerCommandCreationSessionManager;
|
||||||
import com.rsscripting.rswarehouse.config.ConfigManager;
|
import com.rsscripting.rswarehouse.config.ConfigManager;
|
||||||
import com.rsscripting.rswarehouse.chestconvert.ConvertMenuListener;
|
import com.rsscripting.rswarehouse.chestconvert.ConvertMenuListener;
|
||||||
@@ -9,6 +10,7 @@ import com.rsscripting.rswarehouse.constants.RSConstants;
|
|||||||
import com.rsscripting.rswarehouse.navigation.NavigationManager;
|
import com.rsscripting.rswarehouse.navigation.NavigationManager;
|
||||||
import com.rsscripting.rswarehouse.servercommands.ServerCommandInternalNameMenu;
|
import com.rsscripting.rswarehouse.servercommands.ServerCommandInternalNameMenu;
|
||||||
import com.rsscripting.rswarehouse.session.GuiSessionManager;
|
import com.rsscripting.rswarehouse.session.GuiSessionManager;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -147,6 +149,19 @@ public class AdminMenuListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event.getRawSlot() == 14) {
|
||||||
|
|
||||||
|
ServerRuleCreationSessionManager.createSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
ServerRuleInternalNameMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -102,6 +102,9 @@ public class CategoryMenu {
|
|||||||
WarehouseCategory serverCommands =
|
WarehouseCategory serverCommands =
|
||||||
null;
|
null;
|
||||||
|
|
||||||
|
WarehouseCategory serverRules =
|
||||||
|
null;
|
||||||
|
|
||||||
List<WarehouseCategory> displayCategories =
|
List<WarehouseCategory> displayCategories =
|
||||||
new ArrayList<>();
|
new ArrayList<>();
|
||||||
|
|
||||||
@@ -122,13 +125,21 @@ public class CategoryMenu {
|
|||||||
}
|
}
|
||||||
else if (category.id() == 1001) {
|
else if (category.id() == 1001) {
|
||||||
|
|
||||||
|
|
||||||
if (ConfigManager.isServerCommandsEnabled()) {
|
if (ConfigManager.isServerCommandsEnabled()) {
|
||||||
|
|
||||||
serverCommands = category;
|
serverCommands = category;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (category.id() == 1000) {
|
||||||
|
|
||||||
|
if (ConfigManager.isServerRulesEnabled()) {
|
||||||
|
|
||||||
|
serverRules = category;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
@@ -482,6 +493,54 @@ public class CategoryMenu {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (serverRules != null) {
|
||||||
|
|
||||||
|
ItemStack icon =
|
||||||
|
RSMenuUtils.createMenuItemWithLore(
|
||||||
|
Material.valueOf(
|
||||||
|
serverRules.material()
|
||||||
|
),
|
||||||
|
"§a"
|
||||||
|
+ serverRules.displayName(),
|
||||||
|
serverRules.lore() == null
|
||||||
|
|| serverRules.lore().isBlank()
|
||||||
|
? List.of()
|
||||||
|
: Arrays.asList(
|
||||||
|
serverRules.lore()
|
||||||
|
.split("\n")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
icon.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.addItemFlags(
|
||||||
|
ItemFlag.HIDE_ATTRIBUTES,
|
||||||
|
ItemFlag.HIDE_ADDITIONAL_TOOLTIP
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.set(
|
||||||
|
RSKeys.CATEGORY_ID,
|
||||||
|
PersistentDataType.INTEGER,
|
||||||
|
serverRules.id()
|
||||||
|
);
|
||||||
|
|
||||||
|
icon.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
7,
|
||||||
|
icon
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
player.openInventory(
|
player.openInventory(
|
||||||
menu
|
menu
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -81,5 +81,13 @@ public class ConfigManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isServerRulesEnabled() {
|
||||||
|
|
||||||
|
return config.getBoolean(
|
||||||
|
"display.show-server-rules",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
package com.rsscripting.rswarehouse.dao.admin;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.database.DatabaseManager;
|
||||||
|
import com.rsscripting.rswarehouse.utils.ItemStackUtils;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class CreateServerRuleDAO {
|
||||||
|
|
||||||
|
public static int createServerRule(
|
||||||
|
String internalName,
|
||||||
|
String displayName,
|
||||||
|
String material,
|
||||||
|
String lore
|
||||||
|
) {
|
||||||
|
|
||||||
|
try (
|
||||||
|
Connection connection =
|
||||||
|
DatabaseManager.getConnection()
|
||||||
|
) {
|
||||||
|
|
||||||
|
connection.setAutoCommit(false);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the Server Rule category.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int nextDisplayOrder = 1;
|
||||||
|
|
||||||
|
try (
|
||||||
|
PreparedStatement maxStatement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
SELECT COALESCE(
|
||||||
|
MAX(display_order),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
FROM warehouse_categories
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
ResultSet resultSet =
|
||||||
|
maxStatement.executeQuery();
|
||||||
|
|
||||||
|
if (resultSet.next()) {
|
||||||
|
|
||||||
|
nextDisplayOrder =
|
||||||
|
resultSet.getInt(1) + 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ruleCategoryId;
|
||||||
|
|
||||||
|
try (
|
||||||
|
PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
INSERT INTO warehouse_categories (
|
||||||
|
parent_category_id,
|
||||||
|
internal_name,
|
||||||
|
display_name,
|
||||||
|
material,
|
||||||
|
lore,
|
||||||
|
display_order,
|
||||||
|
page,
|
||||||
|
slot
|
||||||
|
)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
|
""",
|
||||||
|
Statement.RETURN_GENERATED_KEYS
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
1,
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
2,
|
||||||
|
internalName
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
3,
|
||||||
|
displayName
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
4,
|
||||||
|
material
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
5,
|
||||||
|
lore
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
6,
|
||||||
|
nextDisplayOrder
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
7,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
8,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
ResultSet keys =
|
||||||
|
statement.getGeneratedKeys();
|
||||||
|
|
||||||
|
if (!keys.next()) {
|
||||||
|
|
||||||
|
connection.rollback();
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleCategoryId =
|
||||||
|
keys.getInt(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the display-only navigation item.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
Material.valueOf(
|
||||||
|
material
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
String serializedItem =
|
||||||
|
ItemStackUtils.serialize(
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
try (
|
||||||
|
PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
INSERT INTO warehouse_items (
|
||||||
|
category_id,
|
||||||
|
serialized_item,
|
||||||
|
default_lore,
|
||||||
|
inventory_id,
|
||||||
|
subcategory_id,
|
||||||
|
created_at,
|
||||||
|
page,
|
||||||
|
slot
|
||||||
|
)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
1,
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
2,
|
||||||
|
serializedItem
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
3,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setObject(
|
||||||
|
4,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
5,
|
||||||
|
ruleCategoryId
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
6,
|
||||||
|
String.valueOf(
|
||||||
|
System.currentTimeMillis()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setObject(
|
||||||
|
7,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setObject(
|
||||||
|
8,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
connection.commit();
|
||||||
|
|
||||||
|
return ruleCategoryId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (SQLException exception) {
|
||||||
|
|
||||||
|
connection.rollback();
|
||||||
|
|
||||||
|
exception.printStackTrace();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
finally {
|
||||||
|
|
||||||
|
connection.setAutoCommit(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (SQLException exception) {
|
||||||
|
|
||||||
|
exception.printStackTrace();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -92,6 +92,31 @@ public class DatabaseTableCreator {
|
|||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
connection.createStatement().execute(
|
||||||
|
"""
|
||||||
|
INSERT OR IGNORE INTO warehouse_categories (
|
||||||
|
id,
|
||||||
|
internal_name,
|
||||||
|
display_name,
|
||||||
|
material,
|
||||||
|
lore,
|
||||||
|
display_order,
|
||||||
|
page,
|
||||||
|
slot
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
1000,
|
||||||
|
'server_rules',
|
||||||
|
'Server Rules',
|
||||||
|
'BOOK',
|
||||||
|
'\nRules and guidelines for this server.',
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
7
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
connection.createStatement().execute(
|
connection.createStatement().execute(
|
||||||
"""
|
"""
|
||||||
INSERT OR IGNORE INTO warehouse_categories (
|
INSERT OR IGNORE INTO warehouse_categories (
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenuCha
|
|||||||
import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenuListener;
|
import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenuListener;
|
||||||
import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditMaterialMenuListener;
|
import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditMaterialMenuListener;
|
||||||
import com.rsscripting.rswarehouse.servercommands.*;
|
import com.rsscripting.rswarehouse.servercommands.*;
|
||||||
|
import com.rsscripting.rswarehouse.serverrule.*;
|
||||||
import com.rsscripting.rswarehouse.subcategory.items.*;
|
import com.rsscripting.rswarehouse.subcategory.items.*;
|
||||||
import com.rsscripting.rswarehouse.adminmenu.AdminMenuListener;
|
import com.rsscripting.rswarehouse.adminmenu.AdminMenuListener;
|
||||||
import com.rsscripting.rswarehouse.assignpageslot.CategoryPageNumberMenuListener;
|
import com.rsscripting.rswarehouse.assignpageslot.CategoryPageNumberMenuListener;
|
||||||
@@ -343,6 +344,33 @@ public final class ListenerRegistration {
|
|||||||
new PartiallyFilledVariantsMenuListener()
|
new PartiallyFilledVariantsMenuListener()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Server Rules */
|
||||||
|
|
||||||
|
ListenerRegistrar.register(
|
||||||
|
plugin,
|
||||||
|
new ServerRuleDisplayNameMenuListener()
|
||||||
|
);
|
||||||
|
|
||||||
|
ListenerRegistrar.register(
|
||||||
|
plugin,
|
||||||
|
new ServerRuleInternalNameMenuListener()
|
||||||
|
);
|
||||||
|
|
||||||
|
ListenerRegistrar.register(
|
||||||
|
plugin,
|
||||||
|
new ServerRuleLoreChatListener()
|
||||||
|
);
|
||||||
|
|
||||||
|
ListenerRegistrar.register(
|
||||||
|
plugin,
|
||||||
|
new ServerRuleLoreMenuListener()
|
||||||
|
);
|
||||||
|
|
||||||
|
ListenerRegistrar.register(
|
||||||
|
plugin,
|
||||||
|
new ServerRuleMaterialPickerMenuListener()
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -121,7 +121,7 @@ public class ServerCommandLoreMenu {
|
|||||||
22,
|
22,
|
||||||
RSMenuUtils.createMenuItem(
|
RSMenuUtils.createMenuItem(
|
||||||
Material.LIME_WOOL,
|
Material.LIME_WOOL,
|
||||||
"§aCreate Server Command"
|
"§aSave Lore and Proceed to Material Picker"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.MenuType;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.view.AnvilView;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleDisplayNameMenu {
|
||||||
|
|
||||||
|
public static final String TITLE =
|
||||||
|
"Rule Display Title";
|
||||||
|
|
||||||
|
public static void open(Player player) {
|
||||||
|
|
||||||
|
AnvilView view = MenuType.ANVIL
|
||||||
|
.builder()
|
||||||
|
.title(
|
||||||
|
Component.text(
|
||||||
|
TITLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.build(player);
|
||||||
|
|
||||||
|
|
||||||
|
ItemStack confirm =
|
||||||
|
new ItemStack(
|
||||||
|
Material.LIME_WOOL
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
confirm.getItemMeta();
|
||||||
|
|
||||||
|
meta.displayName(
|
||||||
|
Component.text("")
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.lore(
|
||||||
|
List.of(
|
||||||
|
Component.text(
|
||||||
|
"Save and proceed to description."
|
||||||
|
).color(
|
||||||
|
NamedTextColor.WHITE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
confirm.setItemMeta(meta);
|
||||||
|
|
||||||
|
view.setItem(
|
||||||
|
0,
|
||||||
|
confirm
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ItemStack cancel =
|
||||||
|
new ItemStack(
|
||||||
|
Material.RED_WOOL
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta metacancel =
|
||||||
|
cancel.getItemMeta();
|
||||||
|
|
||||||
|
metacancel.displayName(
|
||||||
|
Component.text("")
|
||||||
|
);
|
||||||
|
|
||||||
|
metacancel.lore(
|
||||||
|
List.of(
|
||||||
|
Component.text(
|
||||||
|
"Cancel"
|
||||||
|
).color(
|
||||||
|
NamedTextColor.WHITE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
cancel.setItemMeta(metacancel);
|
||||||
|
|
||||||
|
view.setItem(
|
||||||
|
1,
|
||||||
|
cancel
|
||||||
|
);
|
||||||
|
|
||||||
|
view.open();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+155
@@ -0,0 +1,155 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.adminmenu.AdminMenu;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
|
import org.bukkit.inventory.view.AnvilView;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleDisplayNameMenuListener
|
||||||
|
implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClick(
|
||||||
|
InventoryClickEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getView()
|
||||||
|
instanceof AnvilView anvilView)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getView()
|
||||||
|
.title()
|
||||||
|
.toString()
|
||||||
|
.contains(
|
||||||
|
ServerRuleDisplayNameMenu.TITLE
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player =
|
||||||
|
(Player) event.getWhoClicked();
|
||||||
|
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (session == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getRawSlot() == 0) {
|
||||||
|
|
||||||
|
String categoryName =
|
||||||
|
anvilView.getRenameText();
|
||||||
|
|
||||||
|
if (categoryName.length() > 25) {
|
||||||
|
|
||||||
|
RSMessageUtils.error(
|
||||||
|
player,
|
||||||
|
"Rule titles may not exceed 25 characters."
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryName.isBlank()) {
|
||||||
|
|
||||||
|
RSMessageUtils.error(
|
||||||
|
player,
|
||||||
|
"Rule title cannot be empty."
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setPendingServerRuleDisplayName(
|
||||||
|
categoryName
|
||||||
|
);
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
ServerRuleLoreMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getRawSlot() == 1) {
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
AdminMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClose(
|
||||||
|
InventoryCloseEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getView()
|
||||||
|
instanceof AnvilView)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getView()
|
||||||
|
.title()
|
||||||
|
.toString()
|
||||||
|
.contains(
|
||||||
|
ServerRuleDisplayNameMenu.TITLE
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.MenuType;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.view.AnvilView;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleInternalNameMenu {
|
||||||
|
|
||||||
|
public static final String TITLE =
|
||||||
|
"Rule Internal Name";
|
||||||
|
|
||||||
|
public static void open(Player player) {
|
||||||
|
|
||||||
|
AnvilView view = MenuType.ANVIL
|
||||||
|
.builder()
|
||||||
|
.title(
|
||||||
|
Component.text(
|
||||||
|
TITLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.build(player);
|
||||||
|
|
||||||
|
|
||||||
|
ItemStack confirm =
|
||||||
|
new ItemStack(
|
||||||
|
Material.LIME_WOOL
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
confirm.getItemMeta();
|
||||||
|
|
||||||
|
meta.displayName(
|
||||||
|
Component.text("")
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.lore(
|
||||||
|
List.of(
|
||||||
|
Component.text(
|
||||||
|
"Save and proceed to title."
|
||||||
|
).color(
|
||||||
|
NamedTextColor.WHITE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
confirm.setItemMeta(meta);
|
||||||
|
|
||||||
|
view.setItem(
|
||||||
|
0,
|
||||||
|
confirm
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ItemStack cancel =
|
||||||
|
new ItemStack(
|
||||||
|
Material.RED_WOOL
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta metacancel =
|
||||||
|
cancel.getItemMeta();
|
||||||
|
|
||||||
|
metacancel.displayName(
|
||||||
|
Component.text("")
|
||||||
|
);
|
||||||
|
|
||||||
|
metacancel.lore(
|
||||||
|
List.of(
|
||||||
|
Component.text(
|
||||||
|
"Cancel"
|
||||||
|
).color(
|
||||||
|
NamedTextColor.WHITE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
cancel.setItemMeta(metacancel);
|
||||||
|
|
||||||
|
view.setItem(
|
||||||
|
1,
|
||||||
|
cancel
|
||||||
|
);
|
||||||
|
|
||||||
|
view.open();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+156
@@ -0,0 +1,156 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.adminmenu.AdminMenu;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
|
import org.bukkit.inventory.view.AnvilView;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleInternalNameMenuListener
|
||||||
|
implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClick(
|
||||||
|
InventoryClickEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getView()
|
||||||
|
instanceof AnvilView anvilView)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getView()
|
||||||
|
.title()
|
||||||
|
.toString()
|
||||||
|
.contains(
|
||||||
|
ServerRuleInternalNameMenu.TITLE
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player =
|
||||||
|
(Player) event.getWhoClicked();
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (session == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getRawSlot() == 0) {
|
||||||
|
|
||||||
|
String categoryName =
|
||||||
|
anvilView.getRenameText();
|
||||||
|
|
||||||
|
if (categoryName.length() > 25) {
|
||||||
|
|
||||||
|
RSMessageUtils.error(
|
||||||
|
player,
|
||||||
|
"Rule names may not exceed 25 characters."
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryName.isBlank()) {
|
||||||
|
|
||||||
|
RSMessageUtils.error(
|
||||||
|
player,
|
||||||
|
"Rule name cannot be empty."
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setPendingServerRuleName(
|
||||||
|
categoryName
|
||||||
|
);
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
|
||||||
|
ServerRuleDisplayNameMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getRawSlot() == 1) {
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
AdminMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClose(
|
||||||
|
InventoryCloseEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getView()
|
||||||
|
instanceof AnvilView)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getView()
|
||||||
|
.title()
|
||||||
|
.toString()
|
||||||
|
.contains(
|
||||||
|
ServerRuleInternalNameMenu.TITLE
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getView()
|
||||||
|
.getTopInventory()
|
||||||
|
.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
|
|
||||||
|
public class ServerRuleLoreChatListener
|
||||||
|
implements Listener {
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onChat(
|
||||||
|
AsyncPlayerChatEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
Player player =
|
||||||
|
event.getPlayer();
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (session == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int loreSlot =
|
||||||
|
session.getPendingServerRuleLoreSlot();
|
||||||
|
|
||||||
|
if (loreSlot < 0) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
String message =
|
||||||
|
event.getMessage();
|
||||||
|
|
||||||
|
if (
|
||||||
|
message.equalsIgnoreCase(
|
||||||
|
"cancel"
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreSlot(
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreExpiration(
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
ServerRuleLoreMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setPendingServerRuleLore(
|
||||||
|
loreSlot,
|
||||||
|
message
|
||||||
|
);
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreSlot(
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreExpiration(
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
RSMessageUtils.info(
|
||||||
|
player,
|
||||||
|
"Lore saved."
|
||||||
|
);
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTask(
|
||||||
|
Bukkit.getPluginManager()
|
||||||
|
.getPlugin(
|
||||||
|
"RS-Warehouse"
|
||||||
|
),
|
||||||
|
() -> ServerRuleLoreMenu.open(
|
||||||
|
player
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.menuholder.RSMenuHolder;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMenuUtils;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleLoreMenu {
|
||||||
|
|
||||||
|
public static void open(
|
||||||
|
Player player
|
||||||
|
) {
|
||||||
|
|
||||||
|
Inventory menu =
|
||||||
|
Bukkit.createInventory(
|
||||||
|
new RSMenuHolder(
|
||||||
|
"SERVER_RULE_LORE"
|
||||||
|
),
|
||||||
|
27,
|
||||||
|
Component.text(
|
||||||
|
"Server Rule Lore"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < menu.getSize(); i++) {
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
i,
|
||||||
|
RSMenuUtils.createFillerPane()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
|
||||||
|
ItemStack book =
|
||||||
|
new ItemStack(
|
||||||
|
Material.WRITABLE_BOOK
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
book.getItemMeta();
|
||||||
|
|
||||||
|
meta.displayName(
|
||||||
|
Component.text(
|
||||||
|
"Lore Line "
|
||||||
|
+ (i + 1)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
List<Component> lore =
|
||||||
|
new ArrayList<>();
|
||||||
|
|
||||||
|
String value =
|
||||||
|
session.getPendingServerRuleLore(
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (
|
||||||
|
value == null
|
||||||
|
|| value.isBlank()
|
||||||
|
) {
|
||||||
|
|
||||||
|
lore.add(
|
||||||
|
Component.text(
|
||||||
|
"(Empty)"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
|
||||||
|
lore.add(
|
||||||
|
Component.text(
|
||||||
|
value
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lore.add(
|
||||||
|
Component.empty()
|
||||||
|
);
|
||||||
|
|
||||||
|
lore.add(
|
||||||
|
Component.text(
|
||||||
|
"Click to edit."
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
meta.lore(
|
||||||
|
lore
|
||||||
|
);
|
||||||
|
|
||||||
|
book.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
11 + i,
|
||||||
|
book
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
22,
|
||||||
|
RSMenuUtils.createMenuItem(
|
||||||
|
Material.LIME_WOOL,
|
||||||
|
"§aSave Lore and Proceed to Material Picker"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
4,
|
||||||
|
RSMenuUtils.createMenuItem(
|
||||||
|
Material.OAK_DOOR,
|
||||||
|
"§eBack"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
menu
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.menuholder.RSMenuHolder;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMessageUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleLoreMenuListener
|
||||||
|
implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClick(
|
||||||
|
InventoryClickEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getInventory()
|
||||||
|
.getHolder()
|
||||||
|
instanceof RSMenuHolder holder)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!holder.getMenuId().equals(
|
||||||
|
"SERVER_RULE_LORE"
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setCancelled(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
Player player =
|
||||||
|
(Player) event.getWhoClicked();
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (session == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.getSlot()) {
|
||||||
|
|
||||||
|
case 4 -> ServerRuleDisplayNameMenu.open(
|
||||||
|
player
|
||||||
|
);
|
||||||
|
|
||||||
|
case 11 -> editLore(
|
||||||
|
player,
|
||||||
|
session,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
case 12 -> editLore(
|
||||||
|
player,
|
||||||
|
session,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
case 13 -> editLore(
|
||||||
|
player,
|
||||||
|
session,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
|
case 14 -> editLore(
|
||||||
|
player,
|
||||||
|
session,
|
||||||
|
3
|
||||||
|
);
|
||||||
|
|
||||||
|
case 15 -> editLore(
|
||||||
|
player,
|
||||||
|
session,
|
||||||
|
4
|
||||||
|
);
|
||||||
|
|
||||||
|
case 22 -> {
|
||||||
|
|
||||||
|
ServerRuleMaterialPickerMenu.open(
|
||||||
|
player,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void editLore(
|
||||||
|
Player player,
|
||||||
|
ServerRuleCreationSession session,
|
||||||
|
int loreSlot
|
||||||
|
) {
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreSlot(
|
||||||
|
loreSlot
|
||||||
|
);
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreExpiration(
|
||||||
|
System.currentTimeMillis()
|
||||||
|
+ 30000
|
||||||
|
);
|
||||||
|
|
||||||
|
final long expiration =
|
||||||
|
session.getPendingServerRuleLoreExpiration();
|
||||||
|
|
||||||
|
Bukkit.getScheduler()
|
||||||
|
.runTaskLater(
|
||||||
|
Bukkit.getPluginManager()
|
||||||
|
.getPlugin(
|
||||||
|
"RS-Warehouse"
|
||||||
|
),
|
||||||
|
() -> {
|
||||||
|
|
||||||
|
if (
|
||||||
|
session.getPendingServerRuleLoreExpiration()
|
||||||
|
!= expiration
|
||||||
|
) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreSlot(
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
session.setPendingServerRuleLoreExpiration(
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
RSMessageUtils.error(
|
||||||
|
player,
|
||||||
|
"Lore input timed out."
|
||||||
|
);
|
||||||
|
|
||||||
|
},
|
||||||
|
20L * 30
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
player.closeInventory();
|
||||||
|
|
||||||
|
|
||||||
|
RSMessageUtils.info(
|
||||||
|
player,
|
||||||
|
"Enter lore for line "
|
||||||
|
+ (loreSlot + 1)
|
||||||
|
+ " in chat."
|
||||||
|
);
|
||||||
|
|
||||||
|
RSMessageUtils.info(
|
||||||
|
player,
|
||||||
|
"Type 'cancel' to abort."
|
||||||
|
);
|
||||||
|
|
||||||
|
RSMessageUtils.info(
|
||||||
|
player,
|
||||||
|
"Auto-Cancels after 30 seconds."
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+125
@@ -0,0 +1,125 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.menuholder.RSMenuHolder;
|
||||||
|
import com.rsscripting.rswarehouse.utils.RSMenuUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleMaterialPickerMenu {
|
||||||
|
|
||||||
|
public static void open(
|
||||||
|
Player player,
|
||||||
|
int page
|
||||||
|
) {
|
||||||
|
|
||||||
|
Inventory menu =
|
||||||
|
Bukkit.createInventory(
|
||||||
|
new RSMenuHolder(
|
||||||
|
"SERVER_RULE_MATERIAL_PICKER"
|
||||||
|
),
|
||||||
|
54,
|
||||||
|
"Select Rule Material"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
int slot = 0;
|
||||||
|
|
||||||
|
|
||||||
|
List<Material> materials =
|
||||||
|
Arrays.stream(
|
||||||
|
Material.values()
|
||||||
|
)
|
||||||
|
.filter(
|
||||||
|
Material::isItem
|
||||||
|
)
|
||||||
|
.filter(
|
||||||
|
material ->
|
||||||
|
!material.name().endsWith(
|
||||||
|
"_SMITHING_TEMPLATE"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
|
||||||
|
int startIndex =
|
||||||
|
page * 45;
|
||||||
|
|
||||||
|
|
||||||
|
int maxPages =
|
||||||
|
(int) Math.ceil(
|
||||||
|
(double) materials.size()
|
||||||
|
/ 45
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
for (
|
||||||
|
int inventorySlot = 0;
|
||||||
|
inventorySlot < 45;
|
||||||
|
inventorySlot++
|
||||||
|
) {
|
||||||
|
|
||||||
|
int materialIndex =
|
||||||
|
startIndex + inventorySlot;
|
||||||
|
|
||||||
|
|
||||||
|
if (
|
||||||
|
materialIndex >= materials.size()
|
||||||
|
) {
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
inventorySlot,
|
||||||
|
new ItemStack(
|
||||||
|
materials.get(
|
||||||
|
materialIndex
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (page > 0) {
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
45,
|
||||||
|
RSMenuUtils.createMenuItem(
|
||||||
|
Material.ARROW,
|
||||||
|
"§cPrevious Page"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (page < maxPages - 1) {
|
||||||
|
|
||||||
|
menu.setItem(
|
||||||
|
53,
|
||||||
|
RSMenuUtils.createMenuItem(
|
||||||
|
Material.ARROW,
|
||||||
|
"§aNext Page"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
menu
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+193
@@ -0,0 +1,193 @@
|
|||||||
|
package com.rsscripting.rswarehouse.serverrule;
|
||||||
|
|
||||||
|
import com.rsscripting.rswarehouse.dao.admin.CreateServerRuleDAO;
|
||||||
|
import com.rsscripting.rswarehouse.item.ItemsMenu;
|
||||||
|
import com.rsscripting.rswarehouse.menuholder.RSMenuHolder;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSession;
|
||||||
|
import com.rsscripting.rswarehouse.session.admin.ServerRuleCreationSessionManager;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerRuleMaterialPickerMenuListener
|
||||||
|
implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClick(
|
||||||
|
InventoryClickEvent event
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!(event.getInventory()
|
||||||
|
.getHolder()
|
||||||
|
instanceof RSMenuHolder holder)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!holder.getMenuId().equals(
|
||||||
|
"SERVER_RULE_MATERIAL_PICKER"
|
||||||
|
)) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
event.setCancelled(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Player player =
|
||||||
|
(Player) event.getWhoClicked();
|
||||||
|
|
||||||
|
|
||||||
|
ServerRuleCreationSession session =
|
||||||
|
ServerRuleCreationSessionManager.getSession(
|
||||||
|
player.getUniqueId()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (session == null) {
|
||||||
|
|
||||||
|
player.closeInventory();
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Previous page
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (event.getSlot() == 45) {
|
||||||
|
|
||||||
|
ServerRuleMaterialPickerMenu.open(
|
||||||
|
player,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Next page
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (event.getSlot() == 53) {
|
||||||
|
|
||||||
|
ServerRuleMaterialPickerMenu.open(
|
||||||
|
player,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save selected material.
|
||||||
|
*/
|
||||||
|
|
||||||
|
session.setPendingServerRuleMaterial(
|
||||||
|
event.getCurrentItem()
|
||||||
|
.getType()
|
||||||
|
.name()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
int ruleCategoryId =
|
||||||
|
CreateServerRuleDAO.createServerRule(
|
||||||
|
session.getPendingServerRuleName(),
|
||||||
|
session.getPendingServerRuleDisplayName(),
|
||||||
|
session.getPendingServerRuleMaterial(),
|
||||||
|
buildLore(session)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (ruleCategoryId == -1) {
|
||||||
|
|
||||||
|
player.sendMessage(
|
||||||
|
"§cFailed to create Server Rule."
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
player.sendMessage(
|
||||||
|
"§aServer Rule created successfully."
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ItemsMenu.open(
|
||||||
|
player,
|
||||||
|
1000,
|
||||||
|
"Server Rules",
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String buildLore(
|
||||||
|
ServerRuleCreationSession session
|
||||||
|
) {
|
||||||
|
|
||||||
|
StringBuilder loreBuilder =
|
||||||
|
new StringBuilder();
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
|
||||||
|
String line =
|
||||||
|
session.getPendingServerRuleLore(
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (line == null) {
|
||||||
|
|
||||||
|
line = "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
loreBuilder.append(
|
||||||
|
line
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (i < 4) {
|
||||||
|
|
||||||
|
loreBuilder.append(
|
||||||
|
"\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return loreBuilder.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+132
@@ -0,0 +1,132 @@
|
|||||||
|
package com.rsscripting.rswarehouse.session.admin;
|
||||||
|
|
||||||
|
public class ServerRuleCreationSession {
|
||||||
|
|
||||||
|
private String pendingServerRuleName;
|
||||||
|
|
||||||
|
private String pendingServerRuleDisplayName;
|
||||||
|
|
||||||
|
private final String[] pendingServerRuleLore =
|
||||||
|
new String[5];
|
||||||
|
|
||||||
|
private int pendingServerRuleLoreSlot = -1;
|
||||||
|
|
||||||
|
private long pendingServerRuleLoreExpiration;
|
||||||
|
|
||||||
|
private String pendingServerRuleMaterial;
|
||||||
|
|
||||||
|
|
||||||
|
public String getPendingServerRuleName() {
|
||||||
|
|
||||||
|
return pendingServerRuleName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleName(
|
||||||
|
String pendingServerRuleName
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.pendingServerRuleName =
|
||||||
|
pendingServerRuleName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPendingServerRuleDisplayName() {
|
||||||
|
|
||||||
|
return pendingServerRuleDisplayName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleDisplayName(
|
||||||
|
String pendingServerRuleDisplayName
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.pendingServerRuleDisplayName =
|
||||||
|
pendingServerRuleDisplayName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPendingServerRuleLore(
|
||||||
|
int index
|
||||||
|
) {
|
||||||
|
|
||||||
|
return pendingServerRuleLore[index];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleLore(
|
||||||
|
int index,
|
||||||
|
String value
|
||||||
|
) {
|
||||||
|
|
||||||
|
pendingServerRuleLore[index] =
|
||||||
|
value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearPendingServerRuleLore() {
|
||||||
|
|
||||||
|
for (
|
||||||
|
int i = 0;
|
||||||
|
i < pendingServerRuleLore.length;
|
||||||
|
i++
|
||||||
|
) {
|
||||||
|
|
||||||
|
pendingServerRuleLore[i] =
|
||||||
|
null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getPendingServerRuleLoreSlot() {
|
||||||
|
|
||||||
|
return pendingServerRuleLoreSlot;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleLoreSlot(
|
||||||
|
int pendingServerRuleLoreSlot
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.pendingServerRuleLoreSlot =
|
||||||
|
pendingServerRuleLoreSlot;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getPendingServerRuleLoreExpiration() {
|
||||||
|
|
||||||
|
return pendingServerRuleLoreExpiration;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleLoreExpiration(
|
||||||
|
long pendingServerRuleLoreExpiration
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.pendingServerRuleLoreExpiration =
|
||||||
|
pendingServerRuleLoreExpiration;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPendingServerRuleMaterial() {
|
||||||
|
|
||||||
|
return pendingServerRuleMaterial;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingServerRuleMaterial(
|
||||||
|
String pendingServerRuleMaterial
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.pendingServerRuleMaterial =
|
||||||
|
pendingServerRuleMaterial;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
package com.rsscripting.rswarehouse.session.admin;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class ServerRuleCreationSessionManager {
|
||||||
|
|
||||||
|
private static final Map<UUID, ServerRuleCreationSession> sessions =
|
||||||
|
new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
public static void createSession(
|
||||||
|
UUID uuid
|
||||||
|
) {
|
||||||
|
|
||||||
|
sessions.put(
|
||||||
|
uuid,
|
||||||
|
new ServerRuleCreationSession()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static ServerRuleCreationSession getSession(
|
||||||
|
UUID uuid
|
||||||
|
) {
|
||||||
|
|
||||||
|
return sessions.get(
|
||||||
|
uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void removeSession(
|
||||||
|
UUID uuid
|
||||||
|
) {
|
||||||
|
|
||||||
|
sessions.remove(
|
||||||
|
uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,6 +13,11 @@ display:
|
|||||||
# execute any commands.
|
# execute any commands.
|
||||||
show-server-commands: true
|
show-server-commands: true
|
||||||
|
|
||||||
|
# Display the Server Rules category.
|
||||||
|
# This category is a list of rules for
|
||||||
|
# your server.
|
||||||
|
show-server-rules: true
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# Automatic-Chest scan and process settings.
|
# Automatic-Chest scan and process settings.
|
||||||
############################################
|
############################################
|
||||||
|
|||||||
Reference in new issue
Block a user