Ir para conteúdo

Out of Orbit

Membros
  • Total de itens

    65
  • Registro em

  • Última visita

Respostas na Comunidade

  1. Out of Orbit's postagem in [Dúvida] List empty was marked as the answer   
    Não tenho certeza, mas acho que isso está acontecendo porque esse código aí está assíncrono.
     
    Faça um teste, chame o método de forma síncronizada e veja se o erro persiste.
  2. Out of Orbit's postagem in [Duvida] Plugin de Vanish, admin ver quem estiver em /v was marked as the answer   
    Ah, desculpa. Interpretei a questão errado.
    private Set<Player> vanished = new HashSet<>(); public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "§cUse comando in-game!"); return true; } Player p = (Player) sender; if (p.hasPermission("obycraft.vanish")) { if ((cmd.getName().equalsIgnoreCase("vanish")) || (cmd.getName().equalsIgnoreCase("v"))) { if (!vanished.contains(p)) { Bukkit.getOnlinePlayers().stream() .filter(pl -> !pl.hasPermission("obycraft.vanish")) .forEach(pl -> pl.hidePlayer(p)); vanished.add(p); p.sendMessage(ChatColor.GREEN + "§d§l[VANISH] §aModo invisível ativado"); return true; } else { Bukkit.getOnlinePlayers().stream() .forEach(pl -> pl.showPlayer(p)); vanished.remove(p); p.sendMessage(ChatColor.GREEN + "§d§l[VANISH] §aModo invisível desativado"); } } } return false; } E para verificar se o inventário do jogador está cheio, tenta isso aqui:
    if (p.getInventory().firstEmpty() == -1) { // Está cheio... } else { // Não está cheio } 
  3. Out of Orbit's postagem in Stackar was marked as the answer   
    Não sei se é o método mais eficiente, mas ele funciona.
    Fiz com streams, daí ele filtra as localizações por perto, se não tiver nenhuma ele adiciona no mapa.
    Mas se já tiver, ele cancela o evento e coloca no mapa.
    private Map<Location, Integer> blocks = new HashMap<>(); @EventHandler public void onPlace(BlockPlaceEvent e) { Block block = e.getBlock(); if (block.getType() == Material.DIAMOND_BLOCK) { // Verifica se o bloco é de diamante Location loc1 = block.getLocation(); // Pega a localização do bloco Object[] array = blocks.keySet().stream() // Pega um stream das chaves do mapa .filter(l -> isNear(loc1, l, 3)) // Filtra as localizações por localizações próximas .toArray(); // Pega a localização que está dentro do filtro estabelecido if (array.length == 0) // Se a array estiver vazia, não há blocos por perto blocks.put(loc1, 1); // Adiciona a localização do bloco no mapa else { block.setType(Material.AIR); // Muda o material do bloco para AIR blocks.replace((Location) array[0], blocks.get(array[0]) + 1); // Atualiza o mapa, adicionando + 1 } } } private boolean isNear(Location o1, Location o2, int range) { if (Math.abs(o1.getX() - o2.getX()) <= range && Math.abs(o1.getY() - o2.getY()) <= range && Math.abs(o1.getZ() - o2.getZ()) <= range) return true; return false; } Daí quando o jogador quebra um bloco de diamante, ele verifica se a localização daquele bloco está dentro do mapa
    Se estiver, ele cancela o evento, quebra o bloco naturalmente e dropa os blocos na quantidade que estava no mapa.
    @EventHandler public void onBreak(BlockBreakEvent e) { Block block = e.getBlock(); if (block.getType() == Material.DIAMOND_BLOCK) { Location loc = block.getLocation(); if (blocks.containsKey(loc)) { // Verifica se a localização está no mapa e.setCancelled(true); // Cancela o evento block.breakNaturally(); // Quebra o bloco naturalmente loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.DIAMOND_BLOCK, blocks.get(loc)-1)); // Dropa os blocos blocks.remove(loc); // Remove a localização do mapa } } }
  4. Out of Orbit's postagem in [Bukkit] Mensagem de boas-vindas! was marked as the answer   
    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
    event.setJoinMessage("§7§lS§7hield§7§lA§7rena ➽ §fSeja bem-vindo §c" + event.getPlayer().getName() + "§fao servidor!");
    }

  5. Out of Orbit's postagem in PlayerPoints Help! was marked as the answer   
    int x = 5000; if (points >= x) { /* Se a quantidade de pontos for maior ou igual à 5000 Vai fazer o que você quer...*/ }
  6. Out of Orbit's postagem in Dúvida: ignoreCancelled / isCancelled was marked as the answer   
    O EventPriority funciona assim:
     
    LOWEST - Mais baixa LOW - Baixa NORMAL - Padrão HIGH - Alta HIGHEST - Mais alta MONITOR - Acima de todas  
    Isso significa que um método com prioridade LOWEST sempre será chamado primeiro, depois o LOW e assim por diante.
    O HIGHEST serve para dar a palavra final, entende? Ele é chamado por último, mas nada que afete a performance. Por exemplo:
     
    Um plugin X tem um listener para o evento PlayerJoinEvent. Esse método está com a prioridade normal e altera a mensagem de login para "Alguém entrou".
     
    Mas nesse mesmo servidor tem o plugin Y, com prioridade HIGHEST e altera a mensagem para "Fulano logou". Como HIGHEST > NORMAL, a mensagem que será mostrada é "Fulano logou".
     
    Já a prioridade MONITOR serve literalmente para monitorar. Você não deve fazer alterações no evento com ele, tais como mudar drops na morte, mudar a mensagem de saída ou até mesmo cancelar o evento. Ele é muito usado em plugins de log, que precisa pegar o "evento final", que foi modificado por outros plugins.
     
    Não sei qual a prioridade o PlotMe usa, talvez seja a NORMAL. Então você pode usar a HIGHEST com o ignoreCancelled. Daí o evento será chamado depois do método do PlotMe, e se tiver sido cancelado seu método não será chamado.
  7. Out of Orbit's postagem in [Duvida] Apenas esse comando was marked as the answer   
    Só usar o evento PlayerCommandPreprocessEvent
    @EventHandler public void onCommand(PlayerCommandPreprocessEvent e) { if (e.getMessage().equalsIgnoreCase("/plot")) { e.setCancelled(true); e.getPlayer().sendMessage("/plot auto"); } }
  8. Out of Orbit's postagem in Flyzinho was marked as the answer   
    if (p.getAllowFlight()) {
    p.setAllowFlight(false);
    p.sendMessage("§4Fly desativado");
    } else {
    p.setAllowFlight(true);
    p.sendMessage("§aFly Ativado");
    }

  9. Out of Orbit's postagem in [DUVIDA] Como faço se o jogador estiver no /v, não funcionar o LegendChat local was marked as the answer   
    Só usar o evento PrivateMessageEvent
    @EventHandler public void onTell(PrivateMessageEvent e) { if (va.contains(e.getReceiver()) { e.setCancelled(true); e.getSender().sendMessage("Jogador não encontrado"); } }
  10. Out of Orbit's postagem in Pedido - / + TAB was marked as the answer   
    Se você usa spigot não precisa de plugin.
    É só editar o arquivo spigot.yml
    Mude isto:
    commands: tab-complete: 0 Para isto:
    commands: tab-complete: -1
  11. Out of Orbit's postagem in Fly comprar was marked as the answer   
    Plugin feito, mandei via mp.
  12. Out of Orbit's postagem in (Pedido simples) /bolsa was marked as the answer   
    Fiz o plugin, bem simples não tem muito o que falar
    Tem os comandos /bs e /bolsadevalores
    A mensagem é configurável e não precisa de permissão para usar os comandos
    Download
  13. Out of Orbit's postagem in [Pedido] Spawners Confirmação was marked as the answer   
    Pronto, agora as mensagens são configuráveis.
    Também adicionei um comando para recarregar o config.yml:
    /breakspawner reload - breakspawner.reload

    Download
×
×
  • Criar Novo...