Fixed boosters breaking on restart

This commit is contained in:
Auxilor
2022-07-07 23:15:22 +01:00
parent cb55870e99
commit 640bc97559
4 changed files with 34 additions and 15 deletions
@@ -5,7 +5,7 @@ package com.willfp.boosters
import com.willfp.boosters.boosters.ActivatedBooster
import com.willfp.boosters.boosters.Booster
import com.willfp.boosters.boosters.Boosters
import com.willfp.boosters.boosters.addActiveBooster
import com.willfp.boosters.boosters.activateBooster
import com.willfp.eco.core.data.ServerProfile
import com.willfp.eco.core.data.profile
import org.bukkit.Bukkit
@@ -59,17 +59,7 @@ fun Player.activateBooster(booster: Booster): Boolean {
)
}
ServerProfile.load().write(
booster.expiryTimeKey,
(booster.duration.toDouble() * 50) + System.currentTimeMillis()
)
ServerProfile.load().write(
booster.activeDataKey,
this.uniqueId.toString()
)
Bukkit.getServer().addActiveBooster(
Bukkit.getServer().activateBooster(
ActivatedBooster(booster, this.uniqueId)
)
@@ -3,6 +3,7 @@ package com.willfp.boosters
import com.willfp.boosters.boosters.Boosters
import com.willfp.boosters.boosters.activeBoosters
import com.willfp.boosters.boosters.expireBooster
import com.willfp.boosters.boosters.scanForBoosters
import com.willfp.boosters.commands.CommandBoosters
import com.willfp.boosters.config.BoostersYml
import com.willfp.eco.core.command.impl.PluginCommand
@@ -14,6 +15,7 @@ import com.willfp.eco.util.formatEco
import com.willfp.eco.util.savedDisplayName
import com.willfp.libreforge.LibReforgePlugin
import org.bukkit.Bukkit
import org.bukkit.command.PluginCommand
import org.bukkit.event.Listener
import kotlin.math.floor
@@ -47,6 +49,11 @@ class BoostersPlugin : LibReforgePlugin() {
}
}
}
// Just run it later enough
this.scheduler.runLater(3) {
Bukkit.getServer().scanForBoosters()
}
}
override fun loadListeners(): List<Listener> {
@@ -7,10 +7,23 @@ import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import org.bukkit.Server
import java.util.*
import kotlin.contracts.contract
private val boosters = mutableSetOf<ActivatedBooster>()
fun Server.addActiveBooster(activatedBooster: ActivatedBooster) {
fun Server.activateBooster(activatedBooster: ActivatedBooster) {
val (booster, uuid) = activatedBooster
ServerProfile.load().write(
booster.expiryTimeKey,
(booster.duration.toDouble() * 50) + System.currentTimeMillis()
)
ServerProfile.load().write(
booster.activeDataKey,
uuid.toString()
)
boosters += activatedBooster
}
@@ -26,9 +39,18 @@ fun Server.expireBooster(booster: Booster) {
)
}
fun Server.scanForBoosters() {
for (booster in Boosters.values()) {
val active = booster.active ?: continue
if (!boosters.contains(active)) {
boosters += active
}
}
}
data class ActivatedBooster(
val booster: Booster,
private val uuid: UUID
val uuid: UUID
) {
val player: OfflinePlayer
get() = Bukkit.getOfflinePlayer(uuid)