zMaster_ Postado Julho 9, 2020 Denunciar Compartilhar Postado Julho 9, 2020 Eu fiz um Plugin que quando um jogador come uma melancia ele ganha um tempo de fly. public class MelanciaAerodinamica implements Listener{ Main plugin; public MelanciaAerodinamica(Main plugin) { this.plugin = plugin; } public static Main m = (Main)Bukkit.getPluginManager().getPlugin("Mineflyaddon"); int comeu = 0; @EventHandler public void comer(PlayerInteractEvent c) { Player p = c.getPlayer(); ItemStack melancia = new ItemStack(Material.SPECKLED_MELON); melancia.addUnsafeEnchantment(Enchantment.ARROW_DAMAGE, 1); ItemMeta m = melancia.getItemMeta(); m.setDisplayName(ChatColor.DARK_BLUE+""+ChatColor.BOLD+"Melancia Aerodinâmica"); ArrayList<String> lore = new ArrayList<String>(); lore.add(""); lore.add("§7Comendo essa melancia você recebe"); lore.add("§7a habilidade de voar por 5 minutos!"); lore.add(""); lore.add("§eA cada nivel de §5Lenhador §avocê"); lore.add("§erecebe + 1 minuto de voo."); lore.add("§eE caso seja VIP seu tempo de voo é"); lore.add("§eMultiplicado por:"); lore.add("§e2* §aVIP§e, 3* §6VIP+§e, 4* §3MVP§e."); m.setLore(lore); m.addItemFlags(ItemFlag.HIDE_ENCHANTS); melancia.setItemMeta(m); melancia.getItemMeta().addItemFlags(ItemFlag.HIDE_ENCHANTS); if ((p.getInventory().getItemInHand().isSimilar(melancia)) && melancia.getItemMeta() != null) { if (c.getAction().equals(Action.RIGHT_CLICK_AIR) || c.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { if (p.getWorld().getName().equalsIgnoreCase("world")) { p.sendMessage("§cVocê não pode usar isso aqui"); return; } else if (comeu == 1) { p.sendMessage("§cEspere seu tempo de voo acabar para usar novamente!"); return; } else comeu = 1; p.getInventory().removeItem(melancia); p.playSound(p.getLocation(), Sound.EAT, 10, 1); int tempo = (ExperienceAPI.getLevel(p, SkillType.WOODCUTTING.getName()) + 5); if (p.hasPermission("vip.vip")) tempo = tempo * 2; if (p.hasPermission("vip.vip+")) tempo = tempo * 3; if (p.hasPermission("vip.mvp")) tempo = tempo * 4; if (p.getAllowFlight() == false) p.setAllowFlight(true); p.sendMessage("§6§lVocê possui §e"+tempo+"§6 minutos de voo"); // Defiantly gonna use lambda, or this would look reaaalllly bad Contador timer = new Contador(plugin, tempo, () -> p.sendMessage(ChatColor.GOLD + ""+ChatColor.BOLD+"Aproveite!"), () -> { p.sendMessage(ChatColor.RED + "Seu efeito de voo acabou!"); p.playSound(p.getLocation(), Sound.BAT_TAKEOFF, 10, 2); comeu = 1; // Heal everyone if (p.getAllowFlight() == true) p.setAllowFlight(false); }, (t) -> { if (p.getWorld().getName().equalsIgnoreCase("Ilhas")) { if (p.getAllowFlight() == false) p.setAllowFlight(true); p.playSound(p.getLocation(), Sound.NOTE_SNARE_DRUM, 10, 10); p.sendMessage(ChatColor.YELLOW + "Tempo de voo restante: " + (t.getSecondsLeft()) + "/" + (t.getTotalSeconds()) + " minutos"); } } ); // Start scheduling, don't use the "run" method unless you want to skip a second timer.scheduleTimer(); } } } } Até ai tudo bem... Nesse código tem uma variavel "comeu" que checa se o jogador já esta voando por causa da melancia (por padrão ela é 0 que significa que o jogador pode comer a melancia e se ela for 1 significa que o jogador esta voando e não pode comer outra melancia por enquanto, e quando termina o tempo de voo ela volta pra 0)... Mas o problema é que se um jogador comer uma melancia e ja estiver voando se outro jogador tambem uma melancia vai mandar pra ele a mensagem falando pra ele esperar o tempo de voo dele acabar. Como eu posso fazer um sistema pra checar se o jogador já comeu uma melancia sem esse problema (e sem usar o p.getAllowFlight())? Link para o comentário Compartilhar em outros sites More sharing options...
SkyVox Postado Julho 12, 2020 Denunciar Compartilhar Postado Julho 12, 2020 Em 09/07/2020 em 12:47, United disse: Mas o problema é que se um jogador comer uma melancia e ja estiver voando se outro jogador tambem uma melancia vai mandar pra ele a mensagem falando pra ele esperar o tempo de voo dele acabar. Você está usando uma variavel publica(isso quer dizer que isso será igual pra todos os jogadores), você deve salvar esses dados em um Mapa, contendo o ID do jogador e uma Integer("comeu"). Exemplo: Map<UUID, Integer> flyable = new HashMap<>(32); // Adicionar um jogador; this.flyable.put(player.getUniqueId()); // Verificar se o jogador esta com o modo voar ativo; Integer value = flyable.get(player.getUniqueId()); boolean isActive = value != null && value == 1; // Remover jogador; int value = flyable.remove(player.getUniqueId()); // Isso retorna ao valor da integer, você pode usar caso queira. Link para o comentário Compartilhar em outros sites More sharing options...
SrBlecaute Postado Julho 12, 2020 Denunciar Compartilhar Postado Julho 12, 2020 resolvido ? Link para o comentário Compartilhar em outros sites More sharing options...
DaddyLuck Postado Julho 16, 2020 Denunciar Compartilhar Postado Julho 16, 2020 Seu tópico foi marcado como Inativo. Para reverter esta ação, entre em contato com a equipe de Moderação. OBS: Essa mensagem é automática. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados