Add system to track keys given and related command for players
Introduces `KeyStorage` for handling keys and their persistence. Added `Key` subcommand to allow players to receive their keys. Updated configuration files and messages to support the new feature.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package com.alttd.playerutils.config;
|
||||
|
||||
import com.alttd.playerutils.util.Logger;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class KeyStorage extends AbstractConfig {
|
||||
|
||||
static KeyStorage config;
|
||||
private final Logger logger;
|
||||
|
||||
public KeyStorage(Logger logger) {
|
||||
super(
|
||||
new File(File.separator
|
||||
+ "mnt" + File.separator
|
||||
+ "configs" + File.separator
|
||||
+ "PlayerUtils"),
|
||||
"messages.yml", logger);
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public static void reload(Logger logger) {
|
||||
logger.info("Reloading key storage");
|
||||
config = new KeyStorage(logger);
|
||||
config.readConfig(KeyStorage.class, null);
|
||||
}
|
||||
|
||||
public static class STORAGE {
|
||||
private static final String prefix = "storage.";
|
||||
|
||||
public static HashMap<String, Object2IntOpenHashMap<UUID>> KEYS = new HashMap<>();
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static void load() {
|
||||
save();
|
||||
KEYS.clear();
|
||||
for (String crate : Config.KEY.CRATES.keySet()) {
|
||||
Object2IntOpenHashMap<UUID> count = new Object2IntOpenHashMap<>();
|
||||
ConfigurationSection configurationSection = config.getConfigurationSection(prefix + crate);
|
||||
if (configurationSection == null) {
|
||||
config.logger.info(String.format("No section yet for crate %s", crate));
|
||||
continue;
|
||||
}
|
||||
List<UUID> uuids = configurationSection.getKeys(false).stream().map(UUID::fromString).toList();
|
||||
if (uuids.isEmpty()) {
|
||||
config.logger.info(String.format("No keys yet for crate %s", crate));
|
||||
continue;
|
||||
}
|
||||
for (UUID uuid : uuids) {
|
||||
int keys = config.getInt(prefix, String.format("%s.%s", crate, uuid.toString()), 0);
|
||||
count.put(uuid, keys);
|
||||
}
|
||||
KEYS.put(crate, count);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized static void save() {
|
||||
config.logger.info("Saving KeyStorage");
|
||||
KEYS.keySet()
|
||||
.forEach(crate -> KEYS.get(crate)
|
||||
.forEach((uuid, keys) -> config.set(prefix + crate, uuid.toString(), keys)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user