Pica-Pau Postado Janeiro 2, 2018 Denunciar Compartilhar Postado Janeiro 2, 2018 (editado) Não vou enrolar muito, direto ao ponto. Esse é um plugin de rankup antigo que eu fiz. Eu nem sei como o sistema de funciona direito, mas se eu revisar um pouco o código eu começo a entender e atualizo eles. Sistema de licenças integrado no plugin: Esse plugin tem uma classe integrada nela. Se você quiser pode pegar e usar como base pra seu plugin, mas lembre-se. Ele é gratuito. Não precisa colocar nenhuma licença. Só colocar na pasta e ligar o servidor. Dependencias: VaultLegendChat Comandos: /rankup - Upar rank /ranktop - Lista de jogadores com ranks elevados /rankreset - Resetar seu rank /rankreload - Recarregar a configuração e ranks /ranks - Ver todos os ranks disponíveis (VERDE = seu rank atual) Config: #################################################### # +----------------------------------------------+ # # | NyRankUP | # # | Plugin de RankUP by DevNatan | # # | * Suporte: https://nyeyes.tk/suporte/'>https://nyeyes.tk/suporte/ * | # # | | # # - Versões BETA podem conter bugs. Fique atento - # # +----------------------------------------------+ # #################################################### # Prefixo que irá aparecer em todas as mensagens. prefixo: '&6[NyRankUP] &8&l| &7' # Comando que será usado para subir de rank. comando: '/rankup' # Rank inicial do jogador ao entrar no servidor. # Você deve colocar a posição do rank. rank-inicial: 1 # Tempo de auto-save para salvar todos os rank uppers (em segundos). auto-save: 600 # Enviar uma mensagem a todos os players quando um jogador upar seu rank. broadcast: true # Simbolo da economia. # Coloque 'default' para usar o padrão do plugin de economia. simbolo: default # O Título do menu da lista de ranks disponíveis. menuTitulo: '&cNyRankUP &8» &4Ranks' # Caso não saiba seus dados, acesse: https://nyeyes.tk/suporte # Informações da licença. Usúario do site, senha e licença. licenca: usuario: '<seu-usuario>' senha: '<sua-senha>' licenca: '<sua-licenca>' # Informações do banco de dados. # Para usar MySQL (phpMyAdmin), habilite a opção <database.use> database: usar: false host: localhost porta: 3306 usuario: root senha: <senha> nome: 'nyrankup' Mensagens: #################################################### # +----------------------------------------------+ # # | NyRankUP | # # | Plugin de RankUP by DevNatan | # # | * Suporte: https://nyeyes.tk/suporte/'>https://nyeyes.tk/suporte/ * | # # | | # # - Versões BETA podem conter bugs. Fique atento - # # - Placeholders: https://nyeyes.tk/nyrankup - # # +----------------------------------------------+ # #################################################### noRankUpFirst: '&cVocê não pode resetar seu rank, ainda está no primeiro!' noRankUpLast: '&cVocê não pode upar, está no último rank! &cResete seu rank usando &e/rankreset. &cO Dinheiro gasto com os ranks upados não serão devolvidos' noPermission: '&cVocê não tem permissão para fazer isto!' noEconomy: '&cNão foi possível encontrar uma fonte de economia. &cContate um administrador!' noMoney: '&cVocê não tem dinheiro suficiente para upar de rank. &cConsiga mais &e{0} &cpara upar!' reloaded: '&aRanks, mensagens e configuração recarregados!' rankListHeader: '&eRanks:' rankListFormat: ' &8» &7(&f{0}&7) &f{1} &7{2}' rankListFormatRanked: ' &8» &7(&a{0}&7) &a{1} &7{2}' rankTopHeader: '&eTop 10 Ranks:' rankTopFormat: ' &8» &7(&f{0}&7) &f{1} &7{2}' rankTopFormatRanked: ' &8» &7(&a{0}&7) &a{1} &7{2}' rankedUp: '&aVocê subiu para o rank &6{0}&a!' rankedUpBroadcast: '&8» &e{0} &7subiu para o rank &6{1}&7!' Ranks: #################################################### # +----------------------------------------------+ # # | NyRankUP | # # | Plugin de RankUP by DevNatan | # # | * Suporte: https://nyeyes.tk/suporte/'>https://nyeyes.tk/suporte/ * | # # | | # # - Versões BETA podem conter bugs. Fique atento - # # - Placeholders: https://nyeyes.tk/nyrankup - # # +----------------------------------------------+ # #################################################### easy: posicao: 1 nome: Easy preco: 0 prefixo: '&a[Easy]' comandos: - '/say &a%player% &7subiu para o rank &a%rank-prefixo%' menu: slot: 0 icone: '276' display: '&e» &f%rank-posicao%. &7%rank-nome%' lore: - '&aLinha 1' - '&bLinha 2' - '&cLinha 3' medium: posicao: 2 nome: Medium preco: 5000.0 prefixo: '&b[Medium]' comandos: - '/say &a%player% &7subiu para o rank &a%rank-prefixo%' menu: slot: 1 icone: '277' display: '&e» &f%rank-posicao%. &7%rank-nome%' lore: - '&aLinha 1' - '&bLinha 2' - '&cLinha 3' hard: posicao: 3 nome: Hard preco: 10000.0 prefixo: '&c[Hard]' comandos: - '/say &a%player% &7subiu para o rank &a%rank-prefixo%' menu: slot: 2 icone: '278' display: '&e» &f%rank-posicao%. &7%rank-nome%' lore: - '&aLinha 1' - '&bLinha 2' - '&cLinha 3' Imagens: Link 1 Link 2 Link 3 Link 4 Link 5 Link 6 Link 7 Link 8 Link 9 Link 10 API: NyRankAPI api = NyRankUP.getAPI(); package tk.nyeyes.projetos.nyrankup; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import tk.nyeyes.projetos.nyrankup.objects.Rank; import tk.nyeyes.projetos.nyrankup.objects.RankUpper; import tk.nyeyes.projetos.nyrankup.system.Manager; public class NyRankAPI { private Manager m; private NyRankAPI(Manager m) { this.m = m; } /** * Retorna todos os ranks existentes em uma lista. * @return ArrayList<Rank> */ public List<Rank> getRanks() { return m.getRanks(); } /** * Obter um Rank através de sua posição. * @param paramPosition = posição do rank. * @return Rank */ public Rank getRank(int paramPosition) { return m.getRank(paramPosition); } /** * Obter um Rank através de seu nome. * @param paramName = nome do rank. * @return Rank */ public Rank getRank(String paramName) { return m.getRank(paramName); } /** * Obter um Rank através de seu prefixo. * @param paramPrefix = prefixo do rank * @return Rank */ public Rank getRankByPrefix(String paramPrefix) { return m.getRankByPrefix(paramPrefix); } public Rank getDefaultRank() { return m.getRank(1); } /** * Retorna todos os RankUppers existentes em uma lista. * @return ArrayList<RankUpper> */ public List<RankUpper> getRankUppers() { return m.getRankUppers(); } /** * Obter um RankUpper através de sua UUID. * @param paramUuid = uuid do jogador * @return RankUpper */ public RankUpper getRankUpper(UUID paramUuid) { return m.getPlayerRankByUuid(paramUuid); } /** * Obter um RankUpper através da interface Player. * @param paramPlayer = interface Player * @return RankUpper */ public RankUpper getRankUpperByPlayer(Player paramPlayer) { return m.getPlayerRankByPlayer(paramPlayer); } /** * Obter um RankUpper através da interface OfflinePlayer. * @param paramOfflinePlayer = interface OfflinePlayer * @return RankUpper */ public RankUpper getRankUpperByOfflinePlayer(OfflinePlayer paramOfflinePlayer) { return m.getPlayerRankByOfflinePlayer(paramOfflinePlayer); } /** * Obter um RankUpper através do seu nome. * @param paramName = nome do jogador. * @return RankUpper * @deprecated O Nome pode estar em Lowercase/Uppercase que será * detectado da mesma forma. */ @Deprecated public RankUpper getRankUpperByName(String paramName) { return m.getPlayerRankByName(paramName); } /** * Retorna o próximo rank do jogador. * @param paramUuid = UUID do jogador. * @return Rank */ public Rank getNextRank(UUID paramUuid) { RankUpper ru = getRankUpper(paramUuid); for(Rank r : getRanks()) { if(Integer.valueOf(ru.getRank().getPosition() + 1).equals(r.getPosition())) { return r; } } return ru.getRank(); } /** * Retorna o próximo rank do jogador. * @param paramUuid = UUID do jogador. * @return Rank */ public Rank getNextRank(Player paramPlayer) { return getNextRank(paramPlayer.getUniqueId()); } /** * Retorna o próximo rank do jogador. * @param paramUuid = interface OfflinePlayer * @return Rank */ public Rank getNextRank(OfflinePlayer paramOfflinePlayer) { return getNextRank(paramOfflinePlayer.getUniqueId()); } /** * Retorna o próximo rank do jogador. * @param paramUuid = nome do jogador. * @return Rank * @deprecated O Nome pode estar em Lowercase/Uppercase que será * detectado da mesma forma. */ @Deprecated public Rank getNextRank(String paramName) { return getNextRank(Bukkit.getOfflinePlayer(paramName).getUniqueId()); } /** * Verifica se o Rank 1 vem anteriormente do Rank 2. * @param paramRank1 = rank 1 * @param paramRank2 = rank 2 * @return boolean */ public boolean isBefore(Rank paramRank1, Rank paramRank2) { return paramRank1.getPosition() <= paramRank2.getPosition(); } /** * Verifica se o Rank 1 vem depois do Rank 2. * @param paramRank1 = rank 1 * @param paramRank2 = rank 2 * @return boolean */ public boolean isAfter(Rank paramRank1, Rank paramRank2) { return paramRank1.getPosition() > paramRank2.getPosition(); } /** * Upar um jogador para o próximo Rank. * Se o jogador estiver no último rank, não irá subir. * @param paramUuid = UUID do jogador */ public void upgradeRank(UUID paramUuid) { RankUpper ru = getRankUpper(paramUuid); if(ru.getRank().getPosition() < getRanks().size()) { ru.setRank(getRank(ru.getRank().getPosition() + 1)); } } /** * Upar um jogador para o próximo Rank. * Se o jogador estiver no último rank, não irá subir. * @param paramPlayer = interface Player */ public void upgradeRank(Player paramPlayer) { upgradeRank(paramPlayer.getUniqueId()); } /** * Upar um jogador para o próximo Rank. * Se o jogador estiver no último rank, não irá subir. * @param paramOfflinePlayer = interface OfflinePlayer */ public void upgradeRank(OfflinePlayer paramOfflinePlayer) { upgradeRank(paramOfflinePlayer.getUniqueId()); } /** * Upar um jogador para o próximo Rank. * Se o jogador estiver no último rank, não irá subir. * @param paramName = nome do jogador * @deprecated O Nome pode estar em Lowercase/Uppercase que será * detectado da mesma forma. */ @Deprecated public void upgradeRank(String paramName) { upgradeRank(Bukkit.getOfflinePlayer(paramName)); } /** * Rebaixa um jogador para o Rank anterior. * Se o jogador estiver no primeiro rank, não irá rebaixar. * @param paramUuid = UUID do jogador. */ public void downgradeRank(UUID paramUuid) { RankUpper ru = getRankUpper(paramUuid); if(ru.getRank().getPosition() > getDefaultRank().getPosition()) { ru.setRank(getRank(ru.getRank().getPosition() - 1)); } } /** * Rebaixa um jogador para o Rank anterior. * Se o jogador estiver no primeiro rank, não irá rebaixar. * @param paramPlayer = interface Player */ public void downgradeRank(Player paramPlayer) { downgradeRank(paramPlayer.getUniqueId()); } /** * Rebaixa um jogador para o Rank anterior. * Se o jogador estiver no primeiro rank, não irá rebaixar. * @param paramOfflinePlayer = interface OfflinePlayer */ public void downgradeRank(OfflinePlayer paramOfflinePlayer) { downgradeRank(paramOfflinePlayer.getUniqueId()); } /** * Rebaixa um jogador para o Rank anterior. * Se o jogador estiver no primeiro rank, não irá rebaixar. * @param paramName = nome do jogador * @deprecated O Nome pode estar em Lowercase/Uppercase que será * detectado da mesma forma. */ @Deprecated public void downgradeRank(String paramName) { downgradeRank(Bukkit.getOfflinePlayer(paramName).getUniqueId()); } /** * Organiza todos os RankUppers em uma lista e os organiza * de acordo com a posição do seu rank, ordem descrecente. * @return List<RankUpper> */ public List<RankUpper> getRankUpperTop() { List<RankUpper> rankUppers = getRankUppers(); Collections.sort(rankUppers, new Comparator<RankUpper>() { @Override public int compare(RankUpper ru1, RankUpper ru2) { return ru2.getRank().getPosition() - ru1.getRank().getPosition(); } }); return rankUppers; } /** * Salva os dados de todos os ranks. * Envia suas informações para o arquivo FLAT, * e o mesmo o processa. Adiciona ou atualiza. */ public void saveRanks() { m.saveRanks(); } /** * Salva os dados de um RankUpper. * Envia suas informações para o banco de dados, * e o mesmo o processa. Adiciona ou atualiza. * @param paramRankUpper = classe RankUpper */ public void save(RankUpper paramRankUpper) { m.save(paramRankUpper); } /** * Salva todos os Ranks e RankUppers. * Envia as informações salvas em uma lista estática, * para o banco de dados, e o mesmo o processa. */ public void save() { m.save(); } } Lincença Integrada: package tk.nyeyes.projetos.nyrankup; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; /** * * © NyEyes, 2017. Todos os direitos reservados * * @since 2017 * @version 2.0 * @author DevNatan * * API para verificação de e consulta dos dados de uma licença. * */ public final class NyEyes { private final String U = "https://licenca.nyeyes.tk/"; private Request r = new Request(U); private Criptografia c = new Criptografia(); /** * Verifica se o usúario é autenticável. * @param a = login do usúario. * @return boolean */ public boolean a(String a) { r.b("usuario=" + a); r.r(); return Boolean.valueOf((c.a(r.c).length() <= 0 ? "false" : "true")); } /** * Verifica se o usúario é autenticável. * @param a = login do usúario. * @param b = senha do usúario. * @return boolean * */ public boolean a(String a, String b) { r.b("usuario=" + a + "&senha=" + b); r.r(); return Boolean.valueOf((c.a(r.c).length() <= 0 ? "false" : "true")); } /** * Verifica se o usúario é autenticável e se a licença é válida. * @param a = o login do usúario. * @param b = a senha do usúario. * @param c = o código da licenca. * @return boolean */ public boolean a(String a, String b, String c) { r.b("usuario=" + a + "&senha=" + b + "&licenca=" + c); r.r(); return Boolean.valueOf((this.c.a(r.c).length() <= 0 ? "false" : "true")); } /** * Verifica se a licença é valida para o IP. * @param a = ip do servidor. * @param b = código da licença. * @return boolean */ public boolean c(String a, String b) { r.b("ip=" + a + "&licenca=" + b); r.r(); return Boolean.valueOf((this.c.a(r.c).length() <= 0 ? "false" : "true")); } /** * Verifica se a licença com o plugin é válida para o IP. * @param a = ip do servidor. * @param b = código da licença. * @param c = nome do plugin. * @return boolean */ public boolean c(String a, String b, String c) { r.b("ip=" + a + "&licenca=" + b + "&plugin=" + c); r.r(); return Boolean.valueOf((this.c.a(r.c).length() <= 0 ? "false" : "true")); } final class Plugin { private int id; private String nome; private String versao; private String autor; private String download; private String preco; public int getId() { return id; } public String getNome() { return nome; } public String getVersao() { return versao; } public String getAutor() { return autor; } public String getDownload() { return "https://data.nyeyes.tk/plugins/" + download; } public String getPreco() { return preco; } public void setId(int id) { this.id = id; } public void setNome(String nome) { this.nome = nome; } public void setVersao(String versao) { this.versao = versao; } public void setAutor(String autor) { this.autor = autor; } public void setDownload(String download) { this.download = download; } public void setPreco(String preco) { this.preco = preco; } } final class Request { private final String a; private String b; private String c; public Request(String a) { this.a = a; } public Request(String a, String b) { this.a = a; this.b = b; } public String a() { return a; } public String b() { return b; } public String c() { return c; } public void b(String b) { this.b = b; } public void c(String c) { this.c = c; } public void r() { HttpURLConnection connection = null; try { URL url = new URL(a); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", Integer.toString(b.getBytes().length)); connection.setRequestProperty("Content-Language", "pt-BR"); connection.setUseCaches(false); connection.setDoOutput(true); DataOutputStream wr = new DataOutputStream ( connection.getOutputStream()); wr.writeBytes(b); wr.close(); InputStream is = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(is)); StringBuffer response = new StringBuffer(); String line; while ((line = rd.readLine()) != null) { response.append(line); response.append('\r'); } rd.close(); is.close(); c = response.toString(); } catch (Exception e) { System.err.println("Falha na conexão: " + e.getMessage()); } finally { if (connection != null) { connection.disconnect(); } } } } final class Criptografia { public String a(final String a) { if(a == null) throw new NullPointerException("Falha ao finalizar método. String não pode ser nula!"); try { return new String(new Criptografia().decrypt(a), StandardCharsets.UTF_8); } catch (Exception e) { e.printStackTrace(); } return null; } private String iv = "fedcba9876543210"; private IvParameterSpec ivspec; private SecretKeySpec keyspec; private Cipher cipher; private String SecretKey = "0123456789abcdef"; public Criptografia() { ivspec = new IvParameterSpec(iv.getBytes()); keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES"); try { cipher = Cipher.getInstance("AES/CBC/NoPadding"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } public byte[] decrypt(String code) throws Exception { if(code == null || code.length() == 0) throw new Exception("String vazia."); byte[] decrypted = null; try { cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); decrypted = cipher.doFinal(hexToBytes(code)); } catch (Exception e) { throw new Exception(e.getMessage()); } return decrypted; } private byte[] hexToBytes(String str) { if (str == null) { return null; } else if (str.length() < 2) { return null; } else { int len = str.length() / 2; byte[] buffer = new byte[len]; for (int i = 0; i < len; i++) { buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2),16); } return buffer; } } } } DOWNLOAD API maior que minha bola esquerda Editado Janeiro 2, 2018 por Pica-Pau 3 Link para o comentário Compartilhar em outros sites More sharing options...
Atlvntis. Postado Janeiro 2, 2018 Denunciar Compartilhar Postado Janeiro 2, 2018 Coloca um spoiler nessa API ai menino !!!! Parece estar ótimo, parabéns pelo plugin rsrs' Link para o comentário Compartilhar em outros sites More sharing options...
Pica-Pau Postado Janeiro 2, 2018 Autor Denunciar Compartilhar Postado Janeiro 2, 2018 Coloca um spoiler nessas configs ai menino !!!! Parece estar ótimo, parabéns pelo plugin rsrs' Esqueci vou colocar kkk Link para o comentário Compartilhar em outros sites More sharing options...
zDarkFG Postado Janeiro 2, 2018 Denunciar Compartilhar Postado Janeiro 2, 2018 Achei top, parabéns men principalmente esse rankreset Link para o comentário Compartilhar em outros sites More sharing options...
Farpe Postado Janeiro 3, 2018 Denunciar Compartilhar Postado Janeiro 3, 2018 Top demais!! Link para o comentário Compartilhar em outros sites More sharing options...
Gui_KillerBR Postado Janeiro 3, 2018 Denunciar Compartilhar Postado Janeiro 3, 2018 Fico top ... parabéns pelo plugin ... bem completo Link para o comentário Compartilhar em outros sites More sharing options...
loxtTTV Postado Janeiro 3, 2018 Denunciar Compartilhar Postado Janeiro 3, 2018 (editado) Parabéns, topzaum.tem uns erro de Português, porém a gente releva. Editado Janeiro 3, 2018 por LoxtBR Link para o comentário Compartilhar em outros sites More sharing options...
Sr.Fox Postado Janeiro 3, 2018 Denunciar Compartilhar Postado Janeiro 3, 2018 bota featerboard Link para o comentário Compartilhar em outros sites More sharing options...
Spoltik Postado Janeiro 4, 2018 Denunciar Compartilhar Postado Janeiro 4, 2018 Tem placeholder no featherboard ? Link para o comentário Compartilhar em outros sites More sharing options...
B E E D Postado Janeiro 4, 2018 Denunciar Compartilhar Postado Janeiro 4, 2018 Muito Bom ! Link para o comentário Compartilhar em outros sites More sharing options...
zFireNz Postado Janeiro 22, 2018 Denunciar Compartilhar Postado Janeiro 22, 2018 mano, pra mim ta pedindo a licença oq faço? Link para o comentário Compartilhar em outros sites More sharing options...
LymeeFairy Postado Setembro 20, 2024 Denunciar Compartilhar Postado Setembro 20, 2024 ANÁLISE DE INATIVIDADE Este tópico foi automaticamente arquivado devido à inatividade. Para manter a organização e fluidez das discussões na comunidade, tópicos que permanecem sem novas interações por um período prolongado são fechados automaticamente. Se houver interesse em retomar o conteúdo, sinta-se à vontade para criar um novo tópico ou entre em contato com a equipe da comunidade para reabrir este tópico. Equipe de Moderação Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados