From 06923867cc1d3341ba137d5a2ff7dce557aeb2de Mon Sep 17 00:00:00 2001 From: vluckyyy Date: Wed, 25 Oct 2023 15:21:52 +0200 Subject: [PATCH 1/3] Move level-related calculations to LevelUtil. --- .../discordapp/leveling/LevelController.java | 23 +----------- .../discordapp/util/LevelUtil.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/eternalcode/discordapp/util/LevelUtil.java diff --git a/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java b/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java index ad437be8..6c05feec 100644 --- a/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java +++ b/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java @@ -3,6 +3,7 @@ import com.eternalcode.discordapp.leveling.experience.Experience; import com.eternalcode.discordapp.leveling.experience.ExperienceChangeEvent; import com.eternalcode.discordapp.observer.Observer; +import com.eternalcode.discordapp.util.LevelUtil; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; @@ -20,24 +21,6 @@ public LevelController(LevelConfig levelConfig, LevelService levelService, JDA j this.jda = jda; } - /** - * This method is called when an ExperienceChangeEvent occurs. It updates the user's level based on their experience points - * and sends a message to a designated TextChannel when the user levels up. - *

- * It calculates the next level using the formula: N = P * L^2 + P * L + P - * where: - *

- N represents the points needed to reach the next level, - *

- P is the points needed for one level (provided by LevelConfig), - *

- L is the current level. - *

- * Example level calculations: - *

Level 1: N = 100 * 1^2 + 100 * 1 + 100 = 300 - *

Level 2: N = 100 * 2^2 + 100 * 2 + 100 = 700 - *

Level 3: N = 100 * 3^2 + 100 * 3 + 100 = 1200 - *

Level 4: N = 100 * 4^2 + 100 * 4 + 100 = 1700 - *

Level 5: N = 100 * 5^2 + 100 * 5 + 100 = 2300 - */ - @Override public void update(ExperienceChangeEvent experienceChangeEvent) { Experience experience = experienceChangeEvent.experience(); @@ -50,9 +33,7 @@ public void update(ExperienceChangeEvent experienceChangeEvent) { this.levelService.find(userId).thenApply(userLevel -> { int currentLevel = userLevel.getCurrentLevel(); - int pointsNeededForNextLevel = (int) (pointsNeededForOneLevel * Math.pow(currentLevel + 1, 2) - + pointsNeededForOneLevel * (currentLevel + 1) - + pointsNeededForOneLevel); + int pointsNeededForNextLevel = LevelUtil.calculatePointsForNextLevel(currentLevel, pointsNeededForOneLevel); if (experiencePoints <= pointsNeededForNextLevel) { return null; diff --git a/src/main/java/com/eternalcode/discordapp/util/LevelUtil.java b/src/main/java/com/eternalcode/discordapp/util/LevelUtil.java new file mode 100644 index 00000000..788adc8d --- /dev/null +++ b/src/main/java/com/eternalcode/discordapp/util/LevelUtil.java @@ -0,0 +1,37 @@ +package com.eternalcode.discordapp.util; + +public final class LevelUtil { + + public LevelUtil() { + throw new UnsupportedOperationException("This class cannot be instantiated"); + } + + /** + * Calculates the points needed to achieve the next level. + *

+ * This method is called when an ExperienceChangeEvent occurs. It updates the user's level based on their experience points + * and sends a message to a designated TextChannel when the user levels up. + *

+ * It calculates the next level using the formula: N = P * L^2 + P * L + P + * where: + *

- N represents the points needed to reach the next level, + *

- P is the points needed for one level (provided by LevelConfig), + *

- L is the current level. + *

+ * Example level calculations: + *

Level 1: N = 100 * 1^2 + 100 * 1 + 100 = 300 + *

Level 2: N = 100 * 2^2 + 100 * 2 + 100 = 700 + *

Level 3: N = 100 * 3^2 + 100 * 3 + 100 = 1200 + *

Level 4: N = 100 * 4^2 + 100 * 4 + 100 = 1700 + *

Level 5: N = 100 * 5^2 + 100 * 5 + 100 = 2300 + *

+ * @param currentLevel Current level. + * @param pointsNeededForOneLevel Points needed for one level. + * @return The calculated points needed for the next level. + */ + public static int calculatePointsForNextLevel(int currentLevel, double pointsNeededForOneLevel) { + return (int) (pointsNeededForOneLevel * Math.pow(currentLevel + 1, 2) + + pointsNeededForOneLevel * (currentLevel + 1) + + pointsNeededForOneLevel); + } +} From bc6f26ae71c45c4d8bdbca5a7f90f15d6985d98f Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 25 Oct 2023 21:18:50 +0200 Subject: [PATCH 2/3] Move to level package. --- .../com/eternalcode/discordapp/leveling/LevelController.java | 1 - .../eternalcode/discordapp/{util => leveling}/LevelUtil.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) rename src/main/java/com/eternalcode/discordapp/{util => leveling}/LevelUtil.java (97%) diff --git a/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java b/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java index e9364193..a76d8cce 100644 --- a/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java +++ b/src/main/java/com/eternalcode/discordapp/leveling/LevelController.java @@ -3,7 +3,6 @@ import com.eternalcode.discordapp.leveling.experience.Experience; import com.eternalcode.discordapp.leveling.experience.ExperienceChangeEvent; import com.eternalcode.discordapp.observer.Observer; -import com.eternalcode.discordapp.util.LevelUtil; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; diff --git a/src/main/java/com/eternalcode/discordapp/util/LevelUtil.java b/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java similarity index 97% rename from src/main/java/com/eternalcode/discordapp/util/LevelUtil.java rename to src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java index 788adc8d..bbf93af5 100644 --- a/src/main/java/com/eternalcode/discordapp/util/LevelUtil.java +++ b/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java @@ -1,4 +1,4 @@ -package com.eternalcode.discordapp.util; +package com.eternalcode.discordapp.leveling; public final class LevelUtil { From f791db27d6feeae45b0886444aa6022837d70bf0 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 25 Oct 2023 21:20:07 +0200 Subject: [PATCH 3/3] Fix checkstyle. --- .../java/com/eternalcode/discordapp/leveling/LevelUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java b/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java index bbf93af5..7bad229a 100644 --- a/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java +++ b/src/main/java/com/eternalcode/discordapp/leveling/LevelUtil.java @@ -24,7 +24,7 @@ public LevelUtil() { *

Level 3: N = 100 * 3^2 + 100 * 3 + 100 = 1200 *

Level 4: N = 100 * 4^2 + 100 * 4 + 100 = 1700 *

Level 5: N = 100 * 5^2 + 100 * 5 + 100 = 2300 - *

+ * * @param currentLevel Current level. * @param pointsNeededForOneLevel Points needed for one level. * @return The calculated points needed for the next level.