Don't take fall damage after flying
This commit is contained in:
parent
055adf2e9e
commit
07eb3756e4
@ -55,6 +55,10 @@ public interface FPlayer extends EconomyParticipator {
|
|||||||
|
|
||||||
public void setRole(Role role);
|
public void setRole(Role role);
|
||||||
|
|
||||||
|
public boolean shouldTakeFallDamage();
|
||||||
|
|
||||||
|
public void setTakeFallDamage(boolean fallDamage);
|
||||||
|
|
||||||
public double getPowerBoost();
|
public double getPowerBoost();
|
||||||
|
|
||||||
public void setPowerBoost(double powerBoost);
|
public void setPowerBoost(double powerBoost);
|
||||||
|
@ -111,6 +111,12 @@ public class FactionsEntityListener implements Listener {
|
|||||||
} else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity())) {
|
} else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity())) {
|
||||||
// Players can not take any damage in a Safe Zone
|
// Players can not take any damage in a Safe Zone
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
} else if (event.getCause() == EntityDamageEvent.DamageCause.FALL && event.getEntity() instanceof Player) {
|
||||||
|
Player player = (Player) event.getEntity();
|
||||||
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
|
if (fPlayer != null && !fPlayer.shouldTakeFallDamage()) {
|
||||||
|
event.setCancelled(true); // Falling after /f fly
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// entity took generic damage?
|
// entity took generic damage?
|
||||||
|
@ -72,6 +72,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
protected transient boolean autoWarZoneEnabled;
|
protected transient boolean autoWarZoneEnabled;
|
||||||
protected transient boolean loginPvpDisabled;
|
protected transient boolean loginPvpDisabled;
|
||||||
protected transient long lastFrostwalkerMessage;
|
protected transient long lastFrostwalkerMessage;
|
||||||
|
protected transient boolean shouldTakeFallDamage = true;
|
||||||
|
|
||||||
public void login() {
|
public void login() {
|
||||||
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
|
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
|
||||||
@ -891,14 +892,36 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFFlying(boolean fly, boolean damage) {
|
public void setFFlying(boolean fly, boolean damage) {
|
||||||
getPlayer().setAllowFlight(fly);
|
Player player = getPlayer();
|
||||||
getPlayer().setFlying(fly);
|
if (player != null) {
|
||||||
|
player.setAllowFlight(fly);
|
||||||
|
player.setFlying(fly);
|
||||||
|
}
|
||||||
|
|
||||||
if (!damage) {
|
if (!damage) {
|
||||||
msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled");
|
msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled");
|
||||||
} else {
|
} else {
|
||||||
msg(TL.COMMAND_FLY_DAMAGE);
|
msg(TL.COMMAND_FLY_DAMAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If leaving fly mode, don't let them take fall damage for x seconds.
|
||||||
|
if (!fly) {
|
||||||
|
int cooldown = P.p.getConfig().getInt("fly-falldamage-cooldown", 3);
|
||||||
|
|
||||||
|
// If the value is 0 or lower, make them take fall damage.
|
||||||
|
// Otherwise, start a timer and have this cancel after a few seconds.
|
||||||
|
// Short task so we're just doing it in method. Not clean but eh.
|
||||||
|
if (cooldown > 0) {
|
||||||
|
this.shouldTakeFallDamage = false;
|
||||||
|
Bukkit.getScheduler().runTaskLater(P.p, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
shouldTakeFallDamage = true;
|
||||||
|
}
|
||||||
|
}, 20L * cooldown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isFlying = fly;
|
isFlying = fly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -919,6 +942,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
return access != null && access == Access.ALLOW;
|
return access != null && access == Access.ALLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldTakeFallDamage() {
|
||||||
|
return this.shouldTakeFallDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTakeFallDamage(boolean fallDamage) {
|
||||||
|
this.shouldTakeFallDamage = fallDamage;
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// Message Sending Helpers
|
// Message Sending Helpers
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -62,6 +62,11 @@ warp-cost:
|
|||||||
# Enable Faction Fly:
|
# Enable Faction Fly:
|
||||||
enable-faction-flight: true
|
enable-faction-flight: true
|
||||||
|
|
||||||
|
# If a player leaves fly (out of territory or took damage)
|
||||||
|
# how long should they not take fall damage for?
|
||||||
|
# Set to 0 to have them always take fall damage.
|
||||||
|
fly-falldamage-cooldown: 3
|
||||||
|
|
||||||
# Pistons
|
# Pistons
|
||||||
# Should we disable pistons in Faction territory? This will prevent people from doing something like:
|
# Should we disable pistons in Faction territory? This will prevent people from doing something like:
|
||||||
# http://i.gyazo.com/6a1a31222e58a5d60ff341c13f6a8404.gif
|
# http://i.gyazo.com/6a1a31222e58a5d60ff341c13f6a8404.gif
|
||||||
|
Loading…
Reference in New Issue
Block a user