Ir para conteúdo

_Kurimatzu_

Membros
  • Total de itens

    368
  • Registro em

  • Última visita

Tudo que _Kurimatzu_ postou

  1. Adicionado :) (olha a source, acho que na hora de dar diferença de dias, está retornando os dias errados) E colocar mais coisas na classe PlayerManager. - Plugin Atualizado.
  2. VIPCraft? Que plugin é esse? Quem sabe em breve.
  3. :) Source: https://github.com/Kurimatzu/kVIPZeroComplements
  4. Oquê há de novo: - Correções de BUGS - Trocado "Até o dia" para "Inicio" na GUI. - Adicionado Estatísticas Comandos: - /vips Permissões: - VIPS.ver Plugins Suportados: - VipZero - VIPCraft (Parcial, em desenvolvimento) Download: https://www.dropbox.com/s/nd0zdfqtz9otzx0/kVIPZeroComplements.jar?dl=0 Estatísticas: http://mcstats.org/plugin/kVIPZeroComplements Source: https://github.com/Kurimatzu/kVIPZeroComplements
  5. public static void setFake(Player p , String name){ if(fake.containsKey(p)){ fake.remove(p); } fake.put(p, name); PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(new int[] { p.getEntityId() }); PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(((CraftPlayer)p).getHandle()); try { ReflectionUtils.setValue(spawn, true, "b", new GameProfile(p.getUniqueId(), name)); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.setPlayerListName(name); p.setCustomName(name); p.setDisplayName(name); p.setCustomNameVisible(true); for(Player online : Bukkit.getOnlinePlayers()){ if(p != online){ ((CraftPlayer)online).getHandle().playerConnection.sendPacket(destroy); } if(hasNewProtocol(online)){ try { ProtocolLibrary.getProtocolManager().sendServerPacket(online, addAndRemoveToTabList(p, false)); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(p != online){ ((CraftPlayer)online).getHandle().playerConnection.sendPacket(spawn); } } } public static boolean hasNewProtocol(Player p){ return ((CraftPlayer)p).getHandle().playerConnection.networkManager.getVersion() == 47; } Oquê impossibilitava os jogadores da 1.8, não visualizar o /fake, era a falta desse método: public static PacketContainer addAndRemoveToTabList(Player p , boolean removeOrAdd){ /* * 0 = Ação * 1 = GameProfile * 2 = GameMode * 3 = PING * 4 = NOME */ int action = (removeOrAdd ? 4 : 0); if(action == 0){ PacketContainer addAndRemove = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.PLAYER_INFO); addAndRemove.getModifier().write(0, action); addAndRemove.getModifier().write(1, new GameProfile(p.getUniqueId(), Fake.fake.get(p))); addAndRemove.getModifier().write(2, p.getGameMode().getValue()); addAndRemove.getModifier().write(3, 0); addAndRemove.getModifier().write(4, Fake.fake.get(p)); return addAndRemove; } else { /* * Remove */ PacketContainer addAndRemove = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.PLAYER_INFO); addAndRemove.getModifier().write(0, action); addAndRemove.getModifier().write(1, new GameProfile(p.getUniqueId(), Fake.fake.get(p))); addAndRemove.getModifier().write(2, p.getGameMode().getValue()); addAndRemove.getModifier().write(3, 0); addAndRemove.getModifier().write(4, Fake.fake.get(p)); return addAndRemove; } } Agora todos podem usar o /fake :) Depende do Protocolib. ReflectionUtils: https://github.com/NavidK0/Carbon/blob/master/src/main/java/com/lastabyss/carbon/utils/particlelib/ReflectionUtils.java Oquê falta: - Salvar os fakes, e reenviar na hora que um jogador entra (quando entra, aparece o jogador sem o fake) - Scoreboards, TabComplete, etc.
  6. Claim.allowEdit(Player p); https://github.com/ryanhamshire/GriefPrevention/blob/master/src/me/ryanhamshire/GriefPrevention/Claim.java
  7. Parabéns, e o primeiro plugin brasileiro de clan (eu acho, a maioria usa o simple clans)
  8. Eu estou tentando fazer , alguns cooldowns dividido por função EX: A cada comando tem um cooldown diferente do cooldown de abrir um baú. Dividir os cooldown por cada função. Alguém pode me enviar uma classe que faça isso? (Estava tentando fazer , mais o sistema de função, tava dando alguns bugs.)
  9. public String formatDifferenceStr(long time) { if (time == 0) { return "never"; } long day = TimeUnit.MILLISECONDS.toDays(time); long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24); long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60); long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60); StringBuilder sb = new StringBuilder(); if (day > 0) { sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" "); } if (hours > 0) { sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" "); } if (minutes > 0) { sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" "); } if (seconds > 0) { sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos"); } String diff = sb.toString(); return diff.isEmpty() ? "agora" : diff; } PERFEITO! Estava precisando disso faz tempo. (Tem como converter esse método para anos?)
  10. Alguém pode fazer uma classe de scoreboard? (Sem Piscar/flicker, com +16 caracteres.)
  11. As permissões são as mesmas. Corrigido, baixe novamente. Compilado em java 7.
  12. #UP - Arrumado NullPointerException do /terreno tp. (14:18 - 04/06/16) - /terreno tp <nomedoplayer>_<nome da casa>
  13. Aí que está, isso se torna impossível. Nem todos, sabem usar engenharia reversa, esse código é mais uma "barreira" para impedir isso.
  14. Mais eu vou proteger com o proguard. etc
  15. É, mais também terá outros sistemas de verificação como o de key. Não é só esse, vai ter outros, verificar key, verificar key no mysql etc. Isso só vai ajudar a proteger mais. "O cara pode simplesmente pegar o checksum do arquivo e modificar o sistema pra sempre usar aquele checksum" Tá, mais quando o servidor liga, ele baixa o arquivo novamente, como ele iria fixar o checksum?
  16. "E não tem como criptografar ja que o computador que ta baixando vai ter que saber descriptografar." WTF
  17. Precisa, para verificar todo o checksum presente na .jar. Tipo , eu acho que é infalível, pois qualquer COISA que você modificar ele já te barra. Apos baixar a jar do site, ela e automaticamente excluída(salva na pasta plugins, com nome estranho, depois que verifica a licença, ela e deletada.)
  18. Bem, é bem simples, você faz uma conexão com site externo, baixa a jar do plugin, apos isso, você compara o arquivo que está na pasta plugins, e o arquivo que o servidor baixou (tudo em Checksum , qualquer virgula, ou qualquer coisa que modifica e automaticamente barrado.) private boolean compareFile(File f1, File f2){ return f1.length() == f2.length() && Utils.checksum(f1).equals(Utils.checksum(f2)); } public static String checksum(File file) { try { InputStream fin = new FileInputStream(file); java.security.MessageDigest md5er = MessageDigest.getInstance("MD5"); byte[] buffer = new byte[1024]; int read; do { read = fin.read(buffer); if (read > 0) md5er.update(buffer, 0, read); } while (read != -1); fin.close(); byte[] digest = md5er.digest(); if (digest == null) return null; String strDigest = "0x"; for (int i = 0; i < digest.length; i++) { strDigest += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1).toUpperCase(); } return strDigest; } catch (Exception e) { return null; } } Oquê acharam?
×
×
  • Criar Novo...