From 7437cd20e3f3bea021b424e9d00c98124f564b3a Mon Sep 17 00:00:00 2001 From: Thatsmusic99 <25277367+thatsmusic99@users.noreply.github.com> Date: Wed, 14 Jun 2023 09:55:27 +0100 Subject: [PATCH] fix: calculate XP points properly than use getTotalExperience --- .../payments/types/PointsPayment.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/AdvancedTeleport-Bukkit/src/main/java/io/github/niestrat99/advancedteleport/payments/types/PointsPayment.java b/AdvancedTeleport-Bukkit/src/main/java/io/github/niestrat99/advancedteleport/payments/types/PointsPayment.java index 6b422f7f1..b922882e4 100644 --- a/AdvancedTeleport-Bukkit/src/main/java/io/github/niestrat99/advancedteleport/payments/types/PointsPayment.java +++ b/AdvancedTeleport-Bukkit/src/main/java/io/github/niestrat99/advancedteleport/payments/types/PointsPayment.java @@ -34,7 +34,11 @@ public void addLevels(LevelsPayment levels) { @Override public double getPlayerAmount(Player player) { - return player.getTotalExperience(); + + // Get the XP that the player is on according to their level + int xpLevels = getEXPBetweenLevels(player.getLevel()); + int totalXPinLevel = expInLevel(player.getLevel()); + return xpLevels + totalXPinLevel - player.getExpToLevel(); } @Override @@ -48,7 +52,7 @@ public boolean canPay(Player player) { int expPoints = getEXPBetweenLevels(player.getLevel()); requiredPoints += expPoints; } - if (player.getTotalExperience() >= requiredPoints) { + if (getPlayerAmount(player) >= requiredPoints) { return true; } else { CustomMessages.sendMessage(player, "Error.notEnoughEXPPoints", "{points}", String.valueOf(requiredPoints)); @@ -82,17 +86,18 @@ protected int getEXPBetweenLevels(int startingLevel) { // Next, we need to calculate the amount of EXP points to deduct. // Let's remove 1 off the current level each time. for (int i = 0; i < levels.getPaymentAmount(); i++) { - // Get the resulting level. - int level = startingLevel - i - 1; - // If the level is 0-15: - if (level < 16) { - expPoints += 2 * level + 7; - } else if (level < 31) { - expPoints += 5 * level - 38; - } else { - expPoints += 9 * level - 158; - } + expPoints += expInLevel(startingLevel - i - 1); } return expPoints; } + + protected int expInLevel(int currentLevel) { + if (currentLevel < 16) { + return 2 * currentLevel + 7; + } else if (currentLevel < 31) { + return 5 * currentLevel - 38; + } else { + return 9 * currentLevel - 158; + } + } }