1
0
mirror of https://e.coding.net/circlecloud/Residence.git synced 2025-11-24 21:46:16 +00:00

add new flag...

Signed-off-by: 502647092 <jtb1@163.com>
This commit is contained in:
502647092
2015-09-23 20:55:48 +08:00
parent f0db5f19ee
commit 9248ddfa3a
3 changed files with 139 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
package com.bekvon.bukkit.residence;
import java.util.HashMap;
import java.util.Map.Entry;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import com.bekvon.bukkit.residence.listeners.flag.ResidenceFlyListener;
import cn.citycraft.PluginHelper.config.FileConfig;
public class FlagManager {
Plugin plugin;
FileConfig config;
HashMap<Boolean, Listener> flagmap;
public FlagManager(Plugin plugin) {
this.plugin = plugin;
this.config = new FileConfig(plugin, "flagconfig.yml");
}
public void init() {
PluginManager pm = plugin.getServer().getPluginManager();
flagmap = new HashMap<Boolean, Listener>();
flagmap.put(config.getBoolean("Flag.Fly"), new ResidenceFlyListener());
for (Entry<Boolean, Listener> fm : flagmap.entrySet())
if (fm.getKey())
pm.registerEvents(fm.getValue(), plugin);
Residence.getLog().info("扩展Flag初始化完毕!");
}
}

View File

@@ -0,0 +1,98 @@
package com.bekvon.bukkit.residence.listeners.flag;
import java.util.HashMap;
import org.bukkit.ChatColor;
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.Residence;
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.FlagPermissions;
import com.bekvon.bukkit.residence.protection.ResidencePermissions;
public class ResidenceFlyListener implements Listener {
HashMap<Player, Player> fall = new HashMap<Player, Player>();
public ResidenceFlyListener() {
FlagPermissions.addFlag("fly");
FlagPermissions.addResidenceOnlyFlag("fly");
}
@EventHandler(ignoreCancelled = true)
public void FlagChange(ResidenceFlagChangeEvent e) {
ClaimedResidence res = e.getResidence();
for (Player p : res.getPlayersInResidence())
if (!permCheck(p))
if (!resPermCheck(res, p))
ChangePlayerFly(p, false);
else
ChangePlayerFly(p, true);
}
// ResidenceDeleteEvent.class
// ResidenceFlagChangeEvent.class
public void onFallDamage(EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
if (e.getCause() == DamageCause.FALL)
if (p == fall.get(p)) {
fall.remove(p);
e.setCancelled(true);
}
}
}
@EventHandler(ignoreCancelled = true)
public void resChange(ResidenceChangedEvent event) {
Player player = event.getPlayer();
ClaimedResidence resto = event.getTo();
if (!permCheck(player))
if (!resPermCheck(resto, player))
ChangePlayerFly(player, false);
else
ChangePlayerFly(player, true);
}
@EventHandler(ignoreCancelled = true)
public void ResDelete(ResidenceDeleteEvent e) {
ClaimedResidence res = e.getResidence();
for (Player p : res.getPlayersInResidence())
if (!permCheck(p))
ChangePlayerFly(p, false);
}
void ChangePlayerFly(Player p, boolean fly) {
if (p.getAllowFlight() && !fly) {
if (p.isFlying())
fall.put(p, p);
p.setAllowFlight(false);
p.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "fly"));
}
if (!p.getAllowFlight() && fly) {
if (p == fall.get(p))
fall.remove(p);
p.setAllowFlight(true);
}
}
boolean permCheck(Player p) {
return p.hasPermission("resfly.ignore") || p.isOp() || p.getGameMode() == GameMode.CREATIVE;
}
boolean resPermCheck(ClaimedResidence res, Player p) {
if (res == null)
return false;
ResidencePermissions perms = res.getPermissions();
return perms.playerHas(p.getName(), "fly", false);
}
}

View File

@@ -0,0 +1,3 @@
#领地插件配置文件2.7.0.0 重制 By: 喵♂呜(部分汉化来自宝石汉化组 大刘,Zesty).
Flag:
Fly: true