/******************************************************************************* * Copyright 2014 Tobias Welther * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tobiyas.racesandclasses.playermanagement.leveling.manager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import de.tobiyas.racesandclasses.eventprocessing.events.leveling.PlayerLostEXPEvent; import de.tobiyas.racesandclasses.eventprocessing.events.leveling.PlayerReceiveEXPEvent; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer; import de.tobiyas.racesandclasses.saving.PlayerSavingData; public class MCPlayerLevelManager extends AbstractPlayerLevelingSystem { /** * Creates a default MC Level Manager with MC Player Levels. * * @param player to create for * @param savingContainer */ public MCPlayerLevelManager(RaCPlayer player, PlayerSavingData data) { super(player, data); } @Override public int getCurrentLevel() { return getRealPlayer().getLevel(); } @Override public int getCurrentExpOfLevel() { return (int) (getRealPlayer().getExp() * getRealPlayer().getExpToLevel()); } @Override public void setCurrentLevel(int level) { getRealPlayer().setLevel(level); } @Override public void setCurrentExpOfLevel(int currentExpOfLevel) { getRealPlayer().setExp(currentExpOfLevel / getRealPlayer().getExpToLevel()); } @Override public boolean addExp(int exp) { PlayerReceiveEXPEvent expEvent = new PlayerReceiveEXPEvent(player, exp); Bukkit.getPluginManager().callEvent(expEvent); if(expEvent.isCancelled()){ return false; } exp = expEvent.getExp(); if(exp < 1){ return false; } getRealPlayer().giveExp(exp); return true; } @Override public boolean removeExp(int exp) { PlayerLostEXPEvent expEvent = new PlayerLostEXPEvent(player, exp); Bukkit.getPluginManager().callEvent(expEvent); if(expEvent.isCancelled()){ return false; } exp = expEvent.getExp(); if(exp < 1){ return false; } int totalExp = getRealPlayer().getTotalExperience(); int newTotalExp = totalExp - exp; if(newTotalExp < 0) newTotalExp = 0; getRealPlayer().setTotalExperience(newTotalExp); return true; } @Override public void checkLevelChanged() { } /** * Returns the Player associated with this container. * * @return */ private Player getRealPlayer(){ return player.getPlayer(); } @Override public boolean canRemove(int toRemove) { toRemove -= getCurrentExpOfLevel(); return toRemove > 0; } @Override public void addLevel(int value) { getRealPlayer().giveExpLevels(value); } @Override public void removeLevel(int value) { int newLevel = Math.max(0, getCurrentLevel() - value); setCurrentLevel(newLevel); } @Override public int getMaxEXPToNextLevel() { Player pl = player.getPlayer(); return (int) (pl.getExpToLevel() * (1d/(1d - pl.getExp()))); } }