Skip to content

Commit 44a627d

Browse files
committed
fix death xp drop calculation
1 parent 00ebb59 commit 44a627d

File tree

4 files changed

+61
-3
lines changed

4 files changed

+61
-3
lines changed

atdeprecated-server/minecraft-patches/features/0003-Dispenser-place-boat-on-ice-packed-ice-blue-ice.patch

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ From: MidnightTale <[email protected]>
33
Date: Sat, 19 Jul 2025 22:20:58 +0700
44
Subject: [PATCH] Dispenser place boat on ice, packed ice, blue ice
55

6-
76
As part of: MidnightPatch (https://github.com/MidnightTale/MidnightPatch/blob/eda1116de584d17c9d5b79b5151ff18a533595d5/src/main/java/fun/mntale/midnightPatch/module/entity/boat/DispenserBoatListener.java)
87

98
diff --git a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java

atdeprecated-server/minecraft-patches/features/0007-Purpur-Barrels-and-enderchests-6-rows.patch

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ From: MidnightTale <[email protected]>
33
Date: Sun, 20 Jul 2025 08:35:18 +0700
44
Subject: [PATCH] Purpur: Barrels and enderchests 6 rows
55

6-
76
Co-authored by: William Blake Galbreath <[email protected]>
87
As part of: Purpur (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch)
98
Licensed under: MIT (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/LICENSE)

atdeprecated-server/minecraft-patches/features/0011-Native-Void-Descend-Gamerule.patch

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ From: MidnightTale <[email protected]>
33
Date: Mon, 21 Jul 2025 17:02:07 +0700
44
Subject: [PATCH] Native Void Descend Gamerule
55

6-
76
As part of: Descend (https://github.com/MidnightTale/Descend/blob/26dc4dca932e7315fca5fed22ae4aa01ae765803/src/main/java/fun/mntale/descend/Descend.java)
87

98
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: MidnightTale <[email protected]>
3+
Date: Mon, 21 Jul 2025 17:43:24 +0700
4+
Subject: [PATCH] Fix death xp drop percentage calculation
5+
6+
7+
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
8+
index f8e0927db9fd500671b586589cb3ea72dfa226b2..be7bc0caafccdf3c9f6b140240b88e3696094349 100644
9+
--- a/net/minecraft/world/entity/player/Player.java
10+
+++ b/net/minecraft/world/entity/player/Player.java
11+
@@ -1840,12 +1840,13 @@ public abstract class Player extends LivingEntity {
12+
13+
@Override
14+
protected int getBaseExperienceReward(ServerLevel level) {
15+
- // atDeprecated start - Use deathXpDropPercentage gamerule for XP drop
16+
+ // atDeprecated start - Use deathXpDropPercentage gamerule for XP drop (fixed XP calculation)
17+
if (!level.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) {
18+
int percent = level.getGameRules().getInt(GameRules.RULE_DEATH_XP_DROP_PERCENTAGE);
19+
if (percent < 0) percent = 0;
20+
if (percent > 100) percent = 100;
21+
- return (int) (this.totalExperience * (percent / 100.0));
22+
+ int xp = getTrueTotalExperience();
23+
+ return (int) (xp * (percent / 100.0));
24+
}
25+
return 0;
26+
// atDeprecated end
27+
@@ -2396,4 +2397,34 @@ public abstract class Player extends LivingEntity {
28+
this.insomniaEnabled = enabled;
29+
}
30+
// atDeprecated end
31+
+
32+
+ // atDeprecated start - Correct XP calculation for death XP drop
33+
+ public int getTrueTotalExperience() {
34+
+ int exp = 0;
35+
+ int level = this.experienceLevel;
36+
+ exp += getExpAtLevel(level);
37+
+ exp += Math.round(getExpToLevelUp(level) * this.experienceProgress);
38+
+ return exp;
39+
+ }
40+
+
41+
+ private int getExpAtLevel(int level) {
42+
+ if (level <= 15) {
43+
+ return level * level + 6 * level;
44+
+ } else if (level <= 30) {
45+
+ return 2 * level * level - 29 * level + 360;
46+
+ } else {
47+
+ return 5 * level * level - 151 * level + 2220;
48+
+ }
49+
+ }
50+
+
51+
+ private float getExpToLevelUp(int level) {
52+
+ if (level <= 15) {
53+
+ return 2 * level + 7;
54+
+ } else if (level <= 30) {
55+
+ return 5 * level - 38;
56+
+ } else {
57+
+ return 9 * level - 158;
58+
+ }
59+
+ }
60+
+ // atDeprecated end
61+
}

0 commit comments

Comments
 (0)