|
| 1 | +package ru.endlesscode.mimic.impl.heroes |
| 2 | + |
| 3 | +import com.herocraftonline.heroes.characters.Hero |
| 4 | +import org.bukkit.entity.Player |
| 5 | +import ru.endlesscode.mimic.level.BukkitLevelSystem |
| 6 | +import ru.endlesscode.mimic.level.ExpLevelConverter |
| 7 | + |
| 8 | +public class HeroesLevelSystem private constructor( |
| 9 | + player: Player, |
| 10 | + private val heroes: HeroesWrapper, |
| 11 | +) : BukkitLevelSystem(player) { |
| 12 | + |
| 13 | + public companion object { |
| 14 | + public const val ID: String = "heroes" |
| 15 | + } |
| 16 | + |
| 17 | + override val converter: ExpLevelConverter = HeroesExpLevelConverter(heroes) |
| 18 | + |
| 19 | + override var level: Int |
| 20 | + get() = hero.getHeroLevel(hero.heroClass) |
| 21 | + set(value) { |
| 22 | + val expDelta = converter.levelToExp(value) - converter.levelToExp(level) |
| 23 | + giveExp(expDelta) |
| 24 | + } |
| 25 | + |
| 26 | + override var totalExp: Double |
| 27 | + get() = hero.getExperience(hero.heroClass) |
| 28 | + set(value) { |
| 29 | + val expDelta = value - totalExp |
| 30 | + giveExp(expDelta) |
| 31 | + } |
| 32 | + |
| 33 | + override var exp: Double |
| 34 | + get() = totalExp - converter.levelToExp(level) |
| 35 | + set(value) { |
| 36 | + val expDelta = (value - exp).coerceIn(0.0, expToNextLevel) |
| 37 | + giveExp(expDelta) |
| 38 | + } |
| 39 | + |
| 40 | + override fun takeExp(expAmount: Double) { |
| 41 | + giveExp(-expAmount) |
| 42 | + } |
| 43 | + |
| 44 | + override fun giveExp(expAmount: Double) { |
| 45 | + val remainingExpAmount = converter.levelToExp(hero.heroClass.maxLevel) - totalExp |
| 46 | + hero.addExp(expAmount.coerceAtMost(remainingExpAmount), hero.heroClass, player.location) |
| 47 | + } |
| 48 | + |
| 49 | + private val hero: Hero |
| 50 | + get() = heroes.getHero(player) |
| 51 | + |
| 52 | + internal class Provider : BukkitLevelSystem.Provider(ID) { |
| 53 | + |
| 54 | + private val heroes = HeroesWrapper() |
| 55 | + |
| 56 | + override val isEnabled: Boolean |
| 57 | + get() = heroes.isEnabled |
| 58 | + |
| 59 | + override fun getSystem(player: Player): BukkitLevelSystem { |
| 60 | + return HeroesLevelSystem(player, heroes) |
| 61 | + } |
| 62 | + } |
| 63 | +} |
0 commit comments