-
Total de itens
130 -
Registro em
-
Última visita
Tudo que bieel1503 postou
-
inativo Preciso de um plugin de limitação de blocos
tópico respondeu ao _RESISTKILL_ de bieel1503 em Arquivos
Bukkit não suporta MODS. -
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.
-
inativo Algumas dúvidas na criação de plug-ins
tópico respondeu ao pedrinhohss de bieel1503 em Arquivos
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". -
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.
-
dúvida resolvida [Duvida][Java][bukkit] org.bukkit.world entre classes
pergunta respondeu ao mabazi de bieel1503 em Dúvidas resolvidas
Isso é o mesmo que fazer "server.getWorld", como você pode ver por AQUI, então não muda muito. Posta o erro todo. -
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")){ } }
-
Existe um plugin deste tipo aqui na GB, e o código está na github. Dê uma olhada AQUI.
-
[Dúvida] Cobrar quando usar comando
pergunta respondeu ao yemiefi de bieel1503 em Dúvidas resolvidas
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; } -
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)); }
-
dúvida resolvida Preciso mais uma vez resolver essa duvida IMQUIETANTE!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
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í. -
dúvida resolvida Colocar mais de 2 json na mesma linha.
tópico respondeu ao Cassiano_14 de bieel1503 em Dúvidas resolvidas
... 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); } -
dúvida resolvida Colocar mais de 2 json na mesma linha.
tópico respondeu ao Cassiano_14 de bieel1503 em Dúvidas resolvidas
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); } -
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();
-
dúvida resolvida [Bukkit Title] Como simplificar um scheduleAsync como este?
tópico respondeu ao ramon-bernardo de bieel1503 em Dúvidas resolvidas
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); -
dúvida resolvida Preciso de ajuda para uma grande duvida!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
Ué, só clicar ali no ícone "</>". -
dúvida resolvida Preciso de ajuda para uma grande duvida!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
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()); } } -
dúvida resolvida Preciso de ajuda para uma grande duvida!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
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)); } -
dúvida resolvida Preciso de ajuda para uma grande duvida!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
https://www.spigotmc.org/threads/nms-packets-in-minecraft.245190/ Desculpa, mas não sei nenhum HU3. -
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
-
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.
-
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);
-
dúvida resolvida Preciso de ajuda para uma grande duvida!
tópico respondeu ao Intrometimido de bieel1503 em Dúvidas resolvidas
É 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); -
inativo Como setar alguma coisa em outro player
tópico respondeu ao Cassiano_14 de bieel1503 em Arquivos
-
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.