package de.tobiyas.racesandclasses.playermanagement.leveling.manager;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.playermanagement.leveling.PlayerLevelManager;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.saving.PlayerSavingData;
import de.tobiyas.util.formating.StringFormatUtils;
import de.tobiyas.util.math.Math2;
public abstract class AbstractPlayerLevelingSystem implements PlayerLevelManager {
/**
* the player to use.
*/
protected final RaCPlayer player;
/**
* The Plugin to use.
*/
protected final RacesAndClasses plugin;
/**
* The Data for saving.
*/
protected final PlayerSavingData data;
public AbstractPlayerLevelingSystem(RaCPlayer player, PlayerSavingData data) {
this.player = player;
this.data = data;
this.plugin = RacesAndClasses.getPlugin();
}
@Override
public RaCPlayer getPlayer() {
return player;
}
@Override
public void tick() {
redrawMCLevelBar();
updateActionbarData();
}
private void updateActionbarData() {
int currentEXP = getCurrentExpOfLevel();
int maxEXP = getMaxEXPToNextLevel();
double percent = Math2.clamp(0d, (double)currentEXP / (double)maxEXP, 1d);
String expString = StringFormatUtils.formatToPercent(percent, 10, '\u220E', ChatColor.YELLOW, ChatColor.BLACK);
expString = ChatColor.YELLOW + "{" + expString + ChatColor.YELLOW + "}";
player.getActionbarDisplay().setSegment("level", ""+getCurrentLevel());
player.getActionbarDisplay().setSegment("maxexp", ""+getCurrentLevel());
player.getActionbarDisplay().setSegment("exp", ""+currentEXP);
player.getActionbarDisplay().setSegment("expbar", expString);
}
/**
* Redras the Level bar if wanted.
*/
private void redrawMCLevelBar(){
if(!plugin.getConfigManager().getGeneralConfig().isConfig_gui_level_useMCLevelBar()) return;
if(!player.isOnline()) return;
Player realPlayer = player.getPlayer();
float percent = (float)getCurrentExpOfLevel() / (float)getMaxEXPToNextLevel();
realPlayer.setExp(percent);
realPlayer.setLevel(getCurrentLevel());
}
}