Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.black_ixx.bossshop.core.prices;


import org.black_ixx.bossshop.core.BSBuy;
import org.black_ixx.bossshop.managers.ClassManager;
import org.black_ixx.bossshop.managers.misc.InputReader;
Expand Down Expand Up @@ -30,20 +29,32 @@ public void enableType() {

@Override
public boolean hasPrice(Player p, BSBuy buy, Object price, ClickType clickType, int multiplier, boolean messageOnFailure) {
int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier;
if ((p.getLevel() < (Integer) exp)) {
if (messageOnFailure) {
ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p);
}
return false;
}
return true;
int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier;
if (ClassManager.manager.getSettings().getExpUseLevel()) {
if ((p.getLevel() < (Integer) exp)) {
if (messageOnFailure) {
ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p);
}
return false;
}
}
else if (getTotalExperience(p) < (Integer) exp) {
if (messageOnFailure) {
ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p);
}
return false;
}
return true;
}

@Override
public String takePrice(Player p, BSBuy buy, Object price, ClickType clickType, int multiplier) {
int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier;
p.setLevel(p.getLevel() - exp);
int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier;
if (ClassManager.manager.getSettings().getExpUseLevel()) {
p.setLevel(p.getLevel() - exp);
} else {
p.giveExp(-exp);
}

return getDisplayBalance(p, buy, price, clickType);
}
Expand Down Expand Up @@ -76,5 +87,31 @@ public boolean isIntegerValue() {
return true;
}

private int getExperienceAtLevel(Player player) {
return this.getExperienceAtLevel(player.getLevel());
}

private int getExperienceAtLevel(int level) {
if (level <= 15) {
return (level << 1) + 7;
}
if (level >= 16 && level <= 30) {
return (level * 5) - 38;
}
return (level * 9) - 158;
}

private int getTotalExperience(Player player) {
int experience = Math.round(this.getExperienceAtLevel(player) * player.getExp());
int currentLevel = player.getLevel();
while (currentLevel > 0) {
currentLevel--;
experience += this.getExperienceAtLevel(currentLevel);
}
if (experience < 0) {
experience = Integer.MAX_VALUE;
}
return experience;
}

}
4 changes: 2 additions & 2 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ NumberDisplay:
SellAllPlaceholderShowFinalReward: false
#
#
# ExpUseLevels: If enabled rewards of type 'Exp' stand for "Exp level". Set this to false if you want to sell plain exp. This affects rewards only.
# ExpUseLevels: If enabled rewards of type 'Exp' stand for "Exp level". Set this to false if you want to use plain exp.
ExpUseLevels: true
#
#
Expand Down Expand Up @@ -247,4 +247,4 @@ Sound:
ChangePage: 'UI_BUTTON_CLICK:0.2:1'
ChangeShop: 'BLOCK_CHEST_OPEN:0.2:1'
Open: 'ENTITY_ELDER_GUARDIAN_CURSE:1:1.8'
Close: ''
Close: ''