GoldenSunsetMine
Пользователь
- Сообщения
- 121
- Решения
- 2
Мне нужно перезагрузить кастомный конфиг после того, как игрок сделал привязку аккаунта к дискорду. Сейчас такая проблема, что когда игрок привязал аккаунт и аккаунт сохранился в links.yml, то чтобы этот аккаунт начал отображаться в дискорде, нужно перезагрузить сервер. Очень много способов попробовал перезагрузки и ни один не помог.
Java:
package com.bodya.sentinel.DsCommands;
import com.bodya.sentinel.Main;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
import net.dv8tion.jda.api.interactions.modals.Modal;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.List;
public class LinkTable extends ListenerAdapter implements Listener {
private JDA jda;
private FileConfiguration linksConfig;
private File linksFile;
public LinkTable(JDA jda) {
this.jda = jda;
this.linksFile = new File(Main.getInstance().getDataFolder(), "links.yml");
this.linksConfig = YamlConfiguration.loadConfiguration(linksFile);
if (!linksFile.exists()) {
try {
linksFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (!event.getView().getTitle().equals("Привязка аккаунта")) return;
event.setCancelled(true);
handleInventoryClick(event);
}
private void handleInventoryClick(InventoryClickEvent event) {
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || clickedItem.getType() == Material.AIR) return;
ItemMeta itemMeta = clickedItem.getItemMeta();
if (itemMeta == null || !itemMeta.hasDisplayName() || !itemMeta.hasLore()) return;
Player player = (Player) event.getWhoClicked();
int slot = event.getRawSlot();
if (slot == 21) {
confirmLink(player, itemMeta);
} else if (slot == 23) {
cancelLink(player);
}
}
private void confirmLink(Player player, ItemMeta itemMeta) {
List<String> lore = itemMeta.getLore();
String discordIdLine = lore.get(lore.size() - 1);
String[] parts = discordIdLine.split(": ");
if (parts.length == 2) {
String discordId = parts[1].trim();
saveLink(discordId, player.getName(), player.getUniqueId());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&3[Sentinel] &fВы успешно &aпривязали &fаккаунт!"));
}
player.closeInventory();
}
private void saveLink(String discordId, String nickname, UUID uuid) {
String path = "links." + discordId;
List<String> accounts = linksConfig.getStringList(path);
accounts.add(nickname + ":" + uuid.toString());
linksConfig.set(path, accounts);
saveConfig();
}
private void saveConfig() {
try {
linksConfig.save(linksFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}