Skip to content

Commit 72163de

Browse files
authored
Merge pull request #12 from EndlessCodeGroup/feature/heroes
Heroes support
2 parents eac5257 + 4a1f5f5 commit 72163de

10 files changed

Lines changed: 159 additions & 1 deletion

File tree

buildSrc/src/main/kotlin/dependencies.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ object rpgplugins {
2323
const val mmoCore = "net.Indyuce:MMOCore:1.6.2"
2424
const val mmoLib = "net.Indyuce:MMOLib:1.7.3"
2525
const val mmoItems = "net.Indyuce:MMOItems:6.5"
26+
const val heroes = "com.herocraftonline.heroes:Heroes:1.9.6-SNAPSHOT:stripped"
2627
}
2728

2829
object acf {

mimic-bukkit/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ You can find code of all implementations [here](src/main/kotlin/impl).
3838
- **[SkillAPI]**
3939
- **[BattleLevels]**
4040
- **[MMOCore]**
41+
- **[Heroes]**
4142

4243
#### [Class Systems][BukkitClassSystem.Provider]
4344

4445
- **Permissions-based** _(Default)_ - give permission `mimic.class.[class_name]` to assign class to player
4546
- **[SkillAPI]**
4647
- **[MMOCore]**
48+
- **[Heroes]**
4749

4850
#### [Items Registries][BukkitItemsRegistry]
4951

@@ -64,6 +66,7 @@ If you use item ID without namespace it will search over all registries.
6466
[customitems]: https://www.spigotmc.org/resources/63848/
6567
[mmocore]: https://www.spigotmc.org/resources/70575/
6668
[mmoitems]: https://www.spigotmc.org/resources/39267/
69+
[heroes]: https://www.spigotmc.org/resources/24734/
6770

6871
[mimic-bukkit-api]: ../mimic-bukkit-api
6972

mimic-bukkit/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ bukkit {
2828
repositories {
2929
maven(url = "https://gitlab.com/endlesscodegroup/mvn-repo/raw/master/")
3030
maven(url = "https://mvn.lumine.io/repository/maven-public/")
31+
maven(url = "http://nexus.hc.to/content/repositories/pub_snapshots/")
3132
aikar()
3233
codemc()
3334
flatDir { dir("libs") }
@@ -45,6 +46,7 @@ dependencies {
4546
compileOnly(rpgplugins.mmoCore)
4647
compileOnly(rpgplugins.mmoLib)
4748
compileOnly(rpgplugins.mmoItems) { isTransitive = false }
49+
compileOnly(rpgplugins.heroes) { isTransitive = false }
4850

4951
// From libs/ directory
5052
compileOnly(":CustomItemsAPI")

mimic-bukkit/src/main/kotlin/Mimic.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import ru.endlesscode.mimic.command.LevelSystemSubcommand
3232
import ru.endlesscode.mimic.command.MainCommand
3333
import ru.endlesscode.mimic.impl.battlelevels.BattleLevelsLevelSystem
3434
import ru.endlesscode.mimic.impl.customitems.CustomItemsRegistry
35+
import ru.endlesscode.mimic.impl.heroes.HeroesClassSystem
36+
import ru.endlesscode.mimic.impl.heroes.HeroesLevelSystem
3537
import ru.endlesscode.mimic.impl.mimic.MimicItemsRegistry
3638
import ru.endlesscode.mimic.impl.mimic.PermissionsClassSystem
3739
import ru.endlesscode.mimic.impl.mmocore.MmoCoreClassSystem
@@ -71,11 +73,13 @@ public class Mimic : JavaPlugin() {
7173
hookLevels(SkillApiLevelSystem::Provider, Normal, "com.sucy.skill.SkillAPI")
7274
hookLevels(BattleLevelsLevelSystem::Provider, Normal, "me.robin.battlelevels.api.BattleLevelsAPI")
7375
hookLevels(MmoCoreLevelSystem::Provider, Normal, "net.Indyuce.mmocore.MMOCore")
76+
hookLevels(HeroesLevelSystem::Provider, Normal, "com.herocraftonline.heroes.Heroes")
7477

7578
// ClassSystem
7679
hookClasses(PermissionsClassSystem::Provider, Lowest)
7780
hookClasses(SkillApiClassSystem::Provider, Normal, "com.sucy.skill.SkillAPI")
7881
hookClasses(MmoCoreClassSystem::Provider, Normal, "net.Indyuce.mmocore.MMOCore")
82+
hookClasses(HeroesClassSystem::Provider, Normal, "com.herocraftonline.heroes.Heroes")
7983

8084
// ItemsRegistry
8185
hookItems(::MinecraftItemsRegistry, Lowest)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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.classes.BukkitClassSystem
6+
7+
public class HeroesClassSystem private constructor(
8+
player: Player,
9+
private val heroes: HeroesWrapper,
10+
) : BukkitClassSystem(player) {
11+
12+
public companion object {
13+
public const val ID: String = "heroes"
14+
}
15+
16+
override val classes: List<String>
17+
get() {
18+
val hero = hero
19+
return (sequenceOf(
20+
hero.heroClass?.name,
21+
hero.secondaryClass?.name,
22+
hero.raceClass?.name,
23+
) + hero.masteredClasses)
24+
.filterNotNull()
25+
.distinct()
26+
.toList()
27+
}
28+
29+
override val primaryClass: String?
30+
get() = hero.heroClass?.name
31+
32+
private val hero: Hero
33+
get() = heroes.getHero(player)
34+
35+
internal class Provider : BukkitClassSystem.Provider(ID) {
36+
37+
private val heroes = HeroesWrapper()
38+
39+
override val isEnabled: Boolean
40+
get() = heroes.isEnabled
41+
42+
override fun getSystem(player: Player): BukkitClassSystem {
43+
return HeroesClassSystem(player, heroes)
44+
}
45+
}
46+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ru.endlesscode.mimic.impl.heroes
2+
3+
import ru.endlesscode.mimic.level.ExpLevelConverter
4+
5+
public class HeroesExpLevelConverter internal constructor(
6+
private val heroes: HeroesWrapper,
7+
) : ExpLevelConverter {
8+
9+
override fun expToFullLevel(exp: Double): Int = heroes.getLevel(exp)
10+
11+
override fun expToLevel(exp: Double): Double {
12+
if (exp < 0) return 0.0
13+
14+
val fullLevel = expToFullLevel(exp)
15+
val expDelta = exp - levelToExp(fullLevel)
16+
return fullLevel + expDelta / getExpToReachNextLevel(fullLevel)
17+
}
18+
19+
override fun levelToExp(level: Int): Double = heroes.getTotalExp(level).toDouble()
20+
21+
override fun getExpToReachLevel(level: Int): Double = heroes.getExp(level).toDouble()
22+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ru.endlesscode.mimic.impl.heroes
2+
3+
import com.herocraftonline.heroes.Heroes
4+
import com.herocraftonline.heroes.characters.Hero
5+
import com.herocraftonline.heroes.util.Properties
6+
import org.bukkit.entity.Player
7+
8+
internal class HeroesWrapper {
9+
10+
val isEnabled: Boolean get() = Heroes.getInstance().isEnabled
11+
12+
fun getHero(player: Player): Hero = Heroes.getInstance().characterManager.getHero(player)
13+
fun getExp(level: Int): Int = Properties.getExp(level)
14+
fun getTotalExp(level: Int): Int = Properties.getTotalExp(level)
15+
fun getLevel(exp: Double): Int = Properties.getLevel(exp)
16+
}

mimic-bukkit/src/main/kotlin/impl/mimic/PermissionsClassSystem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import ru.endlesscode.mimic.classes.BukkitClassSystem
3333
public class PermissionsClassSystem private constructor(player: Player) : BukkitClassSystem(player) {
3434

3535
public companion object {
36-
public const val ID: String = "premissions"
36+
public const val ID: String = "permissions"
3737
public const val PERMISSION_PREFIX: String = "mimic.class."
3838
}
3939

mimic-bukkit/src/main/resources/plugin.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ loadbefore:
44
- CustomItems
55
- MMOCore
66
- MMOItems
7+
- Heroes

0 commit comments

Comments
 (0)