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 fall = new HashMap(); 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); } }