From 592851e80b7322f0316cbe65c87d33cea4fbd18a Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 10 Nov 2020 11:20:32 -0800 Subject: [PATCH] Throw errors for child skill leaderboard requests --- Changelog.txt | 1 + .../nossr50/api/exceptions/InvalidSkillException.java | 4 ++++ .../com/gmail/nossr50/database/DatabaseManager.java | 3 ++- .../nossr50/database/FlatfileDatabaseManager.java | 9 ++++++++- .../com/gmail/nossr50/database/SQLDatabaseManager.java | 10 +++++++++- .../gmail/nossr50/skills/salvage/SalvageManager.java | 4 +++- 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 319b13d6f..45e9a4684 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,6 @@ Version 2.1.156 Fixed a bug where the admin and party chat toggles in chat.yml didn't function as intended + Added some errors that trigger if a plugin hooking into mcMMO is grabbing leaderboards for child skills through our SQL/FlatFile class (which don't exist) Version 2.1.155 Master Angler now has 8 ranks diff --git a/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java b/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java index f94207a41..de0f847db 100644 --- a/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java +++ b/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java @@ -6,4 +6,8 @@ public class InvalidSkillException extends RuntimeException { public InvalidSkillException() { super("That is not a valid skill."); } + + public InvalidSkillException(String msg) { + super(msg); + } } diff --git a/src/main/java/com/gmail/nossr50/database/DatabaseManager.java b/src/main/java/com/gmail/nossr50/database/DatabaseManager.java index f5769d93e..6ab5339e7 100644 --- a/src/main/java/com/gmail/nossr50/database/DatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/DatabaseManager.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.database; +import com.gmail.nossr50.api.exceptions.InvalidSkillException; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.database.DatabaseType; import com.gmail.nossr50.datatypes.database.PlayerStat; @@ -58,7 +59,7 @@ public interface DatabaseManager { * @param statsPerPage The number of stats per page * @return the requested leaderboard information */ - List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage); + List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) throws InvalidSkillException; /** * Retrieve rank info into a HashMap from PrimarySkillType to the rank. diff --git a/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java index ab87fe955..288da1d25 100644 --- a/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.database; +import com.gmail.nossr50.api.exceptions.InvalidSkillException; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.MobHealthbarType; @@ -363,7 +364,13 @@ public final class FlatfileDatabaseManager implements DatabaseManager { writer.append("\r\n"); } - public List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) { + public List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) throws InvalidSkillException { + //Fix for a plugin that people are using that is throwing SQL errors + if(skill.isChildSkill()) { + mcMMO.p.getLogger().severe("A plugin hooking into mcMMO is being naughty with our database commands, update all plugins that hook into mcMMO and contact their devs!"); + throw new InvalidSkillException("A plugin hooking into mcMMO that you are using is attempting to read leaderboard skills for child skills, child skills do not have leaderboards! This is NOT an mcMMO error!"); + } + updateLeaderboards(); List statsList = skill == null ? powerLevels : playerStatHash.get(skill); int fromIndex = (Math.max(pageNumber, 1) - 1) * statsPerPage; diff --git a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java index 7830362c4..56190a4b6 100644 --- a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.database; +import com.gmail.nossr50.api.exceptions.InvalidSkillException; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.MobHealthbarType; @@ -343,9 +344,16 @@ public final class SQLDatabaseManager implements DatabaseManager { return success; } - public List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) { + public List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) throws InvalidSkillException { List stats = new ArrayList<>(); + //Fix for a plugin that people are using that is throwing SQL errors + if(skill.isChildSkill()) { + mcMMO.p.getLogger().severe("A plugin hooking into mcMMO is being naughty with our database commands, update all plugins that hook into mcMMO and contact their devs!"); + throw new InvalidSkillException("A plugin hooking into mcMMO that you are using is attempting to read leaderboard skills for child skills, child skills do not have leaderboards! This is NOT an mcMMO error!"); + } + + String query = skill == null ? ALL_QUERY_VERSION : skill.name().toLowerCase(Locale.ENGLISH); ResultSet resultSet = null; PreparedStatement statement = null; diff --git a/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java b/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java index aa2d30542..2545a15d2 100644 --- a/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java +++ b/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java @@ -91,7 +91,9 @@ public class SalvageManager extends SkillManager { // Level check if (getSkillLevel() < minimumSalvageableLevel) { - NotificationManager.sendPlayerInformation(player, NotificationType.REQUIREMENTS_NOT_MET, "Salvage.Skills.Adept.Level", String.valueOf(salvageable.getMinimumLevel()), StringUtils.getPrettyItemString(item.getType())); + NotificationManager.sendPlayerInformation(player, NotificationType.REQUIREMENTS_NOT_MET, + "Salvage.Skills.Adept.Level", + String.valueOf(minimumSalvageableLevel), StringUtils.getPrettyItemString(item.getType())); return; }