Olá, eu nunca usei JDA então por favor desconsidere qualquer erro obvio.
Eu estava vendo o vídeo do The Source Code sobre integrar o Discord com o minecraft, mais especificamente os cargos, eu consegui fazer a primeira parte com êxito que é a do sistema de verificação, mas quando chegou na parte de dar os cargos em si tive problema com erro então fui no git do Source e copiei exatamente o código que ele usou e continuei com erro. Tentei buscar ajuda em alguns outros lugares mas não consegui, espero que vocês possam me ajudar.
Minha classe para definir os cargos:
public class C07 implements Listener {
private Main plugin;
private HashMap<String, Role> permissionRoleMap;
public C07(Main main) {
this.plugin = main;
permissionRoleMap = new HashMap<>();
Bukkit.getScheduler().runTaskLater(plugin, this::loadRoles,40L);
Bukkit.getServer().getPluginManager().registerEvents(this,plugin);
}
private void loadRoles() {
plugin.getConfig().getConfigurationSection("Role-sync").getKeys(false).forEach(s -> {
String rolename = plugin.getConfig().getString("Role-sync."+s+".Name");
if(plugin.c06.guild.getRolesByName(rolename, false).size()>0){
plugin.console.sendMessage("§aCargo "+rolename+" foi carregado!");
String permission = plugin.getConfig().getString("Role-sync."+s+".Permission");
Role role = plugin.c06.guild.getRolesByName(rolename,false).get(0);
permissionRoleMap.put(permission,role);
}
});
}
@EventHandler
public void onQuit(PlayerQuitEvent e){
Player player = e.getPlayer();
if(plugin.c06.verifiedmembers.contains(player.getUniqueId())){
plugin.c06.verifiedmembers.remove(player.getUniqueId());
String discordid = plugin.playerData.getString("Data."+player.getUniqueId().toString());
Member member = plugin.c06.guild.getMemberById(discordid);
if(member==null)return;
List<Role> rolestoadd = new ArrayList<>();
List<Role> rolestoremove = new ArrayList<>();
List<Role> memberroles = member.getRoles();
permissionRoleMap.forEach((permission,role)->{
if(player.hasPermission(permission)){
if(!memberroles.contains(role))rolestoadd.add(role);
}else{
if(memberroles.contains(role))rolestoremove.add(role);
}
});
if(!rolestoadd.isEmpty()){
plugin.c06.guild.getController().addRolesToMember(member,rolestoadd).queue();
}
if(!rolestoremove.isEmpty()){
Bukkit.getScheduler().runTaskLater(plugin,()->plugin.c06.guild.getController().removeRolesFromMember(member,rolestoremove).queue(),20L);
}
}
}
}
Minha classe para o sisteme de vincular:
public class C06 extends ListenerAdapter implements CommandExecutor, Listener {
private Main plugin;
public HashMap<UUID,String>uuidCodeMap;
public HashMap<UUID,String>uuidIdMap;
public List<UUID>verifiedmembers;
public Guild guild;
public JDA jda;
public C06(Main main) {
this.plugin = main;
startBot();
uuidCodeMap = new HashMap<>();
uuidIdMap = new HashMap<>();
verifiedmembers = new ArrayList<>();
jda.addEventListener(this);
plugin.getServer().getPluginManager().registerEvents(this,plugin);
plugin.getCommand("vincular").setExecutor(this);
Bukkit.getScheduler().runTaskLater(plugin,()->guild = jda.getGuildById("602509228996952064"),100L);
}
private void startBot() {
try {
jda = new JDABuilder(AccountType.BOT).setToken("N").build();
} catch (LoginException e) {
e.printStackTrace();
}
}
@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
if(event.getAuthor().isBot()||event.getAuthor().isFake()||event.isWebhookMessage())return;
String[] args = event.getMessage().getContentRaw().split(" ");
if(args[0].equalsIgnoreCase("!vincular")){ //!link
if(event.getMember().getRoles().stream().filter(role -> role.getName().equals("Membro")).findAny().orElse(null) != null){
event.getChannel().sendMessage("Ops "+event.getAuthor().getAsMention()+", você já está verificado!").queue();
return;
}
if(uuidIdMap.values().contains(event.getAuthor().getId())){
event.getChannel().sendMessage("Ops "+event.getAuthor().getAsMention()+", você já possui um código gerado!").queue();
return;
}
if(args.length!=2){
event.getChannel().sendMessage("Ops você precisa especificar player!").queue();
return;
}
Player target = Bukkit.getPlayer(args[1]);
if(target==null){
event.getChannel().sendMessage("Ops jogador não esta online!").queue();
return;
}
String randomcode = new Random().nextInt(800000)+200000+"AA";
uuidCodeMap.put(target.getUniqueId(),randomcode);
uuidIdMap.put(target.getUniqueId(),event.getAuthor().getId());
event.getAuthor().openPrivateChannel().complete().sendMessage("Hey! Seu código de verificação foi gerado!\n" +
"Use esse comando no jogo: ``/vincular "+randomcode+"``").queue();
}
}
@EventHandler
public void onJoin(PlayerJoinEvent e){
if(plugin.playerData.contains("Data."+e.getPlayer().getUniqueId().toString())){
verifiedmembers.add(e.getPlayer().getUniqueId());
}
}
@EventHandler
public void onQuit(PlayerQuitEvent e){
verifiedmembers.remove(e.getPlayer().getUniqueId());
uuidCodeMap.remove(e.getPlayer().getUniqueId());
uuidIdMap.remove(e.getPlayer().getUniqueId());
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { // /verify randomcodeAA
if(!(sender instanceof Player)){
sender.sendMessage("§cApenas jogadores!");
return true;
}
Player player = (Player) sender;
if(plugin.playerData.contains("Data."+player.getUniqueId().toString())){
player.sendMessage("§cOps, você já está verificado!");
return true;
}
if(!uuidCodeMap.containsKey(player.getUniqueId())){
player.sendMessage("§cNot pending verification process!");
return true;
}
if(args.length!=1){
player.sendMessage("§cUse: /vincular <código>");
return true;
}
String actualcode = uuidCodeMap.get(player.getUniqueId());
if(!actualcode.equals(args[0])){
player.sendMessage("§cCódigo invalido! Por favor, tente novamente.");
return true;
}
String discordid = uuidIdMap.get(player.getUniqueId());
Member target = guild.getMemberById(discordid);
if(target==null){
uuidCodeMap.remove(player.getUniqueId());
uuidIdMap.remove(player.getUniqueId());
player.sendMessage("§cError! It seems that you left our Discord server!");
return true;
}
plugin.playerData.set("Data."+player.getUniqueId().toString(),discordid);
try {
plugin.playerData.save(plugin.data);
} catch (IOException e) {
e.printStackTrace();
}
uuidCodeMap.remove(player.getUniqueId());
uuidIdMap.remove(player.getUniqueId());
verifiedmembers.add(player.getUniqueId());
Role verifiedrole = guild.getRolesByName("Membro",false).get(0);
guild.getController().addSingleRoleToMember(target,verifiedrole).queue();
target.getUser().openPrivateChannel().complete().sendMessage(":white_check_mark: **|** Verification successfully, you have linked your account with Mc account: "+player.getName()).queue();
player.sendMessage("§aYou have been verified correctly! You linked your account with member: "+target.getUser().getName()+"#"+target.getUser().getDiscriminator());
return true;
}
}
Minha Main:
public class Main extends JavaPlugin implements Listener {
public ConsoleCommandSender console;
public FileConfiguration playerData;
public File data;
public C06 c06;
public C07 c07;
@Override
public void onEnable() {
console = Bukkit.getServer().getConsoleSender();
createConfig();
console.sendMessage("[Plugin] Plugin Ativado!");
c06 = new C06(this);
c07 = new C07(this);
}
private void createConfig() {
saveDefaultConfig();
data = new File(getDataFolder() + File.separator + "data.yml");
if (!data.exists()) {
console.sendMessage(org.bukkit.ChatColor.LIGHT_PURPLE + "[Plugin] Criando arquivo data.yml");
this.saveResource("data.yml", false);
}
playerData = new YamlConfiguration();
try {
playerData.load(data);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}
@Override
public void onDisable() {
c06.jda.shutdownNow();
console.sendMessage("[Plugin] Plugin desativado!");
}
}
O erro: http://prntscr.com/op7q19
*OBS: Desculpe a organização do tópico, ainda sou novo aqui.