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:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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!")
|
||||
}
|
||||
}
|
||||
@@ -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!")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>()
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user