Per-world Creeper settings complete
- Added per-world Block Damage settings - Added per-world Entity Damage settings - Added creeper_settings database support - Added world-specific Creeper menus - Added automatic world registration/default inheritance - Split Creeper listeners - Updated Creeper behavior to use world settings - Removed obsolete global Creeper indicators - Adopted logger-based error reporting standard
This commit is contained in:
1 parent
9ca8039268
commit
ebf030b192
12 files changed
+1315
-83
No files matched your search
@@ -4,12 +4,13 @@ import com.rsscripting.serveradmin.database.DatabaseManager;
|
|||||||
import com.rsscripting.serveradmin.database.SettingsDAO;
|
import com.rsscripting.serveradmin.database.SettingsDAO;
|
||||||
import com.rsscripting.serveradmin.commands.RSAdminCommand;
|
import com.rsscripting.serveradmin.commands.RSAdminCommand;
|
||||||
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
||||||
import com.rsscripting.serveradmin.listeners.CreeperListener;
|
import com.rsscripting.serveradmin.listeners.CreeperBlockDamageListener;
|
||||||
import com.rsscripting.serveradmin.security.SecurityManager;
|
import com.rsscripting.serveradmin.security.SecurityManager;
|
||||||
import com.rsscripting.serveradmin.listeners.InventoryListener;
|
import com.rsscripting.serveradmin.listeners.InventoryListener;
|
||||||
import com.rsscripting.serveradmin.listeners.CreeperEntityDamageListener;
|
import com.rsscripting.serveradmin.listeners.CreeperEntityDamageListener;
|
||||||
import com.rsscripting.serveradmin.update.GitHubUpdateChecker;
|
import com.rsscripting.serveradmin.update.GitHubUpdateChecker;
|
||||||
import com.rsscripting.serveradmin.listeners.WorldLoadListener;
|
import com.rsscripting.serveradmin.listeners.WorldLoadListener;
|
||||||
|
import com.rsscripting.serveradmin.creeper.CreeperSettingsDAO;
|
||||||
|
|
||||||
import com.rsscripting.serveradmin.settings.SettingKey;
|
import com.rsscripting.serveradmin.settings.SettingKey;
|
||||||
import com.rsscripting.serveradmin.worlds.WorldsDAO;
|
import com.rsscripting.serveradmin.worlds.WorldsDAO;
|
||||||
@@ -27,6 +28,7 @@ public class RSServerAdmin extends JavaPlugin {
|
|||||||
private SettingsDAO settingsDAO;
|
private SettingsDAO settingsDAO;
|
||||||
private SecurityManager securityManager;
|
private SecurityManager securityManager;
|
||||||
private WorldsDAO worldsDAO;
|
private WorldsDAO worldsDAO;
|
||||||
|
private CreeperSettingsDAO creeperSettingsDAO;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@@ -41,13 +43,24 @@ public class RSServerAdmin extends JavaPlugin {
|
|||||||
|
|
||||||
databaseManager.connect();
|
databaseManager.connect();
|
||||||
|
|
||||||
settingsDAO = new SettingsDAO(databaseManager);
|
settingsDAO = new SettingsDAO(
|
||||||
|
databaseManager
|
||||||
|
);
|
||||||
|
|
||||||
settingsDAO.initializeDefaults();
|
settingsDAO.initializeDefaults();
|
||||||
|
|
||||||
keepInventoryDAO = new KeepInventoryDAO(databaseManager);
|
keepInventoryDAO = new KeepInventoryDAO(
|
||||||
|
databaseManager
|
||||||
|
);
|
||||||
|
|
||||||
worldsDAO = new WorldsDAO(databaseManager);
|
worldsDAO = new WorldsDAO(
|
||||||
|
databaseManager
|
||||||
|
);
|
||||||
|
|
||||||
|
creeperSettingsDAO =
|
||||||
|
new CreeperSettingsDAO(
|
||||||
|
databaseManager
|
||||||
|
);
|
||||||
|
|
||||||
securityManager = new SecurityManager(this);
|
securityManager = new SecurityManager(this);
|
||||||
|
|
||||||
@@ -67,6 +80,22 @@ public class RSServerAdmin extends JavaPlugin {
|
|||||||
keepInventoryDefault
|
keepInventoryDefault
|
||||||
);
|
);
|
||||||
|
|
||||||
|
boolean blockDamageDefault =
|
||||||
|
settingsDAO.getDefault(
|
||||||
|
SettingKey.CREEPER_BLOCK_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
boolean entityDamageDefault =
|
||||||
|
settingsDAO.getDefault(
|
||||||
|
SettingKey.CREEPER_ENTITY_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
creeperSettingsDAO.ensureWorldExists(
|
||||||
|
world.getName(),
|
||||||
|
blockDamageDefault,
|
||||||
|
entityDamageDefault
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getCommand("rsadmin") != null) {
|
if (getCommand("rsadmin") != null) {
|
||||||
@@ -89,7 +118,7 @@ public class RSServerAdmin extends JavaPlugin {
|
|||||||
);
|
);
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(
|
getServer().getPluginManager().registerEvents(
|
||||||
new CreeperListener(),
|
new CreeperBlockDamageListener(),
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -149,10 +178,14 @@ public class RSServerAdmin extends JavaPlugin {
|
|||||||
return settingsDAO;
|
return settingsDAO;
|
||||||
}
|
}
|
||||||
public WorldsDAO getWorldsDAO() {
|
public WorldsDAO getWorldsDAO() {
|
||||||
return worldsDAO;}
|
return worldsDAO;
|
||||||
|
}
|
||||||
public SecurityManager getSecurityManager() {
|
public SecurityManager getSecurityManager() {
|
||||||
|
|
||||||
return securityManager;
|
return securityManager;
|
||||||
}
|
}
|
||||||
|
public CreeperSettingsDAO getCreeperSettingsDAO() {
|
||||||
|
return creeperSettingsDAO;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
package com.rsscripting.serveradmin.creeper;
|
||||||
|
|
||||||
|
import com.rsscripting.serveradmin.database.DatabaseManager;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class CreeperSettingsDAO {
|
||||||
|
|
||||||
|
private final DatabaseManager databaseManager;
|
||||||
|
|
||||||
|
public CreeperSettingsDAO(
|
||||||
|
DatabaseManager databaseManager
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.databaseManager =
|
||||||
|
databaseManager;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ensureWorldExists(
|
||||||
|
String worldName,
|
||||||
|
boolean blockDamage,
|
||||||
|
boolean entityDamage
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
Connection connection =
|
||||||
|
databaseManager.getConnection();
|
||||||
|
|
||||||
|
try (PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
INSERT OR IGNORE INTO
|
||||||
|
creeper_settings
|
||||||
|
(
|
||||||
|
world_name,
|
||||||
|
block_damage,
|
||||||
|
entity_damage
|
||||||
|
)
|
||||||
|
VALUES (?, ?, ?)
|
||||||
|
"""
|
||||||
|
)) {
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
1,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
2,
|
||||||
|
blockDamage ? 1 : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
3,
|
||||||
|
entityDamage ? 1 : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBlockDamage(
|
||||||
|
String worldName
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
Connection connection =
|
||||||
|
databaseManager.getConnection();
|
||||||
|
|
||||||
|
try (PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
SELECT block_damage
|
||||||
|
FROM creeper_settings
|
||||||
|
WHERE world_name = ?
|
||||||
|
"""
|
||||||
|
)) {
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
1,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
try (ResultSet rs =
|
||||||
|
statement.executeQuery()) {
|
||||||
|
|
||||||
|
if (rs.next()) {
|
||||||
|
|
||||||
|
return rs.getInt(
|
||||||
|
"block_damage"
|
||||||
|
) == 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlockDamage(
|
||||||
|
String worldName,
|
||||||
|
boolean value
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
Connection connection =
|
||||||
|
databaseManager.getConnection();
|
||||||
|
|
||||||
|
try (PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
UPDATE creeper_settings
|
||||||
|
SET block_damage = ?
|
||||||
|
WHERE world_name = ?
|
||||||
|
"""
|
||||||
|
)) {
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
1,
|
||||||
|
value ? 1 : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
2,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getEntityDamage(
|
||||||
|
String worldName
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
Connection connection =
|
||||||
|
databaseManager.getConnection();
|
||||||
|
|
||||||
|
try (PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
SELECT entity_damage
|
||||||
|
FROM creeper_settings
|
||||||
|
WHERE world_name = ?
|
||||||
|
"""
|
||||||
|
)) {
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
1,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
try (ResultSet rs =
|
||||||
|
statement.executeQuery()) {
|
||||||
|
|
||||||
|
if (rs.next()) {
|
||||||
|
|
||||||
|
return rs.getInt(
|
||||||
|
"entity_damage"
|
||||||
|
) == 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEntityDamage(
|
||||||
|
String worldName,
|
||||||
|
boolean value
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
Connection connection =
|
||||||
|
databaseManager.getConnection();
|
||||||
|
|
||||||
|
try (PreparedStatement statement =
|
||||||
|
connection.prepareStatement(
|
||||||
|
"""
|
||||||
|
UPDATE creeper_settings
|
||||||
|
SET entity_damage = ?
|
||||||
|
WHERE world_name = ?
|
||||||
|
"""
|
||||||
|
)) {
|
||||||
|
|
||||||
|
statement.setInt(
|
||||||
|
1,
|
||||||
|
value ? 1 : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.setString(
|
||||||
|
2,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -76,6 +76,16 @@ public class DatabaseManager {
|
|||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
statement.execute(
|
||||||
|
"""
|
||||||
|
CREATE TABLE IF NOT EXISTS creeper_settings (
|
||||||
|
world_name TEXT PRIMARY KEY,
|
||||||
|
block_damage INTEGER NOT NULL,
|
||||||
|
entity_damage INTEGER NOT NULL
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,270 @@
|
|||||||
|
package com.rsscripting.serveradmin.gui;
|
||||||
|
|
||||||
|
import com.rsscripting.serveradmin.RSServerAdmin;
|
||||||
|
import com.rsscripting.serveradmin.creeper.CreeperSettingsDAO;
|
||||||
|
import com.rsscripting.serveradmin.settings.SettingKey;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CreeperBlockDamageMenu {
|
||||||
|
|
||||||
|
private static final int WORLDS_PER_PAGE = 45;
|
||||||
|
|
||||||
|
public static Inventory create(
|
||||||
|
int page
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
RSMenuHolder holder =
|
||||||
|
new RSMenuHolder(
|
||||||
|
"CREEPER_BLOCK_DAMAGE"
|
||||||
|
);
|
||||||
|
|
||||||
|
holder.setPage(
|
||||||
|
page
|
||||||
|
);
|
||||||
|
|
||||||
|
Inventory inventory =
|
||||||
|
Bukkit.createInventory(
|
||||||
|
holder,
|
||||||
|
54,
|
||||||
|
"Block Damage"
|
||||||
|
);
|
||||||
|
|
||||||
|
GUIUtils.fillEmptySlots(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
createBackButton(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
createDefaultButton(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
populateWorlds(
|
||||||
|
inventory,
|
||||||
|
page
|
||||||
|
);
|
||||||
|
|
||||||
|
return inventory;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createBackButton(
|
||||||
|
Inventory inventory
|
||||||
|
) {
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
Material.ARROW
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§cBack"
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
3,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createDefaultButton(
|
||||||
|
Inventory inventory
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getSettingsDAO()
|
||||||
|
.getDefault(
|
||||||
|
SettingKey.CREEPER_BLOCK_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
enabled
|
||||||
|
? Material.ENDER_CHEST
|
||||||
|
: Material.CHEST
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§eDefault For New Worlds"
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.setLore(
|
||||||
|
List.of(
|
||||||
|
"§7Controls newly detected worlds",
|
||||||
|
"",
|
||||||
|
enabled
|
||||||
|
? "§aCurrent: New worlds allow creeper block damage"
|
||||||
|
: "§cCurrent: New worlds block creeper block damage"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
5,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void populateWorlds(
|
||||||
|
Inventory inventory,
|
||||||
|
int page
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
CreeperSettingsDAO dao =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO();
|
||||||
|
|
||||||
|
List<String> worlds =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getWorldsDAO()
|
||||||
|
.getAllWorlds();
|
||||||
|
|
||||||
|
int start =
|
||||||
|
(page - 1) * WORLDS_PER_PAGE;
|
||||||
|
|
||||||
|
int end =
|
||||||
|
Math.min(
|
||||||
|
start + WORLDS_PER_PAGE,
|
||||||
|
worlds.size()
|
||||||
|
);
|
||||||
|
|
||||||
|
int worldCount =
|
||||||
|
end - start;
|
||||||
|
|
||||||
|
for (int i = start;
|
||||||
|
i < end;
|
||||||
|
i++) {
|
||||||
|
|
||||||
|
String worldName =
|
||||||
|
worlds.get(i);
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
dao.getBlockDamage(
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
enabled
|
||||||
|
? Material.LIME_SHULKER_BOX
|
||||||
|
: Material.RED_SHULKER_BOX
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§e" + worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.set(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.setLore(
|
||||||
|
List.of(
|
||||||
|
"§7Creeper Block Damage",
|
||||||
|
"",
|
||||||
|
enabled
|
||||||
|
? "§aCurrent: Creepers damage blocks"
|
||||||
|
: "§cCurrent: Creepers do not damage blocks"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int relativeIndex =
|
||||||
|
i - start;
|
||||||
|
|
||||||
|
int row =
|
||||||
|
relativeIndex / 9;
|
||||||
|
|
||||||
|
int indexInRow =
|
||||||
|
relativeIndex % 9;
|
||||||
|
|
||||||
|
int itemsRemaining =
|
||||||
|
worldCount - (row * 9);
|
||||||
|
|
||||||
|
boolean lastPartialRow =
|
||||||
|
itemsRemaining < 9;
|
||||||
|
|
||||||
|
int slot;
|
||||||
|
|
||||||
|
if (lastPartialRow) {
|
||||||
|
|
||||||
|
List<Integer> rowSlots =
|
||||||
|
MenuLayoutUtils.getCenteredSlots(
|
||||||
|
itemsRemaining
|
||||||
|
);
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ rowSlots.get(
|
||||||
|
indexInRow
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ indexInRow;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
slot,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
package com.rsscripting.serveradmin.gui;
|
||||||
|
|
||||||
|
import com.rsscripting.serveradmin.RSServerAdmin;
|
||||||
|
import com.rsscripting.serveradmin.creeper.CreeperSettingsDAO;
|
||||||
|
import com.rsscripting.serveradmin.settings.SettingKey;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CreeperEntityDamageMenu {
|
||||||
|
|
||||||
|
private static final int WORLDS_PER_PAGE = 45;
|
||||||
|
|
||||||
|
public static Inventory create(
|
||||||
|
int page
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
RSMenuHolder holder =
|
||||||
|
new RSMenuHolder(
|
||||||
|
"CREEPER_ENTITY_DAMAGE"
|
||||||
|
);
|
||||||
|
|
||||||
|
holder.setPage(
|
||||||
|
page
|
||||||
|
);
|
||||||
|
|
||||||
|
Inventory inventory =
|
||||||
|
Bukkit.createInventory(
|
||||||
|
holder,
|
||||||
|
54,
|
||||||
|
"Entity Damage"
|
||||||
|
);
|
||||||
|
|
||||||
|
GUIUtils.fillEmptySlots(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
createBackButton(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
createDefaultButton(
|
||||||
|
inventory
|
||||||
|
);
|
||||||
|
|
||||||
|
populateWorlds(
|
||||||
|
inventory,
|
||||||
|
page
|
||||||
|
);
|
||||||
|
|
||||||
|
return inventory;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createBackButton(
|
||||||
|
Inventory inventory
|
||||||
|
) {
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
Material.ARROW
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§cBack"
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
3,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createDefaultButton(
|
||||||
|
Inventory inventory
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getSettingsDAO()
|
||||||
|
.getDefault(
|
||||||
|
SettingKey.CREEPER_ENTITY_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
enabled
|
||||||
|
? Material.ENDER_CHEST
|
||||||
|
: Material.CHEST
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§eDefault For New Worlds"
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.setLore(
|
||||||
|
List.of(
|
||||||
|
"§7Controls newly detected worlds",
|
||||||
|
"",
|
||||||
|
enabled
|
||||||
|
? "§aCurrent: New worlds allow creeper entity damage"
|
||||||
|
: "§cCurrent: New worlds block creeper entity damage"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
5,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void populateWorlds(
|
||||||
|
Inventory inventory,
|
||||||
|
int page
|
||||||
|
) throws SQLException {
|
||||||
|
|
||||||
|
CreeperSettingsDAO dao =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO();
|
||||||
|
|
||||||
|
List<String> worlds =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getWorldsDAO()
|
||||||
|
.getAllWorlds();
|
||||||
|
|
||||||
|
int start =
|
||||||
|
(page - 1) * WORLDS_PER_PAGE;
|
||||||
|
|
||||||
|
int end =
|
||||||
|
Math.min(
|
||||||
|
start + WORLDS_PER_PAGE,
|
||||||
|
worlds.size()
|
||||||
|
);
|
||||||
|
|
||||||
|
int worldCount =
|
||||||
|
end - start;
|
||||||
|
|
||||||
|
for (int i = start;
|
||||||
|
i < end;
|
||||||
|
i++) {
|
||||||
|
|
||||||
|
String worldName =
|
||||||
|
worlds.get(i);
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
dao.getEntityDamage(
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemStack item =
|
||||||
|
new ItemStack(
|
||||||
|
enabled
|
||||||
|
? Material.LIME_SHULKER_BOX
|
||||||
|
: Material.RED_SHULKER_BOX
|
||||||
|
);
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
item.getItemMeta();
|
||||||
|
|
||||||
|
if (meta != null) {
|
||||||
|
|
||||||
|
meta.setDisplayName(
|
||||||
|
"§e" + worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.set(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.setLore(
|
||||||
|
List.of(
|
||||||
|
"§7Creeper Entity Damage",
|
||||||
|
"",
|
||||||
|
enabled
|
||||||
|
? "§aCurrent: Creepers damage entities"
|
||||||
|
: "§cCurrent: Creepers do not damage entities"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
item.setItemMeta(
|
||||||
|
meta
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int relativeIndex =
|
||||||
|
i - start;
|
||||||
|
|
||||||
|
int row =
|
||||||
|
relativeIndex / 9;
|
||||||
|
|
||||||
|
int indexInRow =
|
||||||
|
relativeIndex % 9;
|
||||||
|
|
||||||
|
int itemsRemaining =
|
||||||
|
worldCount - (row * 9);
|
||||||
|
|
||||||
|
boolean lastPartialRow =
|
||||||
|
itemsRemaining < 9;
|
||||||
|
|
||||||
|
int slot;
|
||||||
|
|
||||||
|
if (lastPartialRow) {
|
||||||
|
|
||||||
|
List<Integer> rowSlots =
|
||||||
|
MenuLayoutUtils.getCenteredSlots(
|
||||||
|
itemsRemaining
|
||||||
|
);
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ rowSlots.get(
|
||||||
|
indexInRow
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ indexInRow;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory.setItem(
|
||||||
|
slot,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,14 +62,6 @@ public class CreeperMenu {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disableBlockDamage) {
|
|
||||||
|
|
||||||
GUIUtils.addGlow(
|
|
||||||
blockDamage
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
inventory.setItem(
|
inventory.setItem(
|
||||||
11,
|
11,
|
||||||
blockDamage
|
blockDamage
|
||||||
@@ -112,14 +104,6 @@ public class CreeperMenu {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disableEntityDamage) {
|
|
||||||
|
|
||||||
GUIUtils.addGlow(
|
|
||||||
entityDamage
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
inventory.setItem(
|
inventory.setItem(
|
||||||
15,
|
15,
|
||||||
entityDamage
|
entityDamage
|
||||||
|
|||||||
@@ -2,13 +2,15 @@ package com.rsscripting.serveradmin.gui;
|
|||||||
|
|
||||||
import com.rsscripting.serveradmin.RSServerAdmin;
|
import com.rsscripting.serveradmin.RSServerAdmin;
|
||||||
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
||||||
import com.rsscripting.serveradmin.worlds.WorldsDAO;
|
|
||||||
import com.rsscripting.serveradmin.settings.SettingKey;
|
import com.rsscripting.serveradmin.settings.SettingKey;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
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.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -164,11 +166,17 @@ public class KeepInventoryMenu {
|
|||||||
int start =
|
int start =
|
||||||
(page - 1) * WORLDS_PER_PAGE;
|
(page - 1) * WORLDS_PER_PAGE;
|
||||||
|
|
||||||
int slot =
|
int end =
|
||||||
9;
|
Math.min(
|
||||||
|
start + WORLDS_PER_PAGE,
|
||||||
|
worlds.size()
|
||||||
|
);
|
||||||
|
|
||||||
|
int worldCount =
|
||||||
|
end - start;
|
||||||
|
|
||||||
for (int i = start;
|
for (int i = start;
|
||||||
i < worlds.size() && slot < 54;
|
i < end;
|
||||||
i++) {
|
i++) {
|
||||||
|
|
||||||
String worldName =
|
String worldName =
|
||||||
@@ -195,6 +203,16 @@ public class KeepInventoryMenu {
|
|||||||
"§e" + worldName
|
"§e" + worldName
|
||||||
);
|
);
|
||||||
|
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.set(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING,
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
meta.setLore(
|
meta.setLore(
|
||||||
List.of(
|
List.of(
|
||||||
"§7Keep Inventory",
|
"§7Keep Inventory",
|
||||||
@@ -211,15 +229,51 @@ public class KeepInventoryMenu {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int relativeIndex =
|
||||||
|
i - start;
|
||||||
|
|
||||||
|
int row =
|
||||||
|
relativeIndex / 9;
|
||||||
|
|
||||||
|
int indexInRow =
|
||||||
|
relativeIndex % 9;
|
||||||
|
|
||||||
|
int itemsRemaining =
|
||||||
|
worldCount - (row * 9);
|
||||||
|
|
||||||
|
boolean lastPartialRow =
|
||||||
|
itemsRemaining < 9;
|
||||||
|
|
||||||
|
int slot;
|
||||||
|
|
||||||
|
if (lastPartialRow) {
|
||||||
|
|
||||||
|
List<Integer> rowSlots =
|
||||||
|
MenuLayoutUtils.getCenteredSlots(
|
||||||
|
itemsRemaining
|
||||||
|
);
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ rowSlots.get(
|
||||||
|
indexInRow
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
slot =
|
||||||
|
9
|
||||||
|
+ (row * 9)
|
||||||
|
+ indexInRow;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
inventory.setItem(
|
inventory.setItem(
|
||||||
slot,
|
slot,
|
||||||
item
|
item
|
||||||
);
|
);
|
||||||
|
|
||||||
slot++;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package com.rsscripting.serveradmin.gui;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MenuLayoutUtils {
|
||||||
|
|
||||||
|
public static List<Integer> getCenteredSlots(
|
||||||
|
int itemCount
|
||||||
|
) {
|
||||||
|
|
||||||
|
List<Integer> rowSlots =
|
||||||
|
new ArrayList<>();
|
||||||
|
|
||||||
|
if (itemCount <= 0) {
|
||||||
|
return rowSlots;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemCount >= 9) {
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
rowSlots.add(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rowSlots;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemCount % 2 == 0) {
|
||||||
|
|
||||||
|
switch (itemCount) {
|
||||||
|
|
||||||
|
case 2 -> rowSlots = List.of(
|
||||||
|
3, 5
|
||||||
|
);
|
||||||
|
|
||||||
|
case 4 -> rowSlots = List.of(
|
||||||
|
2, 3, 5, 6
|
||||||
|
);
|
||||||
|
|
||||||
|
case 6 -> rowSlots = List.of(
|
||||||
|
1, 2, 3, 5, 6, 7
|
||||||
|
);
|
||||||
|
|
||||||
|
case 8 -> rowSlots = List.of(
|
||||||
|
0, 1, 2, 3, 5, 6, 7, 8
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
int startSlot =
|
||||||
|
(9 - itemCount) / 2;
|
||||||
|
|
||||||
|
for (int i = 0; i < itemCount; i++) {
|
||||||
|
|
||||||
|
rowSlots.add(
|
||||||
|
startSlot + i
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return rowSlots;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+17
-7
@@ -7,7 +7,7 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
|
||||||
public class CreeperListener implements Listener {
|
public class CreeperBlockDamageListener implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onEntityExplode(
|
public void onEntityExplode(
|
||||||
@@ -20,14 +20,19 @@ public class CreeperListener implements Listener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
boolean disableBlockDamage =
|
String worldName =
|
||||||
|
event.getLocation()
|
||||||
|
.getWorld()
|
||||||
|
.getName();
|
||||||
|
|
||||||
|
boolean blockDamageEnabled =
|
||||||
RSServerAdmin.getInstance()
|
RSServerAdmin.getInstance()
|
||||||
.getSettingsDAO()
|
.getCreeperSettingsDAO()
|
||||||
.getDefault(
|
.getBlockDamage(
|
||||||
SettingKey.CREEPER_BLOCK_DAMAGE
|
worldName
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!disableBlockDamage) {
|
if (blockDamageEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +41,12 @@ public class CreeperListener implements Listener {
|
|||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
||||||
ex.printStackTrace();
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to process Creeper block damage: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+19
-7
@@ -20,22 +20,34 @@ public class CreeperEntityDamageListener implements Listener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
boolean disableEntityDamage =
|
String worldName =
|
||||||
|
event.getEntity()
|
||||||
|
.getWorld()
|
||||||
|
.getName();
|
||||||
|
|
||||||
|
boolean entityDamageEnabled =
|
||||||
RSServerAdmin.getInstance()
|
RSServerAdmin.getInstance()
|
||||||
.getSettingsDAO()
|
.getCreeperSettingsDAO()
|
||||||
.getDefault(
|
.getEntityDamage(
|
||||||
SettingKey.CREEPER_ENTITY_DAMAGE
|
worldName
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!disableEntityDamage) {
|
if (entityDamageEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
||||||
ex.printStackTrace();
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to process Creeper entity damage: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package com.rsscripting.serveradmin.listeners;
|
package com.rsscripting.serveradmin.listeners;
|
||||||
|
|
||||||
import com.rsscripting.serveradmin.gui.KeepInventoryMenu;
|
import com.rsscripting.serveradmin.gui.*;
|
||||||
import com.rsscripting.serveradmin.gui.RSMenuHolder;
|
|
||||||
import com.rsscripting.serveradmin.gui.CreeperMenu;
|
|
||||||
import com.rsscripting.serveradmin.RSServerAdmin;
|
import com.rsscripting.serveradmin.RSServerAdmin;
|
||||||
import com.rsscripting.serveradmin.settings.SettingKey;
|
import com.rsscripting.serveradmin.settings.SettingKey;
|
||||||
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
import com.rsscripting.serveradmin.keepinventory.KeepInventoryDAO;
|
||||||
@@ -14,6 +12,9 @@ import org.bukkit.event.inventory.InventoryClickEvent;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameRule;
|
import org.bukkit.GameRule;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
public class InventoryListener implements Listener {
|
public class InventoryListener implements Listener {
|
||||||
|
|
||||||
@@ -139,53 +140,55 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
switch (event.getSlot()) {
|
switch (event.getSlot()) {
|
||||||
|
|
||||||
|
case 4 -> player.openInventory(
|
||||||
|
com.rsscripting.serveradmin.gui.MainMenu.create()
|
||||||
|
);
|
||||||
|
|
||||||
case 11 -> {
|
case 11 -> {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
RSServerAdmin.getInstance()
|
player.openInventory(
|
||||||
.getSettingsDAO()
|
CreeperBlockDamageMenu.create(
|
||||||
.toggleDefault(
|
1
|
||||||
SettingKey.CREEPER_BLOCK_DAMAGE
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
||||||
ex.printStackTrace();
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to open Creeper Block Damage menu: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player.openInventory(
|
|
||||||
CreeperMenu.create()
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 15 -> {
|
case 15 -> {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
RSServerAdmin.getInstance()
|
player.openInventory(
|
||||||
.getSettingsDAO()
|
CreeperEntityDamageMenu.create(
|
||||||
.toggleDefault(
|
1
|
||||||
SettingKey.CREEPER_ENTITY_DAMAGE
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
||||||
ex.printStackTrace();
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
}
|
.warning(
|
||||||
|
"Failed to open Creeper Entity Damage menu: "
|
||||||
player.openInventory(
|
+ ex.getMessage()
|
||||||
CreeperMenu.create()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 4 -> player.openInventory(
|
}
|
||||||
com.rsscripting.serveradmin.gui.MainMenu.create()
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,27 +246,39 @@ public class InventoryListener implements Listener {
|
|||||||
RSServerAdmin.getInstance()
|
RSServerAdmin.getInstance()
|
||||||
.getKeepInventoryDAO();
|
.getKeepInventoryDAO();
|
||||||
|
|
||||||
java.util.List<String> worlds =
|
if (event.getCurrentItem() == null) {
|
||||||
RSServerAdmin.getInstance()
|
return;
|
||||||
.getWorldsDAO()
|
}
|
||||||
.getAllWorlds();
|
|
||||||
|
|
||||||
int worldIndex =
|
if (!event.getCurrentItem().hasItemMeta()) {
|
||||||
((holder.getPage() - 1) * 45)
|
return;
|
||||||
+ (event.getSlot() - 9);
|
}
|
||||||
|
|
||||||
if (worldIndex < 0
|
ItemMeta meta =
|
||||||
|| worldIndex >= worlds.size()) {
|
event.getCurrentItem()
|
||||||
|
.getItemMeta();
|
||||||
|
|
||||||
|
if (meta == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName =
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.get(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING
|
||||||
|
);
|
||||||
|
|
||||||
|
if (worldName == null
|
||||||
|
|| worldName.isBlank()) {
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String worldName =
|
|
||||||
worlds.get(
|
|
||||||
worldIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
boolean enabled =
|
boolean enabled =
|
||||||
dao.getWorldSetting(
|
dao.getWorldSetting(
|
||||||
worldName
|
worldName
|
||||||
@@ -306,6 +321,278 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "CREEPER_BLOCK_DAMAGE" -> {
|
||||||
|
|
||||||
|
if (!(event.getWhoClicked() instanceof Player player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.getSlot()) {
|
||||||
|
|
||||||
|
case 3 -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperMenu.create()
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to open Creeper menu: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5 -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getSettingsDAO()
|
||||||
|
.toggleDefault(
|
||||||
|
SettingKey.CREEPER_BLOCK_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperBlockDamageMenu.create(
|
||||||
|
holder.getPage()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to toggle Creeper Block Damage default: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
default -> {
|
||||||
|
|
||||||
|
if (event.getSlot() < 9) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getCurrentItem().hasItemMeta()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
event.getCurrentItem()
|
||||||
|
.getItemMeta();
|
||||||
|
|
||||||
|
if (meta == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName =
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.get(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING
|
||||||
|
);
|
||||||
|
|
||||||
|
if (worldName == null
|
||||||
|
|| worldName.isBlank()) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO()
|
||||||
|
.getBlockDamage(
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO()
|
||||||
|
.setBlockDamage(
|
||||||
|
worldName,
|
||||||
|
!enabled
|
||||||
|
);
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperBlockDamageMenu.create(
|
||||||
|
holder.getPage()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to update Creeper Block Damage setting: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
case "CREEPER_ENTITY_DAMAGE" -> {
|
||||||
|
|
||||||
|
if (!(event.getWhoClicked() instanceof Player player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.getSlot()) {
|
||||||
|
|
||||||
|
case 3 -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperMenu.create()
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to open Creeper menu: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5 -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getSettingsDAO()
|
||||||
|
.toggleDefault(
|
||||||
|
SettingKey.CREEPER_ENTITY_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperEntityDamageMenu.create(
|
||||||
|
holder.getPage()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to toggle Creeper Entity Damage default: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
default -> {
|
||||||
|
|
||||||
|
if (event.getSlot() < 9) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.getCurrentItem().hasItemMeta()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemMeta meta =
|
||||||
|
event.getCurrentItem()
|
||||||
|
.getItemMeta();
|
||||||
|
|
||||||
|
if (meta == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName =
|
||||||
|
meta.getPersistentDataContainer()
|
||||||
|
.get(
|
||||||
|
new NamespacedKey(
|
||||||
|
RSServerAdmin.getInstance(),
|
||||||
|
"world_name"
|
||||||
|
),
|
||||||
|
PersistentDataType.STRING
|
||||||
|
);
|
||||||
|
|
||||||
|
if (worldName == null
|
||||||
|
|| worldName.isBlank()) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean enabled =
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO()
|
||||||
|
.getEntityDamage(
|
||||||
|
worldName
|
||||||
|
);
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getCreeperSettingsDAO()
|
||||||
|
.setEntityDamage(
|
||||||
|
worldName,
|
||||||
|
!enabled
|
||||||
|
);
|
||||||
|
|
||||||
|
player.openInventory(
|
||||||
|
CreeperEntityDamageMenu.create(
|
||||||
|
holder.getPage()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
RSServerAdmin.getInstance()
|
||||||
|
.getLogger()
|
||||||
|
.warning(
|
||||||
|
"Failed to update Creeper Entity Damage setting: "
|
||||||
|
+ ex.getMessage()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,25 @@ public class WorldLoadListener implements Listener {
|
|||||||
keepInventoryDefault
|
keepInventoryDefault
|
||||||
);
|
);
|
||||||
|
|
||||||
|
boolean blockDamageDefault =
|
||||||
|
plugin.getSettingsDAO()
|
||||||
|
.getDefault(
|
||||||
|
SettingKey.CREEPER_BLOCK_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
boolean entityDamageDefault =
|
||||||
|
plugin.getSettingsDAO()
|
||||||
|
.getDefault(
|
||||||
|
SettingKey.CREEPER_ENTITY_DAMAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
plugin.getCreeperSettingsDAO()
|
||||||
|
.ensureWorldExists(
|
||||||
|
event.getWorld().getName(),
|
||||||
|
blockDamageDefault,
|
||||||
|
entityDamageDefault
|
||||||
|
);
|
||||||
|
|
||||||
boolean keepInventoryEnabled =
|
boolean keepInventoryEnabled =
|
||||||
plugin.getKeepInventoryDAO()
|
plugin.getKeepInventoryDAO()
|
||||||
.getWorldSetting(
|
.getWorldSetting(
|
||||||
|
|||||||
Reference in new issue
Block a user