Minecraft xp calculator
Compute xp and level information given the total xp value
by Mr Pingouin
HTML
<div>
Total xp point :<br>
<input id="xpInput" type="text" value="0">
<button onclick="compute(true);">Set</button>
<button onclick="compute(false);">Add</button>
<button onclick="resetXp(true);">Reset</button>
<button onclick="findPair();">Find Pair</button>
<p>
Result :<br>
<span id="xpOutput"></span>
</p>
</div>
JavaScript
function XpHelper(){
this.xpLevel = 0;
this.xpTotal = 0;
this.experience = 0;
this.getXpPoint = function(){
return Math.round(this.experience * this.getXpBarCap());
}
this.getXpToNext = function(){
return Math.round((1.0 - this.experience) * this.getXpBarCap());
}
this.getXpBarCap = function() {
if (this.xpLevel >= 30) {
return 112 + (this.xpLevel - 30) * 9;
}
if (this.xpLevel >= 15) {
return 37 + (this.xpLevel - 15) * 5;
}
return 7 + this.xpLevel * 2;
}
this.addXP = function(amount) {
this.experience += amount/this.getXpBarCap();
this.xpTotal = clamp(this.xpTotal + amount, 0, 2147483647);
while (this.experience >= 1){
this.experience = (this.experience - 1.0) * this.getXpBarCap();
this.xpLevel += 1;
this.experience /= this.getXpBarCap();
}
}
}
var xpObj = new XpHelper();
function compute(reset_xp){
var xpInput = parseInt(document.getElementById("xpInput").value);
if(reset_xp){
resetXp(false);
}
xpObj.addXP(xpInput);
document.getElementById("xpOutput").innerHTML = getResult(xpObj);
}
function resetXp(redraw){
xpObj = new XpHelper();
if(redraw){
document.getElementById("xpOutput").innerHTML = getResult(xpObj);
}
}
function clamp(value, min, max){
if(value < min){return min;}
if(value > max){return max;}
return value;
}
function findPair(){
var xpInput = parseInt(document.getElementById("xpInput").value);
var min = 1;
var sol = [-1, -1];
for(var i = 1; i < xpInput; i++){
var base_xp = new XpHelper();
base_xp.addXP(i)
base_xp.addXP(xpInput - i)
var progress = base_xp.experience
if(progress < min && progress > 0.5){
max = progress;
sol = [i, xpInput - i];
}
}
document.getElementById("xpOutput").innerHTML = sol;
}
function getResult(xpObj){
var builder = "";
builder += "Level " + xpObj.xpLevel + "<br>";
builder += "Progress " + xpObj.experience*100 +...