ResFly/src/main/java/cn/citycraft/ResFly/listen/PlayerListen.java

106 lines
3.0 KiB
Java

package cn.citycraft.ResFly.listen;
import java.util.HashMap;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import com.bekvon.bukkit.residence.event.ResidenceChangedEvent;
import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent;
import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent;
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import com.bekvon.bukkit.residence.protection.ResidencePermissions;
import cn.citycraft.ResFly.ResFly;
public class PlayerListen implements Listener {
HashMap<Player, Player> fall = new HashMap<Player, Player>();
ResFly plugin;
public PlayerListen(final ResFly main) {
this.plugin = main;
}
@EventHandler(ignoreCancelled = true)
public void FlagChange(final ResidenceFlagChangeEvent e) {
final ClaimedResidence res = e.getResidence();
for (final Player p : res.getPlayersInResidence()) {
if (!permCheck(p)) {
if (!resPermCheck(res, p)) {
ChangePlayerFly(p, false);
} else {
ChangePlayerFly(p, true);
}
}
}
}
public void onFallDamage(final EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
final Player p = (Player) e.getEntity();
if (e.getCause() == DamageCause.FALL) {
if (p == fall.get(p)) {
fall.remove(p);
e.setCancelled(true);
p.sendMessage(this.plugin.getfullmsg("Message.Protect"));
}
}
}
}
@EventHandler(ignoreCancelled = true)
public void resChange(final ResidenceChangedEvent event) {
final Player player = event.getPlayer();
final ClaimedResidence resto = event.getTo();
if (!permCheck(player)) {
if (!resPermCheck(resto, player)) {
ChangePlayerFly(player, false);
} else {
ChangePlayerFly(player, true);
}
}
}
@EventHandler(ignoreCancelled = true)
public void ResDelete(final ResidenceDeleteEvent e) {
final ClaimedResidence res = e.getResidence();
for (final Player p : res.getPlayersInResidence()) {
if (!permCheck(p)) {
ChangePlayerFly(p, false);
}
}
}
void ChangePlayerFly(final Player p, final boolean fly) {
if (p.getAllowFlight() && !fly) {
if (p.isFlying()) {
fall.put(p, p);
}
p.setAllowFlight(false);
p.sendMessage(plugin.getfullmsg("Message.Not_Allow"));
}
if (!p.getAllowFlight() && fly) {
if (p == fall.get(p)) {
fall.remove(p);
}
p.setAllowFlight(true);
p.sendMessage(plugin.getfullmsg("Message.Allow"));
}
}
boolean permCheck(final Player p) {
return p.hasPermission("ResFly.ignore") || p.isOp() || p.getGameMode() == GameMode.CREATIVE;
}
boolean resPermCheck(final ClaimedResidence res, final Player p) {
if (res == null) {
return false;
}
final ResidencePermissions perms = res.getPermissions();
return perms.playerHas(p.getName(), "fly", false);
}
}