mirror of https://github.com/Maxlego08/zKoth.git
200 lines
7.0 KiB
Java
200 lines
7.0 KiB
Java
package fr.maxlego08.koth.save;
|
|
|
|
import fr.maxlego08.koth.zcore.enums.Message;
|
|
import fr.maxlego08.koth.zcore.enums.MessageType;
|
|
import fr.maxlego08.koth.zcore.logger.Logger;
|
|
import fr.maxlego08.koth.zcore.utils.storage.Persist;
|
|
import fr.maxlego08.koth.zcore.utils.storage.Savable;
|
|
import fr.maxlego08.koth.zcore.utils.yaml.YamlUtils;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
* The MessageLoader class extends YamlUtils and implements Savable to manage message configurations.
|
|
* This class is responsible for loading and saving custom messages to a YAML file for a Bukkit plugin.
|
|
*/
|
|
public class MessageLoader extends YamlUtils implements Savable {
|
|
|
|
private final List<Message> loadedMessages = new ArrayList<>();
|
|
|
|
/**
|
|
* Constructor for MessageLoader.
|
|
*
|
|
* @param plugin The JavaPlugin instance associated with this loader.
|
|
*/
|
|
public MessageLoader(JavaPlugin plugin) {
|
|
super(plugin);
|
|
}
|
|
|
|
/**
|
|
* Saves messages to the configuration file.
|
|
*
|
|
* @param persist The persist instance used for saving the data.
|
|
*/
|
|
@Override
|
|
public void save(Persist persist) {
|
|
|
|
if (persist != null) return;
|
|
|
|
File file = new File(plugin.getDataFolder(), "messages.yml");
|
|
if (!file.exists()) {
|
|
try {
|
|
file.createNewFile();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
YamlConfiguration configuration = getConfig(file);
|
|
for (Message message : Message.values()) {
|
|
|
|
if (!message.isUse()) continue;
|
|
|
|
String path = "messages." + message.name().toLowerCase().replace("_", ".");
|
|
|
|
if (message.getType() != MessageType.TCHAT) {
|
|
configuration.set(path + ".type", message.getType().name());
|
|
}
|
|
if (message.getType().equals(MessageType.TCHAT) || message.getType().equals(MessageType.ACTION) || message.getType().equals(MessageType.CENTER)) {
|
|
|
|
if (message.isMessage()) {
|
|
configuration.set(path + ".messages", colorReverse(message.getMessages()));
|
|
} else {
|
|
configuration.set(path + ".message", colorReverse(message.getMessage()));
|
|
}
|
|
} else if (message.getType().equals(MessageType.TITLE)) {
|
|
|
|
configuration.set(path + ".title", colorReverse(message.getTitle()));
|
|
configuration.set(path + ".subtitle", colorReverse(message.getSubTitle()));
|
|
configuration.set(path + ".fadeInTime", message.getStart());
|
|
configuration.set(path + ".showTime", message.getTime());
|
|
configuration.set(path + ".fadeOutTime", message.getEnd());
|
|
}
|
|
}
|
|
|
|
try {
|
|
configuration.save(file);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Loads messages from the configuration file.
|
|
*
|
|
* @param persist The persist instance used for loading the data.
|
|
*/
|
|
@Override
|
|
public void load(Persist persist) {
|
|
|
|
File file = new File(plugin.getDataFolder(), "messages.yml");
|
|
if (!file.exists()) {
|
|
this.save(null);
|
|
return;
|
|
}
|
|
|
|
YamlConfiguration configuration = getConfig(file);
|
|
|
|
if (!configuration.contains("messages")) {
|
|
this.save(null);
|
|
return;
|
|
}
|
|
|
|
this.loadedMessages.clear();
|
|
|
|
for (String key : configuration.getConfigurationSection("messages.").getKeys(false)) {
|
|
loadMessage(configuration, "messages." + key);
|
|
}
|
|
|
|
boolean canSave = false;
|
|
for (Message message : Message.values()) {
|
|
|
|
if (!this.loadedMessages.contains(message) && message.isUse()) {
|
|
canSave = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Allows you to save new parameters
|
|
if (canSave) {
|
|
Logger.info("Save the message file, add new settings");
|
|
this.save(null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loads a single message from the given YAML configuration.
|
|
*
|
|
* @param configuration The YAML configuration to load the message from.
|
|
* @param key The key under which the message is stored.
|
|
*/
|
|
private void loadMessage(YamlConfiguration configuration, String key) {
|
|
try {
|
|
|
|
MessageType messageType = MessageType.valueOf(configuration.getString(key + ".type", "TCHAT").toUpperCase());
|
|
String keys = key.substring("messages.".length());
|
|
Message enumMessage = Message.valueOf(keys.toUpperCase().replace(".", "_"));
|
|
enumMessage.setType(messageType);
|
|
|
|
this.loadedMessages.add(enumMessage);
|
|
|
|
switch (messageType) {
|
|
case ACTION: {
|
|
String message = configuration.getString(key + ".message");
|
|
enumMessage.setMessage(color(message));
|
|
break;
|
|
}
|
|
case CENTER:
|
|
case TCHAT: {
|
|
if (configuration.contains(key + ".messages")) {
|
|
List<String> messages = configuration.getStringList(key + ".messages");
|
|
enumMessage.setMessages(color(messages));
|
|
enumMessage.setMessage(null);
|
|
} else {
|
|
String message = configuration.getString(key + ".message");
|
|
enumMessage.setMessage(color(message));
|
|
enumMessage.setMessages(new ArrayList<String>());
|
|
}
|
|
break;
|
|
}
|
|
case TITLE: {
|
|
String title = configuration.getString(key + ".title");
|
|
String subtitle = configuration.getString(key + ".subtitle");
|
|
int fadeInTime = configuration.getInt(key + ".fadeInTime");
|
|
int showTime = configuration.getInt(key + ".showTime");
|
|
int fadeOutTime = configuration.getInt(key + ".fadeOutTime");
|
|
Map<String, Object> titles = new HashMap<String, Object>();
|
|
titles.put("title", color(title));
|
|
titles.put("subtitle", color(subtitle));
|
|
titles.put("start", fadeInTime);
|
|
titles.put("time", showTime);
|
|
titles.put("end", fadeOutTime);
|
|
titles.put("isUse", true);
|
|
enumMessage.setTitles(titles);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
} catch (Exception ignored) {
|
|
}
|
|
|
|
if (configuration.isConfigurationSection(key + ".")) {
|
|
for (String newKey : configuration.getConfigurationSection(key + ".").getKeys(false)) {
|
|
loadMessage(configuration, key + "." + newKey);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|