public FeatureEmulation() { Bukkit.getScheduler().runTaskTimer( ProtocolSupport.getInstance(), () -> Bukkit.getOnlinePlayers().stream() .filter(player -> { ProtocolVersion version = ProtocolSupportAPI.getProtocolVersion(player); return (version.getProtocolType() == ProtocolType.PC) && version.isBefore(ProtocolVersion.MINECRAFT_1_9); }) .filter(player -> !player.isFlying() && (player.hasPotionEffect(PotionEffectType.LEVITATION) || player.hasPotionEffect(PotionEffectType.SLOW_FALLING)) ) .forEach(player -> player.setVelocity(player.getVelocity())), 1, 1 ); }
protected void execute(Event event) { Player p = this.player.getSingle(event); Location n = this.loc.getSingle(event); if (p == null || n == null) { return; } Vector direction = p.getLocation().toVector().subtract(n.toVector()).normalize(); p.setVelocity(direction); }
@Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ()); double a = Math.abs(bLoc.getX() - loc.getX()); double b = Math.abs(bLoc.getZ() - loc.getZ()); double c = Math.sqrt((a*a + b*b)); p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8)); } } }
private void teleportPlayersToTeamSpawn() { for (Team team : this.teams.values()) { for (Player player : team.getPlayers()) { if (!player.getWorld().equals(team.getSpawnLocation().getWorld())) { this.getPlayerSettings(player).setTeleporting(true); } player.setVelocity(new Vector(0, 0, 0)); player.setFallDistance(0.0F); player.teleport(team.getSpawnLocation()); if (this.getPlayerStorage(player) != null) { this.getPlayerStorage(player).clean(); } } } }
@Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ()); double a = Math.abs(bLoc.getX() - loc.getX()); double b = Math.abs(bLoc.getZ() - loc.getZ()); double c = Math.sqrt((a*a + b*b)); p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8)); } } }
private void teleportPlayersToTeamSpawn() { for (Team team : this.teams.values()) { for (Player player : team.getPlayers()) { if (!player.getWorld().equals(team.getSpawnLocation().getWorld())) { this.getPlayerSettings(player).setTeleporting(true); } player.setVelocity(new Vector(0, 0, 0)); player.setFallDistance(0.0F); player.teleport(team.getSpawnLocation()); if (this.getPlayerStorage(player) != null) { this.getPlayerStorage(player).clean(); } } } }
private void jump(final Player p) { if (!GeneralMethods.isSolid(p.getLocation().getBlock().getRelative(BlockFace.DOWN))) { this.remove(); return; } final Vector vec = p.getVelocity(); vec.setY(this.height); p.setVelocity(vec); this.bPlayer.addCooldown(this); return; }
private void grapplePlayer(final Location location) { if (this.reverting && this.grappled && this.player != null && this.end != null && this.ability.equals(Whip.GRAPPLE)) { if (GeneralMethods.isRegionProtectedFromBuild(this, location) && this.grappleRespectRegions) { return; } final Vector vector = this.player.getLocation().toVector().subtract(location.toVector()); this.player.setVelocity(vector.multiply(-0.25)); this.player.setFallDistance(0); } }
@EventHandler(priority = EventPriority.NORMAL) public void onPlayerMove(PlayerMoveEvent event) { final Player player = event.getPlayer(); final FPlayer fPlayer = plugin.pl.getPlayer(player); if (!fPlayer.isOrbiting()) { return; } if (player.getVelocity().length() < fPlayer.orbitStrength() * (2.0 / 3.0)) { player.setVelocity(new Vector(0, fPlayer.orbitStrength(), 0)); } }
private void toggleFlight(Player player, boolean flying) { if (player.getGameMode() != GameMode.CREATIVE) { player.setAllowFlight(flying); } // Stop falling! if (flying) { Vector velocity = player.getVelocity(); if (velocity.getY() < 0) { velocity.setY(0); player.setVelocity(velocity); } } player.setFlying(flying); wasFlying = flying; if (flySpeed > 0) { if (flying) { player.setFlySpeed(flySpeed * defaultFlySpeed); } else { player.setFlySpeed(defaultFlySpeed); } } }
@Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ()); p.setVelocity(v.normalize().setY(0.8)); } } }
@Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ()); p.setVelocity(v.normalize().setY(0.8)); } } }
@Override public void progress() { if (!this.bPlayer.canUsePassive(this) || !this.bPlayer.canBendPassive(this) || CoreAbility.hasAbility(this.player, WaterSpout.class) || CoreAbility.hasAbility(this.player, EarthArmor.class) || CoreAbility.hasAbility(this.player, WaterArms.class)) { return; } if (this.bPlayer.getBoundAbility() == null || (this.bPlayer.getBoundAbility() != null && !this.bPlayer.getBoundAbility().isSneakAbility())) { if (this.player.isSneaking() && ElementalAbility.isWater(this.player.getLocation().getBlock()) && !this.bPlayer.isOnCooldown(this)) { if (this.duration != 0 && System.currentTimeMillis() > this.getStartTime() + this.duration) { this.bPlayer.addCooldown(this); return; } this.player.setVelocity(this.player.getEyeLocation().getDirection().clone().normalize().multiply(this.swimSpeed)); } else if (!this.player.isSneaking()) { this.bPlayer.addCooldown(this); } } }
@Override public void run() { if (Bukkit.getPlayer(uuid) == null) Bukkit.getScheduler().cancelTask(id); else if (Bukkit.getPlayer(uuid).isDead()) Bukkit.getScheduler().cancelTask(id); else if (!Bukkit.getPlayer(uuid).isSneaking()) Bukkit.getScheduler().cancelTask(id); else { Player p = Bukkit.getPlayer(uuid); Vector vector = new Vector(0, 1, 0); vector.multiply(-0.1); p.setVelocity(vector); p.setFallDistance(0.0f); if (!p.isSneaking()) Bukkit.getScheduler().cancelTask(id); } }
/** * @param player * @param field */ public void shootPlayer(final Player player, Field field) { if (plugin.getPermissionsManager().has(player, "preciousstones.benefit.bounce")) { if (!(field.hasFlag(FieldFlag.SNEAKING_BYPASS) && player.isSneaking())) { if (FieldFlag.CANNON.applies(field, player)) { final float bounceHeight = field.getVelocity() > 0 ? field.getVelocity() : field.getSettings().getCannonHeight(); final float height = bounceHeight > 0 ? bounceHeight : (((player.getLocation().getPitch() * -1) + 90) / 35); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { plugin.getPermissionsManager().allowFly(player); player.setVelocity(new Vector(0, height, 0)); plugin.getCommunicationManager().showCannon(player); startFallImmunity(player); player.getWorld().createExplosion(player.getLocation(), -1); }, 0L); } } } }
@Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WIND, true)) { if (p.getFoodLevel() >= 2) { if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); Bukkit.getPluginManager().callEvent(event); p.setFoodLevel(event.getFoodLevel()); } p.setVelocity(p.getEyeLocation().getDirection().multiply(4)); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1); p.setFallDistance(0.0f); } else { Messages.local.sendTranslation(p, "messages.hungry", true); } return true; } else return false; } });
private void tickNpcs() { for (NPC npc : this.npcRegistry) { if (!npc.isSpawned() || !npc.hasTrait(ClickableTrait.class)) continue; Npc helperNpc = npc.getTrait(ClickableTrait.class).npc; // ensure npcs stay in the same position Location loc = npc.getEntity().getLocation(); if (loc.getBlockX() != helperNpc.getInitialSpawn().getBlockX() || loc.getBlockZ() != helperNpc.getInitialSpawn().getBlockZ()) { npc.teleport(helperNpc.getInitialSpawn().clone(), PlayerTeleportEvent.TeleportCause.PLUGIN); } // don't let players stand near npcs for (Entity entity : npc.getStoredLocation().getWorld().getNearbyEntities(npc.getStoredLocation(), 1.0, 1.0, 1.0)) { if (!(entity instanceof Player) || this.npcRegistry.isNPC(entity)) continue; final Player p = (Player) entity; if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR) { continue; } if (npc.getEntity().getLocation().distance(p.getLocation()) < 3.5) { p.setVelocity(p.getLocation().getDirection().multiply(-0.5).setY(0.4)); } } } }
private void tickNpcs() { for (NPC npc : this.npcRegistry) { if (!npc.isSpawned() || !npc.hasTrait(ClickableTrait.class)) continue; Npc helperNpc = npc.getTrait(ClickableTrait.class).npc; // ensure npcs stay in the same position Location loc = npc.getEntity().getLocation(); if (loc.getBlockX() != helperNpc.getInitialSpawn().getBlockX() || loc.getBlockZ() != helperNpc.getInitialSpawn().getBlockZ()) { npc.teleport(helperNpc.getInitialSpawn().clone(), PlayerTeleportEvent.TeleportCause.PLUGIN); } // don't let players stand near npcs for (Entity entity : npc.getStoredLocation().getWorld().getNearbyEntities(npc.getStoredLocation(), 1.0, 1.0, 1.0)) { if (!(entity instanceof Player) || this.npcRegistry.isNPC(entity)) continue; final Player p = (Player) entity; if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR) { continue; } if (npc.getEntity().getLocation().distance(p.getLocation()) < 3.5) { p.setVelocity(p.getLocation().getDirection().multiply(-0.5).setY(0.4)); } } } }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent e) { // Ignore only vertical movement if (e.getFrom().getBlockX() - e.getTo().getBlockX() == 0 && e.getFrom().getBlockZ() - e.getTo().getBlockZ() == 0) { return; } if (!checkAndNotify(e.getPlayer(), e.getTo()).equals(CheckResult.OPEN)) { e.setCancelled(true); e.getFrom().getWorld().playSound(e.getFrom(), Sound.BLOCK_ANVIL_HIT, 1F, 1F); e.getPlayer().setVelocity(new Vector(0,0,0)); e.getPlayer().setGliding(false); } // Check from - just in case the player is inside the island if (!check(e.getPlayer(), e.getFrom()).equals(CheckResult.OPEN)) { // Has to be done 1 tick later otherwise it doesn't happen for some reason... Bukkit.getScheduler().runTask(BentoBox.getInstance(), () -> eject(e.getPlayer())); } }
@Override public void run() { if (Bukkit.getPlayer(uuid) == null) Bukkit.getScheduler().cancelTask(id); else if (Bukkit.getPlayer(uuid).isDead()) Bukkit.getScheduler().cancelTask(id); else if (!Bukkit.getPlayer(uuid).isSneaking()) Bukkit.getScheduler().cancelTask(id); else { Player p = Bukkit.getPlayer(uuid); float cost = 0.08F; float charge = ItemEnergy.getStoredEnergy(p.getInventory().getChestplate()); if (charge >= cost) { p.getInventory().setChestplate(ItemEnergy.chargeItem(p.getInventory().getChestplate(), -cost)); PlayerInventory.update(p); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, (float) 0.25, 1); p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1, 1); p.setFallDistance(0.0f); Vector vector = new Vector(0, 1, 0); vector.multiply(thrust); vector.add(p.getEyeLocation().getDirection().multiply(0.2F)); p.setVelocity(vector); } else Bukkit.getScheduler().cancelTask(id); } }