9
0
mirror of https://github.com/Auxilor/EcoSkills.git synced 2026-01-03 22:26:30 +00:00

Added data runnables for optimisation and autosaving

This commit is contained in:
Auxilor
2021-08-23 23:14:16 +01:00
parent 070e924ad6
commit d2687ba612
7 changed files with 72 additions and 35 deletions

View File

@@ -5,10 +5,11 @@ import com.willfp.eco.core.command.impl.PluginCommand;
import com.willfp.eco.core.integrations.IntegrationLoader;
import com.willfp.ecoskills.commands.CommandEcoskills;
import com.willfp.ecoskills.commands.CommandSkills;
import com.willfp.ecoskills.data.DataAutosave;
import com.willfp.ecoskills.data.DataRunnable;
import com.willfp.ecoskills.data.DataListener;
import com.willfp.ecoskills.data.DataYml;
import com.willfp.ecoskills.data.EffectsYml;
import com.willfp.ecoskills.data.LeaderboardRunnable;
import com.willfp.ecoskills.effects.Effect;
import com.willfp.ecoskills.effects.Effects;
import com.willfp.ecoskills.skills.Skill;
@@ -66,7 +67,8 @@ public class EcoSkillsPlugin extends EcoPlugin {
this.getEventManager().registerListener(skill);
}
this.getScheduler().runAsyncTimer(new DataAutosave(this), 20000, 20000);
this.getScheduler().runTimer(new DataRunnable(this), 20000, 20000);
this.getScheduler().runTimer(new LeaderboardRunnable(this), 50, 2400);
}
@Override

View File

@@ -5,6 +5,7 @@ import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecoskills.EcoSkillsPlugin
import com.willfp.ecoskills.data.LeaderboardRunnable
import com.willfp.ecoskills.getTotalSkillLevel
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
@@ -32,23 +33,7 @@ class CommandTop(plugin: EcoPlugin) :
page = args[0].toIntOrNull() ?: 1
}
val plugin = plugin as EcoSkillsPlugin
val uuidStrings = plugin.dataYml.getSubsectionOrNull("player")?.getKeys(false) ?: ArrayList()
val uuids = uuidStrings.stream().map { s -> UUID.fromString(s) }.toList()
val temp = HashMap<OfflinePlayer, Int>()
val top = ArrayList<OfflinePlayer>()
for (uuid in uuids) {
val player = Bukkit.getOfflinePlayer(uuid)
temp[player] = 10000 - player.getTotalSkillLevel()
}
val temp2 = temp.toList().sortedBy { (_, value) -> value }.toMap()
for (entry in temp2) {
top.add(entry.key)
}
val top = LeaderboardRunnable.sortedLeaderboard
val maxPage = ceil(top.size / 10.0).toInt()
if (maxPage < page) {

View File

@@ -1,15 +0,0 @@
package com.willfp.ecoskills.data
import com.willfp.eco.core.EcoPlugin
import com.willfp.ecoskills.EcoSkillsPlugin
import org.bukkit.Bukkit
class DataAutosave (
private val plugin: EcoSkillsPlugin
) : Runnable {
override fun run() {
Bukkit.getLogger().info("Auto-Saving player data!")
plugin.dataYml.save()
Bukkit.getLogger().info("Saved data!")
}
}

View File

@@ -0,0 +1,21 @@
package com.willfp.ecoskills.data
import com.willfp.eco.core.EcoPlugin
import com.willfp.ecoskills.EcoSkillsPlugin
import com.willfp.ecoskills.PlayerHelper
import org.bukkit.Bukkit
class DataRunnable (
private val plugin: EcoSkillsPlugin
) : Runnable {
override fun run() {
if (plugin.configYml.getBool("log-autosaves")) {
Bukkit.getLogger().info("Auto-Saving player data!")
}
plugin.dataYml.save()
PlayerHelper.expMultiplierCache.clear()
if (plugin.configYml.getBool("log-autosaves")) {
Bukkit.getLogger().info("Saved data!")
}
}
}

View File

@@ -0,0 +1,41 @@
package com.willfp.ecoskills.data
import com.willfp.eco.core.EcoPlugin
import com.willfp.ecoskills.EcoSkillsPlugin
import com.willfp.ecoskills.PlayerHelper
import com.willfp.ecoskills.getTotalSkillLevel
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
class LeaderboardRunnable (
private val plugin: EcoSkillsPlugin
) : Runnable {
override fun run() {
val uuidStrings = plugin.dataYml.getSubsectionOrNull("player")?.getKeys(false) ?: ArrayList()
val uuids = uuidStrings.stream().map { s -> UUID.fromString(s) }.toList()
val temp = HashMap<OfflinePlayer, Int>()
val top = ArrayList<OfflinePlayer>()
for (uuid in uuids) {
val player = Bukkit.getOfflinePlayer(uuid)
temp[player] = 10000 - player.getTotalSkillLevel()
}
val temp2 = temp.toList().sortedBy { (_, value) -> value }.toMap()
for (entry in temp2) {
top.add(entry.key)
}
sortedLeaderboard.clear()
sortedLeaderboard.addAll(top)
}
companion object {
val sortedLeaderboard = ArrayList<OfflinePlayer>()
}
}

View File

@@ -302,4 +302,6 @@ damage-indicators:
commands:
top:
# If displayname (including rank) should be used
use-display-name: true
use-display-name: true
log-autosaves: true # If auto-save messages should be sent to console

View File

@@ -166,6 +166,7 @@ spelunking:
- "deepslate_emerald_ore"
- "diamond_ore"
- "deepslate_diamond_ore"
- "ancient_debris"
# Chance is as a percentage; if the chance for a player is over 100 then it will always be double drops
# with a chance to get triple drops. Same goes if above 200, but then it will always be triple with a chance