From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Lukas Planz Date: Tue, 5 Sep 2023 20:33:52 +0200 Subject: [PATCH] Add experience points API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java index d84fe3e439f3b190b7bbec15f406cc3a393dccfc..a7a4e5423cedb67bcdf02738be62bdf83e748b82 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -1947,6 +1947,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param exp New total experience points */ public void setTotalExperience(int exp); + // Paper start + /** + * Gets the players total amount of experience points he collected to reach the current level and level progress. + * + *

This method differs from {@link #getTotalExperience()} in that this method always returns an + * up-to-date value that reflects the players{@link #getLevel() level} and {@link #getExp() level progress}

+ * + * @return Current total experience points + * @see #getLevel() + * @see #getExp() + * @see #setExperienceLevelAndProgress(int) + */ + @org.jetbrains.annotations.Range(from = 0, to = Integer.MAX_VALUE) int calculateTotalExperiencePoints(); + + /** + * Updates the players level and level progress to that what would be reached when the total amount of experience + * had been collected. + * + *

This method differs from {@link #setTotalExperience(int)} in that this method actually updates the + * {@link #getLevel() level} and {@link #getExp() level progress} so that a subsequent call of + * {@link #calculateTotalExperiencePoints()} yields the same amount of points that have been set

+ * + * @param totalExperience New total experience points + * @see #setLevel(int) + * @see #setExp(float) + * @see #calculateTotalExperiencePoints() + */ + void setExperienceLevelAndProgress(@org.jetbrains.annotations.Range(from = 0, to = Integer.MAX_VALUE) int totalExperience); + + /** + * Gets the total amount of experience points that are needed to reach the next level from zero progress towards it. + * + *

Can be used with {@link #getExp()} to calculate the current points for the current level and alike

+ * + * @return The required experience points + * @see #getExp() + */ + int getExperiencePointsNeededForNextLevel(); + // Paper end /** * Send an experience change.