Ir para conteúdo

bieel1503

Membros
  • Total de itens

    130
  • Registro em

  • Última visita

Tudo que bieel1503 postou

  1. bieel1503

    Cache

    Faz uma "HashMap" para o "cache". Ah, e também, você tem um objeto para guardar as informações de cada jogador? Se tiver, você pode apenas adicionar uma variável para checar se já foi salvo e se precisa salvar, não? E não tem problema salvar as informações async se for tipo na hora de "/setcash". E você pode apenas pegar as informações de cada jogador no evento "AsyncLoginEvent". Ah, e não se esqueça de remover do "Map" quando o jogador sair do servidor.
  2. Sobre a segunda dúvida... Não existe um evento que pega o momento que fica de dia/noite, então você vai precisar criar uma tarefa/task que se auto-repete para fazer isso. Ah, é claro, se não estiver se familiarizado com tarefas/tasks em Bukkit, você pode ver sobre isso AQUI(pesquise sobre no youtube também). Dai, para checar se é dia/noite, você pode pegar o tempo do mundo("world.getTime"). Ele vai estar como "long", então AQUI uma imagem para ajudar. Agora para pegar "o jogador que tem certa permissão", você vai precisar fazer um "loop" por todos os jogadores naquele mundo e checar se tem com o "hasPermission". E para os efeitos, com o jogador, você pode apenas usar o "addPotionEffect". Exemplo: public void sendTask(Plugin plugin){ new BukkitRunnable(){ World world = Bukkit.getWorld("world"); Boolean dia = null; public void run(){ if(world.getTime() > 23500 || world.getTime() < 13000){ if(dia == null || !dia){ dia = true; for(Player player : world.getPlayers()){ if(player.hasPermission("yup")){ player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 100, 1)); } } } }else if(world.getTime() > 13000 && world.getTime() < 23500){ if(dia == null || dia){ dia = false; for(Player player : world.getPlayers()){ if(player.hasPermission("yup")){ player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 1)); } } } } } }.runTaskTimer(plugin, 1, 1) } Fazer isso do zero, para um iniciante, é realmente muito complicado y'know. Eu recomendo que você use o plugin chamado "SkinsRestorer" e a sua API que seria apenas fazer "SkinsRestorerAPI.setSkin".
  3. Isso pode ser feito com o "BukkitRunnable". Com ele você pode agendar uma tarefa que pode ter um tempo definido para ser completada ou, até mesmo, definir para se auto-repetir. Você, para fazer como está na imagem mostrada, pode "agendar uma tarefa" que se repete como está neste exemplo: public void sendTask(Player player){ //Ele vai se "auto-repetir" por 5 vezes e vai se auto-cancelar. new BukkitRunnable(){ int counter = 5; public void run(){ if(counter > 0){ player.sendMessage(""+counter); }else{ cancel(); } counter--; } }.runTaskTimer(plugin, 20, 20); } Você pode ler sobre AQUI.
  4. Isso é o mesmo que fazer "server.getWorld", como você pode ver por AQUI, então não muda muito. Posta o erro todo.
  5. Você pode pegar todos os jogadores e verificar se eles tem a permissão. Acho que seria tipo assim: PermissionManager permissionManager = PermissionsEx.getPermissionManager(); Set<PermissionUser> users = permissionManager.getUsers(); for(PermissionUser user : users){ if(user.has("permission")){ } }
  6. Existe um plugin deste tipo aqui na GB, e o código está na github. Dê uma olhada AQUI.
  7. Tá usando alguma API? se estiver, é só ver qual o método para pegar a quantia de dinheiro que o jogador tem. Usando a API do Vault como exemplo: Player player = ...; double money = Economy.getBalance(player); if(money >= 100){ Economy.withdrawPlayer(player, 100); //retirando do jogador; }else{ //não tem; }
  8. Bem, se você estiver na versão '1.10' ou alguma versão superior, você pode apenas fazer isso: public void sendActionbar(Player player, String message){ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message)); } Para versões anteriores, você vai ter que enviar o "PacketPlayOutChat" para o jogador: public void sendActionbar(Player player, String message){ ((CraftPlayer)player).getHandle().playerConnection.sendPacket(new PacketPlayOutChat(ChatSerializer.a("{text: '"+ msg +"'}"), (byte)2)); }
  9. public void fillInventory(Inventory inventory, List<Box> boxes){ Iterator<Box> iterator = boxes.iterator(); int[] indexes = {10,19,28,37}; for(int index : indexes){ for(int i = index; i < index+7; i++){ inventory.setItem(i, iterator.next()); } } } Hum... sei lá. pensei nisso agora. testa aí.
  10. ... public void sendMessage(Player player){ TextComponent message = new TextComponent("BOM "); message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say bom")); TextComponent message2 = new TextComponent("RUIM"); message2.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say ruim")); message.addExtra(message2); player.spigot().sendMessage(message); }
  11. Hum, acho que você tem 3 opções: Usar o "TextComponent" como o @Lightwood comentou;(Apenas para Spigot. TUTORIAL) O "FancyMessage" do @jeta;(Ele usa o "TextComponent" como base e deixa tudo mais fácil. TÓPICO) Ou você pode aprender "JSON", escrever tudo na mão e mandar o "packet";(PROTOCOL e COMPONENTS) Utilizando o "TextComponent": public void sendMessage(Player player){ //Criando a mensagem TextComponent message = new TextComponent("Olá, "); //Colocando um texto quando passar em cima dela message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("rélouu").create())); //Criando uma outra mensagem TextComponent message2 = new TextComponent("e boa noite."); //Colocando um texto quando passar em cima dela message2.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Goodi naiti").create())); //Juntando a segunda mensagem com a primeira message.addExtra(message2); //Mandando para o jogador player.spigot().sendMessage(message); } Utilizando o "FancyMessage": public void sendMessage(Player player){ //Criando a mensagem FancyMessage message = new FancyMessage("Olá, "); //Colocando um texto quando passar em cima dela message.hover("rélouu"); //Criando outra mensagem, e ela já vai ser junta com a primeira message.text("e boa noite."); //Colocando um texto quando passar em cima dela message.hover("Goodi naiti"); //Mandando para o jogador message.send(player); } Escrevendo tudo na mão: public void sendMessage(Player player){ String json = "{text: 'Olá, ', hoverEvent: {action: 'show_text', value: 'rélouu'}, extra:[{text: 'e boa noite.', hoverEvent: {action: 'show_text', value: 'Goodi naiti'}}]}"; Packet packet = new PacketPlayOutChat(ChatSerializer.a(json), 1); ((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet); }
  12. Ao invés de utilizar os "\n" para quebrar a linha, adicione manualmente as coordenadas na lista. Dai seria só usar o método "split". Exemplo: List<String> pages = ...; pages.add("X: " + x); pages.add("Z: " + z); int x,z; x = Double.valueOf(pages.get(0).split(":")[1]).intValue(); z = Double.valueOf(pages.get(1).split(":")[1]).intValue();
  13. Faz assim: new BukkitRunnable(){ String message = "Yep, assim mesmo."; int count = 1; public void run(){ if(count != message.length()+1){ a.enviarTitle(p, "", message.substring(0,count), 0, 1, 0); count++; }else{ cancel(); } } }.runTaskTimer(plugin, 20, 10);
  14. Som de bloco de notas...? Que estranho. Você pode testar o código que mandei pegando um evento de interação, cancelando e mandando o packet. Assim: @EventHandler private void interact(PlayerInteractEvent event){ if(event.getClickedBlock().getType() == Material.CHEST){ event.setCancelled(true); openChestAnimation(event.getPlayer(), event.getClickedBlock()); } }
  15. Não conseguiu usando o código que mandei? Você só precisaria fazer algo como: public void openChestAnimation(Player player, Block block){ ((CraftPlayer)player).getHandle().playerConnection.sendPacket(new PacketPlayOutBlockAction(new BlockPosition(block.getX(), block.getY(), block.getZ()), CraftMagicNumbers.getBlock(block), 1, 1)); } public void closeChestAnimation(Player player, Block block){ ((CraftPlayer)player).getHandle().playerConnection.sendPacket(new PacketPlayOutBlockAction(new BlockPosition(block.getX(), block.getY(), block.getZ()), CraftMagicNumbers.getBlock(block), 1, 0)); }
  16. Se me lembro bem, isso se faz com o "suffix" e "prefix" de um time de uma scoreboard.
  17. https://www.spigotmc.org/threads/nms-packets-in-minecraft.245190/ Desculpa, mas não sei nenhum HU3.
  18. Vou adivinhar, você está pegando os valores como "int", né? Você deve salvar o 'X' e o 'Z' como eles são; doubles, e pega-los assim. Você não pode pega-los como "int". Ah, mas se você estiver guardando como "int", você pode apenas adicionar '+0.5' para o "local"(ou remover '-0.5", se for um valor negativo). Logicamente, um "local" pode ser criado com o 'X', 'Y' e 'Z', mas um "local" também pode guardar uma "direção(?)" e é para isso que o 'YAW' e o 'PITCH' do "local" serve. O 'YAW' sendo a rotação e o 'PITCH' como a inclinação. Então, se você estiver guardando só o 'X', 'Y' e o 'Z' do "local", para guardar o "local" que o jogador estava olhando, você precisa guardar também o 'YAW' e 'PITCH'. SOURCE
  19. Ah, você quer que remova 1 nível quando você remover os 500 e estiver sem experiência? Checa se quando retirar vai ficar sem nada, dai seta menos um level pro player e seta a experiência de volta pra 1.
  20. Hm... então. Se você quer remover a experiência, você tem que usar o "getExp" e o "setExp". Como está no site do spigot, o "getExp" retorna um valor float, ele representa a experiência do jogador para atingir o próximo nível(1 como indo para o próximo nível). Você pode fazer algo tipo assim: float exp = player.getExp(); //Checando se tem mais de 500 de experiência, se não tiver, apenas coloca como '0'. if(exp >= .5){ player.setExp(exp - .5); }else{ player.setExp(0); } //ou... player.setExp(exp >= .5 ? exp - .5 : 0);
  21. É como o @Jheyson falou, você vai precisar usar um "packet" chamado "PacketPlayOutBlockAction". Protocol: https://wiki.vg/Protocol#Block_Action. Exemplo: //Animação de como estivesse abrindo o baú... Block block = ...; Packet packet = new PacketPlayOutBlockAction(new BlockPosition(block.getX(), block.getY(), block.getZ()), CraftMagicNumbers.getBlock(block), 1, 1);
  22. Agora explica o que a "bola de fogo", "raio mestre", "super creeper", "poder máximo", "silktouch 2" e "lançador" iriam fazer, e qual seria o item para cada um.
×
×
  • Criar Novo...