diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayer.java b/src/main/java/net/minecraft/entity/player/EntityPlayer.java index 120acd9..b8bcd17 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayer.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayer.java @@ -13,6 +13,9 @@ import java.util.Iterator; import java.util.List; import java.util.UUID; + +import org.ultramine.server.util.MinecraftUtil; + import java.util.Map.Entry; import net.minecraft.block.Block; @@ -1872,6 +1875,19 @@ public void addExperienceLevel(int p_82242_1_) { + if(p_82242_1_ < 0 && true) + { + int xp = MinecraftUtil.countXPCostForLevel(experienceLevel); + xp += (MinecraftUtil.countXPCostForLevel(experienceLevel + 1) - xp) * experience; + xp -= MinecraftUtil.countXPCostForLevel(-p_82242_1_); + experienceLevel = 0; + experience = 0.0F; + experienceTotal = 0; + if(xp > 0) + addExperience(xp); + return; + } + this.experienceLevel += p_82242_1_; if (this.experienceLevel < 0) diff --git a/src/main/java/org/ultramine/server/util/MinecraftUtil.java b/src/main/java/org/ultramine/server/util/MinecraftUtil.java index edb53e1..7e05bd7 100644 --- a/src/main/java/org/ultramine/server/util/MinecraftUtil.java +++ b/src/main/java/org/ultramine/server/util/MinecraftUtil.java @@ -27,4 +27,26 @@ Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); return player.worldObj.rayTraceBlocks(var13, var23, true); } + + public static int countXPCostForLevel(int level) + { + if(level < 17) + { + return 17*level; + } + else if(level < 30) + { + int cost = 17*level; + for(int i = 0; i < level - 15; i++) + cost += i*3; + return cost + level/18; + } + else + { + int cost = 826; + for(int i = 0; i < level - 30; i++) + cost += 62 + i*7; + return cost; + } + } }