public void useVerticalBounce(final Player player) { // CHEATING: Ensure fall distance is reset. player.setFallDistance(0f); noFallMaxY = 0.0; noFallFallDistance = 0f; noFallSkipAirCheck = true; prependVerticalVelocity(verticalBounce); verticalBounce = null; }
for (Player p : ) { if(p.getLocation().getY() <= 0.0D) p.teleport(NoVoid.spawnLocation); p.setFallDistance(0.0F); }
/** * * @param player * @param minY * @param reallyOnGround * @param data * @param cc */ private void adjustFallDistance(final Player player, final double minY, final boolean reallyOnGround, final MovingData data, final MovingConfig cc) { final float noFallFallDistance = Math.max(data.noFallFallDistance, (float) (data.noFallMaxY - minY)); if (noFallFallDistance >= Magic.FALL_DAMAGE_DIST) { final float fallDistance = player.getFallDistance(); if (noFallFallDistance - fallDistance >= 0.5f // TODO: Why not always adjust, if greater? || noFallFallDistance >= Magic.FALL_DAMAGE_DIST && fallDistance < Magic.FALL_DAMAGE_DIST // Ensure damage. ) { player.setFallDistance(noFallFallDistance); } } data.clearNoFallData(); }
/** * Quit or kick: adjust fall distance if necessary. * @param player */ public void onLeave(final Player player, final MovingData data, final IPlayerData pData) { final float fallDistance = player.getFallDistance(); // TODO: Might also detect too high mc fall dist. if (data.noFallFallDistance > fallDistance) { final double playerY = player.getLocation(useLoc).getY(); useLoc.setWorld(null); if (player.isFlying() || player.getGameMode() == GameMode.CREATIVE || player.getAllowFlight() && pData.getGenericInstance(MovingConfig.class).noFallSkipAllowFlight) { // Forestall potential issues with flying plugins. player.setFallDistance(0f); data.noFallFallDistance = 0f; data.noFallMaxY = playerY; } else { // Might use tolerance, might log, might use method (compare: MovingListener.onEntityDamage). // Might consider triggering violations here as well. final float yDiff = (float) (data.noFallMaxY - playerY); // TODO: Consider to only use one accounting method (maxY). final float maxDist = Math.max(yDiff, data.noFallFallDistance); player.setFallDistance(maxDist); } } }
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 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); } }
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 progress() { if (this.player.isDead() || !this.player.isOnline()) { this.remove(); return; } else if ((isWater(this.player.getLocation().getBlock()) || System.currentTimeMillis() > this.time + this.duration) && (!this.bPlayer.isAvatarState() || !this.avatarStateToggled)) { this.remove(); return; } else { if (this.random.nextInt(2) == 0) { playFirebendingSound(this.player.getLocation()); } ParticleEffect.FLAME.display(this.player.getLocation(), 0.6F, 0.6F, 0.6F, 0, 20); ParticleEffect.SMOKE.display(this.player.getLocation(), 0.6F, 0.6F, 0.6F, 0, 20); double timefactor; if (this.bPlayer.isAvatarState() && this.avatarStateToggled) { timefactor = 1; } else { timefactor = 1 - (System.currentTimeMillis() - this.time) / (2.0 * this.duration); } final Vector velocity = this.player.getEyeLocation().getDirection().clone().normalize().multiply(this.speed * timefactor); this.player.setVelocity(velocity); this.player.setFallDistance(0); } }
public void resetHealth(Player p) { p.setGameMode(GameMode.SURVIVAL); CrossVersion.setHealth(p, CrossVersion.getMaxHealth(p)); if (plugin.getConfiguration().areDeveloperOptionsEnabled() && p.getName().length() == 1) { return; } p.setFallDistance(0); p.setFoodLevel(20); p.setExhaustion(0); p.setSaturation(0); p.setHealthScaled(false); p.setAllowFlight(false); p.setFlying(false); for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); } } }
/** * Applies all saved data besides teleportation location. * <p> * This should be used *after* applying armor contents, in order to ensure that setHealth works correctly. * * @param p Player to apply saved data to */ private void apply(final Player p) { CrossVersion.setHealth(p, health); p.setHealthScale(healthScale); p.setMaxHealth(maxHealth); p.setFallDistance(fallDistance); p.setFoodLevel(foodLevel); p.setExhaustion(exhaustion); p.setSaturation(saturation); p.setAllowFlight(allowFlight); p.setFlying(isFlying); p.setGameMode(gameMode); for (PotionEffect effect : effects) { p.addPotionEffect(effect); } } }
private void dealFallDamage(final Player player, final double damage) { if (mcAccess.getHandle().dealFallDamageFiresAnEvent().decide()) { // TODO: Better decideOptimistically? mcAccess.getHandle().dealFallDamage(player, damage); } else { final EntityDamageEvent event = BridgeHealth.getEntityDamageEvent(player, DamageCause.FALL, damage); Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) { // TODO: account for no damage ticks etc. player.setLastDamageCause(event); mcAccess.getHandle().dealFallDamage(player, BridgeHealth.getRawDamage(event)); } } // Currently resetting is done from within the damage event handler. // TODO: MUST detect if event fired at all (...) and override, if necessary. Best probe once per class (with YES). // data.clearNoFallData(); player.setFallDistance(0); }
@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.075F; float charge = ItemEnergy.getStoredEnergy(p.getInventory().getBoots()); double accuracy = Double.valueOf(new DecimalFormat("##.##").format(speed - 0.7).replace(",", ".")); if (charge >= cost) { p.getInventory().setBoots(ItemEnergy.chargeItem(p.getInventory().getBoots(), -cost)); PlayerInventory.update(p); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, (float) 0.25, 1); p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1, 1); p.setFallDistance(0.0f); double gravity = 0.04; double offset = SlimefunStartup.chance(100, 50) ? accuracy: -accuracy; Vector vector = new Vector(p.getEyeLocation().getDirection().getX() * speed + offset, gravity, p.getEyeLocation().getDirection().getZ() * speed - offset); p.setVelocity(vector); } else Bukkit.getScheduler().cancelTask(id); } }
/** * Add velocity, in order to work around issues with turning off flying, * triggering SurvivalFly. Asserts last distances are set. * * @param tick * @param data */ private void workaroundFlyNoFlyTransition(final Player player, final int tick, final boolean debug, final MovingData data) { final PlayerMoveData lastMove = data.playerMoves.getFirstPastMove(); final double amount = guessFlyNoFlyVelocity(player, data.playerMoves.getCurrentMove(), lastMove, data); data.clearActiveHorVel(); // Clear active velocity due to adding actual speed here. data.addHorizontalVelocity(new AccountEntry(tick, amount, 1, MovingData.getHorVelValCount(amount))); data.addVerticalVelocity(new SimpleEntry(lastMove.yDistance, 2)); data.addVerticalVelocity(new SimpleEntry(0.0, 2)); data.setFrictionJumpPhase(); // Reset fall height. // TODO: Later (e.g. 1.9) check for the ModelFlying, if fall damage is intended. data.clearNoFallData(); player.setFallDistance(0f); // TODO: Might do without this in case of elytra, needs ensure NoFall doesn't kill the player (...). if (debug) { debug(player, "Fly-nofly transition: Add velocity."); } }
this.player.setFallDistance(0); this.player.setSprinting(false); if ((new Random()).nextInt(4) == 0) {
@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); } }
tardis_loc.setYaw(yaw); World playerWorld = p.getLocation().getWorld(); p.setFallDistance(0.0f); plugin.getGeneralKeeper().getDoorListener().movePlayer(p, tardis_loc, false, playerWorld, false, 3, true); } else {
@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; } });
@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); } }
p.setVelocity(new Vector(0.0D, up, 0.0D)); } else { p.setFallDistance(0.0F); plugin.getServer().getScheduler().cancelTask(task);