1
0
mirror of https://e.coding.net/circlecloud/Residence.git synced 2026-05-01 21:31:38 +00:00

remove static class...

Signed-off-by: 502647092 <jtb1@163.com>
This commit is contained in:
502647092
2015-09-24 18:11:35 +08:00
parent 6b0f5ac789
commit 1cffbc7687
48 changed files with 4273 additions and 5120 deletions

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>cn.citycraft</groupId> <groupId>cn.citycraft</groupId>
<artifactId>Residence</artifactId> <artifactId>Residence</artifactId>
<version>2.7.0.6</version> <version>2.8.0.0</version>
<name>Residence</name> <name>Residence</name>
<build> <build>
<finalName>${project.name}</finalName> <finalName>${project.name}</finalName>

View File

@@ -20,48 +20,50 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions;
* @author Administrator * @author Administrator
*/ */
public class ConfigManager { public class ConfigManager {
protected String defaultGroup; private boolean enforceAreaInsideArea;
protected boolean useLeases; protected boolean actionBar;
protected boolean enableEconomy; protected boolean adminOps;
protected String economySystem;
protected boolean adminsOnly; protected boolean adminsOnly;
protected boolean allowEmptyResidences; protected boolean allowEmptyResidences;
protected int infoToolId;
protected int selectionToolId;
protected boolean adminOps;
protected String multiworldPlugin;
protected boolean enableRentSystem;
protected boolean leaseAutoRenew;
protected int rentCheckInterval;
protected int leaseCheckInterval;
protected int autoSaveInt; protected int autoSaveInt;
protected boolean flagsInherit;
protected ChatColor chatColor; protected ChatColor chatColor;
protected boolean chatEnable; protected boolean chatEnable;
protected boolean actionBar; protected List<Integer> customBothClick;
protected int minMoveUpdate; protected List<Integer> customContainers;
protected List<Integer> customRightClick;
protected String defaultGroup;
protected String economySystem;
protected boolean enableDebug;
protected boolean enableEconomy;
protected boolean enableLeaseMoneyAccount;
protected boolean enableRentSystem;
protected boolean flagsInherit;
protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalCreatorDefaults;
protected FlagPermissions globalResidenceDefaults;
protected Map<String, FlagPermissions> globalGroupDefaults; protected Map<String, FlagPermissions> globalGroupDefaults;
protected FlagPermissions globalResidenceDefaults;
protected int infoToolId;
protected String language; protected String language;
protected boolean preventBuildInRent; protected boolean leaseAutoRenew;
protected boolean stopOnSaveError; protected int leaseCheckInterval;
protected boolean legacyperms; protected boolean legacyperms;
protected int minMoveUpdate;
protected String multiworldPlugin;
protected String namefix; protected String namefix;
protected Residence plugin;
protected boolean preventBuildInRent;
protected int rentCheckInterval;
protected int selectionToolId;
protected boolean showIntervalMessages; protected boolean showIntervalMessages;
protected boolean spoutEnable; protected boolean spoutEnable;
protected boolean enableLeaseMoneyAccount; protected boolean stopOnSaveError;
protected boolean enableDebug; protected boolean useLeases;
protected List<Integer> customContainers;
protected List<Integer> customBothClick;
protected List<Integer> customRightClick;
private boolean enforceAreaInsideArea;
public ConfigManager(FileConfiguration config) { public ConfigManager(final Residence plugin) {
globalCreatorDefaults = new FlagPermissions(); this.plugin = plugin;
globalResidenceDefaults = new FlagPermissions(); globalCreatorDefaults = new FlagPermissions(plugin);
globalResidenceDefaults = new FlagPermissions(plugin);
globalGroupDefaults = new HashMap<String, FlagPermissions>(); globalGroupDefaults = new HashMap<String, FlagPermissions>();
this.load(config); this.load(plugin.getConfig());
} }
public boolean allowAdminsOnly() { public boolean allowAdminsOnly() {
@@ -89,7 +91,7 @@ public class ConfigManager {
} }
public boolean enableEconomy() { public boolean enableEconomy() {
return enableEconomy && Residence.getEconomyManager() != null; return enableEconomy && plugin.getEconomyManager() != null;
} }
public boolean enableLeaseMoneyAccount() { public boolean enableLeaseMoneyAccount() {
@@ -209,7 +211,7 @@ public class ConfigManager {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private void load(FileConfiguration config) { private void load(final FileConfiguration config) {
defaultGroup = config.getString("Global.DefaultGroup", "default").toLowerCase(); defaultGroup = config.getString("Global.DefaultGroup", "default").toLowerCase();
adminsOnly = config.getBoolean("Global.AdminOnlyCommands", false); adminsOnly = config.getBoolean("Global.AdminOnlyCommands", false);
useLeases = config.getBoolean("Global.UseLeaseSystem", false); useLeases = config.getBoolean("Global.UseLeaseSystem", false);
@@ -243,20 +245,23 @@ public class ConfigManager {
customContainers = config.getIntegerList("Global.CustomContainers"); customContainers = config.getIntegerList("Global.CustomContainers");
customBothClick = config.getIntegerList("Global.CustomBothClick"); customBothClick = config.getIntegerList("Global.CustomBothClick");
customRightClick = config.getIntegerList("Global.CustomRightClick"); customRightClick = config.getIntegerList("Global.CustomRightClick");
ConfigurationSection node = config.getConfigurationSection("Global.GroupDefault"); final ConfigurationSection node = config.getConfigurationSection("Global.GroupDefault");
if (!Residence.is1_8()) if (!plugin.is1_8()) {
actionBar = false; actionBar = false;
}
if (node != null) { if (node != null) {
Set<String> keys = node.getConfigurationSection(defaultGroup).getKeys(false); final Set<String> keys = node.getConfigurationSection(defaultGroup).getKeys(false);
if (keys != null) if (keys != null) {
for (String key : keys) for (final String key : keys) {
globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.GroupDefault"))); globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.GroupDefault")));
}
}
} }
try { try {
chatColor = ChatColor.valueOf(config.getString("Global.ResidenceChatColor", "DARK_PURPLE")); chatColor = ChatColor.valueOf(config.getString("Global.ResidenceChatColor", "DARK_PURPLE"));
} catch (Exception ex) { } catch (final Exception ex) {
chatColor = ChatColor.DARK_PURPLE; chatColor = ChatColor.DARK_PURPLE;
} }
} }

View File

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

View File

@@ -84,195 +84,183 @@ public class Residence extends JavaPlugin {
public static float bukkitver; public static float bukkitver;
protected static ResidenceManager rmanager;
protected static SelectionManager smanager;
protected static PermissionManager gmanager;
protected static ConfigManager cmanager;
protected static FlagManager fmanager;
protected static TaskManager taskmanager;
protected static ResidenceBlockListener blistener;
protected static ResidencePlayerListener plistener;
protected static ResidenceEntityListener elistener;
protected static ResidencePlayerListener_1_8 plistener1_8;
protected static TransactionManager tmanager;
protected static PermissionListManager pmanager;
protected static LeaseManager leasemanager;
protected static WorldItemManager imanager;
protected static WorldFlagManager wmanager;
protected static RentManager rentmanager;
protected static ChatManager chatmanager;
protected static Server server;
public static HelpEntry helppages;
protected static Language language;
protected static Logger log;
protected static boolean useWorldEdit;
protected static EconomyInterface economy;
public final static int saveVersion = 1; public final static int saveVersion = 1;
protected static File dataFolder; public final static String[] validLanguages = { "English", "Chinese" };
protected static int leaseBukkitId = -1; protected ResidenceBlockListener blistener;
protected static int rentBukkitId = -1; protected ChatManager chatmanager;
protected static int healBukkitId = -1; protected ConfigManager cmanager;
protected static int autosaveBukkitId = -1; protected FileConfig config;
protected static List<String> resadminToggle; protected File dataFolder;
protected static FileConfig config; protected Map<String, String> deleteConfirm;
private final static String[] validLanguages = { "English", "Chinese" }; protected EconomyInterface economy;
public static boolean initsuccess; protected ResidenceEntityListener elistener;
protected HandlerMainCommand hdmcnd;
protected boolean firstenable = true; protected boolean firstenable = true;
protected FlagManager fmanager;
public Map<String, String> deleteConfirm; protected PermissionManager gmanager;
protected HandlerMainCommand hdmcnd;
protected HelpEntry helppages;
protected WorldItemManager imanager;
protected boolean init;
protected Language language;
protected LeaseManager leasemanager;
protected Logger log;
protected ResidencePlayerListener plistener;
protected ResidencePlayerListener_1_8 plistener1_8;
protected PermissionListManager pmanager;
protected RentManager rentmanager;
protected List<String> resadminToggle;
protected ResidenceManager rmanager;
protected Server server;
protected SelectionManager smanager;
protected TaskManager taskmanager;
protected TransactionManager tmanager;
protected boolean useWorldEdit;
protected WorldFlagManager wmanager;
public Residence() { public Residence() {
} }
public static ResidenceBlockListener getBlockListener() { public ResidenceBlockListener getBlockListener() {
return blistener; return blistener;
} }
public static ChatManager getChatManager() { public ChatManager getChatManager() {
return chatmanager; return chatmanager;
} }
public static ConfigManager getConfigManager() {
return cmanager;
}
public static File getDataLocation() {
return dataFolder;
}
public static EconomyInterface getEconomyManager() {
return economy;
}
public static ResidenceEntityListener getEntityListener() {
return elistener;
}
public static WorldItemManager getItemManager() {
return imanager;
}
public static Language getLanguage() {
if (language == null)
language = new Language();
return language;
}
public static LeaseManager getLeaseManager() {
return leasemanager;
}
public static Logger getLog() {
return log;
}
public static PermissionManager getPermissionManager() {
return gmanager;
}
public static FlagPermissions getPermsByLoc(Location loc) {
ClaimedResidence res = rmanager.getByLoc(loc);
if (res != null)
return res.getPermissions();
else
return wmanager.getPerms(loc.getWorld().getName());
}
public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) {
ClaimedResidence res = rmanager.getByLoc(loc);
if (res != null)
return res.getPermissions();
else if (player != null)
return wmanager.getPerms(player);
else
return wmanager.getPerms(loc.getWorld().getName());
}
public static ResidencePlayerListener getPlayerListener() {
return plistener;
}
public static RentManager getRentManager() {
return rentmanager;
}
public static ResidenceManager getResidenceManager() {
return rmanager;
}
public static SelectionManager getSelectionManager() {
return smanager;
}
public static Server getServ() {
return server;
}
public static TransactionManager getTransactionManager() {
return tmanager;
}
public static WorldFlagManager getWorldFlags() {
return wmanager;
}
public static boolean is1_8() {
return bukkitver == 1.8;
}
public static boolean isResAdminOn(Player player) {
if (resadminToggle.contains(player.getName()))
return true;
return false;
}
public static boolean isResAdminOn(String player) {
if (resadminToggle.contains(player.toLowerCase()))
return true;
return false;
}
public static boolean isUseWorldEdit() {
return useWorldEdit;
}
public static void turnResAdminOn(Player player) {
resadminToggle.add(player.getName());
}
public static boolean validName(String name) {
if (name.contains(":") || name.contains("."))
return false;
if (cmanager.getResidenceNameRegex() == null)
return true;
else {
String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), "");
if (!name.equals(namecheck))
return false;
return true;
}
}
public void consoleMessage(String message) {
this.getLogger().info(message);
}
public void consoleMessage(String[] msg) {
for (String s : msg)
consoleMessage(s);
}
@Override @Override
public FileConfiguration getConfig() { public FileConfiguration getConfig() {
return config; return config;
} }
public void loadLang(File langFile) throws FileNotFoundException, IOException, InvalidConfigurationException { public ConfigManager getConfigManager() {
FileConfig langconfig = new FileConfig(this, langFile); return cmanager;
helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); }
public File getDataLocation() {
return dataFolder;
}
public Map<String, String> getDeleteConfirm() {
return deleteConfirm;
}
public EconomyInterface getEconomyManager() {
return economy;
}
public ResidenceEntityListener getEntityListener() {
return elistener;
}
public HelpEntry getHelppages() {
return helppages;
}
public WorldItemManager getItemManager() {
return imanager;
}
public Language getLanguage() {
if (language == null) {
language = new Language();
}
return language;
}
public LeaseManager getLeaseManager() {
return leasemanager;
}
public Logger getLog() {
return log;
}
public PermissionListManager getPermissionListManager() {
return pmanager;
}
public PermissionManager getPermissionManager() {
return gmanager;
}
public FlagPermissions getPermsByLoc(final Location loc) {
final ClaimedResidence res = rmanager.getByLoc(loc);
if (res != null) {
return res.getPermissions();
} else {
return wmanager.getPerms(loc.getWorld().getName());
}
}
public FlagPermissions getPermsByLocForPlayer(final Location loc, final Player player) {
final ClaimedResidence res = rmanager.getByLoc(loc);
if (res != null) {
return res.getPermissions();
} else if (player != null) {
return wmanager.getPerms(player);
} else {
return wmanager.getPerms(loc.getWorld().getName());
}
}
public ResidencePlayerListener getPlayerListener() {
return plistener;
}
public RentManager getRentManager() {
return rentmanager;
}
public ResidenceManager getResidenceManager() {
return rmanager;
}
public SelectionManager getSelectionManager() {
return smanager;
}
public Server getServ() {
return server;
}
public TransactionManager getTransactionManager() {
return tmanager;
}
public WorldFlagManager getWorldFlags() {
return wmanager;
}
public boolean is1_8() {
return bukkitver == 1.8;
}
public boolean isInit() {
return init;
}
public boolean isResAdminOn(final Player player) {
if (resadminToggle.contains(player.getName())) {
return true;
}
return false;
}
public boolean isResAdminOn(final String player) {
if (resadminToggle.contains(player.toLowerCase())) {
return true;
}
return false;
}
public boolean isUseWorldEdit() {
return useWorldEdit;
}
public void loadLang(final File langFile) throws FileNotFoundException, IOException, InvalidConfigurationException {
final FileConfig langconfig = new FileConfig(this, langFile);
helppages = HelpEntry.parseHelp(this, langconfig, "CommandHelp");
HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7));
InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7));
language = Language.parseText(langconfig, "Language"); language = Language.parseText(langconfig, "Language");
@@ -280,9 +268,9 @@ public class Residence extends JavaPlugin {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public boolean loadYml() throws Exception { public boolean loadYml() throws Exception {
File saveFolder = new File(dataFolder, "Save"); final File saveFolder = new File(dataFolder, "Save");
try { try {
File worldFolder = new File(saveFolder, "Worlds"); final File worldFolder = new File(saveFolder, "Worlds");
if (!saveFolder.isDirectory()) { if (!saveFolder.isDirectory()) {
this.getLogger().warning("领地数据保存目录不存在..."); this.getLogger().warning("领地数据保存目录不存在...");
this.getLogger().warning("请重新启动服务器生成新的文件..."); this.getLogger().warning("请重新启动服务器生成新的文件...");
@@ -290,9 +278,9 @@ public class Residence extends JavaPlugin {
} }
YMLSaveHelper yml; YMLSaveHelper yml;
File loadFile; File loadFile;
long time = System.currentTimeMillis(); final long time = System.currentTimeMillis();
HashMap<String, Object> worlds = new HashMap<String, Object>(); final HashMap<String, Object> worlds = new HashMap<String, Object>();
for (World world : server.getWorlds()) { for (final World world : server.getWorlds()) {
loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); loadFile = new File(worldFolder, "res_" + world.getName() + ".yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
@@ -300,34 +288,34 @@ public class Residence extends JavaPlugin {
worlds.put(world.getName(), yml.getRoot().get("Residences")); worlds.put(world.getName(), yml.getRoot().get("Residences"));
} }
} }
rmanager = ResidenceManager.load(worlds); rmanager = ResidenceManager.load(this, worlds);
loadFile = new File(saveFolder, "forsale.yml"); loadFile = new File(saveFolder, "forsale.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"), gmanager, rmanager); tmanager = TransactionManager.load(this, (Map<?, ?>) yml.getRoot().get("Economy"), gmanager, rmanager);
} }
loadFile = new File(saveFolder, "leases.yml"); loadFile = new File(saveFolder, "leases.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
leasemanager = LeaseManager.load((Map<String, Long>) yml.getRoot().get("Leases"), rmanager); leasemanager = LeaseManager.load(this, (Map<String, Long>) yml.getRoot().get("Leases"), rmanager);
} }
loadFile = new File(saveFolder, "permlists.yml"); loadFile = new File(saveFolder, "permlists.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists")); pmanager = PermissionListManager.load(this, (Map<String, Object>) yml.getRoot().get("PermissionLists"));
} }
loadFile = new File(saveFolder, "rent.yml"); loadFile = new File(saveFolder, "rent.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem")); rentmanager = RentManager.load(this, (Map<String, Object>) yml.getRoot().get("RentSystem"));
} }
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)"); this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
return true; return true;
} catch (Exception ex) { } catch (final Exception ex) {
this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: "); this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: ");
this.getLogger().warning("错误: " + ex); this.getLogger().warning("错误: " + ex);
throw ex; throw ex;
@@ -335,30 +323,27 @@ public class Residence extends JavaPlugin {
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); final ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender);
server.getPluginManager().callEvent(cevent); server.getPluginManager().callEvent(cevent);
if (cevent.isCancelled()) if (cevent.isCancelled()) {
return true; return true;
}
return hdmcnd.onCommand(sender, command, label, args); return hdmcnd.onCommand(sender, command, label, args);
} }
@Override @Override
public void onDisable() { public void onDisable() {
server.getScheduler().cancelTask(autosaveBukkitId); taskmanager.cancelall();
server.getScheduler().cancelTask(healBukkitId); if (init) {
if (cmanager.useLeases())
server.getScheduler().cancelTask(leaseBukkitId);
if (cmanager.enabledRentSystem())
server.getScheduler().cancelTask(rentBukkitId);
if (initsuccess)
try { try {
saveYml(); saveYml();
DataBackup.run(); DataBackup.run(this);
} catch (Exception ex) { } catch (final Exception ex) {
this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
this.getLogger().warning("错误: " + ex); this.getLogger().warning("错误: " + ex);
} }
}
} }
@Override @Override
@@ -366,45 +351,50 @@ public class Residence extends JavaPlugin {
try { try {
log = this.getLogger(); log = this.getLogger();
bukkitver = Float.parseFloat(this.getServer().getBukkitVersion().substring(0, 3)); bukkitver = Float.parseFloat(this.getServer().getBukkitVersion().substring(0, 3));
initsuccess = false; init = false;
deleteConfirm = new HashMap<String, String>(); deleteConfirm = new HashMap<String, String>();
resadminToggle = new ArrayList<String>(); resadminToggle = new ArrayList<String>();
server = this.getServer(); server = this.getServer();
dataFolder = this.getDataFolder(); dataFolder = this.getDataFolder();
if (!dataFolder.isDirectory()) if (!dataFolder.isDirectory()) {
dataFolder.mkdirs(); dataFolder.mkdirs();
cmanager = new ConfigManager(this.getConfig()); }
String multiworld = cmanager.getMultiworldPlugin(); cmanager = new ConfigManager(this);
final String multiworld = cmanager.getMultiworldPlugin();
if (multiworld != null) { if (multiworld != null) {
Plugin plugin = server.getPluginManager().getPlugin(multiworld); final Plugin plugin = server.getPluginManager().getPlugin(multiworld);
if (plugin != null) if (plugin != null) {
if (!plugin.isEnabled()) { if (!plugin.isEnabled()) {
this.getLogger().info(" - 加载多世界插件: " + multiworld); this.getLogger().info(" - 加载多世界插件: " + multiworld);
server.getPluginManager().enablePlugin(plugin); server.getPluginManager().enablePlugin(plugin);
} }
}
} }
gmanager = new PermissionManager(this.getConfig()); gmanager = new PermissionManager(this);
imanager = new WorldItemManager(this.getConfig()); imanager = new WorldItemManager(this.getConfig());
wmanager = new WorldFlagManager(this.getConfig()); wmanager = new WorldFlagManager(this);
chatmanager = new ChatManager(); chatmanager = new ChatManager(this);
rentmanager = new RentManager(); rentmanager = new RentManager(this);
for (String lang : validLanguages) for (final String lang : validLanguages) {
try { try {
if (this.checkNewLanguageVersion(lang)) if (this.checkNewLanguageVersion(lang)) {
this.writeDefaultLanguageFile(lang); this.writeDefaultLanguageFile(lang);
} catch (Exception ex) { }
} catch (final Exception ex) {
this.getLogger().warning("语言文件升级失败: " + lang + ".yml"); this.getLogger().warning("语言文件升级失败: " + lang + ".yml");
helppages = new HelpEntry(""); helppages = new HelpEntry(this, "");
language = new Language(); language = new Language();
} }
File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); }
final File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml");
try { try {
if (langFile.isFile()) if (langFile.isFile()) {
loadLang(langFile); loadLang(langFile);
else } else {
this.getLogger().warning("语言文件不存在..."); this.getLogger().warning("语言文件不存在...");
} catch (Exception ex) { }
} catch (final Exception ex) {
this.getLogger().warning("语言文件载入失败: " + cmanager.getLanguage() + ".yml 写入默认语言文件"); this.getLogger().warning("语言文件载入失败: " + cmanager.getLanguage() + ".yml 写入默认语言文件");
this.writeDefaultLanguageFile(cmanager.getLanguage()); this.writeDefaultLanguageFile(cmanager.getLanguage());
loadLang(langFile); loadLang(langFile);
@@ -413,71 +403,82 @@ public class Residence extends JavaPlugin {
if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { if (this.getConfig().getBoolean("Global.EnableEconomy", false)) {
this.getLogger().info("扫描经济系统..."); this.getLogger().info("扫描经济系统...");
if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) {
ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); final ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin();
if (vault.economyOK()) { if (vault.economyOK()) {
economy = vault; economy = vault;
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
} }
} }
if (economy == null) if (economy == null) {
this.loadVaultEconomy(); this.loadVaultEconomy();
if (economy == null) }
if (economy == null) {
this.loadEssentialsEconomy(); this.loadEssentialsEconomy();
if (economy == null) }
if (economy == null) {
this.getLogger().warning("未找到经济系统..."); this.getLogger().warning("未找到经济系统...");
}
} }
try { try {
this.loadYml(); this.loadYml();
} catch (Exception e) { } catch (final Exception e) {
this.getLogger().warning("领地数据载入错误,可能造成插件无法启动,请尝试恢复备份文件!"); this.getLogger().warning("领地数据载入错误,可能造成插件无法启动,请尝试恢复备份文件!");
this.getLogger().warning("错误: " + e); this.getLogger().warning("错误: " + e);
} }
if (rmanager == null) if (rmanager == null) {
rmanager = new ResidenceManager(); rmanager = new ResidenceManager(this);
if (leasemanager == null) }
leasemanager = new LeaseManager(rmanager); if (leasemanager == null) {
if (tmanager == null) leasemanager = new LeaseManager(this, rmanager);
tmanager = new TransactionManager(rmanager, gmanager); }
if (pmanager == null) if (tmanager == null) {
pmanager = new PermissionListManager(); tmanager = new TransactionManager(this, rmanager, gmanager);
if (taskmanager == null) }
if (pmanager == null) {
pmanager = new PermissionListManager(this);
}
if (taskmanager == null) {
taskmanager = new TaskManager(this); taskmanager = new TaskManager(this);
}
if (firstenable) { if (firstenable) {
if (!this.isEnabled()) if (!this.isEnabled()) {
return; return;
}
FlagPermissions.initValidFlags(); FlagPermissions.initValidFlags();
Plugin p = server.getPluginManager().getPlugin("WorldEdit"); final Plugin p = server.getPluginManager().getPlugin("WorldEdit");
if (p != null) { if (p != null) {
smanager = new WorldEditSelectionManager(server); smanager = new WorldEditSelectionManager(this);
useWorldEdit = true; useWorldEdit = true;
this.getLogger().info("发现 WorldEdit"); this.getLogger().info("发现 WorldEdit");
} else { } else {
smanager = new SelectionManager(server); smanager = new SelectionManager(this);
useWorldEdit = false; useWorldEdit = false;
this.getLogger().warning("WorldEdit 未找到!"); this.getLogger().warning("WorldEdit 未找到!");
} }
blistener = new ResidenceBlockListener(); blistener = new ResidenceBlockListener(this);
plistener = new ResidencePlayerListener(); plistener = new ResidencePlayerListener(this);
elistener = new ResidenceEntityListener(); elistener = new ResidenceEntityListener(this);
plistener1_8 = new ResidencePlayerListener_1_8(); plistener1_8 = new ResidencePlayerListener_1_8(this);
PluginManager pm = getServer().getPluginManager(); final PluginManager pm = getServer().getPluginManager();
pm.registerEvents(blistener, this); pm.registerEvents(blistener, this);
pm.registerEvents(plistener, this); pm.registerEvents(plistener, this);
if (is1_8()) if (is1_8()) {
pm.registerEvents(plistener1_8, this); pm.registerEvents(plistener1_8, this);
}
pm.registerEvents(elistener, this); pm.registerEvents(elistener, this);
firstenable = false; firstenable = false;
} else } else {
plistener.reload(); plistener.reload();
}
fmanager = new FlagManager(this); fmanager = new FlagManager(this);
fmanager.init(); fmanager.init();
taskmanager.add(server.getScheduler().runTaskTimer(this, new HealTask(), 20, 20)); taskmanager.add(server.getScheduler().runTaskTimer(this, new HealTask(this), 20, 20));
HandlerMainCommand hdmcnd = new HandlerMainCommand(this); hdmcnd = new HandlerMainCommand(this);
hdmcnd.registerCommand(new CommandRc(this)); hdmcnd.registerCommand(new CommandRc(this));
hdmcnd.registerCommand(new CommandRes(this)); hdmcnd.registerCommand(new CommandRes(this));
hdmcnd.registerCommand(new CommandResLoad(this)); hdmcnd.registerCommand(new CommandResLoad(this));
@@ -490,20 +491,22 @@ public class Residence extends JavaPlugin {
if (cmanager.useLeases()) { if (cmanager.useLeases()) {
int leaseInterval = cmanager.getLeaseCheckInterval(); int leaseInterval = cmanager.getLeaseCheckInterval();
leaseInterval = leaseInterval < 1 ? 1 : leaseInterval * 60 * 20; leaseInterval = leaseInterval < 1 ? 1 : leaseInterval * 60 * 20;
taskmanager.add(server.getScheduler().runTaskTimer(this, new LeaseTask(), leaseInterval, leaseInterval)); taskmanager.add(server.getScheduler().runTaskTimer(this, new LeaseTask(this), leaseInterval, leaseInterval));
} }
if (cmanager.enabledRentSystem()) { if (cmanager.enabledRentSystem()) {
int rentint = cmanager.getRentCheckInterval(); int rentint = cmanager.getRentCheckInterval();
rentint = rentint < 1 ? 1 : rentint * 60 * 20; rentint = rentint < 1 ? 1 : rentint * 60 * 20;
taskmanager.add(server.getScheduler().runTaskTimer(this, new RentTask(), rentint, rentint)); taskmanager.add(server.getScheduler().runTaskTimer(this, new RentTask(this), rentint, rentint));
} }
for (Player player : Bukkit.getServer().getOnlinePlayers()) for (final Player player : Bukkit.getServer().getOnlinePlayers()) {
if (Residence.getPermissionManager().isResidenceAdmin(player)) if (this.getPermissionManager().isResidenceAdmin(player)) {
turnResAdminOn(player); turnResAdminOn(player);
}
}
this.getLogger().info("载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜"); this.getLogger().info("载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜");
initsuccess = true; init = true;
} catch (Exception ex) { } catch (final Exception ex) {
initsuccess = false; init = false;
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!"); this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!");
this.getLogger().warning("错误: " + ex); this.getLogger().warning("错误: " + ex);
@@ -519,10 +522,10 @@ public class Residence extends JavaPlugin {
@Override @Override
public void reloadConfig() { public void reloadConfig() {
config.reload(); config.reload();
}; }
public void reloadPlugin() { public void reloadPlugin() {
PluginManager pm = server.getPluginManager(); final PluginManager pm = server.getPluginManager();
pm.disablePlugin(this); pm.disablePlugin(this);
pm.enablePlugin(this); pm.enablePlugin(this);
} }
@@ -530,31 +533,33 @@ public class Residence extends JavaPlugin {
@Override @Override
public void saveConfig() { public void saveConfig() {
config.save(); config.save();
} };
public void saveYml() throws IOException { public void saveYml() throws IOException {
File saveFolder = new File(dataFolder, "Save"); final File saveFolder = new File(dataFolder, "Save");
File worldFolder = new File(saveFolder, "Worlds"); final File worldFolder = new File(saveFolder, "Worlds");
worldFolder.mkdirs(); worldFolder.mkdirs();
YMLSaveHelper yml; YMLSaveHelper yml;
long time = System.currentTimeMillis(); final long time = System.currentTimeMillis();
Map<String, Object> save = rmanager.save(); final Map<String, Object> save = rmanager.save();
for (Entry<String, Object> entry : save.entrySet()) { for (final Entry<String, Object> entry : save.entrySet()) {
File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); final File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml");
File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); final File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml");
yml = new YMLSaveHelper(tmpFile); yml = new YMLSaveHelper(tmpFile);
yml.getRoot().put("Version", saveVersion); yml.getRoot().put("Version", saveVersion);
World world = server.getWorld(entry.getKey()); final World world = server.getWorld(entry.getKey());
if (world != null) if (world != null) {
yml.getRoot().put("Seed", world.getSeed()); yml.getRoot().put("Seed", world.getSeed());
}
yml.getRoot().put("Residences", entry.getValue()); yml.getRoot().put("Residences", entry.getValue());
yml.save(); yml.save();
if (ymlSaveLoc.isFile()) { if (ymlSaveLoc.isFile()) {
File backupFolder = new File(worldFolder, "Backup"); final File backupFolder = new File(worldFolder, "Backup");
backupFolder.mkdirs(); backupFolder.mkdirs();
File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); final File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml");
if (backupFile.isFile()) if (backupFile.isFile()) {
backupFile.delete(); backupFile.delete();
}
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
@@ -569,11 +574,12 @@ public class Residence extends JavaPlugin {
yml.getRoot().put("Economy", tmanager.save()); yml.getRoot().put("Economy", tmanager.save());
yml.save(); yml.save();
if (ymlSaveLoc.isFile()) { if (ymlSaveLoc.isFile()) {
File backupFolder = new File(saveFolder, "Backup"); final File backupFolder = new File(saveFolder, "Backup");
backupFolder.mkdirs(); backupFolder.mkdirs();
File backupFile = new File(backupFolder, "forsale.yml"); final File backupFile = new File(backupFolder, "forsale.yml");
if (backupFile.isFile()) if (backupFile.isFile()) {
backupFile.delete(); backupFile.delete();
}
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
@@ -586,11 +592,12 @@ public class Residence extends JavaPlugin {
yml.getRoot().put("Leases", leasemanager.save()); yml.getRoot().put("Leases", leasemanager.save());
yml.save(); yml.save();
if (ymlSaveLoc.isFile()) { if (ymlSaveLoc.isFile()) {
File backupFolder = new File(saveFolder, "Backup"); final File backupFolder = new File(saveFolder, "Backup");
backupFolder.mkdirs(); backupFolder.mkdirs();
File backupFile = new File(backupFolder, "leases.yml"); final File backupFile = new File(backupFolder, "leases.yml");
if (backupFile.isFile()) if (backupFile.isFile()) {
backupFile.delete(); backupFile.delete();
}
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
@@ -603,11 +610,12 @@ public class Residence extends JavaPlugin {
yml.getRoot().put("PermissionLists", pmanager.save()); yml.getRoot().put("PermissionLists", pmanager.save());
yml.save(); yml.save();
if (ymlSaveLoc.isFile()) { if (ymlSaveLoc.isFile()) {
File backupFolder = new File(saveFolder, "Backup"); final File backupFolder = new File(saveFolder, "Backup");
backupFolder.mkdirs(); backupFolder.mkdirs();
File backupFile = new File(backupFolder, "permlists.yml"); final File backupFile = new File(backupFolder, "permlists.yml");
if (backupFile.isFile()) if (backupFile.isFile()) {
backupFile.delete(); backupFile.delete();
}
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
@@ -620,82 +628,112 @@ public class Residence extends JavaPlugin {
yml.getRoot().put("RentSystem", rentmanager.save()); yml.getRoot().put("RentSystem", rentmanager.save());
yml.save(); yml.save();
if (ymlSaveLoc.isFile()) { if (ymlSaveLoc.isFile()) {
File backupFolder = new File(saveFolder, "Backup"); final File backupFolder = new File(saveFolder, "Backup");
backupFolder.mkdirs(); backupFolder.mkdirs();
File backupFile = new File(backupFolder, "rent.yml"); final File backupFile = new File(backupFolder, "rent.yml");
if (backupFile.isFile()) if (backupFile.isFile()) {
backupFile.delete(); backupFile.delete();
}
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
this.getLogger().info("保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)"); this.getLogger().info("保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
if (cmanager.showIntervalMessages()) if (cmanager.showIntervalMessages()) {
this.getLogger().info(" - 保存插件数据..."); this.getLogger().info(" - 保存插件数据...");
}
} }
private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { public void turnResAdminOn(final Player player) {
File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); resadminToggle.add(player.getName());
File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); }
if (outFile.isFile()) {
FileConfig testconfig = new FileConfig(this, outFile); public boolean validName(final String name) {
int oldversion = testconfig.getInt("FieldsVersion", 0); if (name.contains(":") || name.contains(".")) {
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) return false;
}
if (cmanager.getResidenceNameRegex() == null) {
return true;
} else {
final String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), "");
if (!name.equals(namecheck)) {
return false; return false;
FileConfig testconfig2 = new FileConfig(this, checkFile); }
return true;
}
}
private boolean checkNewLanguageVersion(final String lang) throws IOException, FileNotFoundException, InvalidConfigurationException {
final File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml");
final File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml");
if (outFile.isFile()) {
final FileConfig testconfig = new FileConfig(this, outFile);
final int oldversion = testconfig.getInt("FieldsVersion", 0);
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) {
return false;
}
final FileConfig testconfig2 = new FileConfig(this, checkFile);
testconfig2.load(checkFile); testconfig2.load(checkFile);
int newversion = testconfig2.getInt("FieldsVersion", oldversion); final int newversion = testconfig2.getInt("FieldsVersion", oldversion);
if (checkFile.isFile()) if (checkFile.isFile()) {
checkFile.delete(); checkFile.delete();
if (newversion > oldversion) }
if (newversion > oldversion) {
return true; return true;
}
return false; return false;
} }
return true; return true;
} }
private void loadEssentialsEconomy() { private void loadEssentialsEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Essentials"); final Plugin p = getServer().getPluginManager().getPlugin("Essentials");
if (p != null) { if (p != null) {
economy = new EssentialsEcoAdapter((Essentials) p); economy = new EssentialsEcoAdapter((Essentials) p);
this.getLogger().info("成功关联Essentials Economy!"); this.getLogger().info("成功关联Essentials Economy!");
} else } else {
this.getLogger().info("Essentials Economy 未找到!"); this.getLogger().info("Essentials Economy 未找到!");
}
} }
private void loadVaultEconomy() { private void loadVaultEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Vault"); final Plugin p = getServer().getPluginManager().getPlugin("Vault");
if (p != null) { if (p != null) {
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); final ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer());
if (vault.economyOK()) { if (vault.economyOK()) {
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
economy = vault; economy = vault;
} else } else {
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统..."); this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
} else }
} else {
this.getLogger().info("Vault 未找到!"); this.getLogger().info("Vault 未找到!");
}
} }
@SuppressWarnings("resource") @SuppressWarnings("resource")
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { private boolean writeDefaultFileFromJar(final File writeName, final String jarPath, final boolean backupOld) {
try { try {
File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); final File fileBackup = new File(this.getDataFolder(), "backup-" + writeName);
File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); final File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile();
if (jarloc.isFile()) { if (jarloc.isFile()) {
JarFile jar = new JarFile(jarloc); final JarFile jar = new JarFile(jarloc);
JarEntry entry = jar.getJarEntry(jarPath); final JarEntry entry = jar.getJarEntry(jarPath);
if (entry != null && !entry.isDirectory()) { if (entry != null && !entry.isDirectory()) {
InputStream in = jar.getInputStream(entry); final InputStream in = jar.getInputStream(entry);
InputStreamReader isr = new InputStreamReader(in, "UTF8"); final InputStreamReader isr = new InputStreamReader(in, "UTF8");
if (writeName.isFile()) if (writeName.isFile()) {
if (backupOld) { if (backupOld) {
if (fileBackup.isFile()) if (fileBackup.isFile()) {
fileBackup.delete(); fileBackup.delete();
}
writeName.renameTo(fileBackup); writeName.renameTo(fileBackup);
} else } else {
writeName.delete(); writeName.delete();
FileOutputStream out = new FileOutputStream(writeName); }
OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); }
char[] tempbytes = new char[512]; final FileOutputStream out = new FileOutputStream(writeName);
final OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8");
final char[] tempbytes = new char[512];
int readbytes = isr.read(tempbytes, 0, 512); int readbytes = isr.read(tempbytes, 0, 512);
while (readbytes > -1) { while (readbytes > -1) {
osw.write(tempbytes, 0, readbytes); osw.write(tempbytes, 0, readbytes);
@@ -707,16 +745,17 @@ public class Residence extends JavaPlugin {
} }
} }
return false; return false;
} catch (Exception ex) { } catch (final Exception ex) {
this.getLogger().warning("文件写入失败: " + writeName); this.getLogger().warning("文件写入失败: " + writeName);
return false; return false;
} }
} }
private void writeDefaultLanguageFile(String lang) { private void writeDefaultLanguageFile(final String lang) {
File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); final File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml");
outFile.getParentFile().mkdirs(); outFile.getParentFile().mkdirs();
if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) {
this.getLogger().info("保存默认 " + lang + " 语言文件..."); this.getLogger().info("保存默认 " + lang + " 语言文件...");
}
} }
} }

View File

@@ -5,64 +5,64 @@
package com.bekvon.bukkit.residence.chat; package com.bekvon.bukkit.residence.chat;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.event.ResidenceChatEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.event.ResidenceChatEvent;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class ChatChannel { public class ChatChannel {
protected String name; protected List<String> members;
protected List<String> members; protected String name;
protected Residence plugin;
public ChatChannel(String channelName) public ChatChannel(final Residence plugin, final String channelName) {
{ this.plugin = plugin;
name = channelName; name = channelName;
members = new ArrayList<String>(); members = new ArrayList<String>();
} }
public void chat(String sourcePlayer, String message) public void chat(final String sourcePlayer, final String message) {
{ final Server serv = plugin.getServ();
Server serv = Residence.getServ(); final ChatColor color = plugin.getConfigManager().getChatColor();
ChatColor color = Residence.getConfigManager().getChatColor(); final ResidenceChatEvent cevent = new ResidenceChatEvent(plugin.getResidenceManager().getByName(name), serv.getPlayer(sourcePlayer), message, color);
ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getResidenceManager().getByName(name),serv.getPlayer(sourcePlayer),message,color); plugin.getServ().getPluginManager().callEvent(cevent);
Residence.getServ().getPluginManager().callEvent(cevent); if (cevent.isCancelled()) {
if(cevent.isCancelled()) return;
return; }
for(String member : members) for (final String member : members) {
{ final Player player = serv.getPlayer(member);
Player player = serv.getPlayer(member); if (player != null) {
if(player!=null) player.sendMessage(cevent.getColor() + sourcePlayer + ": " + cevent.getChatMessage());
player.sendMessage(cevent.getColor() + sourcePlayer + ": " + cevent.getChatMessage()); }
} }
System.out.println("ResidentialChat[" + name + "] - " + sourcePlayer + ": " + cevent.getChatMessage()); System.out.println("ResidentialChat[" + name + "] - " + sourcePlayer + ": " + cevent.getChatMessage());
} }
public void join(String player)
{
if(!members.contains(player))
members.add(player);
}
public void leave(String player)
{
members.remove(player);
}
public boolean hasMember(String player) public boolean hasMember(final String player) {
{ return members.contains(player);
return members.contains(player); }
}
public int memberCount() public void join(final String player) {
{ if (!members.contains(player)) {
return members.size(); members.add(player);
} }
}
public void leave(final String player) {
members.remove(player);
}
public int memberCount() {
return members.size();
}
} }

View File

@@ -5,56 +5,55 @@
package com.bekvon.bukkit.residence.chat; package com.bekvon.bukkit.residence.chat;
import com.bekvon.bukkit.residence.Residence;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.bukkit.Server; import org.bukkit.Server;
import com.bekvon.bukkit.residence.Residence;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class ChatManager { public class ChatManager {
protected Map<String,ChatChannel> channelmap; protected Map<String, ChatChannel> channelmap;
protected Server server; protected Residence plugin;
protected Server server;
public ChatManager() public ChatManager(final Residence plugin) {
{ server = plugin.getServ();
server = Residence.getServ(); channelmap = new HashMap<String, ChatChannel>();
channelmap = new HashMap<String,ChatChannel>(); }
}
public void setChannel(String player, String channel) public ChatChannel getChannel(final String channel) {
{ return channelmap.get(channel);
this.removeFromChannel(player); }
if(!channelmap.containsKey(channel))
channelmap.put(channel, new ChatChannel(channel));
channelmap.get(channel).join(player);
}
public void removeFromChannel(String player) public ChatChannel getPlayerChannel(final String player) {
{ for (final ChatChannel chan : channelmap.values()) {
for(ChatChannel chan : channelmap.values()) if (chan.hasMember(player)) {
{ return chan;
if(chan.hasMember(player)) }
chan.leave(player); }
} return null;
} }
public ChatChannel getChannel(String channel)
{
return channelmap.get(channel);
}
public ChatChannel getPlayerChannel(String player) public void removeFromChannel(final String player) {
{ for (final ChatChannel chan : channelmap.values()) {
for(ChatChannel chan : channelmap.values()) if (chan.hasMember(player)) {
{ chan.leave(player);
if(chan.hasMember(player)) }
return chan; }
} }
return null;
} public void setChannel(final String player, final String channel) {
this.removeFromChannel(player);
if (!channelmap.containsKey(channel)) {
channelmap.put(channel, new ChatChannel(plugin, channel));
}
channelmap.get(channel).join(player);
}
} }

View File

@@ -14,34 +14,38 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandRc extends BaseCommand { public class CommandRc extends BaseCommand {
Residence plugin; Residence plugin;
public CommandRc(Residence plugin) { public CommandRc(final Residence plugin) {
super("rc"); super("rc");
this.plugin = plugin; this.plugin = plugin;
setOnlyPlayerExecutable(true); setOnlyPlayerExecutable(true);
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
String pname = sender.getName(); final String pname = sender.getName();
if (Residence.getConfigManager().chatEnabled()) { if (plugin.getConfigManager().chatEnabled()) {
if (args.length == 0) if (args.length == 0) {
Residence.getPlayerListener().tooglePlayerResidenceChat((Player) sender); plugin.getPlayerListener().tooglePlayerResidenceChat((Player) sender);
else { } else {
String area = Residence.getPlayerListener().getCurrentResidenceName(pname); final String area = plugin.getPlayerListener().getCurrentResidenceName(pname);
if (area != null) { if (area != null) {
ChatChannel channel = Residence.getChatManager().getChannel(area); final ChatChannel channel = plugin.getChatManager().getChannel(area);
if (channel != null) { if (channel != null) {
String message = ""; String message = "";
for (String arg : args) for (final String arg : args) {
message = message + " " + arg; message = message + " " + arg;
}
channel.chat(pname, message); channel.chat(pname, message);
} else } else {
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidChannel")); sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidChannel"));
} else }
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); } else {
sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotInResidence"));
}
} }
} else } else {
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ChatDisabled")); sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ChatDisabled"));
}
} }
} }

View File

@@ -7,79 +7,155 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.commandsub.CommandArea;
import com.bekvon.bukkit.residence.commandsub.CommandBank;
import com.bekvon.bukkit.residence.commandsub.CommandCheck;
import com.bekvon.bukkit.residence.commandsub.CommandClearFlags;
import com.bekvon.bukkit.residence.commandsub.CommandCompass;
import com.bekvon.bukkit.residence.commandsub.CommandConfirm; import com.bekvon.bukkit.residence.commandsub.CommandConfirm;
import com.bekvon.bukkit.residence.commandsub.CommandCreate;
import com.bekvon.bukkit.residence.commandsub.CommandCurrent;
import com.bekvon.bukkit.residence.commandsub.CommandDefault;
import com.bekvon.bukkit.residence.commandsub.CommandGive;
import com.bekvon.bukkit.residence.commandsub.CommandGset;
import com.bekvon.bukkit.residence.commandsub.CommandInfo;
import com.bekvon.bukkit.residence.commandsub.CommandKick;
import com.bekvon.bukkit.residence.commandsub.CommandLease;
import com.bekvon.bukkit.residence.commandsub.CommandLimits;
import com.bekvon.bukkit.residence.commandsub.CommandList;
import com.bekvon.bukkit.residence.commandsub.CommandListAll;
import com.bekvon.bukkit.residence.commandsub.CommandListAllHidden;
import com.bekvon.bukkit.residence.commandsub.CommandListHidden;
import com.bekvon.bukkit.residence.commandsub.CommandLists;
import com.bekvon.bukkit.residence.commandsub.CommandLset;
import com.bekvon.bukkit.residence.commandsub.CommandMarket;
import com.bekvon.bukkit.residence.commandsub.CommandMaterial;
import com.bekvon.bukkit.residence.commandsub.CommandMessage;
import com.bekvon.bukkit.residence.commandsub.CommandMirror;
import com.bekvon.bukkit.residence.commandsub.CommandPset;
import com.bekvon.bukkit.residence.commandsub.CommandRemove; import com.bekvon.bukkit.residence.commandsub.CommandRemove;
import com.bekvon.bukkit.residence.commandsub.CommandRemoveAll;
import com.bekvon.bukkit.residence.commandsub.CommandRename;
import com.bekvon.bukkit.residence.commandsub.CommandRenameArea;
import com.bekvon.bukkit.residence.commandsub.CommandSelect;
import com.bekvon.bukkit.residence.commandsub.CommandServer;
import com.bekvon.bukkit.residence.commandsub.CommandSet;
import com.bekvon.bukkit.residence.commandsub.CommandSetOwner; import com.bekvon.bukkit.residence.commandsub.CommandSetOwner;
import com.bekvon.bukkit.residence.commandsub.CommandSubList;
import com.bekvon.bukkit.residence.commandsub.CommandSubZone;
import com.bekvon.bukkit.residence.commandsub.CommandTool;
import com.bekvon.bukkit.residence.commandsub.CommandTp;
import com.bekvon.bukkit.residence.commandsub.CommandTpSet;
import com.bekvon.bukkit.residence.commandsub.CommandUnStuck;
import com.bekvon.bukkit.residence.commandsub.CommandVersion; import com.bekvon.bukkit.residence.commandsub.CommandVersion;
import cn.citycraft.PluginHelper.commands.BaseCommand; import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.PluginHelper.commands.HandlerSubCommand; import cn.citycraft.PluginHelper.commands.HandlerSubCommand;
public class CommandRes extends BaseCommand { public class CommandRes extends BaseCommand {
Residence plugin;
HandlerSubCommand hdsubcmd; HandlerSubCommand hdsubcmd;
public CommandRes(Residence plugin) { Residence plugin;
public CommandRes(final Residence plugin) {
super("res", "residence", "resadmin"); super("res", "residence", "resadmin");
this.plugin = plugin; this.plugin = plugin;
hdsubcmd = new HandlerSubCommand(plugin); hdsubcmd = new HandlerSubCommand(plugin);
hdsubcmd.registerCommand(new CommandConfirm(plugin));
hdsubcmd.registerCommand(new CommandRemove(plugin));
hdsubcmd.registerCommand(new CommandVersion(plugin));
hdsubcmd.registerCommand(new CommandSetOwner(plugin));
// Player player = null; hdsubcmd.registerCommand(new CommandArea(plugin));
// boolean resadmin = (command != null); hdsubcmd.registerCommand(new CommandBank(plugin));
// ResidenceManager rmanager = Residence.getResidenceManager(); hdsubcmd.registerCommand(new CommandCheck(plugin));
// Map<String, String> deleteConfirm = plugin.deleteConfirm; hdsubcmd.registerCommand(new CommandClearFlags(plugin));
// Language language = Residence.getLanguage(); hdsubcmd.registerCommand(new CommandCompass(plugin));
hdsubcmd.registerCommand(new CommandConfirm(plugin));
hdsubcmd.registerCommand(new CommandCreate(plugin));
hdsubcmd.registerCommand(new CommandCurrent(plugin));
hdsubcmd.registerCommand(new CommandDefault(plugin));
hdsubcmd.registerCommand(new CommandGive(plugin));
hdsubcmd.registerCommand(new CommandGset(plugin));
hdsubcmd.registerCommand(new CommandInfo(plugin));
hdsubcmd.registerCommand(new CommandKick(plugin));
hdsubcmd.registerCommand(new CommandLease(plugin));
hdsubcmd.registerCommand(new CommandLimits(plugin));
hdsubcmd.registerCommand(new CommandList(plugin));
hdsubcmd.registerCommand(new CommandListAll(plugin));
hdsubcmd.registerCommand(new CommandListAllHidden(plugin));
hdsubcmd.registerCommand(new CommandListHidden(plugin));
hdsubcmd.registerCommand(new CommandLists(plugin));
hdsubcmd.registerCommand(new CommandLset(plugin));
hdsubcmd.registerCommand(new CommandMarket(plugin));
hdsubcmd.registerCommand(new CommandMaterial(plugin));
hdsubcmd.registerCommand(new CommandMessage(plugin));
hdsubcmd.registerCommand(new CommandMirror(plugin));
hdsubcmd.registerCommand(new CommandPset(plugin));
hdsubcmd.registerCommand(new CommandRemove(plugin));
hdsubcmd.registerCommand(new CommandRemoveAll(plugin));
hdsubcmd.registerCommand(new CommandRename(plugin));
hdsubcmd.registerCommand(new CommandRenameArea(plugin));
hdsubcmd.registerCommand(new CommandSelect(plugin));
hdsubcmd.registerCommand(new CommandServer(plugin));
hdsubcmd.registerCommand(new CommandSet(plugin));
hdsubcmd.registerCommand(new CommandSetOwner(plugin));
hdsubcmd.registerCommand(new CommandSubList(plugin));
hdsubcmd.registerCommand(new CommandSubZone(plugin));
hdsubcmd.registerCommand(new CommandTool(plugin));
hdsubcmd.registerCommand(new CommandTp(plugin));
hdsubcmd.registerCommand(new CommandTpSet(plugin));
hdsubcmd.registerCommand(new CommandUnStuck(plugin));
hdsubcmd.registerCommand(new CommandVersion(plugin));
plugin.getCommand("residence").setTabCompleter(hdsubcmd); plugin.getCommand("residence").setTabCompleter(hdsubcmd);
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
boolean resadmin = false; boolean resadmin = false;
if (sender instanceof Player) { if (sender instanceof Player) {
if (label.equalsIgnoreCase("resadmin")) if (label.equalsIgnoreCase("resadmin")) {
if (Residence.getPermissionManager().isResidenceAdmin((Player) sender)) if (plugin.getPermissionManager().isResidenceAdmin((Player) sender)) {
resadmin = true; resadmin = true;
else } else {
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NonAdmin")); sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NonAdmin"));
} else }
}
} else {
resadmin = true; resadmin = true;
}
if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) {
commandHelp(args, resadmin, sender); commandHelp(args, resadmin, sender);
return; return;
} }
if (Residence.getConfigManager().allowAdminsOnly()) if (plugin.getConfigManager().allowAdminsOnly()) {
if (!resadmin) { if (!resadmin) {
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AdminOnly")); sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AdminOnly"));
return; return;
} }
if (args.length == 0) }
if (args.length == 0) {
return; return;
}
hdsubcmd.onCommand(sender, resadmin ? command : null, label, args); hdsubcmd.onCommand(sender, resadmin ? command : null, label, args);
} }
private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { private boolean commandHelp(final String[] args, final boolean resadmin, final CommandSender sender) {
if (Residence.helppages != null) { if (plugin.getHelppages() != null) {
String helppath = "res"; String helppath = "res";
for (String arg : args) { for (final String arg : args) {
if (arg.equalsIgnoreCase("?")) if (arg.equalsIgnoreCase("?")) {
break; break;
}
helppath = helppath + "." + arg; helppath = helppath + "." + arg;
} }
int page = 1; int page = 1;
if (!args[args.length - 1].equalsIgnoreCase("?")) if (!args[args.length - 1].equalsIgnoreCase("?")) {
try { try {
page = Integer.parseInt(args[args.length - 1]); page = Integer.parseInt(args[args.length - 1]);
} catch (Exception ex) { } catch (final Exception ex) {
sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidHelp"));
} }
if (Residence.helppages.containesEntry(helppath)) { }
Residence.helppages.printHelp(sender, page, helppath); if (plugin.getHelppages().containesEntry(helppath)) {
plugin.getHelppages().printHelp(sender, page, helppath);
return true; return true;
} }
} }

View File

@@ -16,22 +16,23 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandResLoad extends BaseCommand { public class CommandResLoad extends BaseCommand {
Residence plugin; Residence plugin;
public CommandResLoad(Residence plugin) { public CommandResLoad(final Residence plugin) {
super("resreload"); super("resreload");
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
if (!(sender instanceof Player) || Residence.getPermissionManager().isResidenceAdmin((Player) sender)) if (!(sender instanceof Player) || plugin.getPermissionManager().isResidenceAdmin((Player) sender)) {
try { try {
plugin.loadYml(); plugin.loadYml();
sender.sendMessage(ChatColor.GREEN + "[Residence] 从配置保存文件重新载入数据..."); sender.sendMessage(ChatColor.GREEN + "[Residence] 从配置保存文件重新载入数据...");
} catch (Exception ex) { } catch (final Exception ex) {
sender.sendMessage(ChatColor.RED + "[Residence] 无法从配置保存文件重新载入数据, 请查看控制台异常信息!"); sender.sendMessage(ChatColor.RED + "[Residence] 无法从配置保存文件重新载入数据, 请查看控制台异常信息!");
sender.sendMessage(ChatColor.RED + "[Residence] 异常: " + ex.getMessage()); sender.sendMessage(ChatColor.RED + "[Residence] 异常: " + ex.getMessage());
Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex);
} }
}
} }
} }

View File

@@ -13,23 +13,23 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandResReload extends BaseCommand { public class CommandResReload extends BaseCommand {
Residence plugin; Residence plugin;
public CommandResReload(Residence plugin) { public CommandResReload(final Residence plugin) {
super("resreload"); super("resreload");
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; final Player player = (Player) sender;
if (Residence.getPermissionManager().isResidenceAdmin(player)) { if (plugin.getPermissionManager().isResidenceAdmin(player)) {
plugin.reloadPlugin(); plugin.reloadPlugin();
sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件."); sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件.");
System.out.println("[Residence] 重载 by " + player.getName() + "."); plugin.getLogger().info("重载 by " + player.getName() + ".");
} }
} else { } else {
plugin.reloadPlugin(); plugin.reloadPlugin();
System.out.println("[Residence] 重载 by 控制台."); plugin.getLogger().info("重载 by 控制台.");
} }
} }

View File

@@ -13,7 +13,7 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandResWorld extends BaseCommand { public class CommandResWorld extends BaseCommand {
Residence plugin; Residence plugin;
public CommandResWorld(Residence plugin) { public CommandResWorld(final Residence plugin) {
super("resworld"); super("resworld");
this.plugin = plugin; this.plugin = plugin;
setMinimumArguments(2); setMinimumArguments(2);
@@ -21,12 +21,14 @@ public class CommandResWorld extends BaseCommand {
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
if (args[0].equalsIgnoreCase("remove")) if (args[0].equalsIgnoreCase("remove")) {
if (sender instanceof ConsoleCommandSender) if (sender instanceof ConsoleCommandSender) {
Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); plugin.getResidenceManager().removeAllFromWorld(sender, args[1]);
else } else {
sender.sendMessage(ChatColor.RED + "当前命令必须从控制台执行."); sender.sendMessage(ChatColor.RED + "当前命令必须从控制台执行.");
}
}
} }
} }

View File

@@ -17,32 +17,31 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandConfirm extends BaseCommand { public class CommandConfirm extends BaseCommand {
Residence plugin; Residence plugin;
public CommandConfirm(Residence plugin) { public CommandConfirm(final Residence plugin) {
super("?", "help"); super("confirm");
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
Player player = null; Player player = null;
boolean resadmin = (command != null); final boolean resadmin = (command != null);
ResidenceManager rmanager = Residence.getResidenceManager(); final ResidenceManager rmanager = plugin.getResidenceManager();
Map<String, String> deleteConfirm = plugin.deleteConfirm; final Map<String, String> deleteConfirm = plugin.getDeleteConfirm();
Language language = Residence.getLanguage(); final Language language = plugin.getLanguage();
String name = "Console"; String name = "Console";
if (sender instanceof Player) { if (sender instanceof Player) {
player = (Player) sender; player = (Player) sender;
name = player.getName(); name = player.getName();
} }
if (args.length == 1) { final String area = deleteConfirm.get(name);
String area = deleteConfirm.get(name); if (area == null) {
if (area == null) sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } else {
else { rmanager.removeResidence(player, area, resadmin);
rmanager.removeResidence(player, area, resadmin); deleteConfirm.remove(name);
deleteConfirm.remove(name); if (player == null) {
if (player == null) sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
} }
} }
} }

View File

@@ -19,79 +19,84 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandRemove extends BaseCommand { public class CommandRemove extends BaseCommand {
Residence plugin; Residence plugin;
public CommandRemove(Residence plugin) { public CommandRemove(final Residence plugin) {
super("remove", "delete"); super("remove", "delete");
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
Player player = null; Player player = null;
boolean resadmin = (command != null); final boolean resadmin = (command != null);
ResidenceManager rmanager = Residence.getResidenceManager(); final ResidenceManager rmanager = plugin.getResidenceManager();
Map<String, String> deleteConfirm = plugin.deleteConfirm; final Map<String, String> deleteConfirm = plugin.getDeleteConfirm();
Language language = Residence.getLanguage(); final Language language = plugin.getLanguage();
if (sender instanceof Player) { if (sender instanceof Player) {
player = (Player) sender; player = (Player) sender;
if (args.length == 1) { final String area = rmanager.getNameByLoc(player.getLocation());
String area = rmanager.getNameByLoc(player.getLocation()); if (area != null) {
if (area != null) { final ClaimedResidence res = rmanager.getByName(area);
ClaimedResidence res = rmanager.getByName(area); if (res.getParent() != null) {
if (res.getParent() != null) { final String[] split = area.split("\\.");
String[] split = area.split("\\."); final String words = split[split.length - 1];
String words = split[split.length - 1]; if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); deleteConfirm.put(player.getName(), area);
deleteConfirm.put(player.getName(), area);
} else
rmanager.removeResidence(player, area, resadmin);
return;
} else { } else {
if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { rmanager.removeResidence(player, area, resadmin);
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED));
deleteConfirm.put(player.getName(), area);
} else
rmanager.removeResidence(player, area, resadmin);
return;
} }
return;
} else {
if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED));
deleteConfirm.put(player.getName(), area);
} else {
rmanager.removeResidence(player, area, resadmin);
}
return;
} }
} }
} }
if (args.length != 2) if (args.length != 1) {
return; return;
}
if (player != null) { if (player != null) {
if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { if (!deleteConfirm.containsKey(player.getName()) || !args[0].equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
String words = null; String words = null;
if (rmanager.getByName(args[1]) != null) { if (rmanager.getByName(args[0]) != null) {
ClaimedResidence res = rmanager.getByName(args[1]); final ClaimedResidence res = rmanager.getByName(args[0]);
if (res.getParent() != null) { if (res.getParent() != null) {
String[] split = args[1].split("\\."); final String[] split = args[0].split("\\.");
words = split[split.length - 1]; words = split[split.length - 1];
} }
} }
if (words == null) if (words == null) {
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[0] + ChatColor.RED));
else } else {
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
deleteConfirm.put(player.getName(), args[1]); }
} else deleteConfirm.put(player.getName(), args[0]);
rmanager.removeResidence(player, args[1], resadmin); } else {
} else if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { rmanager.removeResidence(player, args[0], resadmin);
}
} else if (!deleteConfirm.containsKey("Console") || !args[0].equalsIgnoreCase(deleteConfirm.get("Console"))) {
String words = null; String words = null;
if (rmanager.getByName(args[1]) != null) { if (rmanager.getByName(args[0]) != null) {
ClaimedResidence res = rmanager.getByName(args[1]); final ClaimedResidence res = rmanager.getByName(args[1]);
if (res.getParent() != null) { if (res.getParent() != null) {
String[] split = args[1].split("\\."); final String[] split = args[0].split("\\.");
words = split[split.length - 1]; words = split[split.length - 1];
} }
} }
if (words == null) if (words == null) {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); Bukkit.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[0] + ChatColor.RED));
else } else {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); Bukkit.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
deleteConfirm.put("Console", args[1]); }
} else deleteConfirm.put("Console", args[0]);
rmanager.removeResidence(args[1]); } else {
rmanager.removeResidence(args[0]);
}
} }
} }

View File

@@ -15,30 +15,34 @@ import cn.citycraft.PluginHelper.commands.BaseCommand;
public class CommandSetOwner extends BaseCommand { public class CommandSetOwner extends BaseCommand {
Residence plugin; Residence plugin;
public CommandSetOwner(Residence plugin) { public CommandSetOwner(final Residence plugin) {
super("setowner"); super("setowner");
this.plugin = plugin; this.plugin = plugin;
setMinimumArguments(2);
setPossibleArguments("[领地名] [玩家]");
} }
@Override @Override
public void execute(CommandSender sender, Command command, String label, String[] args) throws CommandException { public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
boolean resadmin = (command != null); final boolean resadmin = (command != null);
ResidenceManager rmanager = Residence.getResidenceManager(); final ResidenceManager rmanager = plugin.getResidenceManager();
Language language = Residence.getLanguage(); final Language language = plugin.getLanguage();
if (!resadmin) {
if (!resadmin)
sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission"));
ClaimedResidence area = rmanager.getByName(args[1]); }
final ClaimedResidence area = rmanager.getByName(args[0]);
if (area != null) { if (area != null) {
area.getPermissions().setOwner(args[2], true); area.getPermissions().setOwner(args[1], true);
if (area.getParent() == null) if (area.getParent() == null) {
sender.sendMessage( sender.sendMessage(
ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[0] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[1] + ChatColor.GREEN));
else } else {
sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange",
ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); ChatColor.YELLOW + " " + args[0].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[1] + ChatColor.GREEN));
} else }
} else {
sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
}
} }
} }

View File

@@ -4,98 +4,87 @@
*/ */
package com.bekvon.bukkit.residence.economy; package com.bekvon.bukkit.residence.economy;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import org.bukkit.entity.Player;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class ResidenceBank { public class ResidenceBank {
int storedMoney; Residence plugin;
ClaimedResidence res; ClaimedResidence res;
int storedMoney;
public ResidenceBank(ClaimedResidence parent) public ResidenceBank(final Residence plugin, final ClaimedResidence parent) {
{ this.plugin = plugin;
storedMoney = 0; storedMoney = 0;
res = parent; res = parent;
} }
public int getStoredMoney() public void add(final int amount) {
{ storedMoney = storedMoney + amount;
return storedMoney; }
}
public void setStoredMoney(int amount) public void deposit(final Player player, final int amount, final boolean resadmin) {
{ if (!plugin.getConfigManager().enableEconomy()) {
storedMoney = amount; player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
} }
if (!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoBankAccess"));
return;
}
if (!plugin.getEconomyManager().canAfford(player.getName(), amount)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
return;
}
if (plugin.getEconomyManager().subtract(player.getName(), amount)) {
this.add(amount);
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("BankDeposit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN));
}
}
public void add(int amount) public int getStoredMoney() {
{ return storedMoney;
storedMoney = storedMoney + amount; }
}
public boolean hasEnough(int amount) public boolean hasEnough(final int amount) {
{ if (storedMoney >= amount) {
if(storedMoney >= amount) return true;
return true; }
return false; return false;
} }
public void subtract(int amount) public void setStoredMoney(final int amount) {
{ storedMoney = amount;
storedMoney = storedMoney - amount; }
if(storedMoney<0)
storedMoney = 0;
}
public void withdraw(Player player, int amount, boolean resadmin) public void subtract(final int amount) {
{ storedMoney = storedMoney - amount;
if(!Residence.getConfigManager().enableEconomy()) if (storedMoney < 0) {
{ storedMoney = 0;
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); }
} }
if(!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false))
{
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoBankAccess"));
return;
}
if(!hasEnough(amount))
{
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("BankNoMoney"));
return;
}
if(Residence.getEconomyManager().add(player.getName(), amount))
{
this.subtract(amount);
player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("BankWithdraw",ChatColor.YELLOW + String.format("%d",amount) + ChatColor.GREEN));
}
}
public void deposit(Player player, int amount, boolean resadmin) public void withdraw(final Player player, final int amount, final boolean resadmin) {
{ if (!plugin.getConfigManager().enableEconomy()) {
if(!Residence.getConfigManager().enableEconomy()) player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
{ }
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); if (!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false)) {
} player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoBankAccess"));
if(!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false)) return;
{ }
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoBankAccess")); if (!hasEnough(amount)) {
return; player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("BankNoMoney"));
} return;
if(!Residence.getEconomyManager().canAfford(player.getName(), amount)) }
{ if (plugin.getEconomyManager().add(player.getName(), amount)) {
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NotEnoughMoney")); this.subtract(amount);
return; player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("BankWithdraw", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN));
} }
if(Residence.getEconomyManager().subtract(player.getName(), amount)) }
{
this.add(amount);
player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("BankDeposit",ChatColor.YELLOW + String.format("%d",amount) + ChatColor.GREEN));
}
}
} }

View File

@@ -5,262 +5,269 @@
package com.bekvon.bukkit.residence.economy; package com.bekvon.bukkit.residence.economy;
import org.bukkit.ChatColor;
import com.bekvon.bukkit.residence.protection.CuboidArea;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ResidenceManager;
import com.bekvon.bukkit.residence.permissions.PermissionManager;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import com.bekvon.bukkit.residence.permissions.PermissionManager;
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import com.bekvon.bukkit.residence.protection.CuboidArea;
import com.bekvon.bukkit.residence.protection.ResidenceManager;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class TransactionManager { public class TransactionManager {
ResidenceManager manager; private Map<String, Integer> sellAmount;
private Map<String, Integer> sellAmount; PermissionManager gm;
PermissionManager gm; ResidenceManager manager;
Residence plugin;
public static boolean chargeEconomyMoney(Player player, int amount) { public TransactionManager(final Residence plugin, final ResidenceManager m, final PermissionManager g) {
EconomyInterface econ = Residence.getEconomyManager(); this.plugin = plugin;
if (econ == null) { gm = g;
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); manager = m;
return false; sellAmount = Collections.synchronizedMap(new HashMap<String, Integer>());
} }
if (!econ.canAfford(player.getName(), amount)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney"));
return false;
}
econ.subtract(player.getName(), amount);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
return true;
}
public TransactionManager(ResidenceManager m, PermissionManager g) { public static boolean chargeEconomyMoney(final Residence plugin, final Player player, final int amount) {
gm = g; final EconomyInterface econ = plugin.getEconomyManager();
manager = m; if (econ == null) {
sellAmount = Collections.synchronizedMap(new HashMap<String, Integer>()); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
} return false;
}
if (!econ.canAfford(player.getName(), amount)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
return false;
}
econ.subtract(player.getName(), amount);
player.sendMessage(ChatColor.GREEN
+ plugin.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
return true;
}
public void putForSale(String areaname, Player player, int amount, boolean resadmin) { @SuppressWarnings({ "unchecked", "rawtypes" })
if (Residence.getConfigManager().enabledRentSystem()) { public static TransactionManager load(final Residence plugin, final Map root, final PermissionManager p, final ResidenceManager r) {
if (Residence.getRentManager().isForRent(areaname)) { final TransactionManager tman = new TransactionManager(plugin, r, p);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentSellFail")); if (root != null) {
return; tman.sellAmount = root;
} }
} return tman;
if (!resadmin) { }
if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled"));
return;
}
boolean cansell = Residence.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("residence.sell");
if (!cansell && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
if (amount <= 0) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount"));
return;
}
}
String pname = player.getName();
ClaimedResidence area = manager.getByName(areaname);
if (area == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence"));
return;
}
if (!area.getPermissions().getOwner().equals(pname) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
if (sellAmount.containsKey(areaname)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AlreadySellFail"));
return;
}
sellAmount.put(areaname, amount);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN));
}
public boolean putForSale(String areaname, int amount) { public void buyPlot(final String areaname, final Player player, final boolean resadmin) {
if (Residence.getConfigManager().enabledRentSystem()) { final PermissionGroup group = gm.getGroup(player);
if (Residence.getRentManager().isForRent(areaname)) { if (!resadmin) {
return false; if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) {
} player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
} return;
ClaimedResidence area = manager.getByName(areaname); }
if (area == null) { final boolean canbuy = group.canBuyLand() || player.hasPermission("plugin.buy");
return false; if (!canbuy && !resadmin) {
} player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
if (sellAmount.containsKey(areaname)) { return;
return false; }
} }
sellAmount.put(areaname, amount); if (isForSale(areaname)) {
return true; final ClaimedResidence res = manager.getByName(areaname);
} if (res == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidArea"));
sellAmount.remove(areaname);
return;
}
if (res.getPermissions().getOwner().equals(player.getName())) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("OwnerBuyFail"));
return;
}
if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceTooMany"));
return;
}
final Server serv = plugin.getServ();
final int amount = sellAmount.get(areaname);
if (!resadmin) {
if (!group.buyLandIgnoreLimits()) {
final CuboidArea[] areas = res.getAreaArray();
for (final CuboidArea thisarea : areas) {
if (!group.inLimits(thisarea)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceBuyTooBig"));
return;
}
}
}
}
final EconomyInterface econ = plugin.getEconomyManager();
if (econ == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
return;
}
final String buyerName = player.getName();
String sellerName = res.getPermissions().getOwner();
final Player sellerNameFix = plugin.getServ().getPlayer(sellerName);
if (sellerNameFix != null) {
sellerName = sellerNameFix.getName();
}
if (econ.canAfford(buyerName, amount)) {
if (!econ.transfer(buyerName, sellerName, amount)) {
player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName);
return;
}
res.getPermissions().setOwner(player.getName(), true);
res.getPermissions().applyDefaultFlags();
this.removeFromSale(areaname);
player.sendMessage(ChatColor.GREEN
+ plugin.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW));
final Player seller = serv.getPlayer(sellerName);
if (seller != null && seller.isOnline()) {
seller.sendMessage(ChatColor.GREEN
+ plugin.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "." + ChatColor.YELLOW + areaname + ChatColor.GREEN));
seller.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("MoneyCredit",
ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
}
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
}
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
}
}
public void buyPlot(String areaname, Player player, boolean resadmin) { public void clearSales() {
PermissionGroup group = gm.getGroup(player); sellAmount.clear();
if (!resadmin) { System.out.println("[Residence] - ReInit land selling.");
if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { }
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled"));
return;
}
boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy");
if (!canbuy && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
}
if (isForSale(areaname)) {
ClaimedResidence res = manager.getByName(areaname);
if (res == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea"));
sellAmount.remove(areaname);
return;
}
if (res.getPermissions().getOwner().equals(player.getName())) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerBuyFail"));
return;
}
if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany"));
return;
}
Server serv = Residence.getServ();
int amount = sellAmount.get(areaname);
if (!resadmin) {
if (!group.buyLandIgnoreLimits()) {
CuboidArea[] areas = res.getAreaArray();
for (CuboidArea thisarea : areas) {
if (!group.inLimits(thisarea)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceBuyTooBig"));
return;
}
}
}
}
EconomyInterface econ = Residence.getEconomyManager();
if (econ == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled"));
return;
}
String buyerName = player.getName();
String sellerName = res.getPermissions().getOwner();
Player sellerNameFix = Residence.getServ().getPlayer(sellerName);
if (sellerNameFix != null) {
sellerName = sellerNameFix.getName();
}
if (econ.canAfford(buyerName, amount)) {
if (!econ.transfer(buyerName, sellerName, amount)) {
player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName);
return;
}
res.getPermissions().setOwner(player.getName(), true);
res.getPermissions().applyDefaultFlags();
this.removeFromSale(areaname);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW));
Player seller = serv.getPlayer(sellerName);
if (seller != null && seller.isOnline()) {
seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "." + ChatColor.YELLOW + areaname + ChatColor.GREEN));
seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCredit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
}
} else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney"));
}
} else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence"));
}
}
public void removeFromSale(Player player, String areaname, boolean resadmin) { public int getSaleAmount(final String name) {
ClaimedResidence area = manager.getByName(areaname); return sellAmount.get(name);
if (area != null) { }
if (!isForSale(areaname)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForSale"));
return;
}
if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) {
removeFromSale(areaname);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling"));
} else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
}
} else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea"));
}
}
public void removeFromSale(String areaname) { public boolean isForSale(final String areaname) {
sellAmount.remove(areaname); return sellAmount.containsKey(areaname);
} }
public boolean isForSale(String areaname) { public void printForSaleResidences(final Player player) {
return sellAmount.containsKey(areaname); final Set<Entry<String, Integer>> set = sellAmount.entrySet();
} player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LandForSale") + ":");
final StringBuilder sbuild = new StringBuilder();
sbuild.append(ChatColor.GREEN);
boolean firstadd = true;
for (final Entry<String, Integer> land : set) {
if (!firstadd) {
sbuild.append(", ");
} else {
firstadd = false;
}
sbuild.append(land.getKey());
}
player.sendMessage(sbuild.toString());
}
public void viewSaleInfo(String areaname, Player player) { public boolean putForSale(final String areaname, final int amount) {
if (sellAmount.containsKey(areaname)) { if (plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage("------------------------"); if (plugin.getRentManager().isForRent(areaname)) {
player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname); return false;
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); }
if (Residence.getConfigManager().useLeases()) { }
Date etime = Residence.getLeaseManager().getExpireTime(areaname); final ClaimedResidence area = manager.getByName(areaname);
if (etime != null) { if (area == null) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString()); return false;
} }
} if (sellAmount.containsKey(areaname)) {
player.sendMessage("------------------------"); return false;
} }
} sellAmount.put(areaname, amount);
return true;
}
public void printForSaleResidences(Player player) { public void putForSale(final String areaname, final Player player, final int amount, final boolean resadmin) {
Set<Entry<String, Integer>> set = sellAmount.entrySet(); if (plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LandForSale") + ":"); if (plugin.getRentManager().isForRent(areaname)) {
StringBuilder sbuild = new StringBuilder(); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentSellFail"));
sbuild.append(ChatColor.GREEN); return;
boolean firstadd = true; }
for (Entry<String, Integer> land : set) { }
if (!firstadd) { if (!resadmin) {
sbuild.append(", "); if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) {
} else { player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
firstadd = false; return;
} }
sbuild.append(land.getKey()); final boolean cansell = plugin.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("plugin.sell");
} if (!cansell && !resadmin) {
player.sendMessage(sbuild.toString()); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
} return;
}
if (amount <= 0) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidAmount"));
return;
}
}
final String pname = player.getName();
final ClaimedResidence area = manager.getByName(areaname);
if (area == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return;
}
if (!area.getPermissions().getOwner().equals(pname) && !resadmin) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return;
}
if (sellAmount.containsKey(areaname)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AlreadySellFail"));
return;
}
sellAmount.put(areaname, amount);
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN));
}
public void clearSales() { public void removeFromSale(final Player player, final String areaname, final boolean resadmin) {
sellAmount.clear(); final ClaimedResidence area = manager.getByName(areaname);
System.out.println("[Residence] - ReInit land selling."); if (area != null) {
} if (!isForSale(areaname)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceNotForSale"));
return;
}
if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) {
removeFromSale(areaname);
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceStopSelling"));
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidArea"));
}
}
public int getSaleAmount(String name) { public void removeFromSale(final String areaname) {
return sellAmount.get(name); sellAmount.remove(areaname);
} }
public Map<String, Integer> save() { public Map<String, Integer> save() {
return sellAmount; return sellAmount;
} }
@SuppressWarnings({ "unchecked", "rawtypes" }) public void viewSaleInfo(final String areaname, final Player player) {
public static TransactionManager load(Map root, PermissionManager p, ResidenceManager r) { if (sellAmount.containsKey(areaname)) {
TransactionManager tman = new TransactionManager(r, p); player.sendMessage("------------------------");
if (root != null) { player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname);
tman.sellAmount = root; player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname));
} if (plugin.getConfigManager().useLeases()) {
return tman; final Date etime = plugin.getLeaseManager().getExpireTime(areaname);
} if (etime != null) {
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString());
}
}
player.sendMessage("------------------------");
}
}
} }

View File

@@ -27,55 +27,61 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState;
* @author Administrator * @author Administrator
*/ */
public class RentManager { public class RentManager {
protected Map<String, RentedLand> rentedLand;
protected Map<String, RentableLand> rentableLand; protected Map<String, RentableLand> rentableLand;
protected Map<String, RentedLand> rentedLand;
Residence plugin;
public RentManager() { public RentManager(final Residence plugin) {
this.plugin = plugin;
rentedLand = new HashMap<String, RentedLand>(); rentedLand = new HashMap<String, RentedLand>();
rentableLand = new HashMap<String, RentableLand>(); rentableLand = new HashMap<String, RentableLand>();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static RentManager load(Map<String, Object> root) { public static RentManager load(final Residence plugin, final Map<String, Object> root) {
RentManager rentManager = new RentManager(); final RentManager rentManager = new RentManager(plugin);
if (root != null) { if (root != null) {
Map<String, Object> rentables = (Map<String, Object>) root.get("Rentables"); final Map<String, Object> rentables = (Map<String, Object>) root.get("Rentables");
for (Entry<String, Object> rent : rentables.entrySet()) for (final Entry<String, Object> rent : rentables.entrySet()) {
rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map<String, Object>) rent.getValue())); rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map<String, Object>) rent.getValue()));
Map<String, Object> rented = (Map<String, Object>) root.get("Rented"); }
for (Entry<String, Object> rent : rented.entrySet()) final Map<String, Object> rented = (Map<String, Object>) root.get("Rented");
for (final Entry<String, Object> rent : rented.entrySet()) {
rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map<String, Object>) rent.getValue())); rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map<String, Object>) rent.getValue()));
}
} }
return rentManager; return rentManager;
} }
public void checkCurrentRents() { public void checkCurrentRents() {
Iterator<Entry<String, RentedLand>> it = rentedLand.entrySet().iterator(); final Iterator<Entry<String, RentedLand>> it = rentedLand.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Entry<String, RentedLand> next = it.next(); final Entry<String, RentedLand> next = it.next();
RentedLand land = next.getValue(); final RentedLand land = next.getValue();
if (land.endTime <= System.currentTimeMillis()) { if (land.endTime <= System.currentTimeMillis()) {
ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); final ClaimedResidence res = plugin.getResidenceManager().getByName(next.getKey());
if (Residence.getConfigManager().debugEnabled()) if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Rent Check: " + next.getKey()); System.out.println("Rent Check: " + next.getKey());
}
if (res != null) { if (res != null) {
ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); final ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE);
Residence.getServ().getPluginManager().callEvent(revent); plugin.getServ().getPluginManager().callEvent(revent);
if (!revent.isCancelled()) { if (!revent.isCancelled()) {
RentableLand rentable = rentableLand.get(next.getKey()); final RentableLand rentable = rentableLand.get(next.getKey());
if (!rentable.repeatable) { if (!rentable.repeatable) {
rentableLand.remove(next.getKey()); rentableLand.remove(next.getKey());
it.remove(); it.remove();
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
} else if (land.autoRefresh) { } else if (land.autoRefresh) {
if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { if (!plugin.getEconomyManager().canAfford(land.player, rentable.cost)) {
it.remove(); it.remove();
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
} else if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { } else if (!plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) {
it.remove(); it.remove();
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
} else } else {
land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days);
}
} else { } else {
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
it.remove(); it.remove();
@@ -89,160 +95,174 @@ public class RentManager {
} }
} }
public int getCostOfRent(String landName) { public int getCostOfRent(final String landName) {
return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0;
} }
public int getRentableCount(String player) { public int getRentableCount(final String player) {
Set<String> set = rentableLand.keySet(); final Set<String> set = rentableLand.keySet();
int count = 0; int count = 0;
for (String land : set) { for (final String land : set) {
ClaimedResidence res = Residence.getResidenceManager().getByName(land); final ClaimedResidence res = plugin.getResidenceManager().getByName(land);
if (res != null) if (res != null) {
if (res.getPermissions().getOwner().equalsIgnoreCase(player)) if (res.getPermissions().getOwner().equalsIgnoreCase(player)) {
count++; count++;
}
}
} }
return count; return count;
} }
public boolean getRentableRepeatable(String landName) { public boolean getRentableRepeatable(final String landName) {
return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false;
} }
public int getRentCount(String player) { public int getRentCount(final String player) {
Set<Entry<String, RentedLand>> set = rentedLand.entrySet(); final Set<Entry<String, RentedLand>> set = rentedLand.entrySet();
int count = 0; int count = 0;
for (Entry<String, RentedLand> land : set) for (final Entry<String, RentedLand> land : set) {
if (land.getValue().player.equalsIgnoreCase(player)) if (land.getValue().player.equalsIgnoreCase(player)) {
count++; count++;
}
}
return count; return count;
} }
public int getRentDays(String landName) { public int getRentDays(final String landName) {
return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0;
} }
public boolean getRentedAutoRepeats(String landName) { public boolean getRentedAutoRepeats(final String landName) {
return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false;
} }
public String getRentingPlayer(String landName) { public String getRentingPlayer(final String landName) {
return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null;
} }
public boolean isForRent(String landName) { public boolean isForRent(final String landName) {
return rentableLand.containsKey(landName); return rentableLand.containsKey(landName);
} }
public boolean isRented(String landName) { public boolean isRented(final String landName) {
return rentedLand.containsKey(landName); return rentedLand.containsKey(landName);
} }
public void printRentableResidences(Player player) { public void printRentableResidences(final Player player) {
Set<Entry<String, RentableLand>> set = rentableLand.entrySet(); final Set<Entry<String, RentableLand>> set = rentableLand.entrySet();
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentableLand") + ":"); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("RentableLand") + ":");
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
sbuild.append(ChatColor.GREEN); sbuild.append(ChatColor.GREEN);
boolean firstadd = true; boolean firstadd = true;
for (Entry<String, RentableLand> land : set) for (final Entry<String, RentableLand> land : set) {
if (!this.isRented(land.getKey())) { if (!this.isRented(land.getKey())) {
if (!firstadd) if (!firstadd) {
sbuild.append(", "); sbuild.append(", ");
else } else {
firstadd = false; firstadd = false;
}
sbuild.append(land.getKey()); sbuild.append(land.getKey());
} }
}
player.sendMessage(sbuild.toString()); player.sendMessage(sbuild.toString());
} }
public void printRentInfo(Player player, String landName) { public void printRentInfo(final Player player, final String landName) {
RentableLand rentable = rentableLand.get(landName); final RentableLand rentable = rentableLand.get(landName);
RentedLand rented = rentedLand.get(landName); final RentedLand rented = rentedLand.get(landName);
if (rentable != null) { if (rentable != null) {
player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Land") + ":" + ChatColor.DARK_GREEN + landName); player.sendMessage(ChatColor.GOLD + plugin.getLanguage().getPhrase("Land") + ":" + ChatColor.DARK_GREEN + landName);
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Cost") + ": " + ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + " days"); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Cost") + ": " + ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + " days");
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentableAutoRenew") + ":" + ChatColor.DARK_AQUA + rentable.repeatable); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("RentableAutoRenew") + ":" + ChatColor.DARK_AQUA + rentable.repeatable);
if (rented != null) { if (rented != null) {
player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " player.sendMessage(ChatColor.GOLD + plugin.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " "
+ Residence.getLanguage().getPhrase("ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); + plugin.getLanguage().getPhrase("ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new Date(rented.endTime)); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new Date(rented.endTime));
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh);
} else } else {
player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + Residence.getLanguage().getPhrase("Available")); player.sendMessage(ChatColor.GOLD + plugin.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + plugin.getLanguage().getPhrase("Available"));
} else }
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); } else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceNotForRent"));
}
} }
public void removeFromForRent(Player player, String landName, boolean resadmin) { public void removeFromForRent(final Player player, final String landName, final boolean resadmin) {
RentedLand rent = rentedLand.get(landName); final RentedLand rent = rentedLand.get(landName);
if (rent == null) { if (rent == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotRented")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceNotRented"));
return; return;
} }
if (resadmin || rent.player.equalsIgnoreCase(player.getName())) { if (resadmin || rent.player.equalsIgnoreCase(player.getName())) {
ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE); final ResidenceRentEvent revent = new ResidenceRentEvent(plugin.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE);
Residence.getServ().getPluginManager().callEvent(revent); plugin.getServ().getPluginManager().callEvent(revent);
if (revent.isCancelled()) if (revent.isCancelled()) {
return; return;
}
rentedLand.remove(landName); rentedLand.remove(landName);
if (!rentableLand.get(landName).repeatable) if (!rentableLand.get(landName).repeatable) {
rentableLand.remove(landName); rentableLand.remove(landName);
ClaimedResidence res = Residence.getResidenceManager().getByName(landName); }
if (res != null) final ClaimedResidence res = plugin.getResidenceManager().getByName(landName);
if (res != null) {
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); }
} else player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
} }
public void removeFromRent(String landName) { public void removeFromRent(final String landName) {
rentedLand.remove(landName); rentedLand.remove(landName);
} }
public void removeRentable(String landName) { public void removeRentable(final String landName) {
removeFromRent(landName); removeFromRent(landName);
rentableLand.remove(landName); rentableLand.remove(landName);
} }
public void rent(Player player, String landName, boolean repeat, boolean resadmin) { public void rent(final Player player, final String landName, final boolean repeat, final boolean resadmin) {
if (!Residence.getConfigManager().enabledRentSystem()) { if (!plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentDisabled"));
return; return;
} }
ClaimedResidence res = Residence.getResidenceManager().getByName(landName); final ClaimedResidence res = plugin.getResidenceManager().getByName(landName);
if (res != null) { if (res != null) {
if (res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) { if (res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerRentFail")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("OwnerRentFail"));
return; return;
} }
} else { } else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
PermissionGroup group = Residence.getPermissionManager().getGroup(player); final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) { if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceMaxRent"));
return; return;
} }
if (!this.isForRent(landName)) { if (!this.isForRent(landName)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceNotForRent"));
return; return;
} }
if (this.isRented(landName)) { if (this.isRented(landName)) {
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
if (split.length != 0) if (split.length != 0) {
player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented", player.sendMessage(plugin.getLanguage().getPhrase("ResidenceAlreadyRented",
ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + this.getRentingPlayer(landName))); ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + this.getRentingPlayer(landName)));
}
return; return;
} }
RentableLand land = rentableLand.get(landName); final RentableLand land = rentableLand.get(landName);
if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) {
ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); final ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT);
Residence.getServ().getPluginManager().callEvent(revent); plugin.getServ().getPluginManager().callEvent(revent);
if (revent.isCancelled()) if (revent.isCancelled()) {
return; return;
if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { }
RentedLand newrent = new RentedLand(); if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) {
final RentedLand newrent = new RentedLand();
newrent.player = player.getName(); newrent.player = player.getName();
newrent.startTime = System.currentTimeMillis(); newrent.startTime = System.currentTimeMillis();
newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); newrent.endTime = System.currentTimeMillis() + daysToMs(land.days);
@@ -251,134 +271,149 @@ public class RentManager {
res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName());
res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner());
res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE);
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
if (split.length != 0) if (split.length != 0) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceRentSuccess",
ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + land.days + ChatColor.GREEN)); ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + land.days + ChatColor.GREEN));
} else }
} else {
player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); player.sendMessage(ChatColor.RED + "Error, unable to transfer money...");
} else }
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); } else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
}
} }
public Map<String, Object> save() { public Map<String, Object> save() {
Map<String, Object> root = new HashMap<String, Object>(); final Map<String, Object> root = new HashMap<String, Object>();
Map<String, Object> rentables = new HashMap<String, Object>(); final Map<String, Object> rentables = new HashMap<String, Object>();
for (Entry<String, RentableLand> rent : rentableLand.entrySet()) for (final Entry<String, RentableLand> rent : rentableLand.entrySet()) {
rentables.put(rent.getKey(), rent.getValue().save()); rentables.put(rent.getKey(), rent.getValue().save());
Map<String, Object> rented = new HashMap<String, Object>(); }
for (Entry<String, RentedLand> rent : rentedLand.entrySet()) final Map<String, Object> rented = new HashMap<String, Object>();
for (final Entry<String, RentedLand> rent : rentedLand.entrySet()) {
rented.put(rent.getKey(), rent.getValue().save()); rented.put(rent.getKey(), rent.getValue().save());
}
root.put("Rentables", rentables); root.put("Rentables", rentables);
root.put("Rented", rented); root.put("Rented", rented);
return root; return root;
} }
public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { public void setForRent(final Player player, final String landName, final int amount, final int days, final boolean repeatable, final boolean resadmin) {
if (!Residence.getConfigManager().enabledRentSystem()) { if (!plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("MarketDisabled"));
return; return;
} }
if (Residence.getTransactionManager().isForSale(landName)) { if (plugin.getTransactionManager().isForSale(landName)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SellRentFail")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SellRentFail"));
return; return;
} }
ClaimedResidence res = Residence.getResidenceManager().getByName(landName); final ClaimedResidence res = plugin.getResidenceManager().getByName(landName);
if (res == null) { if (res == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
if (!resadmin) { if (!resadmin) {
if (!res.getPermissions().hasResidencePermission(player, true)) { if (!res.getPermissions().hasResidencePermission(player, true)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
PermissionGroup group = Residence.getPermissionManager().getGroup(player); final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceMaxRent"));
return; return;
} }
} }
if (!rentableLand.containsKey(landName)) { if (!rentableLand.containsKey(landName)) {
ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); final ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE);
Residence.getServ().getPluginManager().callEvent(revent); plugin.getServ().getPluginManager().callEvent(revent);
if (revent.isCancelled()) if (revent.isCancelled()) {
return; return;
RentableLand newrent = new RentableLand(); }
final RentableLand newrent = new RentableLand();
newrent.days = days; newrent.days = days;
newrent.cost = amount; newrent.cost = amount;
newrent.repeatable = repeatable; newrent.repeatable = repeatable;
rentableLand.put(landName, newrent); rentableLand.put(landName, newrent);
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
if (split.length != 0) if (split.length != 0) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForRentSuccess", player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceForRentSuccess",
ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN + "." + ChatColor.YELLOW + days + ChatColor.GREEN)); ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN + "." + ChatColor.YELLOW + days + ChatColor.GREEN));
} else }
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); } else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceAlreadyRent"));
}
} }
public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { public void setRentedRepeatable(final Player player, final String landName, final boolean value, final boolean resadmin) {
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
RentedLand land = rentedLand.get(landName); final RentedLand land = rentedLand.get(landName);
if (land != null && (land.player.equals(player.getName()) || resadmin)) { if (land != null && (land.player.equals(player.getName()) || resadmin)) {
land.autoRefresh = value; land.autoRefresh = value;
if (value && split.length != 0) if (value && split.length != 0) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED));
else if (split.length != 0) } else if (split.length != 0) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED));
}
} }
} }
public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { public void setRentRepeatable(final Player player, final String landName, final boolean value, final boolean resadmin) {
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
RentableLand land = rentableLand.get(landName); final RentableLand land = rentableLand.get(landName);
ClaimedResidence res = Residence.getResidenceManager().getByName(landName); final ClaimedResidence res = plugin.getResidenceManager().getByName(landName);
if (land != null && res != null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) { if (land != null && res != null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) {
land.repeatable = value; land.repeatable = value;
if (!value && this.isRented(landName)) if (!value && this.isRented(landName)) {
rentedLand.get(landName).autoRefresh = false; rentedLand.get(landName).autoRefresh = false;
if (value && split.length != 0) }
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); if (value && split.length != 0) {
else if (split.length != 0) player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentableEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); } else if (split.length != 0) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentableDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED));
}
} }
} }
public void unrent(Player player, String landName, boolean resadmin) { public void unrent(final Player player, final String landName, final boolean resadmin) {
String[] split = landName.split("\\."); final String[] split = landName.split("\\.");
ClaimedResidence res = Residence.getResidenceManager().getByName(landName); final ClaimedResidence res = plugin.getResidenceManager().getByName(landName);
if (res == null) { if (res == null) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
if (rentedLand.containsKey(landName) && !resadmin) { if (rentedLand.containsKey(landName) && !resadmin) {
if (split.length != 0) if (split.length != 0) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceAlreadyRented",
ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW);
}
return; return;
} }
if (rentableLand.containsKey(landName)) { if (rentableLand.containsKey(landName)) {
ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); final ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT);
Residence.getServ().getPluginManager().callEvent(revent); plugin.getServ().getPluginManager().callEvent(revent);
if (revent.isCancelled()) if (revent.isCancelled()) {
return; return;
}
rentableLand.remove(landName); rentableLand.remove(landName);
if (rentedLand.containsKey(landName)) { if (rentedLand.containsKey(landName)) {
rentedLand.remove(landName); rentedLand.remove(landName);
res.getPermissions().applyDefaultFlags(); res.getPermissions().applyDefaultFlags();
} }
if (split.length != 0) if (split.length != 0) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED));
}
} else } else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceNotForRent"));
}
} }
public void updateRentableName(String oldName, String newName) { public void updateRentableName(final String oldName, final String newName) {
if (rentableLand.containsKey(oldName)) { if (rentableLand.containsKey(oldName)) {
rentableLand.put(newName, rentableLand.get(oldName)); rentableLand.put(newName, rentableLand.get(oldName));
rentableLand.remove(oldName); rentableLand.remove(oldName);
@@ -389,12 +424,12 @@ public class RentManager {
} }
} }
private long daysToMs(int days) { private long daysToMs(final int days) {
return ((days) * 24L * 60L * 60L * 1000L); return ((days) * 24L * 60L * 60L * 1000L);
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
private int msToDays(long ms) { private int msToDays(final long ms) {
return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D);
} }
} }

View File

@@ -7,7 +7,6 @@ package com.bekvon.bukkit.residence.event;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
/** /**
@@ -18,29 +17,27 @@ public class ResidencePlayerEvent extends ResidenceEvent implements ResidencePla
Player p; Player p;
public ResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) public ResidencePlayerEvent(final String eventName, final ClaimedResidence resref, final Player player) {
{
super(eventName, resref); super(eventName, resref);
res = resref; res = resref;
p = player; p = player;
} }
@Override @Override
public Player getPlayer() public Player getPlayer() {
{
return p; return p;
} }
@Override @Override
public boolean isAdmin() public boolean isAdmin() {
{ if (isPlayer()) {
if(isPlayer()) return p.hasPermission("residence.admin") || p.isOp();
return Residence.getPermissionManager().isResidenceAdmin(p); }
return true; return true;
} }
@Override @Override
public boolean isPlayer() public boolean isPlayer() {
{ return p != null;
return p!=null;
} }
} }

View File

@@ -7,7 +7,6 @@ package com.bekvon.bukkit.residence.event;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
/** /**
@@ -17,8 +16,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence;
public class ResidencePlayerFlagEvent extends ResidenceFlagEvent implements ResidencePlayerEventInterface { public class ResidencePlayerFlagEvent extends ResidenceFlagEvent implements ResidencePlayerEventInterface {
Player p; Player p;
public ResidencePlayerFlagEvent(String eventName,ClaimedResidence resref, Player player, String flag, FlagType type, String target) public ResidencePlayerFlagEvent(final String eventName, final ClaimedResidence resref, final Player player, final String flag, final FlagType type, final String target) {
{
super(eventName, resref, flag, type, target); super(eventName, resref, flag, type, target);
p = player; p = player;
} }
@@ -29,16 +27,15 @@ public class ResidencePlayerFlagEvent extends ResidenceFlagEvent implements Resi
} }
@Override @Override
public boolean isAdmin() public boolean isAdmin() {
{ if (isPlayer()) {
if(isPlayer()) return p.hasPermission("residence.admin") || p.isOp();
return Residence.getPermissionManager().isResidenceAdmin(p); }
return true; return true;
} }
@Override @Override
public boolean isPlayer() public boolean isPlayer() {
{ return p != null;
return p!=null;
} }
} }

View File

@@ -4,52 +4,53 @@
*/ */
package com.bekvon.bukkit.residence.itemlist; package com.bekvon.bukkit.residence.itemlist;
import java.util.Map;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import java.util.Map;
import org.bukkit.Material;
import org.bukkit.entity.Player;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class ResidenceItemList extends ItemList { public class ResidenceItemList extends ItemList {
ClaimedResidence res; Residence plugin;
ClaimedResidence res;
public ResidenceItemList(ClaimedResidence parent, ListType type) public ResidenceItemList(final Residence plugin, final ClaimedResidence parent, final ListType type) {
{ super(type);
super(type); this.plugin = plugin;
res = parent; res = parent;
} }
private ResidenceItemList() private ResidenceItemList(final Residence plugin) {
{ this.plugin = plugin;
}
}
public void playerListChange(Player player, Material mat, boolean resadmin) { public static ResidenceItemList load(final Residence plugin, final ClaimedResidence parent, final Map<String, Object> map) {
PermissionGroup group = Residence.getPermissionManager().getGroup(player); final ResidenceItemList newlist = new ResidenceItemList(plugin);
if(resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) newlist.res = parent;
{ return (ResidenceItemList) ItemList.load(map, newlist);
if(super.toggle(mat)) }
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialAdd",ChatColor.GREEN + mat.toString() + ChatColor.YELLOW+"."+ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW));
else
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialRemove",ChatColor.GREEN + mat.toString() + ChatColor.YELLOW+"."+ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW));
}
else
{
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission"));
}
}
public static ResidenceItemList load(ClaimedResidence parent, Map<String,Object> map) public void playerListChange(final Player player, final Material mat, final boolean resadmin) {
{ final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
ResidenceItemList newlist = new ResidenceItemList(); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) {
newlist.res = parent; if (super.toggle(mat)) {
return (ResidenceItemList) ItemList.load(map, newlist); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ListMaterialAdd",
} ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "." + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW));
} else {
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ListMaterialRemove",
ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "." + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW));
}
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
}
} }

View File

@@ -6,11 +6,13 @@
package com.bekvon.bukkit.residence.listeners; package com.bekvon.bukkit.residence.listeners;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location;
import com.bekvon.bukkit.residence.protection.FlagPermissions; import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockFromToEvent;
@@ -19,197 +21,197 @@ import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import com.bekvon.bukkit.residence.protection.FlagPermissions;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockSpreadEvent;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class ResidenceBlockListener implements Listener { public class ResidenceBlockListener implements Listener {
Residence plugin;
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public ResidenceBlockListener(final Residence plugin) {
public void onBlockBreak(BlockBreakEvent event) { this.plugin = plugin;
Player player = event.getPlayer(); }
if (Residence.isResAdminOn(player)) {
return;
}
Material mat = event.getBlock().getType();
String world = event.getBlock().getWorld().getName();
String group = Residence.getPermissionManager().getGroupNameByPlayer(player);
if (Residence.getItemManager().isIgnored(mat, group, world)) {
return;
}
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation());
if (Residence.getConfigManager().enabledRentSystem()) {
if (res != null) {
String resname = res.getName();
if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true);
return;
}
}
}
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player);
String pname = player.getName();
if (res != null) {
if (res.getItemIgnoreList().isListed(mat)) {
return;
}
}
boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true));
boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true);
if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) {
return;
}
Material mat = event.getBlock().getType();
String world = event.getBlock().getWorld().getName();
String group = Residence.getPermissionManager().getGroupNameByPlayer(player);
if (Residence.getItemManager().isIgnored(mat, group, world)) {
return;
}
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation());
if (Residence.getConfigManager().enabledRentSystem()) {
if (res != null) {
String resname = res.getName();
if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true);
return;
}
}
}
String pname = player.getName();
if (res != null) {
if (!res.getItemBlacklist().isAllowed(mat)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted"));
event.setCancelled(true);
return;
}
}
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player);
boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true));
if (!hasplace) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockSpread(BlockSpreadEvent event) {
Location loc = event.getBlock().getLocation();
FlagPermissions perms = Residence.getPermsByLoc(loc);
if (!perms.has("spread", true)) {
event.setCancelled(true);
}
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPistonRetract(BlockPistonRetractEvent event) { public void onBlockBreak(final BlockBreakEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); final Player player = event.getPlayer();
if (!perms.has("piston", true)){ if (plugin.isResAdminOn(player)) {
event.setCancelled(true); return;
return; }
} final Material mat = event.getBlock().getType();
if (event.isSticky()){ final String world = event.getBlock().getWorld().getName();
Location location = event.getRetractLocation(); final String group = plugin.getPermissionManager().getGroupNameByPlayer(player);
FlagPermissions blockperms = Residence.getPermsByLoc(location); if (plugin.getItemManager().isIgnored(mat, group, world)) {
if (!blockperms.has("piston", true)) { return;
event.setCancelled(true); }
} final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation());
} if (plugin.getConfigManager().enabledRentSystem()) {
} if (res != null) {
final String resname = res.getName();
if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true);
return;
}
}
}
final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player);
final String pname = player.getName();
if (res != null) {
if (res.getItemIgnoreList().isListed(mat)) {
return;
}
}
final boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true));
final boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true);
if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return;
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPistonExtend(BlockPistonExtendEvent event) { public void onBlockBurn(final BlockBurnEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation());
if (!perms.has("piston", true)) { if (!perms.has("firespread", true)) {
event.setCancelled(true); event.setCancelled(true);
} }
for (Block block : event.getBlocks()) { }
FlagPermissions blockpermsfrom = Residence.getPermsByLoc(block.getLocation());
Location blockto = block.getLocation();
blockto.setX(blockto.getX()+event.getDirection().getModX());
blockto.setY(blockto.getY()+event.getDirection().getModY());
blockto.setZ(blockto.getZ()+event.getDirection().getModZ());
FlagPermissions blockpermsto = Residence.getPermsByLoc(blockto);
if (!blockpermsfrom.has("piston", true) || !blockpermsto.has("piston", true)) {
event.setCancelled(true);
return;
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockFromTo(BlockFromToEvent event) { public void onBlockFromTo(final BlockFromToEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getToBlock().getLocation());
boolean hasflow = perms.has("flow", true); final boolean hasflow = perms.has("flow", true);
Material mat = event.getBlock().getType(); final Material mat = event.getBlock().getType();
if (!hasflow) { if (!hasflow) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) {
if (!perms.has("lavaflow", hasflow)) { if (!perms.has("lavaflow", hasflow)) {
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { if (mat == Material.WATER || mat == Material.STATIONARY_WATER) {
if (!perms.has("waterflow", hasflow)) { if (!perms.has("waterflow", hasflow)) {
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockBurn(BlockBurnEvent event) { public void onBlockIgnite(final BlockIgniteEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), event.getPlayer());
if (!perms.has("firespread", true)) { final IgniteCause cause = event.getCause();
event.setCancelled(true); if (cause == IgniteCause.SPREAD) {
} if (!perms.has("firespread", true)) {
} event.setCancelled(true);
}
} else if (cause == IgniteCause.FLINT_AND_STEEL) {
final Player player = event.getPlayer();
if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !plugin.isResAdminOn(player)) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
} else {
if (!perms.has("ignite", true)) {
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockIgnite(BlockIgniteEvent event) { public void onBlockPistonExtend(final BlockPistonExtendEvent event) {
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), event.getPlayer()); final FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation());
IgniteCause cause = event.getCause(); if (!perms.has("piston", true)) {
if (cause == IgniteCause.SPREAD) { event.setCancelled(true);
if (!perms.has("firespread", true)) { }
event.setCancelled(true); for (final Block block : event.getBlocks()) {
} final FlagPermissions blockpermsfrom = plugin.getPermsByLoc(block.getLocation());
} else if (cause == IgniteCause.FLINT_AND_STEEL) { final Location blockto = block.getLocation();
Player player = event.getPlayer(); blockto.setX(blockto.getX() + event.getDirection().getModX());
if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { blockto.setY(blockto.getY() + event.getDirection().getModY());
event.setCancelled(true); blockto.setZ(blockto.getZ() + event.getDirection().getModZ());
player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); final FlagPermissions blockpermsto = plugin.getPermsByLoc(blockto);
} if (!blockpermsfrom.has("piston", true) || !blockpermsto.has("piston", true)) {
} else { event.setCancelled(true);
if(!perms.has("ignite", true)){ return;
event.setCancelled(true); }
} }
} }
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPistonRetract(final BlockPistonRetractEvent event) {
final FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation());
if (!perms.has("piston", true)) {
event.setCancelled(true);
return;
}
if (event.isSticky()) {
final Location location = event.getRetractLocation();
final FlagPermissions blockperms = plugin.getPermsByLoc(location);
if (!blockperms.has("piston", true)) {
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event) {
final Player player = event.getPlayer();
if (plugin.isResAdminOn(player)) {
return;
}
final Material mat = event.getBlock().getType();
final String world = event.getBlock().getWorld().getName();
final String group = plugin.getPermissionManager().getGroupNameByPlayer(player);
if (plugin.getItemManager().isIgnored(mat, group, world)) {
return;
}
final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation());
if (plugin.getConfigManager().enabledRentSystem()) {
if (res != null) {
final String resname = res.getName();
if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true);
return;
}
}
}
final String pname = player.getName();
if (res != null) {
if (!res.getItemBlacklist().isAllowed(mat)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted"));
event.setCancelled(true);
return;
}
}
final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player);
final boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true));
if (!hasplace) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return;
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockSpread(final BlockSpreadEvent event) {
final Location loc = event.getBlock().getLocation();
final FlagPermissions perms = plugin.getPermsByLoc(loc);
if (!perms.has("spread", true)) {
event.setCancelled(true);
}
}
} }

View File

@@ -61,303 +61,359 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions;
* @author Administrator * @author Administrator
*/ */
public class ResidenceEntityListener implements Listener { public class ResidenceEntityListener implements Listener {
Residence plugin;
public ResidenceEntityListener(final Residence plugin) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void AnimalKilling(EntityDamageByEntityEvent event) { public void AnimalKilling(final EntityDamageByEntityEvent event) {
Entity damager = event.getDamager(); final Entity damager = event.getDamager();
if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) {
return; return;
}
Player cause; Player cause;
if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) {
return; return;
else if (damager instanceof Player) } else if (damager instanceof Player) {
cause = (Player) damager; cause = (Player) damager;
else } else {
cause = (Player) ((Arrow) damager).getShooter(); cause = (Player) ((Arrow) damager).getShooter();
}
if (Residence.isResAdminOn(cause)) if (plugin.isResAdminOn(cause)) {
return; return;
}
Entity entity = event.getEntity(); final Entity entity = event.getEntity();
ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); final ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation());
if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) {
if (isAnimal(entity)) { if (isAnimal(entity)) {
cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); cause.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
event.setCancelled(true); event.setCancelled(true);
} }
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onCreatureSpawn(CreatureSpawnEvent event) { public void onCreatureSpawn(final CreatureSpawnEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getLocation());
Entity ent = event.getEntity(); final Entity ent = event.getEntity();
if (isAnimal(ent)) { if (isAnimal(ent)) {
if (!perms.has("animals", true)) if (!perms.has("animals", true)) {
event.setCancelled(true); event.setCancelled(true);
} else if (!perms.has("monsters", true) && isMonster(ent)) }
} else if (!perms.has("monsters", true) && isMonster(ent)) {
event.setCancelled(true); event.setCancelled(true);
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEndermanChangeBlock(EntityChangeBlockEvent event) { public void onEndermanChangeBlock(final EntityChangeBlockEvent event) {
if (event.getEntityType() != EntityType.ENDERMAN && event.getEntityType() != EntityType.WITHER) if (event.getEntityType() != EntityType.ENDERMAN && event.getEntityType() != EntityType.WITHER) {
return; return;
FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); }
FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); final FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation());
final FlagPermissions world = plugin.getWorldFlags().getPerms(event.getBlock().getWorld().getName());
if (event.getEntityType() == EntityType.WITHER) { if (event.getEntityType() == EntityType.WITHER) {
if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) {
event.setCancelled(true); event.setCancelled(true);
} else if (!perms.has("build", true)) }
} else if (!perms.has("build", true)) {
event.setCancelled(true); event.setCancelled(true);
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEntityCombust(EntityCombustEvent event) { public void onEntityCombust(final EntityCombustEvent event) {
FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation());
if (!perms.has("burn", true)) if (!perms.has("burn", true)) {
event.setCancelled(true); event.setCancelled(true);
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent event) { public void onEntityDamage(final EntityDamageEvent event) {
Entity ent = event.getEntity(); Entity ent = event.getEntity();
if (ent.hasMetadata("NPC")) if (ent.hasMetadata("NPC")) {
return; return;
boolean tamedWolf = ent instanceof Wolf ? ((Wolf) ent).isTamed() : false; }
ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); final boolean tamedWolf = ent instanceof Wolf ? ((Wolf) ent).isTamed() : false;
final ClaimedResidence area = plugin.getResidenceManager().getByLoc(ent.getLocation());
/* Living Entities */ /* Living Entities */
if (event instanceof EntityDamageByEntityEvent) { if (event instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; final EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event;
Entity damager = attackevent.getDamager(); final Entity damager = attackevent.getDamager();
ClaimedResidence srcarea = null; ClaimedResidence srcarea = null;
if (damager != null) if (damager != null) {
srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); srcarea = plugin.getResidenceManager().getByLoc(damager.getLocation());
}
boolean srcpvp = true; boolean srcpvp = true;
if (srcarea != null) if (srcarea != null) {
srcpvp = srcarea.getPermissions().has("pvp", true); srcpvp = srcarea.getPermissions().has("pvp", true);
}
ent = attackevent.getEntity(); ent = attackevent.getEntity();
if ((ent instanceof Player || tamedWolf) && (damager instanceof Player || (damager instanceof Arrow && (((Arrow) damager).getShooter() instanceof Player)))) { if ((ent instanceof Player || tamedWolf) && (damager instanceof Player || (damager instanceof Arrow && (((Arrow) damager).getShooter() instanceof Player)))) {
Player attacker = null; Player attacker = null;
if (damager instanceof Player) if (damager instanceof Player) {
attacker = (Player) damager; attacker = (Player) damager;
else if (damager instanceof Arrow) } else if (damager instanceof Arrow) {
attacker = (Player) ((Arrow) damager).getShooter(); attacker = (Player) ((Arrow) damager).getShooter();
}
if (!srcpvp) { if (!srcpvp) {
if (attacker != null) if (attacker != null) {
attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); attacker.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPVPZone"));
}
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
/* Check for Player vs Player */ /* Check for Player vs Player */
if (area == null) { if (area == null) {
/* World PvP */ /* World PvP */
if (damager != null) if (damager != null) {
if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) {
if (attacker != null) if (attacker != null) {
attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); attacker.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("WorldPVPDisabled"));
}
event.setCancelled(true); event.setCancelled(true);
} }
}
} else /* Normal PvP */ } else /* Normal PvP */
if (!area.getPermissions().has("pvp", true)) { if (!area.getPermissions().has("pvp", true)) {
if (attacker != null) if (attacker != null) {
attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); attacker.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPVPZone"));
}
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} else if ((ent instanceof Player || tamedWolf) && (damager instanceof Creeper)) } else if ((ent instanceof Player || tamedWolf) && (damager instanceof Creeper)) {
if (area == null) { if (area == null) {
if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) {
event.setCancelled(true); event.setCancelled(true);
} else if (!area.getPermissions().has("creeper", true)) }
} else if (!area.getPermissions().has("creeper", true)) {
event.setCancelled(true); event.setCancelled(true);
}
}
} }
if (area == null) { if (area == null) {
if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedWolf)) if (!plugin.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedWolf)) {
event.setCancelled(true); event.setCancelled(true);
} else if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedWolf)) }
} else if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedWolf)) {
event.setCancelled(true); event.setCancelled(true);
if (event.isCancelled()) }
if (event.isCancelled()) {
/* Put out a fire on a player */ /* Put out a fire on a player */
if ((ent instanceof Player || tamedWolf) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) if ((ent instanceof Player || tamedWolf) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) {
ent.setFireTicks(0); ent.setFireTicks(0);
}
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { public void onEntityDamageByEntityEvent(final EntityDamageByEntityEvent event) {
if (event.getEntityType() == EntityType.ITEM_FRAME || (Residence.is1_8() && event.getEntityType() == EntityType.ARMOR_STAND)) { if (event.getEntityType() == EntityType.ITEM_FRAME || (plugin.is1_8() && event.getEntityType() == EntityType.ARMOR_STAND)) {
Entity dmgr = event.getDamager(); final Entity dmgr = event.getDamager();
Player player; Player player;
if (dmgr instanceof Player) if (dmgr instanceof Player) {
player = (Player) event.getDamager(); player = (Player) event.getDamager();
else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) {
player = (Player) ((Projectile) dmgr).getShooter(); player = (Player) ((Projectile) dmgr).getShooter();
else } else {
return; return;
}
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
}
// Note: Location of entity, not player; otherwise player could // Note: Location of entity, not player; otherwise player could
// stand outside of res and still damage // stand outside of res and still damage
Location loc = event.getEntity().getLocation(); final Location loc = event.getEntity().getLocation();
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); final ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc);
if (res != null) { if (res != null) {
if (!res.getPermissions().has("container", false)) if (!res.getPermissions().has("container", false)) {
if (isMonster(dmgr)) { if (isMonster(dmgr)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
}
if (!res.getPermissions().playerHas(player.getName(), "container", false)) { if (!res.getPermissions().playerHas(player.getName(), "container", false)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container"));
} }
} }
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEntityExplode(EntityExplodeEvent event) { public void onEntityExplode(final EntityExplodeEvent event) {
if (event.isCancelled() || event.getEntity() == null) if (event.isCancelled() || event.getEntity() == null) {
return; return;
}
Boolean cancel = false; Boolean cancel = false;
EntityType entity = event.getEntityType(); final EntityType entity = event.getEntityType();
FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation());
FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); final FlagPermissions world = plugin.getWorldFlags().getPerms(event.getEntity().getWorld().getName());
if (entity == EntityType.CREEPER) if (entity == EntityType.CREEPER) {
if (!perms.has("creeper", perms.has("explode", true))) if (!perms.has("creeper", perms.has("explode", true))) {
cancel = true; cancel = true;
if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) }
if (!perms.has("tnt", perms.has("explode", true))) }
if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) {
if (!perms.has("tnt", perms.has("explode", true))) {
cancel = true; cancel = true;
if (entity == EntityType.FIREBALL) }
if (!perms.has("fireball", perms.has("explode", true))) }
if (entity == EntityType.FIREBALL) {
if (!perms.has("fireball", perms.has("explode", true))) {
cancel = true; cancel = true;
if (entity == EntityType.SMALL_FIREBALL) }
if (!perms.has("fireball", perms.has("explode", true))) }
if (entity == EntityType.SMALL_FIREBALL) {
if (!perms.has("fireball", perms.has("explode", true))) {
cancel = true; cancel = true;
if (entity == EntityType.WITHER_SKULL || entity == EntityType.WITHER) }
if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) }
if (entity == EntityType.WITHER_SKULL || entity == EntityType.WITHER) {
if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) {
cancel = true; cancel = true;
}
}
if (cancel) { if (cancel) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} else { } else {
List<Block> preserve = new ArrayList<Block>(); final List<Block> preserve = new ArrayList<Block>();
for (Block block : event.blockList()) { for (final Block block : event.blockList()) {
FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); final FlagPermissions blockperms = plugin.getPermsByLoc(block.getLocation());
if ((!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true)))) && (entity == EntityType.WITHER || entity == EntityType.WITHER_SKULL) if ((!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true)))) && (entity == EntityType.WITHER || entity == EntityType.WITHER_SKULL)
|| (!blockperms.has("fireball", blockperms.has("explode", true)) && (entity == EntityType.FIREBALL || entity == EntityType.SMALL_FIREBALL)) || (!blockperms.has("fireball", blockperms.has("explode", true)) && (entity == EntityType.FIREBALL || entity == EntityType.SMALL_FIREBALL))
|| (!blockperms.has("tnt", blockperms.has("explode", true)) && (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT)) || (!blockperms.has("tnt", blockperms.has("explode", true)) && (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT))
|| (!blockperms.has("creeper", blockperms.has("explode", true)) && entity == EntityType.CREEPER))) || (!blockperms.has("creeper", blockperms.has("explode", true)) && entity == EntityType.CREEPER))) {
preserve.add(block); preserve.add(block);
}
} }
for (Block block : preserve) for (final Block block : preserve) {
event.blockList().remove(block); event.blockList().remove(block);
}
} }
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onEntityInteract(EntityInteractEvent event) { public void onEntityInteract(final EntityInteractEvent event) {
Block block = event.getBlock(); final Block block = event.getBlock();
Material mat = block.getType(); final Material mat = block.getType();
Entity entity = event.getEntity(); final Entity entity = event.getEntity();
FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(block.getLocation());
boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); final boolean hastrample = perms.has("trample", perms.has("hasbuild", true));
if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) {
event.setCancelled(true); event.setCancelled(true);
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onExplosionPrime(ExplosionPrimeEvent event) { public void onExplosionPrime(final ExplosionPrimeEvent event) {
EntityType entity = event.getEntityType(); final EntityType entity = event.getEntityType();
FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); final FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation());
if (entity == EntityType.CREEPER) if (entity == EntityType.CREEPER) {
if (!perms.has("creeper", perms.has("explode", true))) { if (!perms.has("creeper", perms.has("explode", true))) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} }
if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) }
if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) {
if (!perms.has("tnt", perms.has("explode", true))) { if (!perms.has("tnt", perms.has("explode", true))) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} }
if (entity == EntityType.FIREBALL) }
if (entity == EntityType.FIREBALL) {
if (!perms.has("fireball", perms.has("explode", true))) { if (!perms.has("fireball", perms.has("explode", true))) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} }
if (entity == EntityType.SMALL_FIREBALL) }
if (entity == EntityType.SMALL_FIREBALL) {
if (!perms.has("fireball", perms.has("explode", true))) { if (!perms.has("fireball", perms.has("explode", true))) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} }
if (entity == EntityType.WITHER_SKULL) }
if (entity == EntityType.WITHER_SKULL) {
if (!perms.has("witherdamage", perms.has("damage", true))) { if (!perms.has("witherdamage", perms.has("damage", true))) {
event.setCancelled(true); event.setCancelled(true);
event.getEntity().remove(); event.getEntity().remove();
} }
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onHangingBreak(HangingBreakEvent event) { public void onHangingBreak(final HangingBreakEvent event) {
if (event instanceof HangingBreakByEntityEvent) { if (event instanceof HangingBreakByEntityEvent) {
HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; final HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event;
if (evt.getRemover() instanceof Player) { if (evt.getRemover() instanceof Player) {
Player player = (Player) evt.getRemover(); final Player player = (Player) evt.getRemover();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
String pname = player.getName(); }
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); final String pname = player.getName();
String world = event.getEntity().getWorld().getName(); final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player);
final String world = event.getEntity().getWorld().getName();
if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
} }
} }
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onHangingPlace(HangingPlaceEvent event) { public void onHangingPlace(final HangingPlaceEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); }
String pname = player.getName(); final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player);
String world = player.getWorld().getName(); final String pname = player.getName();
final String world = player.getWorld().getName();
if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onSplashPotion(PotionSplashEvent event) { public void onSplashPotion(final PotionSplashEvent event) {
if (event.isCancelled()) if (event.isCancelled()) {
return; return;
Entity ent = event.getEntity(); }
boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); final Entity ent = event.getEntity();
Iterator<LivingEntity> it = event.getAffectedEntities().iterator(); final boolean srcpvp = plugin.getPermsByLoc(ent.getLocation()).has("pvp", true);
final Iterator<LivingEntity> it = event.getAffectedEntities().iterator();
while (it.hasNext()) { while (it.hasNext()) {
LivingEntity target = it.next(); final LivingEntity target = it.next();
if (target.getType() == EntityType.PLAYER) { if (target.getType() == EntityType.PLAYER) {
Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); final Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has("pvp", true);
if (!srcpvp || !tgtpvp) if (!srcpvp || !tgtpvp) {
event.setIntensity(target, 0); event.setIntensity(target, 0);
}
} }
} }
} }
private boolean isAnimal(Entity ent) { private boolean isAnimal(final Entity ent) {
return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig || ent instanceof Sheep return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig || ent instanceof Sheep
|| ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager || (Residence.is1_8() && ent instanceof Rabbit)); || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager || (plugin.is1_8() && ent instanceof Rabbit));
} }
private boolean isMonster(Entity ent) { private boolean isMonster(final Entity ent) {
return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast);
} }
} }

View File

@@ -54,37 +54,40 @@ import cn.citycraft.PluginHelper.utils.ActionBar;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class ResidencePlayerListener implements Listener { public class ResidencePlayerListener implements Listener {
protected Map<String, String> currentRes;
protected Map<String, Long> lastUpdate;
protected Map<String, Location> lastOutsideLoc;
protected int minUpdateTime;
protected boolean chatenabled; protected boolean chatenabled;
protected Map<String, String> currentRes;
protected Map<String, Location> lastOutsideLoc;
protected Map<String, Long> lastUpdate;
protected int minUpdateTime;
protected List<String> playerToggleChat; protected List<String> playerToggleChat;
Residence plugin;
public ResidencePlayerListener() { public ResidencePlayerListener(final Residence plugin) {
this.plugin = plugin;
currentRes = new HashMap<String, String>(); currentRes = new HashMap<String, String>();
lastUpdate = new HashMap<String, Long>(); lastUpdate = new HashMap<String, Long>();
lastOutsideLoc = new HashMap<String, Location>(); lastOutsideLoc = new HashMap<String, Location>();
playerToggleChat = new ArrayList<String>(); playerToggleChat = new ArrayList<String>();
minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval();
chatenabled = Residence.getConfigManager().chatEnabled(); chatenabled = plugin.getConfigManager().chatEnabled();
for (Player player : Bukkit.getServer().getOnlinePlayers()) for (final Player player : Bukkit.getServer().getOnlinePlayers()) {
lastUpdate.put(player.getName(), System.currentTimeMillis()); lastUpdate.put(player.getName(), System.currentTimeMillis());
}
} }
public String getCurrentResidenceName(String player) { public String getCurrentResidenceName(final String player) {
return currentRes.get(player); return currentRes.get(player);
} }
public void handleNewLocation(Player player, Location loc, boolean move) { public void handleNewLocation(final Player player, final Location loc, final boolean move) {
String pname = player.getName(); final String pname = player.getName();
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc);
String areaname = null; String areaname = null;
boolean chatchange = false; boolean chatchange = false;
String subzone = null; String subzone = null;
if (res != null) { if (res != null) {
areaname = Residence.getResidenceManager().getNameByLoc(loc); areaname = plugin.getResidenceManager().getNameByLoc(loc);
while (res.getSubzoneByLoc(player.getLocation()) != null) { while (res.getSubzoneByLoc(player.getLocation()) != null) {
subzone = res.getSubzoneNameByLoc(player.getLocation()); subzone = res.getSubzoneNameByLoc(player.getLocation());
res = res.getSubzoneByLoc(player.getLocation()); res = res.getSubzoneByLoc(player.getLocation());
@@ -93,163 +96,183 @@ public class ResidencePlayerListener implements Listener {
} }
ClaimedResidence ResOld = null; ClaimedResidence ResOld = null;
if (currentRes.containsKey(pname)) { if (currentRes.containsKey(pname)) {
ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); ResOld = plugin.getResidenceManager().getByName(currentRes.get(pname));
if (ResOld == null) if (ResOld == null) {
currentRes.remove(pname); currentRes.remove(pname);
}
} }
if (res == null) { if (res == null) {
lastOutsideLoc.put(pname, loc); lastOutsideLoc.put(pname, loc);
if (ResOld != null) { if (ResOld != null) {
String leave = ResOld.getLeaveMessage(); final String leave = ResOld.getLeaveMessage();
// New ResidenceChangeEvent // New ResidenceChangeEvent
ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player);
Residence.getServ().getPluginManager().callEvent(chgEvent); plugin.getServ().getPluginManager().callEvent(chgEvent);
if (leave != null && !leave.equals("")) if (leave != null && !leave.equals("")) {
if (Residence.getConfigManager().useActionBar()) if (plugin.getConfigManager().useActionBar()) {
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString());
else } else {
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
}
}
currentRes.remove(pname); currentRes.remove(pname);
Residence.getChatManager().removeFromChannel(pname); plugin.getChatManager().removeFromChannel(pname);
} }
return; return;
} }
if (move) if (move) {
if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.admin.move")) { if (!res.getPermissions().playerHas(pname, "move", true) && !plugin.isResAdminOn(player) && !player.hasPermission("residence.admin.move")) {
Location lastLoc = lastOutsideLoc.get(pname); final Location lastLoc = lastOutsideLoc.get(pname);
if (lastLoc != null) if (lastLoc != null) {
player.teleport(lastLoc); player.teleport(lastLoc);
else } else {
player.teleport(res.getOutsideFreeLoc(loc)); player.teleport(res.getOutsideFreeLoc(loc));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1])); }
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1]));
return; return;
} }
}
lastOutsideLoc.put(pname, loc); lastOutsideLoc.put(pname, loc);
if (!currentRes.containsKey(pname) || ResOld != res) { if (!currentRes.containsKey(pname) || ResOld != res) {
currentRes.put(pname, areaname); currentRes.put(pname, areaname);
if (subzone == null) if (subzone == null) {
chatchange = true; chatchange = true;
}
// "from" residence for ResidenceChangedEvent // "from" residence for ResidenceChangedEvent
ClaimedResidence chgFrom = null; ClaimedResidence chgFrom = null;
if (ResOld != res && ResOld != null) { if (ResOld != res && ResOld != null) {
String leave = ResOld.getLeaveMessage(); final String leave = ResOld.getLeaveMessage();
chgFrom = ResOld; chgFrom = ResOld;
if (leave != null && !leave.equals("") && ResOld != res.getParent()) if (leave != null && !leave.equals("") && ResOld != res.getParent()) {
if (Residence.getConfigManager().useActionBar()) if (plugin.getConfigManager().useActionBar()) {
ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave));
else } else {
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
}
}
} }
String enterMessage = res.getEnterMessage(); final String enterMessage = res.getEnterMessage();
// New ResidenceChangedEvent // New ResidenceChangedEvent
ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player);
Residence.getServ().getPluginManager().callEvent(chgEvent); plugin.getServ().getPluginManager().callEvent(chgEvent);
if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) {
if (Residence.getConfigManager().useActionBar()) if (plugin.getConfigManager().useActionBar()) {
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString());
else } else {
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage));
}
}
}
if (chatchange && chatenabled) {
plugin.getChatManager().setChannel(pname, areaname);
} }
if (chatchange && chatenabled)
Residence.getChatManager().setChannel(pname, areaname);
} }
public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { public String insertMessages(final Player player, final String areaname, final ClaimedResidence res, String message) {
try { try {
message = message.replaceAll("%player", player.getName()); message = message.replaceAll("%player", player.getName());
message = message.replaceAll("%owner", res.getPermissions().getOwner()); message = message.replaceAll("%owner", res.getPermissions().getOwner());
message = message.replaceAll("%residence", areaname); message = message.replaceAll("%residence", areaname);
} catch (Exception ex) { } catch (final Exception ex) {
return ""; return "";
} }
return message; return message;
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
String pname = player.getName(); }
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); final String pname = player.getName();
if (res != null) final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) if (res != null) {
if (Residence.getRentManager().isRented(res.getName())) { if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); if (plugin.getRentManager().isRented(res.getName())) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); }
}
final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "bucket"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBucketFill(PlayerBucketFillEvent event) { public void onPlayerBucketFill(final PlayerBucketFillEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
String pname = player.getName(); final String pname = player.getName();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); }
if (res != null) final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) if (res != null) {
if (Residence.getRentManager().isRented(res.getName())) { if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); if (plugin.getRentManager().isRented(res.getName())) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); }
boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); }
final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
final boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true));
if (!hasbucket) { if (!hasbucket) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "bucket"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerChat(AsyncPlayerChatEvent event) { public void onPlayerChat(final AsyncPlayerChatEvent event) {
String pname = event.getPlayer().getName(); final String pname = event.getPlayer().getName();
if (chatenabled && playerToggleChat.contains(pname)) { if (chatenabled && playerToggleChat.contains(pname)) {
String area = currentRes.get(pname); final String area = currentRes.get(pname);
if (area != null) { if (area != null) {
ChatChannel channel = Residence.getChatManager().getChannel(area); final ChatChannel channel = plugin.getChatManager().getChannel(area);
if (channel != null) if (channel != null) {
channel.chat(pname, event.getMessage()); channel.chat(pname, event.getMessage());
}
event.setCancelled(true); event.setCancelled(true);
} }
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(final PlayerInteractEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
Material heldItem = player.getItemInHand().getType(); final Material heldItem = player.getItemInHand().getType();
Block block = event.getClickedBlock(); final Block block = event.getClickedBlock();
if (block == null) if (block == null) {
return; return;
Material mat = block.getType(); }
final Material mat = block.getType();
if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block)
|| event.getAction() == Action.PHYSICAL)) { || event.getAction() == Action.PHYSICAL)) {
int typeId = player.getItemInHand().getTypeId(); final int typeId = player.getItemInHand().getTypeId();
if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) if (typeId != plugin.getConfigManager().getSelectionTooldID() && typeId != plugin.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) {
return; return;
}
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player);
String world = player.getWorld().getName(); final String world = player.getWorld().getName();
String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player);
boolean resadmin = Residence.isResAdminOn(player); final boolean resadmin = plugin.isResAdminOn(player);
if (event.getAction() == Action.PHYSICAL) { if (event.getAction() == Action.PHYSICAL) {
if (!resadmin) { if (!resadmin) {
boolean hasuse = perms.playerHas(player.getName(), world, "use", true); final boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); final boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse);
if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -261,229 +284,258 @@ public class ResidencePlayerListener implements Listener {
} }
return; return;
} }
if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, permgroup, world)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getSelectionTooldID()) { if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getSelectionTooldID()) {
Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); final Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit");
if (wep != null) if (wep != null) {
if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) {
return; return;
PermissionGroup group = Residence.getPermissionManager().getGroup(player); }
}
final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select")
|| group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) || group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) {
if (event.getAction() == Action.LEFT_CLICK_BLOCK) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
Location loc = block.getLocation(); final Location loc = block.getLocation();
Residence.getSelectionManager().placeLoc1(player, loc); plugin.getSelectionManager().placeLoc1(player, loc);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + ","
+ "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
event.setCancelled(true); event.setCancelled(true);
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Location loc = block.getLocation(); final Location loc = block.getLocation();
Residence.getSelectionManager().placeLoc2(player, loc); plugin.getSelectionManager().placeLoc2(player, loc);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + ","
+ "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
} }
}
} }
if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getInfoToolID()) if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getInfoToolID()) {
if (event.getAction() == Action.LEFT_CLICK_BLOCK) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
Location loc = block.getLocation(); final Location loc = block.getLocation();
String res = Residence.getResidenceManager().getNameByLoc(loc); final String res = plugin.getResidenceManager().getNameByLoc(loc);
if (res != null) { if (res != null) {
Residence.getResidenceManager().printAreaInfo(res, player); plugin.getResidenceManager().printAreaInfo(res, player);
event.setCancelled(true); event.setCancelled(true);
} else { } else {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); player.sendMessage(plugin.getLanguage().getPhrase("NoResHere"));
} }
} }
}
if (!resadmin) { if (!resadmin) {
if (heldItem != null) if (heldItem != null) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (player.getItemInHand().getTypeId() == 351) if (player.getItemInHand().getTypeId() == 351) {
if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17
&& (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) {
perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
if (!perms.playerHas(player.getName(), world, "build", true)) { if (!perms.playerHas(player.getName(), world, "build", true)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
if (Residence.is1_8()) }
if (plugin.is1_8()) {
if (heldItem == Material.ARMOR_STAND) { if (heldItem == Material.ARMOR_STAND) {
perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
if (!perms.playerHas(player.getName(), world, "build", true)) { if (!perms.playerHas(player.getName(), world, "build", true)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
}
} }
}
if (isContainer(mat, block) || isCanUseEntity(mat, block)) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) {
boolean hasuse = perms.playerHas(player.getName(), world, "use", true); final boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
for (Entry<Material, String> checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) for (final Entry<Material, String> checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) {
if (mat == checkMat.getKey()) if (mat == checkMat.getKey()) {
if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) {
if (hasuse || checkMat.getValue().equals("container")) { if (hasuse || checkMat.getValue().equals("container")) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", checkMat.getValue()));
return; return;
} else { } else {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) }
}
}
if (plugin.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) {
if (!perms.playerHas(player.getName(), world, "container", hasuse)) { if (!perms.playerHas(player.getName(), world, "container", hasuse)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container"));
return; return;
} }
if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) }
if (plugin.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) {
if (!hasuse) { if (!hasuse) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) }
if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) {
if (!hasuse) { if (!hasuse) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
}
}
} }
} }
} }
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { public void onPlayerInteractEntity(final PlayerInteractEntityEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
Entity ent = event.getRightClicked(); }
final Entity ent = event.getRightClicked();
/* Trade */ /* Trade */
if (ent.getType() == EntityType.VILLAGER) { if (ent.getType() == EntityType.VILLAGER) {
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation());
if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
/* Container - ItemFrame protection */ /* Container - ItemFrame protection */
Material heldItem = player.getItemInHand().getType(); final Material heldItem = player.getItemInHand().getType();
if (!(ent instanceof Hanging)) if (!(ent instanceof Hanging)) {
return; return;
Hanging hanging = (Hanging) ent; }
if (hanging.getType() != EntityType.ITEM_FRAME) final Hanging hanging = (Hanging) ent;
if (hanging.getType() != EntityType.ITEM_FRAME) {
return; return;
FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); }
String world = player.getWorld().getName(); final FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player);
String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); final String world = player.getWorld().getName();
if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); if (!plugin.getItemManager().isAllowed(heldItem, permgroup, world)) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container"));
} }
} }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(final PlayerJoinEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
lastUpdate.put(player.getName(), 0L); lastUpdate.put(player.getName(), 0L);
if (Residence.getPermissionManager().isResidenceAdmin(player)) if (plugin.getPermissionManager().isResidenceAdmin(player)) {
Residence.turnResAdminOn(player); plugin.turnResAdminOn(player);
}
handleNewLocation(player, player.getLocation(), false); handleNewLocation(player, player.getLocation(), false);
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(final PlayerMoveEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (player == null) if (player == null) {
return; return;
long now = System.currentTimeMillis(); }
final long now = System.currentTimeMillis();
if (!lastUpdate.containsKey(player.getName())) { if (!lastUpdate.containsKey(player.getName())) {
lastUpdate.put(player.getName(), now); lastUpdate.put(player.getName(), now);
return; return;
} }
long last = lastUpdate.get(player.getName()); final long last = lastUpdate.get(player.getName());
if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) {
return; return;
}
lastUpdate.put(player.getName(), now); lastUpdate.put(player.getName(), now);
if (event.getFrom().getWorld() == event.getTo().getWorld()) if (event.getFrom().getWorld() == event.getTo().getWorld()) {
if (event.getFrom().distance(event.getTo()) == 0) if (event.getFrom().distance(event.getTo()) == 0) {
return; return;
}
}
handleNewLocation(player, event.getTo(), true); handleNewLocation(player, event.getTo(), true);
} }
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(final PlayerQuitEvent event) {
String pname = event.getPlayer().getName(); final String pname = event.getPlayer().getName();
currentRes.remove(pname); currentRes.remove(pname);
lastUpdate.remove(pname); lastUpdate.remove(pname);
lastOutsideLoc.remove(pname); lastOutsideLoc.remove(pname);
Residence.getChatManager().removeFromChannel(pname); plugin.getChatManager().removeFromChannel(pname);
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerSpawn(PlayerRespawnEvent event) { public void onPlayerSpawn(final PlayerRespawnEvent event) {
Location loc = event.getRespawnLocation(); Location loc = event.getRespawnLocation();
Boolean bed = event.isBedSpawn(); final Boolean bed = event.isBedSpawn();
Player player = event.getPlayer(); final Player player = event.getPlayer();
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc);
if (res == null) if (res == null) {
return; return;
if (res.getPermissions().playerHas(player.getName(), "move", true)) }
if (res.getPermissions().playerHas(player.getName(), "move", true)) {
return; return;
if (bed) }
if (bed) {
loc = player.getWorld().getSpawnLocation(); loc = player.getWorld().getSpawnLocation();
res = Residence.getResidenceManager().getByLoc(loc); }
if (res != null) res = plugin.getResidenceManager().getByLoc(loc);
if (!res.getPermissions().playerHas(player.getName(), "move", true)) if (res != null) {
if (!res.getPermissions().playerHas(player.getName(), "move", true)) {
loc = res.getOutsideFreeLoc(loc); loc = res.getOutsideFreeLoc(loc);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); }
}
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoSpawn"));
event.setRespawnLocation(loc); event.setRespawnLocation(loc);
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerTeleport(PlayerTeleportEvent event) { public void onPlayerTeleport(final PlayerTeleportEvent event) {
Location loc = event.getTo(); final Location loc = event.getTo();
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) { if (plugin.isResAdminOn(player)) {
handleNewLocation(player, loc, false); handleNewLocation(player, loc, false);
return; return;
} }
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); final ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc);
if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL) if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL) {
if (res != null) { if (res != null) {
String areaname = Residence.getResidenceManager().getNameByLoc(loc); final String areaname = plugin.getResidenceManager().getNameByLoc(loc);
if (!res.getPermissions().playerHas(player.getName(), "move", true)) { if (!res.getPermissions().playerHas(player.getName(), "move", true)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceMoveDeny", areaname));
return; return;
} }
} }
if (event.getCause() == TeleportCause.PLUGIN) }
if (event.getCause() == TeleportCause.PLUGIN) {
if (res != null) { if (res != null) {
String areaname = Residence.getResidenceManager().getNameByLoc(loc); final String areaname = plugin.getResidenceManager().getNameByLoc(loc);
if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportDeny", areaname));
return; return;
} }
} }
}
handleNewLocation(player, loc, false); handleNewLocation(player, loc, false);
} }
@@ -492,44 +544,45 @@ public class ResidencePlayerListener implements Listener {
lastUpdate = new HashMap<String, Long>(); lastUpdate = new HashMap<String, Long>();
lastOutsideLoc = new HashMap<String, Location>(); lastOutsideLoc = new HashMap<String, Location>();
playerToggleChat = new ArrayList<String>(); playerToggleChat = new ArrayList<String>();
minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval();
chatenabled = Residence.getConfigManager().chatEnabled(); chatenabled = plugin.getConfigManager().chatEnabled();
for (Player player : Bukkit.getServer().getOnlinePlayers()) for (final Player player : Bukkit.getServer().getOnlinePlayers()) {
lastUpdate.put(player.getName(), System.currentTimeMillis()); lastUpdate.put(player.getName(), System.currentTimeMillis());
}
public void tooglePlayerResidenceChat(Player player) {
String pname = player.getName();
if (playerToggleChat.contains(pname)) {
playerToggleChat.remove(pname);
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
} else {
playerToggleChat.add(pname);
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
} }
} }
private boolean isCanUseEntity(Material mat, Block block) { public void tooglePlayerResidenceChat(final Player player) {
final String pname = player.getName();
if (playerToggleChat.contains(pname)) {
playerToggleChat.remove(pname);
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
} else {
playerToggleChat.add(pname);
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
}
}
private boolean isCanUseEntity(final Material mat, final Block block) {
return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block);
} }
private boolean isCanUseEntity_BothClick(Material mat, Block block) { private boolean isCanUseEntity_BothClick(final Material mat, final Block block) {
return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE
|| mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG
|| Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())) || plugin.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))
|| (Residence.is1_8() && (mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR || (plugin.is1_8() && (mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR
|| mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE
|| mat == Material.DARK_OAK_FENCE_GATE)); || mat == Material.DARK_OAK_FENCE_GATE));
} }
private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { private boolean isCanUseEntity_RClickOnly(final Material mat, final Block block) {
return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL || mat == Material.CAKE_BLOCK return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL || mat == Material.CAKE_BLOCK
|| mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH
|| mat == Material.BREWING_STAND || mat == Material.ENCHANTMENT_TABLE || Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); || mat == Material.BREWING_STAND || mat == Material.ENCHANTMENT_TABLE || plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()));
} }
private boolean isContainer(Material mat, Block block) { private boolean isContainer(final Material mat, final Block block) {
return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container")
|| Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId())); || plugin.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()));
} }
} }

View File

@@ -22,23 +22,30 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions;
* @author Administrator * @author Administrator
*/ */
public class ResidencePlayerListener_1_8 implements Listener { public class ResidencePlayerListener_1_8 implements Listener {
Residence plugin;
public ResidencePlayerListener_1_8(final Residence plugin) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { public void onPlayerInteractAtEntity(final PlayerInteractAtEntityEvent event) {
Player player = event.getPlayer(); final Player player = event.getPlayer();
if (Residence.isResAdminOn(player)) if (plugin.isResAdminOn(player)) {
return; return;
}
Entity ent = event.getRightClicked(); final Entity ent = event.getRightClicked();
if (ent.getType() != EntityType.ARMOR_STAND) if (ent.getType() != EntityType.ARMOR_STAND) {
return; return;
}
FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); final FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player);
String world = player.getWorld().getName(); final String world = player.getWorld().getName();
if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container"));
} }
} }

View File

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

View File

@@ -27,53 +27,55 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState;
* changed by inori 03/17/2012 line 91:limits MaxHeight changed to 255 * changed by inori 03/17/2012 line 91:limits MaxHeight changed to 255
*/ */
public class PermissionGroup { public class PermissionGroup {
protected boolean buyIgnoreLimits;
protected boolean canBuy;
protected boolean cancreate;
protected boolean canSell;
protected double costperarea;
protected Map<String, Boolean> creatorDefaultFlags;
protected String defaultEnterMessage;
protected String defaultLeaveMessage;
protected FlagPermissions flagPerms;
protected Map<String, Map<String, Boolean>> groupDefaultFlags;
protected String groupname;
protected boolean itemListAccess;
protected boolean kick;
protected int leaseGiveTime;
protected int maxHeight;
protected int maxLeaseTime;
protected int maxPhysical;
protected int maxRentables;
protected int maxRents;
protected boolean messageperms;
protected int minHeight;
protected double renewcostperarea;
protected Map<String, Boolean> residenceDefaultFlags;
protected int resmax;
protected boolean selectCommandAccess;
protected int subzonedepth;
protected boolean tpaccess;
protected boolean unstuck;
protected int xmax; protected int xmax;
protected int ymax; protected int ymax;
protected int zmax; protected int zmax;
protected int resmax; Residence plugin;
protected double costperarea;
protected boolean tpaccess;
protected int subzonedepth;
protected FlagPermissions flagPerms;
protected Map<String, Boolean> creatorDefaultFlags;
protected Map<String, Map<String, Boolean>> groupDefaultFlags;
protected Map<String, Boolean> residenceDefaultFlags;
protected boolean messageperms;
protected String defaultEnterMessage;
protected String defaultLeaveMessage;
protected int maxLeaseTime;
protected int leaseGiveTime;
protected double renewcostperarea;
protected boolean canBuy;
protected boolean canSell;
protected boolean buyIgnoreLimits;
protected boolean cancreate;
protected String groupname;
protected int maxPhysical;
protected boolean unstuck;
protected boolean kick;
protected int minHeight;
protected int maxHeight;
protected int maxRents;
protected int maxRentables;
protected boolean selectCommandAccess;
protected boolean itemListAccess;
public PermissionGroup(String name) { public PermissionGroup(final Residence plugin, final String name) {
flagPerms = new FlagPermissions(); this.plugin = plugin;
flagPerms = new FlagPermissions(plugin);
creatorDefaultFlags = new HashMap<String, Boolean>(); creatorDefaultFlags = new HashMap<String, Boolean>();
residenceDefaultFlags = new HashMap<String, Boolean>(); residenceDefaultFlags = new HashMap<String, Boolean>();
groupDefaultFlags = new HashMap<String, Map<String, Boolean>>(); groupDefaultFlags = new HashMap<String, Map<String, Boolean>>();
groupname = name; groupname = name;
} }
public PermissionGroup(String name, ConfigurationSection node) { public PermissionGroup(final Residence plugin, final String name, final ConfigurationSection node) {
this(name); this(plugin, name);
this.parseGroup(node); this.parseGroup(node);
} }
public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms) { public PermissionGroup(final Residence plugin, final String name, final ConfigurationSection node, final FlagPermissions parentFlagPerms) {
this(name, node); this(plugin, name, node);
flagPerms.setParent(parentFlagPerms); flagPerms.setParent(parentFlagPerms);
} }
@@ -173,7 +175,7 @@ public class PermissionGroup {
return minHeight; return minHeight;
} }
public boolean hasFlagAccess(String flag) { public boolean hasFlagAccess(final String flag) {
return flagPerms.has(flag, false); return flagPerms.has(flag, false);
} }
@@ -189,9 +191,10 @@ public class PermissionGroup {
return unstuck; return unstuck;
} }
public boolean inLimits(CuboidArea area) { public boolean inLimits(final CuboidArea area) {
if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) {
return false; return false;
}
return true; return true;
} }
@@ -199,11 +202,11 @@ public class PermissionGroup {
return itemListAccess; return itemListAccess;
} }
public void printLimits(Player player) { public void printLimits(final Player player) {
player.sendMessage(ChatColor.GRAY + "---------------------------"); player.sendMessage(ChatColor.GRAY + "---------------------------");
player.sendMessage(ChatColor.YELLOW + "权限 组:" + ChatColor.DARK_AQUA + " " + Residence.getPermissionManager().getPermissionsGroup(player)); player.sendMessage(ChatColor.YELLOW + "权限 组:" + ChatColor.DARK_AQUA + " " + plugin.getPermissionManager().getPermissionsGroup(player));
player.sendMessage(ChatColor.YELLOW + "领地 组:" + ChatColor.DARK_AQUA + " " + groupname); player.sendMessage(ChatColor.YELLOW + "领地 组:" + ChatColor.DARK_AQUA + " " + groupname);
player.sendMessage(ChatColor.YELLOW + "领地 管理:" + ChatColor.DARK_AQUA + " " + Residence.getPermissionManager().isResidenceAdmin(player)); player.sendMessage(ChatColor.YELLOW + "领地 管理:" + ChatColor.DARK_AQUA + " " + plugin.getPermissionManager().isResidenceAdmin(player));
player.sendMessage(ChatColor.YELLOW + "允许创建领地:" + ChatColor.DARK_AQUA + " " + cancreate); player.sendMessage(ChatColor.YELLOW + "允许创建领地:" + ChatColor.DARK_AQUA + " " + cancreate);
player.sendMessage(ChatColor.YELLOW + "最大领地个数:" + ChatColor.DARK_AQUA + " " + resmax); player.sendMessage(ChatColor.YELLOW + "最大领地个数:" + ChatColor.DARK_AQUA + " " + resmax);
player.sendMessage(ChatColor.YELLOW + "X轴最大长度:" + ChatColor.DARK_AQUA + " " + xmax); player.sendMessage(ChatColor.YELLOW + "X轴最大长度:" + ChatColor.DARK_AQUA + " " + xmax);
@@ -212,11 +215,12 @@ public class PermissionGroup {
player.sendMessage(ChatColor.YELLOW + "高度限制:" + ChatColor.DARK_AQUA + " " + minHeight + " - " + maxHeight); player.sendMessage(ChatColor.YELLOW + "高度限制:" + ChatColor.DARK_AQUA + " " + minHeight + " - " + maxHeight);
player.sendMessage(ChatColor.YELLOW + "最大子领地深度:" + ChatColor.DARK_AQUA + " " + subzonedepth); player.sendMessage(ChatColor.YELLOW + "最大子领地深度:" + ChatColor.DARK_AQUA + " " + subzonedepth);
player.sendMessage(ChatColor.YELLOW + "是否允许设置进出消息:" + ChatColor.DARK_AQUA + " " + messageperms); player.sendMessage(ChatColor.YELLOW + "是否允许设置进出消息:" + ChatColor.DARK_AQUA + " " + messageperms);
player.sendMessage(ChatColor.YELLOW + "你所拥有的领地:" + ChatColor.DARK_AQUA + " " + Residence.getResidenceManager().getOwnedZoneCount(player.getName())); player.sendMessage(ChatColor.YELLOW + "你所拥有的领地:" + ChatColor.DARK_AQUA + " " + plugin.getResidenceManager().getOwnedZoneCount(player.getName()));
if (Residence.getEconomyManager() != null) if (plugin.getEconomyManager() != null) {
player.sendMessage(ChatColor.YELLOW + "每个方块需要金钱:" + ChatColor.DARK_AQUA + " " + costperarea); player.sendMessage(ChatColor.YELLOW + "每个方块需要金钱:" + ChatColor.DARK_AQUA + " " + costperarea);
}
player.sendMessage(ChatColor.YELLOW + "Flag 权限:" + ChatColor.DARK_AQUA + " " + flagPerms.listFlags()); player.sendMessage(ChatColor.YELLOW + "Flag 权限:" + ChatColor.DARK_AQUA + " " + flagPerms.listFlags());
if (Residence.getConfigManager().useLeases()) { if (plugin.getConfigManager().useLeases()) {
player.sendMessage(ChatColor.YELLOW + "最大租赁日:" + ChatColor.DARK_AQUA + " " + maxLeaseTime); player.sendMessage(ChatColor.YELLOW + "最大租赁日:" + ChatColor.DARK_AQUA + " " + maxLeaseTime);
player.sendMessage(ChatColor.YELLOW + "续租日期:" + ChatColor.DARK_AQUA + " " + leaseGiveTime); player.sendMessage(ChatColor.YELLOW + "续租日期:" + ChatColor.DARK_AQUA + " " + leaseGiveTime);
player.sendMessage(ChatColor.YELLOW + "续租方块需要金钱:" + ChatColor.DARK_AQUA + " " + renewcostperarea); player.sendMessage(ChatColor.YELLOW + "续租方块需要金钱:" + ChatColor.DARK_AQUA + " " + renewcostperarea);
@@ -228,19 +232,20 @@ public class PermissionGroup {
return selectCommandAccess; return selectCommandAccess;
} }
private void parseGroup(ConfigurationSection limits) { private void parseGroup(final ConfigurationSection limits) {
if (limits == null) if (limits == null) {
return; return;
cancreate = limits.getBoolean("Residence.CanCreate", false); }
resmax = limits.getInt("Residence.MaxResidences", 0); cancreate = limits.getBoolean("plugin.CanCreate", false);
maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); resmax = limits.getInt("plugin.MaxResidences", 0);
xmax = limits.getInt("Residence.MaxEastWest", 0); maxPhysical = limits.getInt("plugin.MaxAreasPerResidence", 2);
ymax = limits.getInt("Residence.MaxUpDown", 0); xmax = limits.getInt("plugin.MaxEastWest", 0);
zmax = limits.getInt("Residence.MaxNorthSouth", 0); ymax = limits.getInt("plugin.MaxUpDown", 0);
minHeight = limits.getInt("Residence.MinHeight", 0); zmax = limits.getInt("plugin.MaxNorthSouth", 0);
maxHeight = limits.getInt("Residence.MaxHeight", 255); minHeight = limits.getInt("plugin.MinHeight", 0);
tpaccess = limits.getBoolean("Residence.CanTeleport", false); maxHeight = limits.getInt("plugin.MaxHeight", 255);
subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); tpaccess = limits.getBoolean("plugin.CanTeleport", false);
subzonedepth = limits.getInt("plugin.SubzoneDepth", 0);
messageperms = limits.getBoolean("Messaging.CanChange", false); messageperms = limits.getBoolean("Messaging.CanChange", false);
defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null);
defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null);
@@ -253,59 +258,63 @@ public class PermissionGroup {
canSell = limits.getBoolean("Economy.CanSell", false); canSell = limits.getBoolean("Economy.CanSell", false);
buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false);
costperarea = limits.getDouble("Economy.BuyCost", 0); costperarea = limits.getDouble("Economy.BuyCost", 0);
unstuck = limits.getBoolean("Residence.Unstuck", false); unstuck = limits.getBoolean("plugin.Unstuck", false);
kick = limits.getBoolean("Residence.Kick", false); kick = limits.getBoolean("plugin.Kick", false);
selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); selectCommandAccess = limits.getBoolean("plugin.SelectCommandAccess", true);
itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); itemListAccess = limits.getBoolean("plugin.ItemListAccess", true);
ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); ConfigurationSection node = limits.getConfigurationSection("Flags.Permission");
Set<String> flags = null; Set<String> flags = null;
if (node != null) if (node != null) {
flags = node.getKeys(false); flags = node.getKeys(false);
}
if (flags != null) { if (flags != null) {
Iterator<String> flagit = flags.iterator(); final Iterator<String> flagit = flags.iterator();
while (flagit.hasNext()) { while (flagit.hasNext()) {
String flagname = flagit.next(); final String flagname = flagit.next();
boolean access = limits.getBoolean("Flags.Permission." + flagname, false); final boolean access = limits.getBoolean("Flags.Permission." + flagname, false);
flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE);
} }
} }
node = limits.getConfigurationSection("Flags.CreatorDefault"); node = limits.getConfigurationSection("Flags.CreatorDefault");
if (node != null) if (node != null) {
flags = node.getKeys(false); flags = node.getKeys(false);
}
if (flags != null) { if (flags != null) {
Iterator<String> flagit = flags.iterator(); final Iterator<String> flagit = flags.iterator();
while (flagit.hasNext()) { while (flagit.hasNext()) {
String flagname = flagit.next(); final String flagname = flagit.next();
boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); final boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false);
creatorDefaultFlags.put(flagname, access); creatorDefaultFlags.put(flagname, access);
} }
} }
node = limits.getConfigurationSection("Flags.Default"); node = limits.getConfigurationSection("Flags.Default");
if (node != null) if (node != null) {
flags = node.getKeys(false); flags = node.getKeys(false);
}
if (flags != null) { if (flags != null) {
Iterator<String> flagit = flags.iterator(); final Iterator<String> flagit = flags.iterator();
while (flagit.hasNext()) { while (flagit.hasNext()) {
String flagname = flagit.next(); final String flagname = flagit.next();
boolean access = limits.getBoolean("Flags.Default." + flagname, false); final boolean access = limits.getBoolean("Flags.Default." + flagname, false);
residenceDefaultFlags.put(flagname, access); residenceDefaultFlags.put(flagname, access);
} }
} }
node = limits.getConfigurationSection("Flags.GroupDefault"); node = limits.getConfigurationSection("Flags.GroupDefault");
Set<String> groupDef = null; Set<String> groupDef = null;
if (node != null) if (node != null) {
groupDef = node.getKeys(false); groupDef = node.getKeys(false);
}
if (groupDef != null) { if (groupDef != null) {
Iterator<String> groupit = groupDef.iterator(); final Iterator<String> groupit = groupDef.iterator();
while (groupit.hasNext()) { while (groupit.hasNext()) {
String name = groupit.next(); final String name = groupit.next();
Map<String, Boolean> gflags = new HashMap<String, Boolean>(); final Map<String, Boolean> gflags = new HashMap<String, Boolean>();
flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false);
Iterator<String> flagit = flags.iterator(); final Iterator<String> flagit = flags.iterator();
while (flagit.hasNext()) { while (flagit.hasNext()) {
String flagname = flagit.next(); final String flagname = flagit.next();
boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); final boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false);
gflags.put(flagname, access); gflags.put(flagname, access);
} }
groupDefaultFlags.put(name, gflags); groupDefaultFlags.put(name, gflags);

View File

@@ -26,85 +26,75 @@ import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
*/ */
public class PermissionManager { public class PermissionManager {
protected static PermissionsInterface perms; protected static PermissionsInterface perms;
protected FlagPermissions globalFlagPerms;
protected Map<String, PermissionGroup> groups; protected Map<String, PermissionGroup> groups;
protected Map<String, String> playersGroup; protected Map<String, String> playersGroup;
protected FlagPermissions globalFlagPerms; Residence plugin;
public PermissionManager(FileConfiguration config) { public PermissionManager(final Residence plugin) {
try { try {
this.plugin = plugin;
groups = Collections.synchronizedMap(new HashMap<String, PermissionGroup>()); groups = Collections.synchronizedMap(new HashMap<String, PermissionGroup>());
playersGroup = Collections.synchronizedMap(new HashMap<String, String>()); playersGroup = Collections.synchronizedMap(new HashMap<String, String>());
globalFlagPerms = new FlagPermissions(); globalFlagPerms = new FlagPermissions(plugin);
this.readConfig(config); this.readConfig(plugin.getConfig());
boolean enable = config.getBoolean("Global.EnablePermissions", true); final boolean enable = plugin.getConfig().getBoolean("Global.EnablePermissions", true);
if (enable) { if (enable) {
this.checkPermissions(); this.checkPermissions();
} }
} catch (Exception ex) { } catch (final Exception ex) {
Residence.getLog().warning("权限管理载入失败,请报告以下错误给作者,谢谢!"); plugin.getLog().warning("权限管理载入失败,请报告以下错误给作者,谢谢!");
Residence.getLog().warning("错误: " + ex); plugin.getLog().warning("错误: " + ex);
} }
} }
private void checkPermissions() { public PermissionGroup getGroup(final Player player) {
Server server = Residence.getServ();
Plugin p = server.getPluginManager().getPlugin("Vault");
if (p != null) {
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server);
if (vault.permissionsOK()) {
perms = vault;
Residence.getLog().info("发现 Vault 使用权限系统:" + vault.getPermissionsName());
return;
} else {
Residence.getLog().info("发现 Vault, 但是 Vault 未找到权限系统...");
}
}
Residence.getLog().warning("权限系统未找到!");
}
public PermissionGroup getGroup(Player player) {
return groups.get(this.getGroupNameByPlayer(player)); return groups.get(this.getGroupNameByPlayer(player));
} }
public PermissionGroup getGroup(String player, String world) { public PermissionGroup getGroup(final String player, final String world) {
return groups.get(this.getGroupNameByPlayer(player, world)); return groups.get(this.getGroupNameByPlayer(player, world));
} }
public PermissionGroup getGroupByName(String group) { public PermissionGroup getGroupByName(String group) {
group = group.toLowerCase(); group = group.toLowerCase();
if (!groups.containsKey(group)) if (!groups.containsKey(group)) {
return groups.get(Residence.getConfigManager().getDefaultGroup()); return groups.get(plugin.getConfigManager().getDefaultGroup());
}
return groups.get(group); return groups.get(group);
} }
public String getGroupNameByPlayer(Player player) { public String getGroupNameByPlayer(final Player player) {
return this.getGroupNameByPlayer(player.getName(), player.getWorld().getName()); return this.getGroupNameByPlayer(player.getName(), player.getWorld().getName());
} }
public String getGroupNameByPlayer(String player, String world) { public String getGroupNameByPlayer(String player, final String world) {
player = player.toLowerCase(); player = player.toLowerCase();
if (playersGroup.containsKey(player)) { if (playersGroup.containsKey(player)) {
String group = playersGroup.get(player); String group = playersGroup.get(player);
if (group != null) { if (group != null) {
group = group.toLowerCase(); group = group.toLowerCase();
if (group != null && groups.containsKey(group)) if (group != null && groups.containsKey(group)) {
return group; return group;
}
} }
} }
String group = this.getPermissionsGroup(player, world); final String group = this.getPermissionsGroup(player, world);
if (group == null || !groups.containsKey(group)) if (group == null || !groups.containsKey(group)) {
return Residence.getConfigManager().getDefaultGroup().toLowerCase(); return plugin.getConfigManager().getDefaultGroup().toLowerCase();
else } else {
return group; return group;
}
} }
public String getPermissionsGroup(Player player) { public String getPermissionsGroup(final Player player) {
return this.getPermissionsGroup(player.getName(), player.getWorld().getName()); return this.getPermissionsGroup(player.getName(), player.getWorld().getName());
} }
public String getPermissionsGroup(String player, String world) { public String getPermissionsGroup(final String player, final String world) {
if (perms == null) if (perms == null) {
return Residence.getConfigManager().getDefaultGroup(); return plugin.getConfigManager().getDefaultGroup();
}
return perms.getPlayerGroup(player, world); return perms.getPlayerGroup(player, world);
} }
@@ -117,43 +107,51 @@ public class PermissionManager {
return groups.containsKey(group); return groups.containsKey(group);
} }
public boolean isResidenceAdmin(Player player) { public boolean isResidenceAdmin(final Player player) {
return (player.hasPermission("residence.admin") || (player.isOp() && Residence return (player.hasPermission("residence.admin") || (player.isOp() && plugin.getConfigManager().getOpsAreAdmins()));
.getConfigManager().getOpsAreAdmins()));
} }
private void readConfig(FileConfiguration config) { private void checkPermissions() {
String defaultGroup = Residence.getConfigManager().getDefaultGroup(); final Server server = plugin.getServ();
globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", final Plugin p = server.getPluginManager().getPlugin("Vault");
config.getConfigurationSection("Global")); if (p != null) {
ConfigurationSection nodes = config.getConfigurationSection("Groups"); final ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server);
if (vault.permissionsOK()) {
perms = vault;
plugin.getLog().info("发现 Vault 使用权限系统:" + vault.getPermissionsName());
return;
} else {
plugin.getLog().info("发现 Vault, 但是 Vault 未找到权限系统...");
}
}
plugin.getLog().warning("权限系统未找到!");
}
private void readConfig(final FileConfiguration config) {
final String defaultGroup = plugin.getConfigManager().getDefaultGroup();
globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", config.getConfigurationSection("Global"));
final ConfigurationSection nodes = config.getConfigurationSection("Groups");
if (nodes != null) { if (nodes != null) {
Set<String> entrys = nodes.getKeys(false); final Set<String> entrys = nodes.getKeys(false);
for (String key : entrys) { for (final String key : entrys) {
try { try {
groups.put( groups.put(key.toLowerCase(), new PermissionGroup(plugin, key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms));
key.toLowerCase(), final List<String> mirrors = nodes.getConfigurationSection(key).getStringList("Mirror");
new PermissionGroup(key.toLowerCase(), nodes for (final String group : mirrors) {
.getConfigurationSection(key), globalFlagPerms)); groups.put(group.toLowerCase(), new PermissionGroup(plugin, key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms));
List<String> mirrors = nodes.getConfigurationSection(key).getStringList(
"Mirror");
for (String group : mirrors) {
groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(),
nodes.getConfigurationSection(key), globalFlagPerms));
} }
} catch (Exception ex) { } catch (final Exception ex) {
Residence.getLog().info("错误 从配置文件读取:" + key + " 抛出异常:" + ex); plugin.getLog().info("错误 从配置文件读取:" + key + " 抛出异常:" + ex);
} }
} }
} }
if (!groups.containsKey(defaultGroup)) { if (!groups.containsKey(defaultGroup)) {
groups.put(defaultGroup, new PermissionGroup(defaultGroup)); groups.put(defaultGroup, new PermissionGroup(plugin, defaultGroup));
} }
Set<String> keys = config.getConfigurationSection("GroupAssignments").getKeys(false); final Set<String> keys = config.getConfigurationSection("GroupAssignments").getKeys(false);
if (keys != null) { if (keys != null) {
for (String key : keys) { for (final String key : keys) {
playersGroup.put(key.toLowerCase(), playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase());
config.getString("GroupAssignments." + key, defaultGroup).toLowerCase());
} }
} }
} }

View File

@@ -5,9 +5,6 @@
package com.bekvon.bukkit.residence.protection; package com.bekvon.bukkit.residence.protection;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -16,199 +13,202 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.World; import org.bukkit.World;
import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class CuboidArea { public class CuboidArea {
protected Location highPoints; protected Location highPoints;
protected Location lowPoints; protected Location lowPoints;
protected CuboidArea() { public CuboidArea(final Location startLoc, final Location endLoc) {
} int highx, highy, highz, lowx, lowy, lowz;
if (startLoc.getBlockX() > endLoc.getBlockX()) {
highx = startLoc.getBlockX();
lowx = endLoc.getBlockX();
} else {
highx = endLoc.getBlockX();
lowx = startLoc.getBlockX();
}
if (startLoc.getBlockY() > endLoc.getBlockY()) {
highy = startLoc.getBlockY();
lowy = endLoc.getBlockY();
} else {
highy = endLoc.getBlockY();
lowy = startLoc.getBlockY();
}
if (startLoc.getBlockZ() > endLoc.getBlockZ()) {
highz = startLoc.getBlockZ();
lowz = endLoc.getBlockZ();
} else {
highz = endLoc.getBlockZ();
lowz = startLoc.getBlockZ();
}
highPoints = new Location(startLoc.getWorld(), highx, highy, highz);
lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz);
}
public CuboidArea(Location startLoc, Location endLoc) { protected CuboidArea() {
int highx, highy, highz, lowx, lowy, lowz; }
if (startLoc.getBlockX() > endLoc.getBlockX()) {
highx = startLoc.getBlockX();
lowx = endLoc.getBlockX();
} else {
highx = endLoc.getBlockX();
lowx = startLoc.getBlockX();
}
if (startLoc.getBlockY() > endLoc.getBlockY()) {
highy = startLoc.getBlockY();
lowy = endLoc.getBlockY();
} else {
highy = endLoc.getBlockY();
lowy = startLoc.getBlockY();
}
if (startLoc.getBlockZ() > endLoc.getBlockZ()) {
highz = startLoc.getBlockZ();
lowz = endLoc.getBlockZ();
} else {
highz = endLoc.getBlockZ();
lowz = startLoc.getBlockZ();
}
highPoints = new Location(startLoc.getWorld(), highx, highy, highz);
lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz);
}
public boolean isAreaWithinArea(CuboidArea area) { public static CuboidArea load(final DataInputStream in, final int version) throws IOException {
return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); final CuboidArea newArea = new CuboidArea();
} final Server server = Bukkit.getServer();
final World world = server.getWorld(in.readUTF());
final int highx = in.readInt();
final int highy = in.readInt();
final int highz = in.readInt();
final int lowx = in.readInt();
final int lowy = in.readInt();
final int lowz = in.readInt();
newArea.highPoints = new Location(world, highx, highy, highz);
newArea.lowPoints = new Location(world, lowx, lowy, lowz);
return newArea;
}
public boolean containsLoc(Location loc) { public static CuboidArea load(final Map<String, Object> root, final World world) throws Exception {
if (loc == null) { if (root == null) {
return false; throw new Exception("Invalid residence physical location...");
} }
if (!loc.getWorld().equals(highPoints.getWorld())) { final CuboidArea newArea = new CuboidArea();
return false; final int x1 = (Integer) root.get("X1");
} final int y1 = (Integer) root.get("Y1");
if (lowPoints.getBlockX() <= loc.getBlockX() && highPoints.getBlockX() >= loc.getBlockX()) { final int z1 = (Integer) root.get("Z1");
if (lowPoints.getBlockZ() <= loc.getBlockZ() && highPoints.getBlockZ() >= loc.getBlockZ()) { final int x2 = (Integer) root.get("X2");
if (lowPoints.getBlockY() <= loc.getBlockY() && highPoints.getBlockY() >= loc.getBlockY()) { final int y2 = (Integer) root.get("Y2");
return true; final int z2 = (Integer) root.get("Z2");
} newArea.highPoints = new Location(world, x1, y1, z1);
} newArea.lowPoints = new Location(world, x2, y2, z2);
} return newArea;
return false; }
}
public boolean checkCollision(CuboidArea area) { public boolean checkCollision(final CuboidArea area) {
if (!area.getWorld().equals(this.getWorld())) { if (!area.getWorld().equals(this.getWorld())) {
return false; return false;
} }
if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) {
return true; return true;
} }
return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints);
} }
private boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { public boolean containsLoc(final Location loc) {
int A1HX = A1High.getBlockX(); if (loc == null) {
int A1LX = A1Low.getBlockX(); return false;
int A1HY = A1High.getBlockY(); }
int A1LY = A1Low.getBlockY(); if (!loc.getWorld().equals(highPoints.getWorld())) {
int A1HZ = A1High.getBlockZ(); return false;
int A1LZ = A1Low.getBlockZ(); }
int A2HX = A2High.getBlockX(); if (lowPoints.getBlockX() <= loc.getBlockX() && highPoints.getBlockX() >= loc.getBlockX()) {
int A2LX = A2Low.getBlockX(); if (lowPoints.getBlockZ() <= loc.getBlockZ() && highPoints.getBlockZ() >= loc.getBlockZ()) {
int A2HY = A2High.getBlockY(); if (lowPoints.getBlockY() <= loc.getBlockY() && highPoints.getBlockY() >= loc.getBlockY()) {
int A2LY = A2Low.getBlockY(); return true;
int A2HZ = A2High.getBlockZ(); }
int A2LZ = A2Low.getBlockZ(); }
if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { }
if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { return false;
if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { }
return true;
}
}
}
return false;
}
public long getSize() { public List<ChunkRef> getChunks() {
int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; final List<ChunkRef> chunks = new ArrayList<ChunkRef>();
int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; final Location high = this.highPoints;
int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; final Location low = this.lowPoints;
return xsize * ysize * zsize; final int lowX = ChunkRef.getChunkCoord(low.getBlockX());
} final int lowZ = ChunkRef.getChunkCoord(low.getBlockZ());
final int highX = ChunkRef.getChunkCoord(high.getBlockX());
final int highZ = ChunkRef.getChunkCoord(high.getBlockZ());
public int getXSize() { for (int x = lowX; x <= highX; x++) {
return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; for (int z = lowZ; z <= highZ; z++) {
} chunks.add(new ChunkRef(x, z));
}
}
return chunks;
}
public int getYSize() { public Location getHighLoc() {
return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; return highPoints;
} }
public int getZSize() { public Location getLowLoc() {
return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; return lowPoints;
} }
public Location getHighLoc() { public long getSize() {
return highPoints; final int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1;
} final int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1;
final int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1;
return xsize * ysize * zsize;
}
public Location getLowLoc() { public World getWorld() {
return lowPoints; return highPoints.getWorld();
} }
public World getWorld() { public int getXSize() {
return highPoints.getWorld(); return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1;
} }
public void save(DataOutputStream out, int version) throws IOException { public int getYSize() {
out.writeUTF(highPoints.getWorld().getName()); return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1;
out.writeInt(highPoints.getBlockX()); }
out.writeInt(highPoints.getBlockY());
out.writeInt(highPoints.getBlockZ());
out.writeInt(lowPoints.getBlockX());
out.writeInt(lowPoints.getBlockY());
out.writeInt(lowPoints.getBlockZ());
}
public static CuboidArea load(DataInputStream in, int version) throws IOException { public int getZSize() {
CuboidArea newArea = new CuboidArea(); return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1;
Server server = Residence.getServ(); }
World world = server.getWorld(in.readUTF());
int highx = in.readInt();
int highy = in.readInt();
int highz = in.readInt();
int lowx = in.readInt();
int lowy = in.readInt();
int lowz = in.readInt();
newArea.highPoints = new Location(world, highx, highy, highz);
newArea.lowPoints = new Location(world, lowx, lowy, lowz);
return newArea;
}
public Map<String, Object> save() { public boolean isAreaWithinArea(final CuboidArea area) {
Map<String, Object> root = new LinkedHashMap<String, Object>(); return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints));
root.put("X1", this.highPoints.getBlockX()); }
root.put("Y1", this.highPoints.getBlockY());
root.put("Z1", this.highPoints.getBlockZ());
root.put("X2", this.lowPoints.getBlockX());
root.put("Y2", this.lowPoints.getBlockY());
root.put("Z2", this.lowPoints.getBlockZ());
return root;
}
public static CuboidArea load(Map<String, Object> root, World world) throws Exception { public Map<String, Object> save() {
if (root == null) { final Map<String, Object> root = new LinkedHashMap<String, Object>();
throw new Exception("Invalid residence physical location..."); root.put("X1", this.highPoints.getBlockX());
} root.put("Y1", this.highPoints.getBlockY());
CuboidArea newArea = new CuboidArea(); root.put("Z1", this.highPoints.getBlockZ());
int x1 = (Integer) root.get("X1"); root.put("X2", this.lowPoints.getBlockX());
int y1 = (Integer) root.get("Y1"); root.put("Y2", this.lowPoints.getBlockY());
int z1 = (Integer) root.get("Z1"); root.put("Z2", this.lowPoints.getBlockZ());
int x2 = (Integer) root.get("X2"); return root;
int y2 = (Integer) root.get("Y2"); }
int z2 = (Integer) root.get("Z2");
newArea.highPoints = new Location(world, x1, y1, z1);
newArea.lowPoints = new Location(world, x2, y2, z2);
return newArea;
}
public List<ChunkRef> getChunks() { public void save(final DataOutputStream out, final int version) throws IOException {
List<ChunkRef> chunks = new ArrayList<ChunkRef>(); out.writeUTF(highPoints.getWorld().getName());
Location high = this.highPoints; out.writeInt(highPoints.getBlockX());
Location low = this.lowPoints; out.writeInt(highPoints.getBlockY());
int lowX = ChunkRef.getChunkCoord(low.getBlockX()); out.writeInt(highPoints.getBlockZ());
int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); out.writeInt(lowPoints.getBlockX());
int highX = ChunkRef.getChunkCoord(high.getBlockX()); out.writeInt(lowPoints.getBlockY());
int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); out.writeInt(lowPoints.getBlockZ());
}
for (int x = lowX; x <= highX; x++) { private boolean advCuboidCheckCollision(final Location A1High, final Location A1Low, final Location A2High, final Location A2Low) {
for (int z = lowZ; z <= highZ; z++) { final int A1HX = A1High.getBlockX();
chunks.add(new ChunkRef(x, z)); final int A1LX = A1Low.getBlockX();
} final int A1HY = A1High.getBlockY();
} final int A1LY = A1Low.getBlockY();
return chunks; final int A1HZ = A1High.getBlockZ();
} final int A1LZ = A1Low.getBlockZ();
final int A2HX = A2High.getBlockX();
final int A2LX = A2Low.getBlockX();
final int A2HY = A2High.getBlockY();
final int A2LY = A2Low.getBlockY();
final int A2HZ = A2High.getBlockZ();
final int A2LZ = A2Low.getBlockZ();
if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) {
if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) {
if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) {
return true;
}
}
}
return false;
}
} }

View File

@@ -27,18 +27,19 @@ import com.bekvon.bukkit.residence.Residence;
*/ */
public class FlagPermissions { public class FlagPermissions {
protected static ArrayList<String> validAreaFlags = new ArrayList<String>();
protected static HashMap<String, ArrayList<String>> validFlagGroups = new HashMap<String, ArrayList<String>>();
protected static ArrayList<String> validFlags = new ArrayList<String>(); protected static ArrayList<String> validFlags = new ArrayList<String>();
protected static ArrayList<String> validPlayerFlags = new ArrayList<String>(); protected static ArrayList<String> validPlayerFlags = new ArrayList<String>();
protected static ArrayList<String> validAreaFlags = new ArrayList<String>();
final static Map<Material, String> matUseFlagList = new EnumMap<Material, String>(Material.class); final static Map<Material, String> matUseFlagList = new EnumMap<Material, String>(Material.class);
protected static HashMap<String, ArrayList<String>> validFlagGroups = new HashMap<String, ArrayList<String>>(); static Residence plugin;
protected Map<String, Map<String, Boolean>> playerFlags;
protected Map<String, Map<String, Boolean>> groupFlags;
protected Map<String, Boolean> cuboidFlags; protected Map<String, Boolean> cuboidFlags;
protected Map<String, Map<String, Boolean>> groupFlags;
protected FlagPermissions parent; protected FlagPermissions parent;
protected Map<String, Map<String, Boolean>> playerFlags;
public FlagPermissions() { public FlagPermissions(final Residence plugin) {
FlagPermissions.plugin = plugin;
cuboidFlags = Collections.synchronizedMap(new HashMap<String, Boolean>()); cuboidFlags = Collections.synchronizedMap(new HashMap<String, Boolean>());
playerFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>()); playerFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
groupFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>()); groupFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
@@ -46,42 +47,49 @@ public class FlagPermissions {
public static void addFlag(String flag) { public static void addFlag(String flag) {
flag = flag.toLowerCase(); flag = flag.toLowerCase();
if (!validFlags.contains(flag)) if (!validFlags.contains(flag)) {
validFlags.add(flag); validFlags.add(flag);
if (validFlagGroups.containsKey(flag)) }
if (validFlagGroups.containsKey(flag)) {
validFlagGroups.remove(flag); validFlagGroups.remove(flag);
}
} }
public static void addFlagToFlagGroup(String group, String flag) { public static void addFlagToFlagGroup(final String group, final String flag) {
if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) {
if (!validFlagGroups.containsKey(group)) if (!validFlagGroups.containsKey(group)) {
validFlagGroups.put(group, new ArrayList<String>()); validFlagGroups.put(group, new ArrayList<String>());
ArrayList<String> flags = validFlagGroups.get(group); }
final ArrayList<String> flags = validFlagGroups.get(group);
flags.add(flag); flags.add(flag);
} }
} }
public static void addMaterialToUseFlag(Material mat, String flag) { public static void addMaterialToUseFlag(final Material mat, final String flag) {
matUseFlagList.put(mat, flag); matUseFlagList.put(mat, flag);
} }
public static void addPlayerOrGroupOnlyFlag(String flag) { public static void addPlayerOrGroupOnlyFlag(String flag) {
flag = flag.toLowerCase(); flag = flag.toLowerCase();
if (!validPlayerFlags.contains(flag)) if (!validPlayerFlags.contains(flag)) {
validPlayerFlags.add(flag); validPlayerFlags.add(flag);
if (validFlagGroups.containsKey(flag)) }
if (validFlagGroups.containsKey(flag)) {
validFlagGroups.remove(flag); validFlagGroups.remove(flag);
}
} }
public static void addResidenceOnlyFlag(String flag) { public static void addResidenceOnlyFlag(String flag) {
flag = flag.toLowerCase(); flag = flag.toLowerCase();
if (!validAreaFlags.contains(flag)) if (!validAreaFlags.contains(flag)) {
validAreaFlags.add(flag); validAreaFlags.add(flag);
if (validFlagGroups.containsKey(flag)) }
if (validFlagGroups.containsKey(flag)) {
validFlagGroups.remove(flag); validFlagGroups.remove(flag);
}
} }
public static boolean flagGroupExists(String group) { public static boolean flagGroupExists(final String group) {
return validFlagGroups.containsKey(group); return validFlagGroups.containsKey(group);
} }
@@ -173,7 +181,7 @@ public class FlagPermissions {
addMaterialToUseFlag(Material.WORKBENCH, "table"); addMaterialToUseFlag(Material.WORKBENCH, "table");
addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); addMaterialToUseFlag(Material.WOODEN_DOOR, "door");
if (Residence.is1_8()) { if (plugin.is1_8()) {
/* 1.8 Doors */ /* 1.8 Doors */
addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); addMaterialToUseFlag(Material.SPRUCE_DOOR, "door");
addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); addMaterialToUseFlag(Material.BIRCH_DOOR, "door");
@@ -216,66 +224,73 @@ public class FlagPermissions {
addMaterialToUseFlag(Material.CAKE_BLOCK, "cake"); addMaterialToUseFlag(Material.CAKE_BLOCK, "cake");
} }
public static FlagPermissions load(Map<String, Object> root) throws Exception { public static FlagPermissions load(final Map<String, Object> root) throws Exception {
FlagPermissions newperms = new FlagPermissions(); final FlagPermissions newperms = new FlagPermissions(plugin);
return FlagPermissions.load(root, newperms); return FlagPermissions.load(root, newperms);
} }
public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { public static FlagPermissions parseFromConfigNode(final String name, final ConfigurationSection node) {
FlagPermissions list = new FlagPermissions(); final FlagPermissions list = new FlagPermissions(plugin);
Set<String> keys = node.getConfigurationSection(name).getKeys(false); final Set<String> keys = node.getConfigurationSection(name).getKeys(false);
if (keys != null) if (keys != null) {
for (String key : keys) { for (String key : keys) {
boolean state = node.getBoolean(name + "." + key, false); final boolean state = node.getBoolean(name + "." + key, false);
key = key.toLowerCase(); key = key.toLowerCase();
if (state) if (state) {
list.setFlag(key, FlagState.TRUE); list.setFlag(key, FlagState.TRUE);
else } else {
list.setFlag(key, FlagState.FALSE); list.setFlag(key, FlagState.FALSE);
}
} }
}
return list; return list;
} }
public static void removeFlagFromFlagGroup(String group, String flag) { public static void removeFlagFromFlagGroup(final String group, final String flag) {
if (validFlagGroups.containsKey(group)) { if (validFlagGroups.containsKey(group)) {
ArrayList<String> flags = validFlagGroups.get(group); final ArrayList<String> flags = validFlagGroups.get(group);
flags.remove(flag); flags.remove(flag);
if (flags.isEmpty()) if (flags.isEmpty()) {
validFlagGroups.remove(group); validFlagGroups.remove(group);
}
} }
} }
public static void removeMaterialFromUseFlag(Material mat) { public static void removeMaterialFromUseFlag(final Material mat) {
matUseFlagList.remove(mat); matUseFlagList.remove(mat);
} }
public static FlagState stringToFlagState(String flagstate) { public static FlagState stringToFlagState(final String flagstate) {
if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) {
return FlagState.TRUE; return FlagState.TRUE;
else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) {
return FlagState.FALSE; return FlagState.FALSE;
else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) {
return FlagState.NEITHER; return FlagState.NEITHER;
else } else {
return FlagState.INVALID; return FlagState.INVALID;
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected static FlagPermissions load(Map<String, Object> root, FlagPermissions newperms) throws Exception { protected static FlagPermissions load(final Map<String, Object> root, final FlagPermissions newperms) throws Exception {
newperms.playerFlags = (Map<String, Map<String, Boolean>>) root.get("PlayerFlags"); newperms.playerFlags = (Map<String, Map<String, Boolean>>) root.get("PlayerFlags");
newperms.groupFlags = (Map<String, Map<String, Boolean>>) root.get("GroupFlags"); newperms.groupFlags = (Map<String, Map<String, Boolean>>) root.get("GroupFlags");
newperms.cuboidFlags = (Map<String, Boolean>) root.get("AreaFlags"); newperms.cuboidFlags = (Map<String, Boolean>) root.get("AreaFlags");
return newperms; return newperms;
} }
public boolean checkValidFlag(String flag, boolean globalflag) { public boolean checkValidFlag(final String flag, final boolean globalflag) {
if (validFlags.contains(flag)) if (validFlags.contains(flag)) {
return true; return true;
}
if (globalflag) { if (globalflag) {
if (validAreaFlags.contains(flag)) if (validAreaFlags.contains(flag)) {
return true; return true;
} else if (validPlayerFlags.contains(flag)) }
} else if (validPlayerFlags.contains(flag)) {
return true; return true;
}
return false; return false;
} }
@@ -285,23 +300,25 @@ public class FlagPermissions {
cuboidFlags.clear(); cuboidFlags.clear();
} }
public void clearPlayersFlags(String user) { public void clearPlayersFlags(final String user) {
if (playerFlags.containsKey(user)) if (playerFlags.containsKey(user)) {
playerFlags.remove(user); playerFlags.remove(user);
}
} }
public void copyUserPermissions(String fromUser, String toUser) { public void copyUserPermissions(String fromUser, String toUser) {
fromUser = fromUser.toLowerCase(); fromUser = fromUser.toLowerCase();
toUser = toUser.toLowerCase(); toUser = toUser.toLowerCase();
Map<String, Boolean> get = playerFlags.get(fromUser); final Map<String, Boolean> get = playerFlags.get(fromUser);
if (get != null) { if (get != null) {
Map<String, Boolean> targ = playerFlags.get(toUser); Map<String, Boolean> targ = playerFlags.get(toUser);
if (targ == null) { if (targ == null) {
targ = new HashMap<String, Boolean>(); targ = new HashMap<String, Boolean>();
playerFlags.put(toUser, targ); playerFlags.put(toUser, targ);
} }
for (Entry<String, Boolean> entry : get.entrySet()) for (final Entry<String, Boolean> entry : get.entrySet()) {
targ.put(entry.getKey(), entry.getValue()); targ.put(entry.getKey(), entry.getValue());
}
} }
} }
@@ -309,91 +326,101 @@ public class FlagPermissions {
return parent; return parent;
} }
public boolean groupHas(String group, String flag, boolean def) { public boolean groupHas(final String group, final String flag, final boolean def) {
return this.groupCheck(group, flag, this.has(flag, def)); return this.groupCheck(group, flag, this.has(flag, def));
} }
public boolean has(String flag, boolean def) { public boolean has(final String flag, final boolean def) {
if (cuboidFlags.containsKey(flag)) if (cuboidFlags.containsKey(flag)) {
return cuboidFlags.get(flag); return cuboidFlags.get(flag);
if (parent != null) }
if (parent != null) {
return parent.has(flag, def); return parent.has(flag, def);
}
return def; return def;
} }
public boolean inheritanceIsGroupSet(String group, String flag) { public boolean inheritanceIsGroupSet(String group, final String flag) {
group = group.toLowerCase(); group = group.toLowerCase();
Map<String, Boolean> flags = groupFlags.get(group); final Map<String, Boolean> flags = groupFlags.get(group);
if (flags == null) if (flags == null) {
return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); return parent == null ? false : parent.inheritanceIsGroupSet(group, flag);
}
return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag);
} }
public boolean inheritanceIsPlayerSet(String player, String flag) { public boolean inheritanceIsPlayerSet(String player, final String flag) {
player = player.toLowerCase(); player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player); final Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null) if (flags == null) {
return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag);
}
return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag);
} }
public boolean inheritanceIsSet(String flag) { public boolean inheritanceIsSet(final String flag) {
return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag);
} }
public boolean isGroupSet(String group, String flag) { public boolean isGroupSet(String group, final String flag) {
group = group.toLowerCase(); group = group.toLowerCase();
Map<String, Boolean> flags = groupFlags.get(group); final Map<String, Boolean> flags = groupFlags.get(group);
if (flags == null) if (flags == null) {
return false; return false;
}
return flags.containsKey(flag); return flags.containsKey(flag);
} }
public boolean isPlayerSet(String player, String flag) { public boolean isPlayerSet(String player, final String flag) {
player = player.toLowerCase(); player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player); final Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null) if (flags == null) {
return false; return false;
}
return flags.containsKey(flag); return flags.containsKey(flag);
} }
public boolean isSet(String flag) { public boolean isSet(final String flag) {
return cuboidFlags.containsKey(flag); return cuboidFlags.containsKey(flag);
} }
public String listFlags() { public String listFlags() {
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
Set<Entry<String, Boolean>> set = cuboidFlags.entrySet(); final Set<Entry<String, Boolean>> set = cuboidFlags.entrySet();
synchronized (cuboidFlags) { synchronized (cuboidFlags) {
Iterator<Entry<String, Boolean>> it = set.iterator(); final Iterator<Entry<String, Boolean>> it = set.iterator();
while (it.hasNext()) { while (it.hasNext()) {
Entry<String, Boolean> next = it.next(); final Entry<String, Boolean> next = it.next();
if (next.getValue()) { if (next.getValue()) {
sbuild.append("+").append(next.getKey()); sbuild.append("+").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} else { } else {
sbuild.append("-").append(next.getKey()); sbuild.append("-").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} }
} }
} }
if (sbuild.length() == 0) if (sbuild.length() == 0) {
sbuild.append("none"); sbuild.append("none");
}
return sbuild.toString(); return sbuild.toString();
} }
public String listGroupFlags() { public String listGroupFlags() {
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
Set<String> set = groupFlags.keySet(); final Set<String> set = groupFlags.keySet();
synchronized (groupFlags) { synchronized (groupFlags) {
Iterator<String> it = set.iterator(); final Iterator<String> it = set.iterator();
while (it.hasNext()) { while (it.hasNext()) {
String next = it.next(); final String next = it.next();
String perms = listGroupFlags(next); final String perms = listGroupFlags(next);
if (!perms.equals("none")) if (!perms.equals("none")) {
sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] "); sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] ");
}
} }
} }
return sbuild.toString(); return sbuild.toString();
@@ -402,21 +429,23 @@ public class FlagPermissions {
public String listGroupFlags(String group) { public String listGroupFlags(String group) {
group = group.toLowerCase(); group = group.toLowerCase();
if (groupFlags.containsKey(group)) { if (groupFlags.containsKey(group)) {
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
Map<String, Boolean> get = groupFlags.get(group); final Map<String, Boolean> get = groupFlags.get(group);
Set<Entry<String, Boolean>> set = get.entrySet(); final Set<Entry<String, Boolean>> set = get.entrySet();
synchronized (get) { synchronized (get) {
Iterator<Entry<String, Boolean>> it = set.iterator(); final Iterator<Entry<String, Boolean>> it = set.iterator();
while (it.hasNext()) { while (it.hasNext()) {
Entry<String, Boolean> next = it.next(); final Entry<String, Boolean> next = it.next();
if (next.getValue()) { if (next.getValue()) {
sbuild.append("+").append(next.getKey()); sbuild.append("+").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} else { } else {
sbuild.append("-").append(next.getKey()); sbuild.append("-").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} }
} }
} }
@@ -425,22 +454,24 @@ public class FlagPermissions {
sbuild.append("none"); sbuild.append("none");
} }
return sbuild.toString(); return sbuild.toString();
} else } else {
return "none"; return "none";
}
} }
public String listOtherPlayersFlags(String player) { public String listOtherPlayersFlags(String player) {
player = player.toLowerCase(); player = player.toLowerCase();
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
Set<String> set = playerFlags.keySet(); final Set<String> set = playerFlags.keySet();
synchronized (playerFlags) { synchronized (playerFlags) {
Iterator<String> it = set.iterator(); final Iterator<String> it = set.iterator();
while (it.hasNext()) { while (it.hasNext()) {
String next = it.next(); final String next = it.next();
if (!next.equals(player)) { if (!next.equals(player)) {
String perms = listPlayerFlags(next); final String perms = listPlayerFlags(next);
if (!perms.equals("none")) if (!perms.equals("none")) {
sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] "); sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] ");
}
} }
} }
} }
@@ -450,21 +481,23 @@ public class FlagPermissions {
public String listPlayerFlags(String player) { public String listPlayerFlags(String player) {
player = player.toLowerCase(); player = player.toLowerCase();
if (playerFlags.containsKey(player)) { if (playerFlags.containsKey(player)) {
StringBuilder sbuild = new StringBuilder(); final StringBuilder sbuild = new StringBuilder();
Map<String, Boolean> get = playerFlags.get(player); final Map<String, Boolean> get = playerFlags.get(player);
Set<Entry<String, Boolean>> set = get.entrySet(); final Set<Entry<String, Boolean>> set = get.entrySet();
synchronized (get) { synchronized (get) {
Iterator<Entry<String, Boolean>> it = set.iterator(); final Iterator<Entry<String, Boolean>> it = set.iterator();
while (it.hasNext()) { while (it.hasNext()) {
Entry<String, Boolean> next = it.next(); final Entry<String, Boolean> next = it.next();
if (next.getValue()) { if (next.getValue()) {
sbuild.append("+").append(next.getKey()); sbuild.append("+").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} else { } else {
sbuild.append("-").append(next.getKey()); sbuild.append("-").append(next.getKey());
if (it.hasNext()) if (it.hasNext()) {
sbuild.append(" "); sbuild.append(" ");
}
} }
} }
} }
@@ -473,115 +506,130 @@ public class FlagPermissions {
sbuild.append("none"); sbuild.append("none");
} }
return sbuild.toString(); return sbuild.toString();
} else } else {
return "none"; return "none";
}
} }
public boolean playerHas(String player, String world, String flag, boolean def) { public boolean playerHas(final String player, final String world, final String flag, final boolean def) {
String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); final String group = plugin.getPermissionManager().getGroupNameByPlayer(player, world);
return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def)));
} }
public void printFlags(Player player) { public void printFlags(final Player player) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags()); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName()));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags()); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName()));
} }
public void removeAllGroupFlags(String group) { public void removeAllGroupFlags(final String group) {
groupFlags.remove(group); groupFlags.remove(group);
} }
public void removeAllPlayerFlags(String player) { public void removeAllPlayerFlags(final String player) {
playerFlags.remove(player); playerFlags.remove(player);
} }
public Map<String, Object> save() { public Map<String, Object> save() {
Map<String, Object> root = new LinkedHashMap<String, Object>(); final Map<String, Object> root = new LinkedHashMap<String, Object>();
root.put("PlayerFlags", playerFlags); root.put("PlayerFlags", playerFlags);
root.put("GroupFlags", groupFlags); root.put("GroupFlags", groupFlags);
root.put("AreaFlags", cuboidFlags); root.put("AreaFlags", cuboidFlags);
return root; return root;
} }
public boolean setFlag(String flag, FlagState state) { public boolean setFlag(final String flag, final FlagState state) {
if (state == FlagState.FALSE) if (state == FlagState.FALSE) {
cuboidFlags.put(flag, false); cuboidFlags.put(flag, false);
else if (state == FlagState.TRUE) } else if (state == FlagState.TRUE) {
cuboidFlags.put(flag, true); cuboidFlags.put(flag, true);
else if (state == FlagState.NEITHER) } else if (state == FlagState.NEITHER) {
if (cuboidFlags.containsKey(flag)) if (cuboidFlags.containsKey(flag)) {
cuboidFlags.remove(flag); cuboidFlags.remove(flag);
}
}
return true; return true;
} }
public boolean setGroupFlag(String group, String flag, FlagState state) { public boolean setGroupFlag(String group, final String flag, final FlagState state) {
group = group.toLowerCase(); group = group.toLowerCase();
if (!groupFlags.containsKey(group)) if (!groupFlags.containsKey(group)) {
groupFlags.put(group, Collections.synchronizedMap(new HashMap<String, Boolean>())); groupFlags.put(group, Collections.synchronizedMap(new HashMap<String, Boolean>()));
Map<String, Boolean> map = groupFlags.get(group); }
if (state == FlagState.FALSE) final Map<String, Boolean> map = groupFlags.get(group);
if (state == FlagState.FALSE) {
map.put(flag, false); map.put(flag, false);
else if (state == FlagState.TRUE) } else if (state == FlagState.TRUE) {
map.put(flag, true); map.put(flag, true);
else if (state == FlagState.NEITHER) } else if (state == FlagState.NEITHER) {
if (map.containsKey(flag)) if (map.containsKey(flag)) {
map.remove(flag); map.remove(flag);
if (map.isEmpty()) }
}
if (map.isEmpty()) {
groupFlags.remove(group); groupFlags.remove(group);
}
return true; return true;
} }
public void setParent(FlagPermissions p) { public void setParent(final FlagPermissions p) {
parent = p; parent = p;
} }
public boolean setPlayerFlag(String player, String flag, FlagState state) { public boolean setPlayerFlag(String player, final String flag, final FlagState state) {
player = player.toLowerCase(); player = player.toLowerCase();
if (!playerFlags.containsKey(player)) if (!playerFlags.containsKey(player)) {
playerFlags.put(player, Collections.synchronizedMap(new HashMap<String, Boolean>())); playerFlags.put(player, Collections.synchronizedMap(new HashMap<String, Boolean>()));
Map<String, Boolean> map = playerFlags.get(player); }
if (state == FlagState.FALSE) final Map<String, Boolean> map = playerFlags.get(player);
if (state == FlagState.FALSE) {
map.put(flag, false); map.put(flag, false);
else if (state == FlagState.TRUE) } else if (state == FlagState.TRUE) {
map.put(flag, true); map.put(flag, true);
else if (state == FlagState.NEITHER) } else if (state == FlagState.NEITHER) {
if (map.containsKey(flag)) if (map.containsKey(flag)) {
map.remove(flag); map.remove(flag);
if (map.isEmpty()) }
}
if (map.isEmpty()) {
playerFlags.remove(player); playerFlags.remove(player);
}
return true; return true;
} }
private boolean groupCheck(String group, String flag, boolean def) { private boolean groupCheck(final String group, final String flag, final boolean def) {
if (groupFlags.containsKey(group)) { if (groupFlags.containsKey(group)) {
Map<String, Boolean> gmap = groupFlags.get(group); final Map<String, Boolean> gmap = groupFlags.get(group);
if (gmap.containsKey(flag)) if (gmap.containsKey(flag)) {
return gmap.get(flag); return gmap.get(flag);
}
} }
if (parent != null) if (parent != null) {
return parent.groupCheck(group, flag, def); return parent.groupCheck(group, flag, def);
}
return def; return def;
} }
private boolean playerCheck(String player, String flag, boolean def) { private boolean playerCheck(String player, final String flag, final boolean def) {
player = player.toLowerCase(); player = player.toLowerCase();
if (playerFlags.containsKey(player)) { if (playerFlags.containsKey(player)) {
Map<String, Boolean> pmap = playerFlags.get(player); final Map<String, Boolean> pmap = playerFlags.get(player);
if (pmap.containsKey(flag)) if (pmap.containsKey(flag)) {
return pmap.get(flag); return pmap.get(flag);
}
} }
if (parent != null) if (parent != null) {
return parent.playerCheck(player, flag, def); return parent.playerCheck(player, flag, def);
}
return def; return def;
} }
public static enum FlagState { public static enum FlagState {
TRUE,
FALSE, FALSE,
INVALID,
NEITHER, NEITHER,
INVALID TRUE
} }
} }

View File

@@ -5,14 +5,6 @@
package com.bekvon.bukkit.residence.protection; package com.bekvon.bukkit.residence.protection;
import org.bukkit.ChatColor;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.economy.EconomyInterface;
import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent;
import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@@ -21,8 +13,15 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.economy.EconomyInterface;
import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent;
import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
/** /**
* *
* @author Administrator * @author Administrator
@@ -32,64 +31,125 @@ public class LeaseManager {
private Map<String, Long> leaseExpireTime; private Map<String, Long> leaseExpireTime;
ResidenceManager manager; ResidenceManager manager;
Residence plugin;
public LeaseManager(ResidenceManager m) { public LeaseManager(final Residence plugin, final ResidenceManager m) {
this.plugin = plugin;
manager = m; manager = m;
leaseExpireTime = Collections leaseExpireTime = Collections.synchronizedMap(new HashMap<String, Long>());
.synchronizedMap(new HashMap<String, Long>());
} }
public boolean leaseExpires(String area) { public static LeaseManager load(final Residence plugin, final Map<String, Long> root, final ResidenceManager m) {
return leaseExpireTime.containsKey(area); final LeaseManager l = new LeaseManager(plugin, m);
if (root != null) {
for (final Object val : root.values()) {
if (!(val instanceof Long)) {
root.remove(val);
}
}
l.leaseExpireTime = Collections.synchronizedMap(root);
}
return l;
} }
public Date getExpireTime(String area) { public void doExpirations() {
final Set<Entry<String, Long>> set = leaseExpireTime.entrySet();
final Iterator<Entry<String, Long>> it = set.iterator();
while (it.hasNext()) {
final Entry<String, Long> next = it.next();
if (next.getValue() <= System.currentTimeMillis()) {
final String resname = next.getKey();
final ClaimedResidence res = plugin.getResidenceManager().getByName(resname);
if (res == null) {
it.remove();
} else {
boolean renewed = false;
final String owner = res.getPermissions().getOwner();
final PermissionGroup limits = plugin.getPermissionManager().getGroup(owner, res.getPermissions().getWorld());
final int cost = this.getRenewCost(res);
if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().autoRenewLeases()) {
if (cost == 0) {
renewed = true;
} else if (res.getBank().hasEnough(cost)) {
res.getBank().subtract(cost);
renewed = true;
if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Lease Renewed From Residence Bank: " + resname);
}
} else if (plugin.getEconomyManager().canAfford(owner, cost)) {
if (plugin.getEconomyManager().subtract(owner, cost)) {
renewed = true;
if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Lease Renewed From Economy: " + resname);
}
}
}
}
if (!renewed) {
if (!plugin.getConfigManager().enabledRentSystem() || !plugin.getRentManager().isRented(resname)) {
final ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE);
plugin.getServ().getPluginManager().callEvent(resevent);
if (!resevent.isCancelled()) {
manager.removeResidence(next.getKey());
it.remove();
if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Lease NOT removed, Removing: " + resname);
}
}
}
} else {
if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().enableLeaseMoneyAccount()) {
plugin.getEconomyManager().add("Lease Money", cost);
}
if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Lease Renew Old: " + next.getValue());
}
next.setValue(System.currentTimeMillis() + daysToMs(limits.getLeaseGiveTime()));
if (plugin.getConfigManager().debugEnabled()) {
System.out.println("Lease Renew New: " + next.getValue());
}
}
}
}
}
}
public Date getExpireTime(final String area) {
if (leaseExpireTime.containsKey(area)) { if (leaseExpireTime.containsKey(area)) {
return new Date(leaseExpireTime.get(area)); return new Date(leaseExpireTime.get(area));
} }
return null; return null;
} }
public void removeExpireTime(String area) { public int getRenewCost(final ClaimedResidence res) {
final PermissionGroup limits = plugin.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld());
final double cost = limits.getLeaseRenewCost();
final int amount = (int) Math.ceil(res.getTotalSize() * cost);
return amount;
}
public boolean leaseExpires(final String area) {
return leaseExpireTime.containsKey(area);
}
public void removeExpireTime(final String area) {
leaseExpireTime.remove(area); leaseExpireTime.remove(area);
} }
public void setExpireTime(String area, int days) { public void renewArea(final String area, final Player player) {
this.setExpireTime(null, area, days);
}
public void setExpireTime(Player player, String area, int days) {
area = area.replace(".", "_");
if (manager.getByName(area) != null) {
leaseExpireTime.put(area,
daysToMs(days) + System.currentTimeMillis());
if (player != null)
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("LeaseRenew",
getExpireTime(area).toString()));
} else {
if (player != null)
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidArea"));
}
}
public void renewArea(String area, Player player) {
if (!leaseExpires(area)) { if (!leaseExpires(area)) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("LeaseNotExpire"));
+ Residence.getLanguage().getPhrase("LeaseNotExpire"));
return; return;
} }
PermissionGroup limits = Residence.getPermissionManager().getGroup( final PermissionGroup limits = plugin.getPermissionManager().getGroup(player);
player); final int max = limits.getMaxLeaseTime();
int max = limits.getMaxLeaseTime(); final int add = limits.getLeaseGiveTime();
int add = limits.getLeaseGiveTime(); final int rem = daysRemaining(area);
int rem = daysRemaining(area); final EconomyInterface econ = plugin.getEconomyManager();
EconomyInterface econ = Residence.getEconomyManager();
if (econ != null) { if (econ != null) {
double cost = limits.getLeaseRenewCost(); final double cost = limits.getLeaseRenewCost();
ClaimedResidence res = manager.getByName(area); final ClaimedResidence res = manager.getByName(area);
int amount = (int) Math.ceil((double) res.getTotalSize() * cost); final int amount = (int) Math.ceil(res.getTotalSize() * cost);
if (cost != 0D) { if (cost != 0D) {
// Account account = // Account account =
// iConomy.getBank().getAccount(player.getName()); // iConomy.getBank().getAccount(player.getName());
@@ -99,156 +159,38 @@ public class LeaseManager {
*/) { */) {
econ.subtract(player.getName(), amount); econ.subtract(player.getName(), amount);
econ.add("Lease Money", amount); econ.add("Lease Money", amount);
player.sendMessage(ChatColor.GREEN player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("MoneyCharged",
+ Residence.getLanguage().getPhrase( ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
"MoneyCharged",
ChatColor.YELLOW
+ String.format("%d", amount)
+ ChatColor.GREEN + "."
+ ChatColor.YELLOW + econ.getName()
+ ChatColor.GREEN));
} else { } else {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
+ Residence.getLanguage().getPhrase(
"NotEnoughMoney"));
return; return;
} }
} }
} }
if (rem + add > max) { if (rem + add > max) {
setExpireTime(player, area, max); setExpireTime(player, area, max);
player.sendMessage(ChatColor.GOLD player.sendMessage(ChatColor.GOLD + plugin.getLanguage().getPhrase("LeaseRenewMax"));
+ Residence.getLanguage().getPhrase("LeaseRenewMax")); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area)) + ChatColor.YELLOW);
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("LeaseRenew",
ChatColor.GREEN + "" + getExpireTime(area))
+ ChatColor.YELLOW);
return; return;
} }
Long get = leaseExpireTime.get(area); Long get = leaseExpireTime.get(area);
if (get != null) { if (get != null) {
get = get + daysToMs(add); get = get + daysToMs(add);
leaseExpireTime.put(area, get); leaseExpireTime.put(area, get);
} else } else {
leaseExpireTime.put(area, daysToMs(add)); leaseExpireTime.put(area, daysToMs(add));
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("LeaseRenew",
ChatColor.GREEN + "" + getExpireTime(area)));
}
public int getRenewCost(ClaimedResidence res) {
PermissionGroup limits = Residence.getPermissionManager().getGroup(
res.getPermissions().getOwner(),
res.getPermissions().getWorld());
double cost = limits.getLeaseRenewCost();
int amount = (int) Math.ceil((double) res.getTotalSize() * cost);
return amount;
}
private long daysToMs(int days) {
return (((long) days) * 24L * 60L * 60L * 1000L);
}
private int msToDays(long ms) {
return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D);
}
private int daysRemaining(String area) {
Long get = leaseExpireTime.get(area);
if (get <= System.currentTimeMillis())
return 0;
return msToDays((int) (get - System.currentTimeMillis()));
}
public void doExpirations() {
Set<Entry<String, Long>> set = leaseExpireTime.entrySet();
Iterator<Entry<String, Long>> it = set.iterator();
while (it.hasNext()) {
Entry<String, Long> next = it.next();
if (next.getValue() <= System.currentTimeMillis()) {
String resname = next.getKey();
ClaimedResidence res = Residence.getResidenceManager()
.getByName(resname);
if (res == null) {
it.remove();
} else {
boolean renewed = false;
String owner = res.getPermissions().getOwner();
PermissionGroup limits = Residence.getPermissionManager()
.getGroup(owner, res.getPermissions().getWorld());
int cost = this.getRenewCost(res);
if (Residence.getConfigManager().enableEconomy()
&& Residence.getConfigManager().autoRenewLeases()) {
if (cost == 0) {
renewed = true;
} else if (res.getBank().hasEnough(cost)) {
res.getBank().subtract(cost);
renewed = true;
if (Residence.getConfigManager().debugEnabled())
System.out
.println("Lease Renewed From Residence Bank: "
+ resname);
} else if (Residence.getEconomyManager().canAfford(
owner, cost)) {
if (Residence.getEconomyManager().subtract(owner,
cost)) {
renewed = true;
if (Residence.getConfigManager().debugEnabled())
System.out
.println("Lease Renewed From Economy: "
+ resname);
}
}
}
if (!renewed) {
if (!Residence.getConfigManager().enabledRentSystem()
|| !Residence.getRentManager()
.isRented(resname)) {
ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(
null, res, DeleteCause.LEASE_EXPIRE);
Residence.getServ().getPluginManager()
.callEvent(resevent);
if (!resevent.isCancelled()) {
manager.removeResidence(next.getKey());
it.remove();
if (Residence.getConfigManager().debugEnabled())
System.out
.println("Lease NOT removed, Removing: "
+ resname);
}
}
} else {
if (Residence.getConfigManager().enableEconomy()
&& Residence.getConfigManager()
.enableLeaseMoneyAccount()) {
Residence.getEconomyManager().add("Lease Money",
cost);
}
if (Residence.getConfigManager().debugEnabled())
System.out.println("Lease Renew Old: "
+ next.getValue());
next.setValue(System.currentTimeMillis()
+ daysToMs(limits.getLeaseGiveTime()));
if (Residence.getConfigManager().debugEnabled())
System.out.println("Lease Renew New: "
+ next.getValue());
}
}
}
} }
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area)));
} }
public void resetLeases() { public void resetLeases() {
leaseExpireTime.clear(); leaseExpireTime.clear();
String[] list = manager.getResidenceList(); final String[] list = manager.getResidenceList();
for (int i = 0; i < list.length; i++) { for (final String element : list) {
if (list[i] != null) { if (element != null) {
ClaimedResidence res = Residence.getResidenceManager() final ClaimedResidence res = plugin.getResidenceManager().getByName(element);
.getByName(list[i]); final PermissionGroup group = plugin.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld());
PermissionGroup group = Residence.getPermissionManager() this.setExpireTime(null, element, group.getLeaseGiveTime());
.getGroup(res.getPermissions().getOwner(),
res.getPermissions().getWorld());
this.setExpireTime(null, list[i], group.getLeaseGiveTime());
} }
} }
System.out.println("[Residence] - Set default leases."); System.out.println("[Residence] - Set default leases.");
@@ -258,23 +200,44 @@ public class LeaseManager {
return leaseExpireTime; return leaseExpireTime;
} }
public void updateLeaseName(String oldName, String newName) { public void setExpireTime(final Player player, String area, final int days) {
area = area.replace(".", "_");
if (manager.getByName(area) != null) {
leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis());
if (player != null) {
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("LeaseRenew", getExpireTime(area).toString()));
}
} else {
if (player != null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidArea"));
}
}
}
public void setExpireTime(final String area, final int days) {
this.setExpireTime(null, area, days);
}
public void updateLeaseName(final String oldName, final String newName) {
if (leaseExpireTime.containsKey(oldName)) { if (leaseExpireTime.containsKey(oldName)) {
leaseExpireTime.put(newName, leaseExpireTime.get(oldName)); leaseExpireTime.put(newName, leaseExpireTime.get(oldName));
leaseExpireTime.remove(oldName); leaseExpireTime.remove(oldName);
} }
} }
public static LeaseManager load(Map<String, Long> root, ResidenceManager m) { private int daysRemaining(final String area) {
LeaseManager l = new LeaseManager(m); final Long get = leaseExpireTime.get(area);
if (root != null) { if (get <= System.currentTimeMillis()) {
for (Object val : root.values()) { return 0;
if (!(val instanceof Long)) {
root.remove(val);
}
}
l.leaseExpireTime = Collections.synchronizedMap(root);
} }
return l; return msToDays((int) (get - System.currentTimeMillis()));
}
private long daysToMs(final int days) {
return ((days) * 24L * 60L * 60L * 1000L);
}
private int msToDays(final long ms) {
return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D);
} }
} }

View File

@@ -5,40 +5,74 @@
package com.bekvon.bukkit.residence.protection; package com.bekvon.bukkit.residence.protection;
import org.bukkit.ChatColor;
import com.bekvon.bukkit.residence.Residence;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class PermissionListManager { public class PermissionListManager {
private Map<String, Map<String, FlagPermissions>> lists; private final Map<String, Map<String, FlagPermissions>> lists;
Residence plugin;
public PermissionListManager() { public PermissionListManager(final Residence plugin) {
lists = Collections this.plugin = plugin;
.synchronizedMap(new HashMap<String, Map<String, FlagPermissions>>()); lists = Collections.synchronizedMap(new HashMap<String, Map<String, FlagPermissions>>());
} }
public FlagPermissions getList(String player, String listname) { @SuppressWarnings("unchecked")
Map<String, FlagPermissions> get = lists.get(player); public static PermissionListManager load(final Residence plugin, final Map<String, Object> root) {
final PermissionListManager p = new PermissionListManager(plugin);
if (root != null) {
for (final Entry<String, Object> players : root.entrySet()) {
try {
final Map<String, Object> value = (Map<String, Object>) players.getValue();
final Map<String, FlagPermissions> loadedMap = Collections.synchronizedMap(new HashMap<String, FlagPermissions>());
for (final Entry<String, Object> list : value.entrySet()) {
loadedMap.put(list.getKey(), FlagPermissions.load((Map<String, Object>) list.getValue()));
}
p.lists.put(players.getKey(), loadedMap);
} catch (final Exception ex) {
plugin.getLogger().warning(" - 玩家: " + players.getKey() + " 的权限列表载入失败...");
}
}
}
return p;
}
public void applyListToResidence(final Player player, final String listname, final String areaname, final boolean resadmin) {
final FlagPermissions list = this.getList(player.getName(), listname);
if (list == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidList"));
return;
}
final ClaimedResidence res = plugin.getResidenceManager().getByName(areaname);
if (res == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return;
}
res.getPermissions().applyTemplate(player, list, resadmin);
}
public FlagPermissions getList(final String player, final String listname) {
final Map<String, FlagPermissions> get = lists.get(player);
if (get == null) { if (get == null) {
return null; return null;
} }
return get.get(listname); return get.get(listname);
} }
public void makeList(Player player, String listname) { public void makeList(final Player player, final String listname) {
Map<String, FlagPermissions> get = lists.get(player.getName()); Map<String, FlagPermissions> get = lists.get(player.getName());
if (get == null) { if (get == null) {
get = new HashMap<String, FlagPermissions>(); get = new HashMap<String, FlagPermissions>();
@@ -46,117 +80,62 @@ public class PermissionListManager {
} }
FlagPermissions perms = get.get(listname); FlagPermissions perms = get.get(listname);
if (perms == null) { if (perms == null) {
perms = new FlagPermissions(); perms = new FlagPermissions(plugin);
get.put(listname, perms); get.put(listname, perms);
player.sendMessage(ChatColor.GREEN player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ListCreate", listname));
+ Residence.getLanguage().getPhrase("ListCreate", listname));
} else { } else {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ListExists"));
+ Residence.getLanguage().getPhrase("ListExists"));
} }
} }
public void removeList(Player player, String listname) { public void printList(final Player player, final String listname) {
Map<String, FlagPermissions> get = lists.get(player.getName()); final FlagPermissions list = this.getList(player.getName(), listname);
if (get == null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidList"));
return;
}
FlagPermissions list = get.get(listname);
if (list == null) { if (list == null) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidList"));
+ Residence.getLanguage().getPhrase("InvalidList"));
return; return;
} }
get.remove(listname); player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------");
player.sendMessage(ChatColor.RED player.sendMessage(plugin.getLanguage().getPhrase("Name") + ": " + ChatColor.GREEN + listname);
+ Residence.getLanguage().getPhrase("ListRemoved"));
}
public void applyListToResidence(Player player, String listname,
String areaname, boolean resadmin) {
FlagPermissions list = this.getList(player.getName(), listname);
if (list == null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidList"));
return;
}
ClaimedResidence res = Residence.getResidenceManager().getByName(
areaname);
if (res == null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidResidence"));
return;
}
res.getPermissions().applyTemplate(player, list, resadmin);
}
public void printList(Player player, String listname) {
FlagPermissions list = this.getList(player.getName(), listname);
if (list == null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidList"));
return;
}
player.sendMessage(ChatColor.LIGHT_PURPLE
+ "------Permission Template------");
player.sendMessage(Residence.getLanguage().getPhrase("Name") + ": "
+ ChatColor.GREEN + listname);
list.printFlags(player); list.printFlags(player);
} }
public void printLists(final Player player) {
final StringBuilder sbuild = new StringBuilder();
final Map<String, FlagPermissions> get = lists.get(player.getName());
sbuild.append(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Lists") + ":" + ChatColor.DARK_AQUA + " ");
if (get != null) {
for (final Entry<String, FlagPermissions> thislist : get.entrySet()) {
sbuild.append(thislist.getKey()).append(" ");
}
}
player.sendMessage(sbuild.toString());
}
public void removeList(final Player player, final String listname) {
final Map<String, FlagPermissions> get = lists.get(player.getName());
if (get == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidList"));
return;
}
final FlagPermissions list = get.get(listname);
if (list == null) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidList"));
return;
}
get.remove(listname);
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ListRemoved"));
}
public Map<String, Object> save() { public Map<String, Object> save() {
Map<String, Object> root = new LinkedHashMap<String, Object>(); final Map<String, Object> root = new LinkedHashMap<String, Object>();
for (Entry<String, Map<String, FlagPermissions>> players : lists for (final Entry<String, Map<String, FlagPermissions>> players : lists.entrySet()) {
.entrySet()) { final Map<String, Object> saveMap = new LinkedHashMap<String, Object>();
Map<String, Object> saveMap = new LinkedHashMap<String, Object>(); final Map<String, FlagPermissions> map = players.getValue();
Map<String, FlagPermissions> map = players.getValue(); for (final Entry<String, FlagPermissions> list : map.entrySet()) {
for (Entry<String, FlagPermissions> list : map.entrySet()) {
saveMap.put(list.getKey(), list.getValue().save()); saveMap.put(list.getKey(), list.getValue().save());
} }
root.put(players.getKey(), saveMap); root.put(players.getKey(), saveMap);
} }
return root; return root;
} }
@SuppressWarnings("unchecked")
public static PermissionListManager load(Map<String, Object> root) {
PermissionListManager p = new PermissionListManager();
if (root != null) {
for (Entry<String, Object> players : root.entrySet()) {
try {
Map<String, Object> value = (Map<String, Object>) players
.getValue();
Map<String, FlagPermissions> loadedMap = Collections
.synchronizedMap(new HashMap<String, FlagPermissions>());
for (Entry<String, Object> list : value.entrySet()) {
loadedMap.put(list.getKey(), FlagPermissions
.load((Map<String, Object>) list.getValue()));
}
p.lists.put(players.getKey(), loadedMap);
} catch (Exception ex) {
System.out
.println("[Residence] - Failed to load permission lists for player: "
+ players.getKey());
}
}
}
return p;
}
public void printLists(Player player) {
StringBuilder sbuild = new StringBuilder();
Map<String, FlagPermissions> get = lists.get(player.getName());
sbuild.append(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Lists") + ":"
+ ChatColor.DARK_AQUA + " ");
if (get != null) {
for (Entry<String, FlagPermissions> thislist : get.entrySet()) {
sbuild.append(thislist.getKey()).append(" ");
}
}
player.sendMessage(sbuild.toString());
}
} }

View File

@@ -36,254 +36,299 @@ import com.bekvon.bukkit.residence.text.help.InformationPager;
* @author Administrator * @author Administrator
*/ */
public class ResidenceManager { public class ResidenceManager {
protected Map<String, ClaimedResidence> residences;
protected Map<String, Map<ChunkRef, List<String>>> chunkResidences; protected Map<String, Map<ChunkRef, List<String>>> chunkResidences;
public ResidenceManager() { protected Map<String, ClaimedResidence> residences;
Residence plugin;
public ResidenceManager(final Residence plugin) {
this.plugin = plugin;
residences = new HashMap<String, ClaimedResidence>(); residences = new HashMap<String, ClaimedResidence>();
chunkResidences = new HashMap<String, Map<ChunkRef, List<String>>>(); chunkResidences = new HashMap<String, Map<ChunkRef, List<String>>>();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static ResidenceManager load(Map<String, Object> root) throws Exception { public static ResidenceManager load(final Residence plugin, final Map<String, Object> root) throws Exception {
ResidenceManager resm = new ResidenceManager(); final ResidenceManager resm = new ResidenceManager(plugin);
if (root == null) if (root == null) {
return resm; return resm;
for (World world : Residence.getServ().getWorlds()) { }
Map<String, Object> reslist = (Map<String, Object>) root.get(world.getName()); for (final World world : plugin.getServ().getWorlds()) {
if (reslist != null) final Map<String, Object> reslist = (Map<String, Object>) root.get(world.getName());
if (reslist != null) {
try { try {
resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); resm.chunkResidences.put(world.getName(), loadMap(plugin, reslist, resm));
} catch (Exception ex) { } catch (final Exception ex) {
Residence.getLog().warning("载入世界: " + world.getName() + "的领地数据时发生错误!"); plugin.getLog().warning("载入世界: " + world.getName() + "的领地数据时发生错误!");
if (Residence.getConfigManager().stopOnSaveError()) if (plugin.getConfigManager().stopOnSaveError()) {
throw (ex); throw (ex);
}
} }
}
} }
return resm; return resm;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static Map<ChunkRef, List<String>> loadMap(Map<String, Object> root, ResidenceManager resm) throws Exception { public static Map<ChunkRef, List<String>> loadMap(final Residence plugin, final Map<String, Object> root, final ResidenceManager resm) throws Exception {
Map<ChunkRef, List<String>> retRes = new HashMap<ChunkRef, List<String>>(); final Map<ChunkRef, List<String>> retRes = new HashMap<ChunkRef, List<String>>();
if (root != null) if (root != null) {
for (Entry<String, Object> res : root.entrySet()) for (final Entry<String, Object> res : root.entrySet()) {
try { try {
ClaimedResidence residence = ClaimedResidence.load((Map<String, Object>) res.getValue(), null); final ClaimedResidence residence = ClaimedResidence.load(plugin, (Map<String, Object>) res.getValue(), null);
for (ChunkRef chunk : getChunks(residence)) { for (final ChunkRef chunk : getChunks(residence)) {
List<String> ress = new ArrayList<String>(); final List<String> ress = new ArrayList<String>();
if (retRes.containsKey(chunk)) if (retRes.containsKey(chunk)) {
ress.addAll(retRes.get(chunk)); ress.addAll(retRes.get(chunk));
}
ress.add(res.getKey()); ress.add(res.getKey());
retRes.put(chunk, ress); retRes.put(chunk, ress);
} }
resm.residences.put(res.getKey(), residence); resm.residences.put(res.getKey(), residence);
} catch (Exception ex) { } catch (final Exception ex) {
System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:");
Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex);
if (Residence.getConfigManager().stopOnSaveError()) if (plugin.getConfigManager().stopOnSaveError()) {
throw (ex); throw (ex);
}
} }
}
}
return retRes; return retRes;
} }
private static List<ChunkRef> getChunks(ClaimedResidence res) { private static List<ChunkRef> getChunks(final ClaimedResidence res) {
List<ChunkRef> chunks = new ArrayList<ChunkRef>(); final List<ChunkRef> chunks = new ArrayList<ChunkRef>();
for (CuboidArea area : res.getAreaArray()) for (final CuboidArea area : res.getAreaArray()) {
chunks.addAll(area.getChunks()); chunks.addAll(area.getChunks());
}
return chunks; return chunks;
} }
public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { public boolean addResidence(final Player player, final String name, final Location loc1, final Location loc2, final boolean resadmin) {
return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin);
} }
public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { public boolean addResidence(final Player player, final String owner, String name, final Location loc1, final Location loc2, final boolean resadmin) {
if (!Residence.validName(name)) { if (!plugin.validName(name)) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters"));
}
return false; return false;
} }
if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
}
return false; return false;
} }
PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); final PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName());
boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); final boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create"));
if (!createpermission && !resadmin) { if (!createpermission && !resadmin) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
return false; return false;
} }
if (player != null) if (player != null) {
if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceTooMany"));
return false; return false;
} }
}
CuboidArea newArea = new CuboidArea(loc1, loc2); CuboidArea newArea = new CuboidArea(loc1, loc2);
ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); final ClaimedResidence newRes = new ClaimedResidence(plugin, owner, loc1.getWorld().getName());
newRes.getPermissions().applyDefaultFlags(); newRes.getPermissions().applyDefaultFlags();
newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setEnterMessage(group.getDefaultEnterMessage());
newRes.setLeaveMessage(group.getDefaultLeaveMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage());
ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); final ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea);
Residence.getServ().getPluginManager().callEvent(resevent); plugin.getServ().getPluginManager().callEvent(resevent);
if (resevent.isCancelled()) if (resevent.isCancelled()) {
return false; return false;
}
newArea = resevent.getPhysicalArea(); newArea = resevent.getPhysicalArea();
name = resevent.getResidenceName(); name = resevent.getResidenceName();
if (residences.containsKey(name)) { if (residences.containsKey(name)) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED));
}
return false; return false;
} }
if (player != null) if (player != null) {
newRes.addArea(player, newArea, "main", resadmin); newRes.addArea(player, newArea, "main", resadmin);
else } else {
newRes.addArea(newArea, "main"); newRes.addArea(newArea, "main");
}
if (newRes.getAreaCount() != 0) { if (newRes.getAreaCount() != 0) {
residences.put(name, newRes); residences.put(name, newRes);
calculateChunks(name); calculateChunks(name);
Residence.getLeaseManager().removeExpireTime(name); plugin.getLeaseManager().removeExpireTime(name);
if (player != null) if (player != null) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN));
if (Residence.getConfigManager().useLeases()) }
if (player != null) if (plugin.getConfigManager().useLeases()) {
Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); if (player != null) {
else plugin.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime());
Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); } else {
plugin.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime());
}
}
return true; return true;
} }
return false; return false;
} }
public boolean addResidence(String name, Location loc1, Location loc2) { public boolean addResidence(final String name, final Location loc1, final Location loc2) {
return this.addResidence(name, "Server Land", loc1, loc2); return this.addResidence(name, "Server Land", loc1, loc2);
} }
public boolean addResidence(String name, String owner, Location loc1, Location loc2) { public boolean addResidence(final String name, final String owner, final Location loc1, final Location loc2) {
return this.addResidence(null, owner, name, loc1, loc2, true); return this.addResidence(null, owner, name, loc1, loc2, true);
} }
public void calculateChunks(String name) { public void calculateChunks(final String name) {
ClaimedResidence res = residences.get(name); final ClaimedResidence res = residences.get(name);
if (res != null) { if (res != null) {
String world = res.getWorld(); final String world = res.getWorld();
if (chunkResidences.get(world) == null) if (chunkResidences.get(world) == null) {
chunkResidences.put(world, new HashMap<ChunkRef, List<String>>()); chunkResidences.put(world, new HashMap<ChunkRef, List<String>>());
for (ChunkRef chunk : getChunks(res)) { }
List<String> ress = new ArrayList<String>(); for (final ChunkRef chunk : getChunks(res)) {
if (chunkResidences.get(world).containsKey(chunk)) final List<String> ress = new ArrayList<String>();
if (chunkResidences.get(world).containsKey(chunk)) {
ress.addAll(chunkResidences.get(world).get(chunk)); ress.addAll(chunkResidences.get(world).get(chunk));
}
ress.add(name); ress.add(name);
chunkResidences.get(world).put(chunk, ress); chunkResidences.get(world).put(chunk, ress);
} }
} }
} }
public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { public String checkAreaCollision(final CuboidArea newarea, final ClaimedResidence parentResidence) {
Set<Entry<String, ClaimedResidence>> set = residences.entrySet(); final Set<Entry<String, ClaimedResidence>> set = residences.entrySet();
for (Entry<String, ClaimedResidence> entry : set) { for (final Entry<String, ClaimedResidence> entry : set) {
ClaimedResidence check = entry.getValue(); final ClaimedResidence check = entry.getValue();
if (check != parentResidence && check.checkCollision(newarea)) if (check != parentResidence && check.checkCollision(newarea)) {
return entry.getKey(); return entry.getKey();
}
} }
return null; return null;
} }
public ClaimedResidence getByLoc(Location loc) { public ClaimedResidence getByLoc(final Location loc) {
if (loc == null) if (loc == null) {
return null; return null;
}
ClaimedResidence res = null; ClaimedResidence res = null;
boolean found = false; boolean found = false;
String world = loc.getWorld().getName(); final String world = loc.getWorld().getName();
ChunkRef chunk = new ChunkRef(loc); final ChunkRef chunk = new ChunkRef(loc);
if (chunkResidences.get(world) != null) if (chunkResidences.get(world) != null) {
if (chunkResidences.get(world).get(chunk) != null) if (chunkResidences.get(world).get(chunk) != null) {
for (String key : chunkResidences.get(world).get(chunk)) { for (final String key : chunkResidences.get(world).get(chunk)) {
ClaimedResidence entry = residences.get(key); final ClaimedResidence entry = residences.get(key);
if (entry.containsLoc(loc)) { if (entry.containsLoc(loc)) {
res = entry; res = entry;
found = true; found = true;
break; break;
} }
} }
if (!found) }
}
if (!found) {
return null; return null;
if (res == null) }
if (res == null) {
return null; return null;
ClaimedResidence subres = res.getSubzoneByLoc(loc); }
if (subres == null) final ClaimedResidence subres = res.getSubzoneByLoc(loc);
if (subres == null) {
return res; return res;
}
return subres; return subres;
} }
public ClaimedResidence getByName(String name) { public ClaimedResidence getByName(final String name) {
if (name == null) if (name == null) {
return null; return null;
String[] split = name.split("\\."); }
if (split.length == 1) final String[] split = name.split("\\.");
if (split.length == 1) {
return residences.get(name); return residences.get(name);
}
ClaimedResidence res = residences.get(split[0]); ClaimedResidence res = residences.get(split[0]);
for (int i = 1; i < split.length; i++) for (int i = 1; i < split.length; i++) {
if (res != null) if (res != null) {
res = res.getSubzone(split[i]); res = res.getSubzone(split[i]);
else } else {
return null; return null;
}
}
return res; return res;
} }
public String getNameByLoc(Location loc) { public String getNameByLoc(final Location loc) {
if (loc == null) if (loc == null) {
return null; return null;
}
ClaimedResidence res = null; ClaimedResidence res = null;
String name = null; String name = null;
boolean found = false; boolean found = false;
String world = loc.getWorld().getName(); final String world = loc.getWorld().getName();
ChunkRef chunk = new ChunkRef(loc); final ChunkRef chunk = new ChunkRef(loc);
if (chunkResidences.get(world) != null) if (chunkResidences.get(world) != null) {
if (chunkResidences.get(world).get(chunk) != null) if (chunkResidences.get(world).get(chunk) != null) {
for (String key : chunkResidences.get(world).get(chunk)) { for (final String key : chunkResidences.get(world).get(chunk)) {
ClaimedResidence entry = residences.get(key); final ClaimedResidence entry = residences.get(key);
if (entry.containsLoc(loc)) { if (entry.containsLoc(loc)) {
res = entry; res = entry;
found = true; found = true;
break; break;
} }
} }
if (!found) }
}
if (!found) {
return null; return null;
if (res == null) }
if (res == null) {
return null; return null;
}
name = res.getName(); name = res.getName();
if (name == null) if (name == null) {
return null; return null;
String szname = res.getSubzoneNameByLoc(loc); }
if (szname != null) final String szname = res.getSubzoneNameByLoc(loc);
if (szname != null) {
return name + "." + szname; return name + "." + szname;
}
return name; return name;
} }
public String getNameByRes(ClaimedResidence res) { public String getNameByRes(final ClaimedResidence res) {
Set<Entry<String, ClaimedResidence>> set = residences.entrySet(); final Set<Entry<String, ClaimedResidence>> set = residences.entrySet();
for (Entry<String, ClaimedResidence> check : set) { for (final Entry<String, ClaimedResidence> check : set) {
if (check.getValue() == res) if (check.getValue() == res) {
return check.getKey(); return check.getKey();
String n = check.getValue().getSubzoneNameByRes(res); }
if (n != null) final String n = check.getValue().getSubzoneNameByRes(res);
if (n != null) {
return check.getKey() + "." + n; return check.getKey() + "." + n;
}
} }
return null; return null;
} }
public int getOwnedZoneCount(String player) { public int getOwnedZoneCount(final String player) {
Collection<ClaimedResidence> set = residences.values(); final Collection<ClaimedResidence> set = residences.values();
int count = 0; int count = 0;
for (ClaimedResidence res : set) for (final ClaimedResidence res : set) {
if (res.getPermissions().getOwner().equalsIgnoreCase(player)) if (res.getPermissions().getOwner().equalsIgnoreCase(player)) {
count++; count++;
}
}
return count; return count;
} }
@@ -295,171 +340,182 @@ public class ResidenceManager {
return this.getResidenceList(true, true).toArray(new String[0]); return this.getResidenceList(true, true).toArray(new String[0]);
} }
public ArrayList<String> getResidenceList(boolean showhidden, boolean showsubzones) { public ArrayList<String> getResidenceList(final boolean showhidden, final boolean showsubzones) {
return this.getResidenceList(null, showhidden, showsubzones, false); return this.getResidenceList(null, showhidden, showsubzones, false);
} }
public ArrayList<String> getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { public ArrayList<String> getResidenceList(final String targetplayer, final boolean showhidden, final boolean showsubzones) {
return this.getResidenceList(targetplayer, showhidden, showsubzones, false); return this.getResidenceList(targetplayer, showhidden, showsubzones, false);
} }
public ArrayList<String> getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { public ArrayList<String> getResidenceList(final String targetplayer, final boolean showhidden, final boolean showsubzones, final boolean formattedOutput) {
ArrayList<String> list = new ArrayList<String>(); final ArrayList<String> list = new ArrayList<String>();
for (Entry<String, ClaimedResidence> res : residences.entrySet()) for (final Entry<String, ClaimedResidence> res : residences.entrySet()) {
this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput);
}
return list; return list;
} }
public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { public void giveResidence(final Player reqPlayer, final String targPlayer, final String residence, final boolean resadmin) {
ClaimedResidence res = getByName(residence); final ClaimedResidence res = getByName(residence);
if (res == null) { if (res == null) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
Player giveplayer = Residence.getServ().getPlayer(targPlayer); final Player giveplayer = plugin.getServ().getPlayer(targPlayer);
if (giveplayer == null || !giveplayer.isOnline()) { if (giveplayer == null || !giveplayer.isOnline()) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotOnline"));
return; return;
} }
CuboidArea[] areas = res.getAreaArray(); final CuboidArea[] areas = res.getAreaArray();
PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); final PermissionGroup g = plugin.getPermissionManager().getGroup(giveplayer);
if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceGiveLimits"));
return; return;
} }
if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceGiveLimits"));
return; return;
} }
if (!resadmin) if (!resadmin) {
for (CuboidArea area : areas) for (final CuboidArea area : areas) {
if (!g.inLimits(area)) { if (!g.inLimits(area)) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceGiveLimits"));
return; return;
} }
}
}
res.getPermissions().setOwner(giveplayer.getName(), true); res.getPermissions().setOwner(giveplayer.getName(), true);
// Fix phrases here // Fix phrases here
reqPlayer.sendMessage( reqPlayer.sendMessage(
ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN));
giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW)); giveplayer.sendMessage(plugin.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW));
} }
public void listAllResidences(Player player, int page) { public void listAllResidences(final Player player, final int page) {
this.listAllResidences(player, page, false); this.listAllResidences(player, page, false);
} }
public void listAllResidences(Player player, int page, boolean showhidden) { public void listAllResidences(final Player player, final int page, final boolean showhidden) {
this.listAllResidences(player, page, showhidden, false); this.listAllResidences(player, page, showhidden, false);
} }
public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { public void listAllResidences(final Player player, final int page, boolean showhidden, final boolean showsubzones) {
if (showhidden && !Residence.isResAdminOn(player)) if (showhidden && !plugin.isResAdminOn(player)) {
showhidden = false; showhidden = false;
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); }
InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page);
} }
public void listResidences(Player player) { public void listResidences(final Player player) {
this.listResidences(player, player.getName(), 1); this.listResidences(player, player.getName(), 1);
} }
public void listResidences(Player player, int page) { public void listResidences(final Player player, final int page) {
this.listResidences(player, player.getName(), page); this.listResidences(player, player.getName(), page);
} }
public void listResidences(Player player, int page, boolean showhidden) { public void listResidences(final Player player, final int page, final boolean showhidden) {
this.listResidences(player, player.getName(), page, showhidden); this.listResidences(player, player.getName(), page, showhidden);
} }
public void listResidences(Player player, String targetplayer) { public void listResidences(final Player player, final String targetplayer) {
this.listResidences(player, targetplayer, 1); this.listResidences(player, targetplayer, 1);
} }
public void listResidences(Player player, String targetplayer, int page) { public void listResidences(final Player player, final String targetplayer, final int page) {
this.listResidences(player, targetplayer, page, false); this.listResidences(player, targetplayer, page, false);
} }
public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { public void listResidences(final Player player, final String targetplayer, final int page, final boolean showhidden) {
this.listResidences(player, targetplayer, page, showhidden, false); this.listResidences(player, targetplayer, page, showhidden, false);
} }
public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { public void listResidences(final Player player, final String targetplayer, final int page, boolean showhidden, final boolean showsubzones) {
if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) if (showhidden && !plugin.isResAdminOn(player) && !player.getName().equals(targetplayer)) {
showhidden = false; showhidden = false;
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); }
InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page);
} }
public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { public void mirrorPerms(final Player reqPlayer, final String targetArea, final String sourceArea, final boolean resadmin) {
ClaimedResidence reciever = this.getByName(targetArea); final ClaimedResidence reciever = this.getByName(targetArea);
ClaimedResidence source = this.getByName(sourceArea); final ClaimedResidence source = this.getByName(sourceArea);
if (source == null || reciever == null) { if (source == null || reciever == null) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
if (!resadmin) if (!resadmin) {
if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) {
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
}
reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin);
} }
public void printAreaInfo(String areaname, Player player) { public void printAreaInfo(final String areaname, final Player player) {
ClaimedResidence res = this.getByName(areaname); final ClaimedResidence res = this.getByName(areaname);
if (res == null) { if (res == null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
return; return;
} }
ResidencePermissions perms = res.getPermissions(); final ResidencePermissions perms = res.getPermissions();
if (Residence.getConfigManager().enableEconomy()) if (plugin.getConfigManager().enableEconomy()) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD
+ res.getBank().getStoredMoney()); + res.getBank().getStoredMoney());
else } else {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname);
if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) }
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) {
+ Residence.getRentManager().getRentingPlayer(areaname)); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED
else + plugin.getRentManager().getRentingPlayer(areaname));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " } else {
+ Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - "
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); + plugin.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); }
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName()));
String aid = res.getAreaIDbyLoc(player.getLocation()); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags());
if (aid != null) player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName()));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); final String aid = res.getAreaIDbyLoc(player.getLocation());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); if (aid != null) {
if (aid != null) { player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid);
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE }
+ Residence.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize());
+ res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); if (aid != null) {
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE
+ Residence.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + plugin.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "."
+ res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ()));
if (Residence.isUseWorldEdit()) player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE
WECUI.UPDATESELECT(res, player); + plugin.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "."
+ res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ()));
if (plugin.isUseWorldEdit()) {
WECUI.UPDATESELECT(res, player);
}
}
if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) {
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + plugin.getLeaseManager().getExpireTime(areaname));
} }
if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname))
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager().getExpireTime(areaname));
} }
public void removeAllByOwner(Player player, String owner) { public void removeAllByOwner(final Player player, final String owner) {
this.removeAllByOwner(player, owner, residences); this.removeAllByOwner(player, owner, residences);
} }
public void removeAllByOwner(String owner) { public void removeAllByOwner(final String owner) {
this.removeAllByOwner(null, owner, residences); this.removeAllByOwner(null, owner, residences);
} }
public void removeAllFromWorld(CommandSender sender, String world) { public void removeAllFromWorld(final CommandSender sender, final String world) {
int count = 0; int count = 0;
Iterator<ClaimedResidence> it = residences.values().iterator(); final Iterator<ClaimedResidence> it = residences.values().iterator();
while (it.hasNext()) { while (it.hasNext()) {
ClaimedResidence next = it.next(); final ClaimedResidence next = it.next();
if (next.getWorld().equals(world)) { if (next.getWorld().equals(world)) {
it.remove(); it.remove();
count++; count++;
@@ -467,173 +523,195 @@ public class ResidenceManager {
} }
chunkResidences.remove(world); chunkResidences.remove(world);
chunkResidences.put(world, new HashMap<ChunkRef, List<String>>()); chunkResidences.put(world, new HashMap<ChunkRef, List<String>>());
if (count == 0) if (count == 0) {
sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world);
else } else {
sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world);
}
} }
public void removeChunkList(String name) { public void removeChunkList(final String name) {
ClaimedResidence res = residences.get(name); final ClaimedResidence res = residences.get(name);
if (res != null) { if (res != null) {
String world = res.getWorld(); final String world = res.getWorld();
if (chunkResidences.get(world) != null) if (chunkResidences.get(world) != null) {
for (ChunkRef chunk : getChunks(res)) { for (final ChunkRef chunk : getChunks(res)) {
List<String> ress = new ArrayList<String>(); final List<String> ress = new ArrayList<String>();
if (chunkResidences.get(world).containsKey(chunk)) if (chunkResidences.get(world).containsKey(chunk)) {
ress.addAll(chunkResidences.get(world).get(chunk)); ress.addAll(chunkResidences.get(world).get(chunk));
}
ress.remove(name); ress.remove(name);
chunkResidences.get(world).put(chunk, ress); chunkResidences.get(world).put(chunk, ress);
} }
}
} }
} }
public void removeResidence(Player player, String name, boolean resadmin) { public void removeResidence(final Player player, final String name, final boolean resadmin) {
ClaimedResidence res = this.getByName(name); final ClaimedResidence res = this.getByName(name);
if (res != null) { if (res != null) {
if (player != null && !resadmin) if (player != null && !resadmin) {
if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); }
Residence.getServ().getPluginManager().callEvent(resevent); final ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE);
if (resevent.isCancelled()) plugin.getServ().getPluginManager().callEvent(resevent);
if (resevent.isCancelled()) {
return; return;
ClaimedResidence parent = res.getParent(); }
final ClaimedResidence parent = res.getParent();
if (parent == null) { if (parent == null) {
removeChunkList(name); removeChunkList(name);
residences.remove(name); residences.remove(name);
if (player != null) if (player != null) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
}
} else { } else {
String[] split = name.split("\\."); final String[] split = name.split("\\.");
if (player != null) if (player != null) {
parent.removeSubzone(player, split[split.length - 1], true); parent.removeSubzone(player, split[split.length - 1], true);
else } else {
parent.removeSubzone(split[split.length - 1]); parent.removeSubzone(split[split.length - 1]);
}
} }
// Residence.getLeaseManager().removeExpireTime(name); - causing // plugin.getLeaseManager().removeExpireTime(name); - causing
// concurrent modification exception in lease manager... worked // concurrent modification exception in lease manager... worked
// around for now // around for now
Residence.getRentManager().removeRentable(name); plugin.getRentManager().removeRentable(name);
} else if (player != null) } else if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
}
} }
public void removeResidence(String name) { public void removeResidence(final String name) {
this.removeResidence(null, name, true); this.removeResidence(null, name, true);
} }
public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { public boolean renameResidence(final Player player, final String oldName, final String newName, final boolean resadmin) {
if (!Residence.validName(newName)) { if (!plugin.validName(newName)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters"));
return false; return false;
} }
ClaimedResidence res = this.getByName(oldName); final ClaimedResidence res = this.getByName(oldName);
if (res == null) { if (res == null) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidResidence"));
}
return false; return false;
} }
if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getPermissions().hasResidencePermission(player, true) || resadmin) {
if (res.getParent() == null) { if (res.getParent() == null) {
if (residences.containsKey(newName)) { if (residences.containsKey(newName)) {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED));
}
return false; return false;
} }
ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); final ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName);
Residence.getServ().getPluginManager().callEvent(resevent); plugin.getServ().getPluginManager().callEvent(resevent);
removeChunkList(oldName); removeChunkList(oldName);
residences.put(newName, res); residences.put(newName, res);
residences.remove(oldName); residences.remove(oldName);
calculateChunks(newName); calculateChunks(newName);
if (Residence.getConfigManager().useLeases()) if (plugin.getConfigManager().useLeases()) {
Residence.getLeaseManager().updateLeaseName(oldName, newName); plugin.getLeaseManager().updateLeaseName(oldName, newName);
if (Residence.getConfigManager().enabledRentSystem()) }
Residence.getRentManager().updateRentableName(oldName, newName); if (plugin.getConfigManager().enabledRentSystem()) {
if (player != null) plugin.getRentManager().updateRentableName(oldName, newName);
}
if (player != null) {
player.sendMessage( player.sendMessage(
ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN)); ChatColor.GREEN + plugin.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN));
}
return true; return true;
} else { } else {
String[] oldname = oldName.split("\\."); final String[] oldname = oldName.split("\\.");
ClaimedResidence parent = res.getParent(); final ClaimedResidence parent = res.getParent();
return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin);
} }
} else { } else {
if (player != null) if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
}
return false; return false;
} }
} }
public boolean renameResidence(String oldName, String newName) { public boolean renameResidence(final String oldName, final String newName) {
return this.renameResidence(null, oldName, newName, true); return this.renameResidence(null, oldName, newName, true);
} }
public Map<String, Object> save() { public Map<String, Object> save() {
Map<String, Object> worldmap = new LinkedHashMap<String, Object>(); final Map<String, Object> worldmap = new LinkedHashMap<String, Object>();
for (World world : Residence.getServ().getWorlds()) { for (final World world : plugin.getServ().getWorlds()) {
Map<String, Object> resmap = new LinkedHashMap<String, Object>(); final Map<String, Object> resmap = new LinkedHashMap<String, Object>();
for (Entry<String, ClaimedResidence> res : residences.entrySet()) for (final Entry<String, ClaimedResidence> res : residences.entrySet()) {
if (res.getValue().getWorld().equals(world.getName())) if (res.getValue().getWorld().equals(world.getName())) {
try { try {
resmap.put(res.getKey(), res.getValue().save()); resmap.put(res.getKey(), res.getValue().save());
} catch (Exception ex) { } catch (final Exception ex) {
System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!");
Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex);
} }
}
}
worldmap.put(world.getName(), resmap); worldmap.put(world.getName(), resmap);
} }
return worldmap; return worldmap;
} }
private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList<String> list, private void getResidenceList(final String targetplayer, final boolean showhidden, final boolean showsubzones, final String parentzone, final String resname, final ClaimedResidence res,
boolean formattedOutput) { final ArrayList<String> list, final boolean formattedOutput) {
boolean hidden = res.getPermissions().has("hidden", false); final boolean hidden = res.getPermissions().has("hidden", false);
if ((showhidden) || (!showhidden && !hidden)) { if ((showhidden) || (!showhidden && !hidden)) {
if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) {
if (formattedOutput) if (formattedOutput) {
list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + plugin.getLanguage().getPhrase("World") + ": " + res.getWorld());
else } else {
list.add(parentzone + resname); list.add(parentzone + resname);
if (showsubzones) }
for (Entry<String, ClaimedResidence> sz : res.subzones.entrySet()) }
if (showsubzones) {
for (final Entry<String, ClaimedResidence> sz : res.subzones.entrySet()) {
this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput);
}
}
} }
} }
private void removeAllByOwner(Player player, String owner, Map<String, ClaimedResidence> resholder) { private void removeAllByOwner(final Player player, final String owner, final Map<String, ClaimedResidence> resholder) {
Iterator<ClaimedResidence> it = resholder.values().iterator(); final Iterator<ClaimedResidence> it = resholder.values().iterator();
while (it.hasNext()) { while (it.hasNext()) {
ClaimedResidence res = it.next(); final ClaimedResidence res = it.next();
if (res.getOwner().equalsIgnoreCase(owner)) { if (res.getOwner().equalsIgnoreCase(owner)) {
ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); final ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE);
Residence.getServ().getPluginManager().callEvent(resevent); plugin.getServ().getPluginManager().callEvent(resevent);
if (resevent.isCancelled()) if (resevent.isCancelled()) {
return; return;
}
removeChunkList(res.getName()); removeChunkList(res.getName());
it.remove(); it.remove();
} else } else {
this.removeAllByOwner(player, owner, res.subzones); this.removeAllByOwner(player, owner, res.subzones);
}
} }
} }
public static final class ChunkRef { public static final class ChunkRef {
private final int z;
private final int x; private final int x;
public ChunkRef(int x, int z) { private final int z;
public ChunkRef(final int x, final int z) {
this.x = x; this.x = x;
this.z = z; this.z = z;
} }
public ChunkRef(Location loc) { public ChunkRef(final Location loc) {
this.x = getChunkCoord(loc.getBlockX()); this.x = getChunkCoord(loc.getBlockX());
this.z = getChunkCoord(loc.getBlockZ()); this.z = getChunkCoord(loc.getBlockZ());
} }
@@ -645,13 +723,16 @@ public class ResidenceManager {
@Override @Override
public boolean equals(final Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj) {
return true; return true;
if (obj == null) }
if (obj == null) {
return false; return false;
if (getClass() != obj.getClass()) }
if (getClass() != obj.getClass()) {
return false; return false;
ChunkRef other = (ChunkRef) obj; }
final ChunkRef other = (ChunkRef) obj;
return this.x == other.x && this.z == other.z; return this.x == other.x && this.z == other.z;
} }
@@ -665,7 +746,7 @@ public class ResidenceManager {
*/ */
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }");
return sb.toString(); return sb.toString();
} }

View File

@@ -31,148 +31,186 @@ public class ResidencePermissions extends FlagPermissions {
protected String owner; protected String owner;
protected String world;
protected ClaimedResidence residence; protected ClaimedResidence residence;
protected String world;
Residence plugin;
public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { public ResidencePermissions(final Residence plugin, final ClaimedResidence res) {
this(res); super(plugin);
this.plugin = plugin;
residence = res;
}
public ResidencePermissions(final Residence plugin, final ClaimedResidence res, final String creator, final String inworld) {
this(plugin, res);
owner = creator; owner = creator;
world = inworld; world = inworld;
} }
private ResidencePermissions(ClaimedResidence res) { public static ResidencePermissions load(final Residence plugin, final ClaimedResidence res, final Map<String, Object> root) throws Exception {
residence = res; final ResidencePermissions newperms = new ResidencePermissions(plugin, res);
}
public static ResidencePermissions load(ClaimedResidence res, Map<String, Object> root) throws Exception {
ResidencePermissions newperms = new ResidencePermissions(res);
newperms.owner = (String) root.get("Owner"); newperms.owner = (String) root.get("Owner");
if (newperms.owner == null)
newperms.owner = (String) root.get("OwnerLastKnownName");
if (newperms.owner == null) { if (newperms.owner == null) {
Residence.getLog().warning("发现未知所有者的领地,转换为Server Land..."); newperms.owner = (String) root.get("OwnerLastKnownName");
}
if (newperms.owner == null) {
plugin.getLog().warning("发现未知所有者的领地,转换为Server Land...");
newperms.owner = "Server Land"; newperms.owner = "Server Land";
} }
newperms.world = (String) root.get("World"); newperms.world = (String) root.get("World");
FlagPermissions.load(root, newperms); FlagPermissions.load(root, newperms);
if (newperms.owner == null) if (newperms.owner == null) {
throw new Exception("错误的Owner数据..."); throw new Exception("错误的Owner数据...");
if (newperms.world == null) }
if (newperms.world == null) {
throw new Exception("错误的World数据..."); throw new Exception("错误的World数据...");
if (newperms.playerFlags == null) }
if (newperms.playerFlags == null) {
throw new Exception("错误的PlayerFlags数据..."); throw new Exception("错误的PlayerFlags数据...");
if (newperms.groupFlags == null) }
if (newperms.groupFlags == null) {
throw new Exception("错误的GroupFlags数据..."); throw new Exception("错误的GroupFlags数据...");
if (newperms.cuboidFlags == null) }
if (newperms.cuboidFlags == null) {
throw new Exception("错误的CuboidFlags数据..."); throw new Exception("错误的CuboidFlags数据...");
}
newperms.fixNames(); newperms.fixNames();
return newperms; return newperms;
} }
public void applyDefaultFlags() { public void applyDefaultFlags() {
PermissionManager gm = Residence.getPermissionManager(); final PermissionManager gm = plugin.getPermissionManager();
PermissionGroup group = gm.getGroup(owner, world); final PermissionGroup group = gm.getGroup(owner, world);
Set<Entry<String, Boolean>> dflags = group.getDefaultResidenceFlags(); final Set<Entry<String, Boolean>> dflags = group.getDefaultResidenceFlags();
Set<Entry<String, Boolean>> dcflags = group.getDefaultCreatorFlags(); final Set<Entry<String, Boolean>> dcflags = group.getDefaultCreatorFlags();
Set<Entry<String, Map<String, Boolean>>> dgflags = group.getDefaultGroupFlags(); final Set<Entry<String, Map<String, Boolean>>> dgflags = group.getDefaultGroupFlags();
this.applyGlobalDefaults(); this.applyGlobalDefaults();
for (Entry<String, Boolean> next : dflags) for (final Entry<String, Boolean> next : dflags) {
if (this.checkValidFlag(next.getKey(), true)) if (this.checkValidFlag(next.getKey(), true)) {
if (next.getValue()) if (next.getValue()) {
this.setFlag(next.getKey(), FlagState.TRUE); this.setFlag(next.getKey(), FlagState.TRUE);
else } else {
this.setFlag(next.getKey(), FlagState.FALSE); this.setFlag(next.getKey(), FlagState.FALSE);
for (Entry<String, Boolean> next : dcflags) }
if (this.checkValidFlag(next.getKey(), false)) }
if (next.getValue()) }
for (final Entry<String, Boolean> next : dcflags) {
if (this.checkValidFlag(next.getKey(), false)) {
if (next.getValue()) {
this.setPlayerFlag(owner, next.getKey(), FlagState.TRUE); this.setPlayerFlag(owner, next.getKey(), FlagState.TRUE);
else } else {
this.setPlayerFlag(owner, next.getKey(), FlagState.FALSE); this.setPlayerFlag(owner, next.getKey(), FlagState.FALSE);
for (Entry<String, Map<String, Boolean>> entry : dgflags) { }
Map<String, Boolean> value = entry.getValue(); }
for (Entry<String, Boolean> flag : value.entrySet()) }
if (flag.getValue()) for (final Entry<String, Map<String, Boolean>> entry : dgflags) {
final Map<String, Boolean> value = entry.getValue();
for (final Entry<String, Boolean> flag : value.entrySet()) {
if (flag.getValue()) {
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE);
else } else {
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE);
}
}
} }
} }
public void applyDefaultFlags(Player player, boolean resadmin) { public void applyDefaultFlags(final Player player, final boolean resadmin) {
if (this.hasResidencePermission(player, true) || resadmin) { if (this.hasResidencePermission(player, true) || resadmin) {
this.applyDefaultFlags(); this.applyDefaultFlags();
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("FlagsDefault")); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("FlagsDefault"));
} else } else {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("NoPermission"));
}
} }
public void applyGlobalDefaults() { public void applyGlobalDefaults() {
this.clearFlags(); this.clearFlags();
FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); final FlagPermissions gRD = plugin.getConfigManager().getGlobalResidenceDefaultFlags();
FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags(); final FlagPermissions gCD = plugin.getConfigManager().getGlobalCreatorDefaultFlags();
Map<String, FlagPermissions> gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags(); final Map<String, FlagPermissions> gGD = plugin.getConfigManager().getGlobalGroupDefaultFlags();
for (Entry<String, Boolean> entry : gRD.cuboidFlags.entrySet()) for (final Entry<String, Boolean> entry : gRD.cuboidFlags.entrySet()) {
if (entry.getValue()) if (entry.getValue()) {
this.setFlag(entry.getKey(), FlagState.TRUE); this.setFlag(entry.getKey(), FlagState.TRUE);
else } else {
this.setFlag(entry.getKey(), FlagState.FALSE); this.setFlag(entry.getKey(), FlagState.FALSE);
for (Entry<String, Boolean> entry : gCD.cuboidFlags.entrySet()) }
if (entry.getValue()) }
for (final Entry<String, Boolean> entry : gCD.cuboidFlags.entrySet()) {
if (entry.getValue()) {
this.setPlayerFlag(owner, entry.getKey(), FlagState.TRUE); this.setPlayerFlag(owner, entry.getKey(), FlagState.TRUE);
else } else {
this.setPlayerFlag(owner, entry.getKey(), FlagState.FALSE); this.setPlayerFlag(owner, entry.getKey(), FlagState.FALSE);
for (Entry<String, FlagPermissions> entry : gGD.entrySet()) }
for (Entry<String, Boolean> flag : entry.getValue().cuboidFlags.entrySet()) }
if (flag.getValue()) for (final Entry<String, FlagPermissions> entry : gGD.entrySet()) {
for (final Entry<String, Boolean> flag : entry.getValue().cuboidFlags.entrySet()) {
if (flag.getValue()) {
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE);
else } else {
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE);
}
}
}
} }
public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { public void applyTemplate(final Player player, final FlagPermissions list, boolean resadmin) {
if (player != null) { if (player != null) {
if (!player.getName().equals(owner) && !resadmin) { if (!player.getName().equals(owner) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return; return;
} }
} else } else {
resadmin = true; resadmin = true;
PermissionGroup group = Residence.getPermissionManager().getGroup(owner, world); }
for (Entry<String, Boolean> flag : list.cuboidFlags.entrySet()) final PermissionGroup group = plugin.getPermissionManager().getGroup(owner, world);
if (group.hasFlagAccess(flag.getKey()) || resadmin) for (final Entry<String, Boolean> flag : list.cuboidFlags.entrySet()) {
if (group.hasFlagAccess(flag.getKey()) || resadmin) {
this.cuboidFlags.put(flag.getKey(), flag.getValue()); this.cuboidFlags.put(flag.getKey(), flag.getValue());
else if (player != null) } else if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
for (Entry<String, Map<String, Boolean>> plists : list.playerFlags.entrySet()) }
for (Entry<String, Boolean> flag : plists.getValue().entrySet()) }
for (final Entry<String, Map<String, Boolean>> plists : list.playerFlags.entrySet()) {
for (final Entry<String, Boolean> flag : plists.getValue().entrySet()) {
if (group.hasFlagAccess(flag.getKey()) || resadmin) { if (group.hasFlagAccess(flag.getKey()) || resadmin) {
if (!this.playerFlags.containsKey(plists.getKey())) if (!this.playerFlags.containsKey(plists.getKey())) {
this.playerFlags.put(plists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>())); this.playerFlags.put(plists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>()));
}
this.playerFlags.get(plists.getKey()).put(flag.getKey(), flag.getValue()); this.playerFlags.get(plists.getKey()).put(flag.getKey(), flag.getValue());
} else if (player != null) } else if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
for (Entry<String, Map<String, Boolean>> glists : list.groupFlags.entrySet()) }
for (Entry<String, Boolean> flag : glists.getValue().entrySet()) }
}
for (final Entry<String, Map<String, Boolean>> glists : list.groupFlags.entrySet()) {
for (final Entry<String, Boolean> flag : glists.getValue().entrySet()) {
if (group.hasFlagAccess(flag.getKey()) || resadmin) { if (group.hasFlagAccess(flag.getKey()) || resadmin) {
if (!this.groupFlags.containsKey(glists.getKey())) if (!this.groupFlags.containsKey(glists.getKey())) {
this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>())); this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>()));
}
this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue());
} else if (player != null) } else if (player != null) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
if (player != null) }
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("PermissionsApply")); }
}
if (player != null) {
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("PermissionsApply"));
}
} }
public void fixNames() { public void fixNames() {
ArrayList<String> fixNames = new ArrayList<String>(); final ArrayList<String> fixNames = new ArrayList<String>();
Iterator<Entry<String, Map<String, Boolean>>> it = playerFlags.entrySet().iterator(); final Iterator<Entry<String, Map<String, Boolean>>> it = playerFlags.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
String name = it.next().getKey(); final String name = it.next().getKey();
if (!name.equals(name.toLowerCase())) if (!name.equals(name.toLowerCase())) {
fixNames.add(name); fixNames.add(name);
}
} }
for (String name : fixNames) { for (final String name : fixNames) {
Map<String, Boolean> get = playerFlags.get(name); final Map<String, Boolean> get = playerFlags.get(name);
playerFlags.remove(name); playerFlags.remove(name);
playerFlags.put(name.toLowerCase(), get); playerFlags.put(name.toLowerCase(), get);
} }
@@ -187,79 +225,87 @@ public class ResidencePermissions extends FlagPermissions {
} }
@Override @Override
public boolean groupHas(String group, String flag, boolean def) { public boolean groupHas(final String group, final String flag, final boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); final ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden()) if (fc.isOverriden()) {
return fc.getOverrideValue(); return fc.getOverrideValue();
}
return super.groupHas(group, flag, def); return super.groupHas(group, flag, def);
} }
@Override @Override
public boolean has(String flag, boolean def) { public boolean has(final String flag, final boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); final ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden()) if (fc.isOverriden()) {
return fc.getOverrideValue(); return fc.getOverrideValue();
}
return super.has(flag, def); return super.has(flag, def);
} }
public boolean hasApplicableFlag(String player, String flag) { public boolean hasApplicableFlag(final String player, final String flag) {
return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag); return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(plugin.getPermissionManager().getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag);
} }
public boolean hasResidencePermission(Player player, boolean requireOwner) { public boolean hasResidencePermission(final Player player, final boolean requireOwner) {
if (Residence.getConfigManager().enabledRentSystem()) { if (plugin.getConfigManager().enabledRentSystem()) {
String resname = residence.getName(); final String resname = residence.getName();
if (Residence.getRentManager().isRented(resname)) { if (plugin.getRentManager().isRented(resname)) {
if (requireOwner) if (requireOwner) {
return false; return false;
String renter = Residence.getRentManager().getRentingPlayer(resname); }
if (player.getName().equalsIgnoreCase(renter)) final String renter = plugin.getRentManager().getRentingPlayer(resname);
if (player.getName().equalsIgnoreCase(renter)) {
return true; return true;
else } else {
return (playerHas(player.getName(), "admin", false)); return (playerHas(player.getName(), "admin", false));
}
} }
} }
if (requireOwner) if (requireOwner) {
return (owner.equalsIgnoreCase(player.getName())); return (owner.equalsIgnoreCase(player.getName()));
}
return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player.getName())); return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player.getName()));
} }
public boolean playerHas(String player, String flag, boolean def) { public boolean playerHas(final String player, final String flag, final boolean def) {
return this.playerHas(player, world, flag, def); return this.playerHas(player, world, flag, def);
} }
@Override @Override
public boolean playerHas(String player, String world, String flag, boolean def) { public boolean playerHas(final String player, final String world, final String flag, final boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); final ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden()) if (fc.isOverriden()) {
return fc.getOverrideValue(); return fc.getOverrideValue();
}
return super.playerHas(player, world, flag, def); return super.playerHas(player, world, flag, def);
} }
public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { public boolean removeAllGroupFlags(final Player player, final String group, final boolean resadmin) {
if (this.hasResidencePermission(player, false) || resadmin) { if (this.hasResidencePermission(player, false) || resadmin) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
super.removeAllGroupFlags(group); super.removeAllGroupFlags(group);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("FlagSet"));
return true; return true;
} }
return false; return false;
} }
public boolean removeAllPlayerFlags(Player player, String targetPlayer, boolean resadmin) { public boolean removeAllPlayerFlags(final Player player, final String targetPlayer, final boolean resadmin) {
if (this.hasResidencePermission(player, false) || resadmin) { if (this.hasResidencePermission(player, false) || resadmin) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
super.removeAllPlayerFlags(targetPlayer); super.removeAllPlayerFlags(targetPlayer);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("FlagSet"));
return true; return true;
} }
return false; return false;
@@ -267,23 +313,25 @@ public class ResidencePermissions extends FlagPermissions {
@Override @Override
public Map<String, Object> save() { public Map<String, Object> save() {
Map<String, Object> root = super.save(); final Map<String, Object> root = super.save();
root.put("Owner", owner); root.put("Owner", owner);
root.put("World", world); root.put("World", world);
return root; return root;
} }
public boolean setFlag(Player player, String flag, String flagstate, boolean resadmin) { public boolean setFlag(final Player player, final String flag, final String flagstate, final boolean resadmin) {
if (validFlagGroups.containsKey(flag)) if (validFlagGroups.containsKey(flag)) {
return this.setFlagGroup(player, flag, flagstate, resadmin); return this.setFlagGroup(player, flag, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate); }
final FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (checkCanSetFlag(player, flag, state, true, resadmin)) { if (checkCanSetFlag(player, flag, state, true, resadmin)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
if (super.setFlag(flag, state)) { if (super.setFlag(flag, state)) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("FlagSet"));
return true; return true;
} }
} }
@@ -291,100 +339,114 @@ public class ResidencePermissions extends FlagPermissions {
} }
@Override @Override
public boolean setFlag(String flag, FlagState state) { public boolean setFlag(final String flag, final FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
return super.setFlag(flag, state); return super.setFlag(flag, state);
} }
public boolean setFlagGroup(Player player, String flaggroup, String state, boolean resadmin) { public boolean setFlagGroup(final Player player, final String flaggroup, final String state, final boolean resadmin) {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup); final ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false; boolean changed = false;
for (String flag : flags) for (final String flag : flags) {
if (this.setFlag(player, flag, state, resadmin)) if (this.setFlag(player, flag, state, resadmin)) {
changed = true; changed = true;
}
}
return changed; return changed;
} }
return false; return false;
} }
public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { public boolean setFlagGroupOnGroup(final Player player, final String flaggroup, final String group, final String state, final boolean resadmin) {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup); final ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false; boolean changed = false;
for (String flag : flags) for (final String flag : flags) {
if (this.setGroupFlag(player, group, flag, state, resadmin)) if (this.setGroupFlag(player, group, flag, state, resadmin)) {
changed = true; changed = true;
}
}
return changed; return changed;
} }
return false; return false;
} }
public boolean setFlagGroupOnPlayer(Player player, String target, String flaggroup, String state, boolean resadmin) { public boolean setFlagGroupOnPlayer(final Player player, final String target, final String flaggroup, final String state, final boolean resadmin) {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup); final ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false; boolean changed = false;
for (String flag : flags) for (final String flag : flags) {
if (this.setPlayerFlag(player, target, flag, state, resadmin)) if (this.setPlayerFlag(player, target, flag, state, resadmin)) {
changed = true; changed = true;
}
}
return changed; return changed;
} }
return false; return false;
} }
public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { public boolean setGroupFlag(final Player player, String group, final String flag, final String flagstate, final boolean resadmin) {
group = group.toLowerCase(); group = group.toLowerCase();
if (validFlagGroups.containsKey(flag)) if (validFlagGroups.containsKey(flag)) {
return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate); }
if (checkCanSetFlag(player, flag, state, false, resadmin)) final FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (Residence.getPermissionManager().hasGroup(group)) { if (checkCanSetFlag(player, flag, state, false, resadmin)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); if (plugin.getPermissionManager().hasGroup(group)) {
Residence.getServ().getPluginManager().callEvent(fc); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
if (fc.isCancelled()) plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) {
return false; return false;
}
if (super.setGroupFlag(group, flag, state)) { if (super.setGroupFlag(group, flag, state)) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("FlagSet"));
return true; return true;
} }
} else { } else {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidGroup"));
return false; return false;
} }
}
return false; return false;
} }
@Override @Override
public boolean setGroupFlag(String group, String flag, FlagState state) { public boolean setGroupFlag(final String group, final String flag, final FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
return super.setGroupFlag(group, flag, state); return super.setGroupFlag(group, flag, state);
} }
public void setOwner(String newOwner, boolean resetFlags) { public void setOwner(final String newOwner, final boolean resetFlags) {
ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); final ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner);
Residence.getServ().getPluginManager().callEvent(ownerchange); plugin.getServ().getPluginManager().callEvent(ownerchange);
owner = newOwner; owner = newOwner;
if (resetFlags) if (resetFlags) {
this.applyDefaultFlags(); this.applyDefaultFlags();
}
} }
public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin) { public boolean setPlayerFlag(final Player player, final String targetPlayer, final String flag, final String flagstate, final boolean resadmin) {
if (validFlagGroups.containsKey(flag)) if (validFlagGroups.containsKey(flag)) {
return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin); return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate); }
final FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (checkCanSetFlag(player, flag, state, false, resadmin)) { if (checkCanSetFlag(player, flag, state, false, resadmin)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
if (super.setPlayerFlag(targetPlayer, flag, state)) { if (super.setPlayerFlag(targetPlayer, flag, state)) {
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("FlagSet"));
return true; return true;
} }
} }
@@ -392,38 +454,39 @@ public class ResidencePermissions extends FlagPermissions {
} }
@Override @Override
public boolean setPlayerFlag(String player, String flag, FlagState state) { public boolean setPlayerFlag(final String player, final String flag, final FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); final ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player);
Residence.getServ().getPluginManager().callEvent(fc); plugin.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled()) if (fc.isCancelled()) {
return false; return false;
}
return super.setPlayerFlag(player, flag, state); return super.setPlayerFlag(player, flag, state);
} }
private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { private boolean checkCanSetFlag(final Player player, final String flag, final FlagState state, final boolean globalflag, final boolean resadmin) {
if (!checkValidFlag(flag, globalflag)) { if (!checkValidFlag(flag, globalflag)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidFlag"));
return false; return false;
} }
if (state == FlagState.INVALID) { if (state == FlagState.INVALID) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlagState")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidFlagState"));
return false; return false;
} }
if (!resadmin) { if (!resadmin) {
if (!this.hasResidencePermission(player, false)) { if (!this.hasResidencePermission(player, false)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission"));
return false; return false;
} }
if (!hasFlagAccess(owner, flag)) { if (!hasFlagAccess(owner, flag)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("OwnerNoPermission"));
return false; return false;
} }
} }
return true; return true;
} }
private boolean hasFlagAccess(String player, String flag) { private boolean hasFlagAccess(final String player, final String flag) {
PermissionGroup group = Residence.getPermissionManager().getGroup(player, world); final PermissionGroup group = plugin.getPermissionManager().getGroup(player, world);
return group.hasFlagAccess(flag); return group.hasFlagAccess(flag);
} }
} }

View File

@@ -22,34 +22,36 @@ import com.bekvon.bukkit.residence.Residence;
* @author Administrator * @author Administrator
*/ */
public class WorldFlagManager { public class WorldFlagManager {
protected FlagPermissions globaldefaults;
protected Map<String, Map<String, FlagPermissions>> groupperms; protected Map<String, Map<String, FlagPermissions>> groupperms;
protected Map<String, FlagPermissions> worldperms; protected Map<String, FlagPermissions> worldperms;
protected FlagPermissions globaldefaults; Residence plugin;
public WorldFlagManager() { public WorldFlagManager(final Residence plugin) {
globaldefaults = new FlagPermissions(); this.plugin = plugin;
globaldefaults = new FlagPermissions(plugin);
worldperms = new HashMap<String, FlagPermissions>(); worldperms = new HashMap<String, FlagPermissions>();
groupperms = new HashMap<String, Map<String, FlagPermissions>>(); groupperms = new HashMap<String, Map<String, FlagPermissions>>();
} }
public WorldFlagManager(FileConfiguration config) { public WorldFlagManager(final Residence plugin, final FileConfiguration config) {
this(); this(plugin);
this.parsePerms(config); this.parsePerms(config);
} }
public FlagPermissions getPerms(Player player) { public FlagPermissions getPerms(final Player player) {
return this.getPerms(player.getWorld().getName(), Residence.getPermissionManager() return this.getPerms(player.getWorld().getName(), plugin.getPermissionManager().getGroupNameByPlayer(player));
.getGroupNameByPlayer(player));
} }
public FlagPermissions getPerms(String world) { public FlagPermissions getPerms(String world) {
world = world.toLowerCase(); world = world.toLowerCase();
FlagPermissions list = worldperms.get(world); final FlagPermissions list = worldperms.get(world);
if (list == null) { if (list == null) {
if (globaldefaults == null) if (globaldefaults == null) {
return new FlagPermissions(); return new FlagPermissions(plugin);
else } else {
return globaldefaults; return globaldefaults;
}
} }
return list; return list;
} }
@@ -57,76 +59,64 @@ public class WorldFlagManager {
public FlagPermissions getPerms(String world, String group) { public FlagPermissions getPerms(String world, String group) {
world = world.toLowerCase(); world = world.toLowerCase();
group = group.toLowerCase(); group = group.toLowerCase();
Map<String, FlagPermissions> groupworldperms = groupperms.get(group); final Map<String, FlagPermissions> groupworldperms = groupperms.get(group);
if (groupworldperms == null) if (groupworldperms == null) {
return this.getPerms(world); return this.getPerms(world);
}
FlagPermissions list = groupworldperms.get(world); FlagPermissions list = groupworldperms.get(world);
if (list == null) { if (list == null) {
list = groupworldperms.get("global." + world); list = groupworldperms.get("global." + world);
if (list == null) { if (list == null) {
list = groupworldperms.get("global"); list = groupworldperms.get("global");
} }
if (list == null) if (list == null) {
return this.getPerms(world); return this.getPerms(world);
}
} }
return list; return list;
} }
public void parsePerms(FileConfiguration config) { public void parsePerms(final FileConfiguration config) {
try { try {
Set<String> keys = config.getConfigurationSection("Global.Flags").getKeys(false); Set<String> keys = config.getConfigurationSection("Global.Flags").getKeys(false);
if (keys != null) { if (keys != null) {
for (String key : keys) { for (final String key : keys) {
if (key.equalsIgnoreCase("Global")) { if (key.equalsIgnoreCase("Global")) {
globaldefaults = FlagPermissions.parseFromConfigNode(key, globaldefaults = FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags"));
config.getConfigurationSection("Global.Flags"));
} else { } else {
worldperms.put( worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags")));
key.toLowerCase(),
FlagPermissions.parseFromConfigNode(key,
config.getConfigurationSection("Global.Flags")));
} }
} }
} }
for (Entry<String, FlagPermissions> entry : worldperms.entrySet()) { for (final Entry<String, FlagPermissions> entry : worldperms.entrySet()) {
entry.getValue().setParent(globaldefaults); entry.getValue().setParent(globaldefaults);
} }
keys = config.getConfigurationSection("Groups").getKeys(false); keys = config.getConfigurationSection("Groups").getKeys(false);
if (keys != null) { if (keys != null) {
for (String key : keys) { for (final String key : keys) {
ConfigurationSection worldkeylist = config.getConfigurationSection("Groups." final ConfigurationSection worldkeylist = config.getConfigurationSection("Groups." + key + ".Flags.World");
+ key + ".Flags.World");
if (worldkeylist != null) { if (worldkeylist != null) {
Set<String> worldkeys = config.getConfigurationSection( final Set<String> worldkeys = config.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false);
"Groups." + key + ".Flags.World").getKeys(false);
if (worldkeys != null) { if (worldkeys != null) {
Map<String, FlagPermissions> perms = new HashMap<String, FlagPermissions>(); final Map<String, FlagPermissions> perms = new HashMap<String, FlagPermissions>();
for (String wkey : worldkeys) { for (final String wkey : worldkeys) {
FlagPermissions list = FlagPermissions.parseFromConfigNode( FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, config.getConfigurationSection("Groups." + key + ".Flags.World"));
wkey,
config.getConfigurationSection("Groups." + key
+ ".Flags.World"));
if (wkey.equalsIgnoreCase("global")) { if (wkey.equalsIgnoreCase("global")) {
list.setParent(globaldefaults); list.setParent(globaldefaults);
perms.put(wkey.toLowerCase(), list); perms.put(wkey.toLowerCase(), list);
for (Entry<String, FlagPermissions> worldperm : worldperms for (final Entry<String, FlagPermissions> worldperm : worldperms.entrySet()) {
.entrySet()) { list = FlagPermissions.parseFromConfigNode(wkey, config.getConfigurationSection("Groups." + key + ".Flags.World"));
list = FlagPermissions.parseFromConfigNode(
wkey,
config.getConfigurationSection("Groups." + key
+ ".Flags.World"));
list.setParent(worldperm.getValue()); list.setParent(worldperm.getValue());
perms.put("global." + worldperm.getKey().toLowerCase(), perms.put("global." + worldperm.getKey().toLowerCase(), list);
list);
} }
} else { } else {
perms.put(wkey.toLowerCase(), list); perms.put(wkey.toLowerCase(), list);
} }
} }
for (Entry<String, FlagPermissions> entry : perms.entrySet()) { for (final Entry<String, FlagPermissions> entry : perms.entrySet()) {
String wkey = entry.getKey(); final String wkey = entry.getKey();
FlagPermissions list = entry.getValue(); final FlagPermissions list = entry.getValue();
if (!wkey.startsWith("global.")) { if (!wkey.startsWith("global.")) {
list.setParent(perms.get("global." + wkey)); list.setParent(perms.get("global." + wkey));
if (list.getParent() == null) { if (list.getParent() == null) {
@@ -142,7 +132,7 @@ public class WorldFlagManager {
} }
} }
} }
} catch (Exception ex) { } catch (final Exception ex) {
Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex);
} }
} }

View File

@@ -7,16 +7,17 @@ import com.bekvon.bukkit.residence.Residence;
public class AutoSaveTask implements Runnable { public class AutoSaveTask implements Runnable {
Residence res; Residence res;
public AutoSaveTask(Residence res) { public AutoSaveTask(final Residence res) {
this.res = res; this.res = res;
} }
@Override @Override
public void run() { public void run() {
try { try {
if (Residence.initsuccess) if (res.isInit()) {
res.saveYml(); res.saveYml();
} catch (Exception ex) { }
} catch (final Exception ex) {
Bukkit.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); Bukkit.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
} }
} }

View File

@@ -8,23 +8,30 @@ import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
public class HealTask implements Runnable { public class HealTask implements Runnable {
Residence plugin;
public HealTask(final Residence plugin) {
this.plugin = plugin;
}
@Override @Override
public void run() { public void run() {
try { try {
for (Player player : Bukkit.getServer().getOnlinePlayers()) { for (final Player player : Bukkit.getServer().getOnlinePlayers()) {
String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); final String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName());
ClaimedResidence res = null; ClaimedResidence res = null;
if (resname != null) if (resname != null) {
res = Residence.getResidenceManager().getByName(resname); res = plugin.getResidenceManager().getByName(resname);
}
if (res != null && res.getPermissions().has("healing", false)) { if (res != null && res.getPermissions().has("healing", false)) {
Damageable damage = player; final Damageable damage = player;
double health = damage.getHealth(); final double health = damage.getHealth();
if (health < 20 && !player.isDead()) if (health < 20 && !player.isDead()) {
player.setHealth(health + 1); player.setHealth(health + 1);
}
} }
} }
} catch (Exception ex) { } catch (final Exception ex) {
} }
} }

View File

@@ -3,10 +3,17 @@ package com.bekvon.bukkit.residence.runnable;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
public class LeaseTask implements Runnable { public class LeaseTask implements Runnable {
Residence plugin;
public LeaseTask(final Residence plugin) {
this.plugin = plugin;
}
@Override @Override
public void run() { public void run() {
Residence.getLeaseManager().doExpirations(); plugin.getLeaseManager().doExpirations();
if (Residence.getConfigManager().showIntervalMessages()) if (plugin.getConfigManager().showIntervalMessages()) {
Residence.getLog().info(" - Lease Expirations checked!"); plugin.getLogger().info(" - Lease Expirations checked!");
}
} }
} }

View File

@@ -3,10 +3,17 @@ package com.bekvon.bukkit.residence.runnable;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
public class RentTask implements Runnable { public class RentTask implements Runnable {
Residence plugin;
public RentTask(final Residence plugin) {
this.plugin = plugin;
}
@Override @Override
public void run() { public void run() {
Residence.getRentManager().checkCurrentRents(); plugin.getRentManager().checkCurrentRents();
if (Residence.getConfigManager().showIntervalMessages()) if (plugin.getConfigManager().showIntervalMessages()) {
Residence.getLog().info(" - Rent Expirations checked!"); plugin.getLog().info(" - Rent Expirations checked!");
}
} }
} }

View File

@@ -5,233 +5,105 @@
package com.bekvon.bukkit.residence.selection; package com.bekvon.bukkit.residence.selection;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import com.bekvon.bukkit.residence.protection.CuboidArea;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
import com.bekvon.bukkit.residence.protection.CuboidArea;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class SelectionManager { public class SelectionManager {
public static final int MAX_HEIGHT = 255, MIN_HEIGHT = 0;
protected Map<String, Location> playerLoc1; protected Map<String, Location> playerLoc1;
protected Map<String, Location> playerLoc2; protected Map<String, Location> playerLoc2;
protected Server server; protected Server server;
Residence plugin;
public static final int MAX_HEIGHT = 255, MIN_HEIGHT = 0; public SelectionManager(final Residence plugin) {
this.plugin = plugin;
public enum Direction { this.server = Bukkit.getServer();
UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ playerLoc1 = Collections.synchronizedMap(new HashMap<String, Location>());
playerLoc2 = Collections.synchronizedMap(new HashMap<String, Location>());
} }
public SelectionManager(Server server) { public void bedrock(final Player player, final boolean resadmin) {
this.server = server;
playerLoc1 = Collections
.synchronizedMap(new HashMap<String, Location>());
playerLoc2 = Collections
.synchronizedMap(new HashMap<String, Location>());
}
public void placeLoc1(Player player, Location loc) {
if (loc != null) {
playerLoc1.put(player.getName(), loc);
}
}
public void placeLoc2(Player player, Location loc) {
if (loc != null) {
playerLoc2.put(player.getName(), loc);
}
}
public Location getPlayerLoc1(String player) {
return playerLoc1.get(player);
}
public Location getPlayerLoc2(String player) {
return playerLoc2.get(player);
}
public boolean hasPlacedBoth(String player) {
return (playerLoc1.containsKey(player) && playerLoc2
.containsKey(player));
}
public void showSelectionInfo(Player player) {
String pname = player.getName();
if (this.hasPlacedBoth(pname)) {
CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname),
getPlayerLoc2(pname));
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Selection.Total.Size")
+ ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize());
PermissionGroup group = Residence.getPermissionManager().getGroup(
player);
if (Residence.getConfigManager().enableEconomy())
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Land.Cost")
+ ":"
+ ChatColor.DARK_AQUA
+ " "
+ ((int) Math.ceil((double) cuboidArea.getSize()
* group.getCostPerBlock())));
player.sendMessage(ChatColor.YELLOW + "X"
+ Residence.getLanguage().getPhrase("Size") + ":"
+ ChatColor.DARK_AQUA + " " + cuboidArea.getXSize());
player.sendMessage(ChatColor.YELLOW + "Y"
+ Residence.getLanguage().getPhrase("Size") + ":"
+ ChatColor.DARK_AQUA + " " + cuboidArea.getYSize());
player.sendMessage(ChatColor.YELLOW + "Z"
+ Residence.getLanguage().getPhrase("Size") + ":"
+ ChatColor.DARK_AQUA + " " + cuboidArea.getZSize());
} else
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SelectPoints"));
}
public void vert(Player player, boolean resadmin) {
if (hasPlacedBoth(player.getName())) { if (hasPlacedBoth(player.getName())) {
this.sky(player, resadmin); final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
this.bedrock(player, resadmin); final int y1 = playerLoc1.get(player.getName()).getBlockY();
} else { final int y2 = playerLoc2.get(player.getName()).getBlockY();
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SelectPoints"));
}
}
public void sky(Player player, boolean resadmin) {
if (hasPlacedBoth(player.getName())) {
PermissionGroup group = Residence.getPermissionManager().getGroup(
player);
int y1 = playerLoc1.get(player.getName()).getBlockY();
int y2 = playerLoc2.get(player.getName()).getBlockY();
if (y1 > y2) {
int newy = MAX_HEIGHT;
if (!resadmin) {
if (group.getMaxHeight() < newy)
newy = group.getMaxHeight();
if (newy - y2 > (group.getMaxY() - 1))
newy = y2 + (group.getMaxY() - 1);
}
playerLoc1.get(player.getName()).setY(newy);
} else {
int newy = MAX_HEIGHT;
if (!resadmin) {
if (group.getMaxHeight() < newy)
newy = group.getMaxHeight();
if (newy - y1 > (group.getMaxY() - 1))
newy = y1 + (group.getMaxY() - 1);
}
playerLoc2.get(player.getName()).setY(newy);
}
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SelectionSky"));
} else {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SelectPoints"));
}
}
public void bedrock(Player player, boolean resadmin) {
if (hasPlacedBoth(player.getName())) {
PermissionGroup group = Residence.getPermissionManager().getGroup(
player);
int y1 = playerLoc1.get(player.getName()).getBlockY();
int y2 = playerLoc2.get(player.getName()).getBlockY();
if (y1 < y2) { if (y1 < y2) {
int newy = MIN_HEIGHT; int newy = MIN_HEIGHT;
if (!resadmin) { if (!resadmin) {
if (newy < group.getMinHeight()) if (newy < group.getMinHeight()) {
newy = group.getMinHeight(); newy = group.getMinHeight();
if (y2 - newy > (group.getMaxY() - 1)) }
if (y2 - newy > (group.getMaxY() - 1)) {
newy = y2 - (group.getMaxY() - 1); newy = y2 - (group.getMaxY() - 1);
}
} }
playerLoc1.get(player.getName()).setY(newy); playerLoc1.get(player.getName()).setY(newy);
} else { } else {
int newy = MIN_HEIGHT; int newy = MIN_HEIGHT;
if (!resadmin) { if (!resadmin) {
if (newy < group.getMinHeight()) if (newy < group.getMinHeight()) {
newy = group.getMinHeight(); newy = group.getMinHeight();
if (y1 - newy > (group.getMaxY() - 1)) }
if (y1 - newy > (group.getMaxY() - 1)) {
newy = y1 - (group.getMaxY() - 1); newy = y1 - (group.getMaxY() - 1);
}
} }
playerLoc2.get(player.getName()).setY(newy); playerLoc2.get(player.getName()).setY(newy);
} }
player.sendMessage(ChatColor.GREEN player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectionBedrock"));
+ Residence.getLanguage().getPhrase("SelectionBedrock"));
} else { } else {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
+ Residence.getLanguage().getPhrase("SelectPoints"));
} }
} }
public void clearSelection(Player player) { public void clearSelection(final Player player) {
playerLoc1.remove(player.getName()); playerLoc1.remove(player.getName());
playerLoc2.remove(player.getName()); playerLoc2.remove(player.getName());
} }
public void selectChunk(Player player) { public Location getPlayerLoc1(final String player) {
Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); return playerLoc1.get(player);
int xcoord = chunk.getX() * 16;
int zcoord = chunk.getZ() * 16;
int ycoord = MIN_HEIGHT;
int xmax = xcoord + 15;
int zmax = zcoord + 15;
int ymax = MAX_HEIGHT;
this.playerLoc1.put(player.getName(), new Location(player.getWorld(),
xcoord, ycoord, zcoord));
this.playerLoc2.put(player.getName(), new Location(player.getWorld(),
xmax, ymax, zmax));
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SelectionSuccess"));
} }
public boolean worldEdit(Player player) { public Location getPlayerLoc2(final String player) {
player.sendMessage(ChatColor.RED return playerLoc2.get(player);
+ Residence.getLanguage().getPhrase("WorldEditNotFound"));
return false;
} }
public void selectBySize(Player player, int xsize, int ysize, int zsize) { public boolean hasPlacedBoth(final String player) {
Location myloc = player.getLocation(); return (playerLoc1.containsKey(player) && playerLoc2.containsKey(player));
Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX()
+ xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize);
Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX()
- xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize);
placeLoc1(player, loc1);
placeLoc2(player, loc2);
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SelectionSuccess"));
showSelectionInfo(player);
} }
public void modify(Player player, boolean shift, int amount) { public void modify(final Player player, final boolean shift, final int amount) {
if (!this.hasPlacedBoth(player.getName())) { if (!this.hasPlacedBoth(player.getName())) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
+ Residence.getLanguage().getPhrase("SelectPoints"));
return; return;
} }
Direction d = this.getDirection(player); final Direction d = this.getDirection(player);
if (d == null) { if (d == null) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidDirection"));
+ Residence.getLanguage().getPhrase("InvalidDirection"));
} }
CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), final CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName()));
playerLoc2.get(player.getName()));
if (d == Direction.UP) { if (d == Direction.UP) {
int oldy = area.getHighLoc().getBlockY(); int oldy = area.getHighLoc().getBlockY();
oldy = oldy + amount; oldy = oldy + amount;
if (oldy > MAX_HEIGHT) { if (oldy > MAX_HEIGHT) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectTooHigh"));
+ Residence.getLanguage().getPhrase("SelectTooHigh"));
oldy = MAX_HEIGHT; oldy = MAX_HEIGHT;
} }
area.getHighLoc().setY(oldy); area.getHighLoc().setY(oldy);
@@ -239,20 +111,16 @@ public class SelectionManager {
int oldy2 = area.getLowLoc().getBlockY(); int oldy2 = area.getLowLoc().getBlockY();
oldy2 = oldy2 + amount; oldy2 = oldy2 + amount;
area.getLowLoc().setY(oldy2); area.getLowLoc().setY(oldy2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting.Up") + "...");
+ Residence.getLanguage().getPhrase("Shifting.Up") } else {
+ "..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding.Up") + "...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding.Up")
+ "...");
} }
if (d == Direction.DOWN) { if (d == Direction.DOWN) {
int oldy = area.getLowLoc().getBlockY(); int oldy = area.getLowLoc().getBlockY();
oldy = oldy - amount; oldy = oldy - amount;
if (oldy < MIN_HEIGHT) { if (oldy < MIN_HEIGHT) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectTooLow"));
+ Residence.getLanguage().getPhrase("SelectTooLow"));
oldy = MIN_HEIGHT; oldy = MIN_HEIGHT;
} }
area.getLowLoc().setY(oldy); area.getLowLoc().setY(oldy);
@@ -260,13 +128,10 @@ public class SelectionManager {
int oldy2 = area.getHighLoc().getBlockY(); int oldy2 = area.getHighLoc().getBlockY();
oldy2 = oldy2 - amount; oldy2 = oldy2 - amount;
area.getHighLoc().setY(oldy2); area.getHighLoc().setY(oldy2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting.Down") + "...");
+ Residence.getLanguage().getPhrase("Shifting.Down") } else {
+ "..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding.Down") + "...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding.Down")
+ "...");
} }
if (d == Direction.MINUSX) { if (d == Direction.MINUSX) {
int oldx = area.getLowLoc().getBlockX(); int oldx = area.getLowLoc().getBlockX();
@@ -276,13 +141,10 @@ public class SelectionManager {
int oldx2 = area.getHighLoc().getBlockX(); int oldx2 = area.getHighLoc().getBlockX();
oldx2 = oldx2 - amount; oldx2 = oldx2 - amount;
area.getHighLoc().setX(oldx2); area.getHighLoc().setX(oldx2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting") + " -X...");
+ Residence.getLanguage().getPhrase("Shifting") } else {
+ " -X..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding") + " -X...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding")
+ " -X...");
} }
if (d == Direction.PLUSX) { if (d == Direction.PLUSX) {
int oldx = area.getHighLoc().getBlockX(); int oldx = area.getHighLoc().getBlockX();
@@ -292,13 +154,10 @@ public class SelectionManager {
int oldx2 = area.getLowLoc().getBlockX(); int oldx2 = area.getLowLoc().getBlockX();
oldx2 = oldx2 + amount; oldx2 = oldx2 + amount;
area.getLowLoc().setX(oldx2); area.getLowLoc().setX(oldx2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting") + " +X...");
+ Residence.getLanguage().getPhrase("Shifting") } else {
+ " +X..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding") + " +X...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding")
+ " +X...");
} }
if (d == Direction.MINUSZ) { if (d == Direction.MINUSZ) {
int oldz = area.getLowLoc().getBlockZ(); int oldz = area.getLowLoc().getBlockZ();
@@ -308,13 +167,10 @@ public class SelectionManager {
int oldz2 = area.getHighLoc().getBlockZ(); int oldz2 = area.getHighLoc().getBlockZ();
oldz2 = oldz2 - amount; oldz2 = oldz2 - amount;
area.getHighLoc().setZ(oldz2); area.getHighLoc().setZ(oldz2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting") + " -Z...");
+ Residence.getLanguage().getPhrase("Shifting") } else {
+ " -Z..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding") + " -Z...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding")
+ " -Z...");
} }
if (d == Direction.PLUSZ) { if (d == Direction.PLUSZ) {
int oldz = area.getHighLoc().getBlockZ(); int oldz = area.getHighLoc().getBlockZ();
@@ -324,34 +180,147 @@ public class SelectionManager {
int oldz2 = area.getLowLoc().getBlockZ(); int oldz2 = area.getLowLoc().getBlockZ();
oldz2 = oldz2 + amount; oldz2 = oldz2 + amount;
area.getLowLoc().setZ(oldz2); area.getLowLoc().setZ(oldz2);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Shifting") + " +Z...");
+ Residence.getLanguage().getPhrase("Shifting") } else {
+ " +Z..."); player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Expanding") + " +Z...");
} else }
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Expanding")
+ " +Z...");
} }
playerLoc1.put(player.getName(), area.getHighLoc()); playerLoc1.put(player.getName(), area.getHighLoc());
playerLoc2.put(player.getName(), area.getLowLoc()); playerLoc2.put(player.getName(), area.getLowLoc());
} }
private Direction getDirection(Player player) { public void placeLoc1(final Player player, final Location loc) {
float pitch = player.getLocation().getPitch(); if (loc != null) {
float yaw = player.getLocation().getYaw(); playerLoc1.put(player.getName(), loc);
if (pitch < -50) }
}
public void placeLoc2(final Player player, final Location loc) {
if (loc != null) {
playerLoc2.put(player.getName(), loc);
}
}
public void selectBySize(final Player player, final int xsize, final int ysize, final int zsize) {
final Location myloc = player.getLocation();
final Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize);
final Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize);
placeLoc1(player, loc1);
placeLoc2(player, loc2);
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectionSuccess"));
showSelectionInfo(player);
}
public void selectChunk(final Player player) {
final Chunk chunk = player.getWorld().getChunkAt(player.getLocation());
final int xcoord = chunk.getX() * 16;
final int zcoord = chunk.getZ() * 16;
final int ycoord = MIN_HEIGHT;
final int xmax = xcoord + 15;
final int zmax = zcoord + 15;
final int ymax = MAX_HEIGHT;
this.playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord));
this.playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax));
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectionSuccess"));
}
public void showSelectionInfo(final Player player) {
final String pname = player.getName();
if (this.hasPlacedBoth(pname)) {
final CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname));
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("Selection.Total.Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize());
final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
if (plugin.getConfigManager().enableEconomy()) {
player.sendMessage(
ChatColor.YELLOW + plugin.getLanguage().getPhrase("Land.Cost") + ":" + ChatColor.DARK_AQUA + " " + ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock())));
}
player.sendMessage(ChatColor.YELLOW + "X" + plugin.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getXSize());
player.sendMessage(ChatColor.YELLOW + "Y" + plugin.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getYSize());
player.sendMessage(ChatColor.YELLOW + "Z" + plugin.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getZSize());
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
}
}
public void sky(final Player player, final boolean resadmin) {
if (hasPlacedBoth(player.getName())) {
final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
final int y1 = playerLoc1.get(player.getName()).getBlockY();
final int y2 = playerLoc2.get(player.getName()).getBlockY();
if (y1 > y2) {
int newy = MAX_HEIGHT;
if (!resadmin) {
if (group.getMaxHeight() < newy) {
newy = group.getMaxHeight();
}
if (newy - y2 > (group.getMaxY() - 1)) {
newy = y2 + (group.getMaxY() - 1);
}
}
playerLoc1.get(player.getName()).setY(newy);
} else {
int newy = MAX_HEIGHT;
if (!resadmin) {
if (group.getMaxHeight() < newy) {
newy = group.getMaxHeight();
}
if (newy - y1 > (group.getMaxY() - 1)) {
newy = y1 + (group.getMaxY() - 1);
}
}
playerLoc2.get(player.getName()).setY(newy);
}
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectionSky"));
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
}
}
public void vert(final Player player, final boolean resadmin) {
if (hasPlacedBoth(player.getName())) {
this.sky(player, resadmin);
this.bedrock(player, resadmin);
} else {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SelectPoints"));
}
}
public boolean worldEdit(final Player player) {
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("WorldEditNotFound"));
return false;
}
private Direction getDirection(final Player player) {
final float pitch = player.getLocation().getPitch();
final float yaw = player.getLocation().getYaw();
if (pitch < -50) {
return Direction.UP; return Direction.UP;
if (pitch > 50) }
if (pitch > 50) {
return Direction.DOWN; return Direction.DOWN;
if ((yaw > 45 && yaw < 135) || (yaw < -45 && yaw > -135)) }
if ((yaw > 45 && yaw < 135) || (yaw < -45 && yaw > -135)) {
return Direction.MINUSX; return Direction.MINUSX;
if ((yaw > 225 && yaw < 315) || (yaw < -225 && yaw > -315)) }
if ((yaw > 225 && yaw < 315) || (yaw < -225 && yaw > -315)) {
return Direction.PLUSX; return Direction.PLUSX;
if ((yaw > 135 && yaw < 225) || (yaw < -135 && yaw > -225)) }
if ((yaw > 135 && yaw < 225) || (yaw < -135 && yaw > -225)) {
return Direction.MINUSZ; return Direction.MINUSZ;
if ((yaw < 45 || yaw > 315) || (yaw > -45 || yaw < -315)) }
if ((yaw < 45 || yaw > 315) || (yaw > -45 || yaw < -315)) {
return Direction.PLUSZ; return Direction.PLUSZ;
}
return null; return null;
} }
public enum Direction {
DOWN,
MINUSX,
MINUSZ,
PLUSX,
PLUSZ,
UP
}
} }

View File

@@ -6,7 +6,6 @@ package com.bekvon.bukkit.residence.selection;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
@@ -17,12 +16,9 @@ import com.sk89q.worldedit.bukkit.selections.Selection;
* *
*/ */
public class WECUI { public class WECUI {
public static void UPDATESELECT(ClaimedResidence res, Player player) { public static void UPDATESELECT(final ClaimedResidence res, final Player player) {
WorldEditPlugin wep = (WorldEditPlugin) Residence.getServ().getPluginManager() final WorldEditPlugin wep = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
.getPlugin("WorldEdit"); final Selection selection = new CuboidSelection(Bukkit.getWorld(res.getWorld()), res.getAreaByLoc(player.getLocation()).getLowLoc(), res.getAreaByLoc(player.getLocation()).getHighLoc());
Selection selection = new CuboidSelection(Bukkit.getWorld(res.getWorld()), res
.getAreaByLoc(player.getLocation()).getLowLoc(), res.getAreaByLoc(
player.getLocation()).getHighLoc());
wep.setSelection(player, selection); wep.setSelection(player, selection);
} }
} }

View File

@@ -4,104 +4,102 @@
*/ */
package com.bekvon.bukkit.residence.selection; package com.bekvon.bukkit.residence.selection;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.bukkit.selections.Selection;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class WorldEditSelectionManager extends SelectionManager { public class WorldEditSelectionManager extends SelectionManager {
Residence plugin;
public WorldEditSelectionManager(Server serv)
{
super(serv);
}
@Override public WorldEditSelectionManager(final Residence plugin) {
public boolean worldEdit(Player player) { super(plugin);
WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); this.plugin = plugin;
Selection sel = wep.getSelection(player); }
if(sel!=null)
{
Location pos1 = sel.getMinimumPoint();
Location pos2 = sel.getMaximumPoint();
try{
CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion();
pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ());
pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ());
}catch(Exception e){
}
this.playerLoc1.put(player.getName(), pos1);
this.playerLoc2.put(player.getName(), pos2);
return true;
}
return false;
}
private void afterSelectionUpdate(Player player)
{
if (hasPlacedBoth(player.getName()))
{
WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit");
World world = playerLoc1.get(player.getName()).getWorld();
Selection selection = new CuboidSelection(world, playerLoc1.get(player.getName()), playerLoc2.get(player.getName()));
wep.setSelection(player, selection);
}
}
@Override @Override
public void placeLoc1(Player player, Location loc) { public void bedrock(final Player player, final boolean resadmin) {
this.worldEdit(player); this.worldEdit(player);
super.placeLoc1(player, loc); super.bedrock(player, resadmin);
this.afterSelectionUpdate(player); afterSelectionUpdate(player);
} }
@Override @Override
public void placeLoc2(Player player, Location loc) { public void modify(final Player player, final boolean shift, final int amount) {
this.worldEdit(player); this.worldEdit(player);
super.placeLoc2(player, loc); super.modify(player, shift, amount);
this.afterSelectionUpdate(player); afterSelectionUpdate(player);
} }
@Override @Override
public void sky(Player player, boolean resadmin) { public void placeLoc1(final Player player, final Location loc) {
this.worldEdit(player); this.worldEdit(player);
super.sky(player, resadmin); super.placeLoc1(player, loc);
afterSelectionUpdate(player); this.afterSelectionUpdate(player);
} }
@Override @Override
public void bedrock(Player player, boolean resadmin) { public void placeLoc2(final Player player, final Location loc) {
this.worldEdit(player); this.worldEdit(player);
super.bedrock(player, resadmin); super.placeLoc2(player, loc);
afterSelectionUpdate(player); this.afterSelectionUpdate(player);
} }
@Override @Override
public void modify(Player player, boolean shift, int amount) { public void selectChunk(final Player player) {
this.worldEdit(player); this.worldEdit(player);
super.modify(player, shift, amount); super.selectChunk(player);
afterSelectionUpdate(player); afterSelectionUpdate(player);
} }
@Override @Override
public void selectChunk(Player player) { public void showSelectionInfo(final Player player) {
this.worldEdit(player); this.worldEdit(player);
super.selectChunk(player); super.showSelectionInfo(player);
afterSelectionUpdate(player); }
}
@Override @Override
public void showSelectionInfo(Player player) { public void sky(final Player player, final boolean resadmin) {
this.worldEdit(player); this.worldEdit(player);
super.showSelectionInfo(player); super.sky(player, resadmin);
} afterSelectionUpdate(player);
}
@Override
public boolean worldEdit(final Player player) {
final WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit");
final Selection sel = wep.getSelection(player);
if (sel != null) {
Location pos1 = sel.getMinimumPoint();
Location pos2 = sel.getMaximumPoint();
try {
final CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion();
pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ());
pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ());
} catch (final Exception e) {
}
this.playerLoc1.put(player.getName(), pos1);
this.playerLoc2.put(player.getName(), pos2);
return true;
}
return false;
}
private void afterSelectionUpdate(final Player player) {
if (hasPlacedBoth(player.getName())) {
final WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit");
final World world = playerLoc1.get(player.getName()).getWorld();
final Selection selection = new CuboidSelection(world, playerLoc1.get(player.getName()), playerLoc2.get(player.getName()));
wep.setSelection(player, selection);
}
}
} }

View File

@@ -4,211 +4,191 @@
*/ */
package com.bekvon.bukkit.residence.text.help; package com.bekvon.bukkit.residence.text.help;
import org.bukkit.ChatColor;
import com.bekvon.bukkit.residence.Residence;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import com.bekvon.bukkit.residence.Residence;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class HelpEntry { public class HelpEntry {
protected String name; protected static int linesPerPage = 7;
protected String desc; protected String desc;
protected String[] lines; protected String[] lines;
protected List<HelpEntry> subentrys; protected String name;
protected static int linesPerPage = 7; protected List<HelpEntry> subentrys;
Residence plugin;
public HelpEntry(String entryname) public HelpEntry(final Residence plugin, final String entryname) {
{ this.plugin = plugin;
name = entryname; name = entryname;
subentrys = new ArrayList<HelpEntry>(); subentrys = new ArrayList<HelpEntry>();
lines = new String[0]; lines = new String[0];
} }
public String getName() { public static int getLinesPerPage() {
if(name==null) return linesPerPage;
return ""; }
return name;
}
public void setName(String inname) public static HelpEntry parseHelp(final Residence plugin, final FileConfiguration node, final String key) {
{ final String split[] = key.split("\\.");
name = inname; final String thisname = split[split.length - 1];
} final HelpEntry entry = new HelpEntry(plugin, thisname);
final ConfigurationSection keysnode = node.getConfigurationSection(key);
Set<String> keys = null;
if (keysnode != null) {
keys = keysnode.getKeys(false);
}
if (keys != null) {
if (keys.contains("Info")) {
final List<String> stringList = node.getStringList(key + ".Info");
if (stringList != null) {
entry.lines = new String[stringList.size()];
for (int i = 0; i < stringList.size(); i++) {
entry.lines[i] = "- " + stringList.get(i);
}
}
}
if (keys.contains("Description")) {
entry.desc = node.getString(key + ".Description");
}
if (keys.contains("SubCommands")) {
final Set<String> subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false);
for (final String subkey : subcommandkeys) {
entry.subentrys.add(HelpEntry.parseHelp(plugin, node, key + ".SubCommands." + subkey));
}
}
}
return entry;
}
public void setDescription(String description) public static void setLinesPerPage(final int lines) {
{ linesPerPage = lines;
desc = description; }
}
public String getDescription()
{
if(desc==null)
return "";
return desc;
}
public static int getLinesPerPage() public void addSubEntry(final HelpEntry entry) {
{ if (!subentrys.contains(entry)) {
return linesPerPage; subentrys.add(entry);
} }
}
public static void setLinesPerPage(int lines) public boolean containesEntry(final String name) {
{ return this.getSubEntry(name) != null;
linesPerPage = lines; }
}
public void printHelp(CommandSender sender, int page) { public String getDescription() {
List<String> helplines = this.getHelpData(); if (desc == null) {
int pagecount = (int) Math.ceil((double)helplines.size() / (double)linesPerPage); return "";
if (page > pagecount || page < 1) { }
sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidHelp")); return desc;
return; }
}
sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("HelpPageHeader",ChatColor.YELLOW + name + ChatColor.RED+"."+ChatColor.YELLOW + page + ChatColor.RED+"."+ChatColor.YELLOW + pagecount + ChatColor.RED));
sender.sendMessage(ChatColor.DARK_AQUA+Residence.getLanguage().getPhrase("Description")+": "+ChatColor.GREEN + desc);
int start = linesPerPage * (page - 1);
int end = start + linesPerPage;
boolean alternatecolor = false;
for (int i = start; i < end; i++) {
if (helplines.size() > i) {
if(alternatecolor)
{
sender.sendMessage(ChatColor.YELLOW+helplines.get(i));
alternatecolor = false;
}
else
{
sender.sendMessage(ChatColor.GOLD+helplines.get(i));
alternatecolor = true;
}
}
}
if(page<pagecount)
sender.sendMessage(ChatColor.GRAY+"---<"+Residence.getLanguage().getPhrase("NextPage")+">---");
else
sender.sendMessage(ChatColor.GRAY+"-----------------------");
}
public void printHelp(CommandSender sender, int page, String path) public String getName() {
{ if (name == null) {
HelpEntry subEntry = this.getSubEntry(path); return "";
if(subEntry!=null) }
{ return name;
subEntry.printHelp(sender, page); }
}
else
{
sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidHelp"));
}
}
private List<String> getHelpData() public HelpEntry getSubEntry(final String name) {
{ final String[] split = name.split("\\.");
List<String> helplines = new ArrayList<String>(); HelpEntry entry = this;
helplines.addAll(Arrays.asList(lines)); for (final String entryname : split) {
if(subentrys.size()>0) entry = entry.findSubEntry(entryname);
helplines.add(ChatColor.LIGHT_PURPLE+"---"+Residence.getLanguage().getPhrase("SubCommands")+"---"); if (entry == null) {
for(HelpEntry entry : subentrys) return null;
{ }
helplines.add(ChatColor.GREEN+entry.getName() + ChatColor.YELLOW+" - " + entry.getDescription()); }
} return entry;
return helplines; }
}
public boolean containesEntry(String name) public int getSubEntryCount() {
{ return subentrys.size();
return this.getSubEntry(name)!=null; }
}
public HelpEntry getSubEntry(String name) public void printHelp(final CommandSender sender, final int page) {
{ final List<String> helplines = this.getHelpData();
String[] split = name.split("\\."); final int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage);
HelpEntry entry = this; if (page > pagecount || page < 1) {
for(String entryname : split) sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidHelp"));
{ return;
entry = entry.findSubEntry(entryname); }
if(entry == null) sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("HelpPageHeader",
return null; ChatColor.YELLOW + name + ChatColor.RED + "." + ChatColor.YELLOW + page + ChatColor.RED + "." + ChatColor.YELLOW + pagecount + ChatColor.RED));
} sender.sendMessage(ChatColor.DARK_AQUA + plugin.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc);
return entry; final int start = linesPerPage * (page - 1);
} final int end = start + linesPerPage;
boolean alternatecolor = false;
for (int i = start; i < end; i++) {
if (helplines.size() > i) {
if (alternatecolor) {
sender.sendMessage(ChatColor.YELLOW + helplines.get(i));
alternatecolor = false;
} else {
sender.sendMessage(ChatColor.GOLD + helplines.get(i));
alternatecolor = true;
}
}
}
if (page < pagecount) {
sender.sendMessage(ChatColor.GRAY + "---<" + plugin.getLanguage().getPhrase("NextPage") + ">---");
} else {
sender.sendMessage(ChatColor.GRAY + "-----------------------");
}
}
private HelpEntry findSubEntry(String name) public void printHelp(final CommandSender sender, final int page, final String path) {
{ final HelpEntry subEntry = this.getSubEntry(path);
for(HelpEntry entry : subentrys) if (subEntry != null) {
{ subEntry.printHelp(sender, page);
if(entry.getName().equalsIgnoreCase(name)) } else {
return entry; sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidHelp"));
} }
return null; }
}
public void addSubEntry(HelpEntry entry) public void removeSubEntry(final HelpEntry entry) {
{ if (subentrys.contains(entry)) {
if(!subentrys.contains(entry)) subentrys.remove(entry);
{ }
subentrys.add(entry); }
}
}
public void removeSubEntry(HelpEntry entry) public void setDescription(final String description) {
{ desc = description;
if(subentrys.contains(entry)) }
{
subentrys.remove(entry);
}
}
public int getSubEntryCount() public void setName(final String inname) {
{ name = inname;
return subentrys.size(); }
}
public static HelpEntry parseHelp(FileConfiguration node, String key) private HelpEntry findSubEntry(final String name) {
{ for (final HelpEntry entry : subentrys) {
String split[] = key.split("\\."); if (entry.getName().equalsIgnoreCase(name)) {
String thisname = split[split.length-1]; return entry;
HelpEntry entry = new HelpEntry(thisname); }
ConfigurationSection keysnode = node.getConfigurationSection(key); }
Set<String> keys = null; return null;
if(keysnode!=null) }
keys = keysnode.getKeys(false);
if(keys!=null) private List<String> getHelpData() {
{ final List<String> helplines = new ArrayList<String>();
if(keys.contains("Info")) helplines.addAll(Arrays.asList(lines));
{ if (subentrys.size() > 0) {
List<String> stringList = node.getStringList(key + ".Info"); helplines.add(ChatColor.LIGHT_PURPLE + "---" + plugin.getLanguage().getPhrase("SubCommands") + "---");
if(stringList != null) }
{ for (final HelpEntry entry : subentrys) {
entry.lines = new String[stringList.size()]; helplines.add(ChatColor.GREEN + entry.getName() + ChatColor.YELLOW + " - " + entry.getDescription());
for(int i = 0; i < stringList.size(); i++) }
{ return helplines;
entry.lines[i] = "- " + stringList.get(i); }
}
}
}
if(keys.contains("Description"))
{
entry.desc = node.getString(key + ".Description");
}
if(keys.contains("SubCommands"))
{
Set<String> subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false);
for(String subkey : subcommandkeys)
{
entry.subentrys.add(HelpEntry.parseHelp(node, key+".SubCommands."+subkey));
}
}
}
return entry;
}
} }

View File

@@ -4,58 +4,59 @@
*/ */
package com.bekvon.bukkit.residence.text.help; package com.bekvon.bukkit.residence.text.help;
import org.bukkit.ChatColor;
import com.bekvon.bukkit.residence.Residence;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.bekvon.bukkit.residence.Residence;
/** /**
* *
* @author Administrator * @author Administrator
*/ */
public class InformationPager { public class InformationPager {
public static int linesPerPage=7;
public static int getLinesPerPage() public static int linesPerPage = 7;
{
return linesPerPage;
}
public static void setLinesPerPage(int lines) public static int getLinesPerPage() {
{ return linesPerPage;
linesPerPage = lines; }
}
public static void printInfo(CommandSender sender, String title, String[] lines, int page) public static void printInfo(final Residence plugin, final CommandSender sender, final String title, final List<String> lines, final int page) {
{ final int perPage = 6;
InformationPager.printInfo(sender, title, Arrays.asList(lines), page); final int start = (page - 1) * perPage;
} final int end = start + perPage;
int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage);
if (pagecount == 0) {
pagecount = 1;
}
if (page > pagecount) {
sender.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidPage"));
return;
}
sender.sendMessage(ChatColor.YELLOW + "---<" + ChatColor.GREEN + title + ChatColor.YELLOW + ">---");
sender.sendMessage(ChatColor.YELLOW + "---<"
+ plugin.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String.format("%d", page) + ChatColor.YELLOW + "." + ChatColor.GREEN + pagecount + ChatColor.YELLOW) + ">---");
for (int i = start; i < end; i++) {
if (lines.size() > i) {
sender.sendMessage(ChatColor.GREEN + lines.get(i));
}
}
if (pagecount > page) {
sender.sendMessage(ChatColor.GRAY + "---<" + plugin.getLanguage().getPhrase("NextPage") + ">---");
} else {
sender.sendMessage(ChatColor.GRAY + "-----------------------");
}
}
public static void printInfo(CommandSender sender, String title, List<String> lines, int page) { public static void printInfo(final Residence plugin, final CommandSender sender, final String title, final String[] lines, final int page) {
int perPage = 6; InformationPager.printInfo(plugin, sender, title, Arrays.asList(lines), page);
int start = (page-1) * perPage; }
int end = start + perPage;
int pagecount = (int) Math.ceil((double)lines.size()/(double)perPage); public static void setLinesPerPage(final int lines) {
if(pagecount == 0) linesPerPage = lines;
pagecount = 1; }
if(page>pagecount)
{
sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidPage"));
return;
}
sender.sendMessage(ChatColor.YELLOW+"---<"+ChatColor.GREEN+title+ChatColor.YELLOW+">---");
sender.sendMessage(ChatColor.YELLOW+"---<"+Residence.getLanguage().getPhrase("GenericPage",ChatColor.GREEN+String.format("%d",page)+ChatColor.YELLOW+"."+ChatColor.GREEN+pagecount+ChatColor.YELLOW)+">---");
for(int i = start; i < end; i ++)
{
if(lines.size()>i)
sender.sendMessage(ChatColor.GREEN+lines.get(i));
}
if(pagecount>page)
sender.sendMessage(ChatColor.GRAY+"---<"+Residence.getLanguage().getPhrase("NextPage")+">---");
else
sender.sendMessage(ChatColor.GRAY+"-----------------------");
}
} }

View File

@@ -12,52 +12,68 @@ import java.util.zip.Deflater;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Residence;
public class DataBackup { public class DataBackup {
private File BackupDir = new File(Residence.getDataLocation(), "Backup"); private final File BackupDir;
public static void run() throws IOException { Residence plugin;
DataBackup backup = new DataBackup();
public DataBackup(final Residence plugin) {
this.plugin = plugin;
BackupDir = new File(plugin.getDataLocation(), "Backup");
}
public static void run(final Residence plugin) throws IOException {
final DataBackup backup = new DataBackup(plugin);
backup.backup(); backup.backup();
} }
public void backup() throws IOException { public void backup() throws IOException {
try { try {
BackupDir.mkdir(); BackupDir.mkdir();
Date date = new Date(); final Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip"); final File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip");
// Create the Source List, and add directories/etc to the file. // Create the Source List, and add directories/etc to the file.
List<File> sources = new ArrayList<File>(); final List<File> sources = new ArrayList<File>();
File saveFolder = new File(Residence.getDataLocation(), "Save"); final File saveFolder = new File(plugin.getDataLocation(), "Save");
File worldFolder = new File(saveFolder, "Worlds"); final File worldFolder = new File(saveFolder, "Worlds");
if (!saveFolder.isDirectory()) { if (!saveFolder.isDirectory()) {
return; return;
} }
File saveFile; File saveFile;
for (World world : Residence.getServ().getWorlds()) { for (final World world : Bukkit.getServer().getWorlds()) {
saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); saveFile = new File(worldFolder, "res_" + world.getName() + ".yml");
if (saveFile.isFile()) { if (saveFile.isFile()) {
sources.add(saveFile); sources.add(saveFile);
} }
} }
packZip(fileZip, sources); packZip(fileZip, sources);
} catch (Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
return; return;
} }
} }
private void packZip(File output, List<File> sources) throws IOException { private String buildPath(final String path, final String file) {
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); if (path == null || path.isEmpty()) {
return file;
}
return path + File.separator + file;
}
private void packZip(final File output, final List<File> sources) throws IOException {
final ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output));
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
for (File source : sources) { for (final File source : sources) {
if (source.isDirectory()) { if (source.isDirectory()) {
zipDir(zipOut, "", source); zipDir(zipOut, "", source);
} else { } else {
@@ -69,23 +85,15 @@ public class DataBackup {
zipOut.close(); zipOut.close();
} }
private String buildPath(String path, String file) { private void zipDir(final ZipOutputStream zos, String path, final File dir) throws IOException {
if (path == null || path.isEmpty()) {
return file;
}
return path + File.separator + file;
}
private void zipDir(ZipOutputStream zos, String path, File dir) throws IOException {
if (!dir.canRead()) { if (!dir.canRead()) {
return; return;
} }
File[] files = dir.listFiles(); final File[] files = dir.listFiles();
path = buildPath(path, dir.getName()); path = buildPath(path, dir.getName());
for (File source : files) { for (final File source : files) {
if (source.isDirectory()) { if (source.isDirectory()) {
zipDir(zos, path, source); zipDir(zos, path, source);
} else { } else {
@@ -94,15 +102,15 @@ public class DataBackup {
} }
} }
private void zipFile(ZipOutputStream zos, String path, File file) throws IOException { private void zipFile(final ZipOutputStream zos, final String path, final File file) throws IOException {
if (!file.canRead()) { if (!file.canRead()) {
return; return;
} }
zos.putNextEntry(new ZipEntry(buildPath(path, file.getName()))); zos.putNextEntry(new ZipEntry(buildPath(path, file.getName())));
FileInputStream fis = new FileInputStream(file); final FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[4092]; final byte[] buffer = new byte[4092];
int byteCount = 0; int byteCount = 0;
while ((byteCount = fis.read(buffer)) != -1) { while ((byteCount = fis.read(buffer)) != -1) {

View File

@@ -164,8 +164,8 @@ Language:
SubzoneOwnerChange: 分区 %1 所有者改为 %2 SubzoneOwnerChange: 分区 %1 所有者改为 %2
CoordsTop: X:%1 Y:%2 Z:%3 CoordsTop: X:%1 Y:%2 Z:%3
CoordsBottom: X:%1 Y:%2 Z:%3 CoordsBottom: X:%1 Y:%2 Z:%3
AdminToggle: Automatic resadmin toggle turned %1 AdminToggle: 自动使用resadmin模式切换为 %1
NoSpawn: You do not have move permissions at your spawn point. Relocating NoSpawn: 你没有移动到Spawn的权限. Relocating
CompassTargetReset: 你的指南针指向已重置 CompassTargetReset: 你的指南针指向已重置
CompassTargetSet: 你的指南针现在指向领地 %1 CompassTargetSet: 你的指南针现在指向领地 %1
Description: 描述 Description: 描述
@@ -250,27 +250,27 @@ CommandHelp:
Description: 扩大选区. Description: 扩大选区.
Info: Info:
- '用法: /res select expand <amount>' - '用法: /res select expand <amount>'
- 根据你面朝的方向进行扩大,<amount>填写扩大的数值. - '根据你面朝的方向进行扩大,<amount>填写扩大的数值.'
shift: shift:
Description: 移动所选区域 Description: 移动所选区域
Info: Info:
- '用法: /res select shift <amount>' - '用法: /res select shift <amount>'
- 根据你面朝的方向移动选区,<amount>填写移动的格数. - '根据你面朝的方向移动选区,<amount>填写移动的格数.'
chunk: chunk:
Description: 选取你所在的Chunk区域. Description: 选取你所在的Chunk区域.
Info: Info:
- '用法: /res select chunk' - '用法: /res select chunk'
- 选择你所在的区块(16x16). - '选择你所在的区块(16x16).'
residence: residence:
Description: Select a existing area in a residence. Description: Select a existing area in a residence.
Info: Info:
- 用法 /res select <Residence> <AreaID> - '用法 /res select <Residence> <AreaID>'
- Selects a existing area in a residence. - 'Selects a existing area in a residence.'
worldedit: worldedit:
Description: 设置选区为WorldEdit的已选择区域. Description: '设置选区为WorldEdit的已选择区域.'
Info: Info:
- 用法 /res select worldedit - '用法 /res select worldedit.'
- 设置领地的选区为WorldEdit的已选择区域. - '设置领地的选区为WorldEdit的已选择区域.'
create: create:
Description: 创建领地 Description: 创建领地
Info: Info:
@@ -294,7 +294,7 @@ CommandHelp:
Description: 在某个领地里创建附属领地. Description: 在某个领地里创建附属领地.
Info: Info:
- '用法: /res subzone <领地名> [附属领地名]' - '用法: /res subzone <领地名> [附属领地名]'
- 如果领地名为空,那么将以你所在的领地为主 - '如果领地名为空,那么将以你所在的领地为主.'
area: area:
Description: 管理一个领地的物理区域. Description: 管理一个领地的物理区域.
SubCommands: SubCommands:
@@ -391,8 +391,8 @@ CommandHelp:
Info: Info:
- '用法: /res lset <residence> [blacklist/ignorelist] [material]' - '用法: /res lset <residence> [blacklist/ignorelist] [material]'
- '用法: /res lset <residence> info' - '用法: /res lset <residence> info'
- 'Blacklisting a material prevents it from being placed in the residence.' - '黑名单将在领地内被保护 当其被放置以后.'
- 'Ignorelist causes a specific material to not be protected by Residence.' - '忽略名单内的物品将不会被领地保护.'
flags: flags:
Description: 例举所有可配置属性 Description: 例举所有可配置属性
Info: Info:
@@ -413,15 +413,15 @@ CommandHelp:
- healing - 允许或禁止领地内生命回复 - healing - 允许或禁止领地内生命回复
- tnt - 允许或禁止领地内TNT爆炸 - tnt - 允许或禁止领地内TNT爆炸
- creeper - 允许或禁止领地内苦力怕爆炸 - creeper - 允许或禁止领地内苦力怕爆炸
- ignite - allows or denys fire ignition. - ignite - 允许或阻止火的生成.
- firespread - allows or denys fire spread. - firespread - 允许或阻止火的蔓延.
- bucket - 允许或禁止领地内使用桶. - bucket - 允许或禁止领地内使用桶.
- flow - 允许或禁止领地内液体流动. - flow - 允许或禁止领地内液体流动.
- lavaflow - 允许或禁止领地内岩浆流动,覆盖flow属性 - lavaflow - 允许或禁止领地内岩浆流动,覆盖flow属性
- waterflow - 允许或禁止领地内水流动,覆盖flow属性 - waterflow - 允许或禁止领地内水流动,覆盖flow属性
- damage - 允许或禁止领地内所有的实体伤害. - damage - 允许或禁止领地内所有的实体伤害.
- piston - 允许或禁止领地内活塞推动或吸方块. - piston - 允许或禁止领地内活塞推动或吸方块.
- hidden - hides residence from list or listall commands. - hidden - 从全体领地列表隐藏领地.
- cake - 允许或禁止领地内吃蛋糕 - cake - 允许或禁止领地内吃蛋糕
- lever - 允许或禁止领地内使用拉杆 - lever - 允许或禁止领地内使用拉杆
- button - 允许或禁止领地内使用按钮 - button - 允许或禁止领地内使用按钮
@@ -441,11 +441,21 @@ CommandHelp:
- '用法: /res list <player> <page>' - '用法: /res list <player> <page>'
- '列出某个玩家的所有领地.' - '列出某个玩家的所有领地.'
- '列出所有玩家的领地, 请使用 /res listall.' - '列出所有玩家的领地, 请使用 /res listall.'
listhidden:
Description: List Hidden Residences (ADMIN ONLY)
Info:
- 'Usage: /res listhidden <player> <page>'
- 'Lists hidden residences for a player.'
listall: listall:
Description: 查看所有玩家领地 Description: 查看所有玩家领地
Info: Info:
- '用法: /res listall <page>' - '用法: /res listall <page>'
- '列出所有玩家的领地.' - '列出所有玩家的领地.'
listallhidden:
Description: List All Hidden Residences (ADMIN ONLY)
Info:
- 'Usage: /res listhidden <page>'
- 'Lists all hidden residences on the server.'
sublist: sublist:
Description: 查看领地内的子区域 Description: 查看领地内的子区域
Info: Info:
@@ -459,14 +469,14 @@ CommandHelp:
rename: rename:
Description: 重命名领地. Description: 重命名领地.
Info: Info:
- '用法: /res rename [OldName] [NewName]' - '用法: /res rename [旧名称] [新名称]'
- You must be the owner or an admin to do this. - '只有领地所有者和管理员可以使用此命令.'
- The name must not already be taken by another residence. - '所更改的名称不能重复.'
mirror: mirror:
Description: 复制某个领地的属性 Description: 复制某个领地的属性
Info: Info:
- '用法: /res mirror [Source Residence] [Target Residence]' - '用法: /res mirror [源 领地] [目标 领地]'
- Mirrors flags from one residence to another. You must be owner of both or a admin to do this. - '复制 源 领地 的属性配置到 目标 领地'
market: market:
Description: 购买, 出售, 或 租借 领地 Description: 购买, 出售, 或 租借 领地
Info: Info:
@@ -513,7 +523,7 @@ CommandHelp:
- If you are the renter, this command releases the rent on the house for you. - If you are the renter, this command releases the rent on the house for you.
- If you are the owner, this command makes the residence not for rent anymore. - If you are the owner, this command makes the residence not for rent anymore.
current: current:
Description: Show residence your currently in. Description: 展示当前领地现状.
Info: Info:
- '用法: /res current' - '用法: /res current'
lists: lists:
@@ -558,17 +568,17 @@ CommandHelp:
Description: 设置某个领地的所有者(仅限管理员使用) Description: 设置某个领地的所有者(仅限管理员使用)
Info: Info:
- '用法: /resadmin setowner [领地名] [玩家]' - '用法: /resadmin setowner [领地名] [玩家]'
resreload:
Description: 重新加载插件配置(仅限管理员使用)
Info:
- '用法: /resreload'
resload:
Description: 载入已保存的配置文件 (不安全, 仅限管理员使用).
Info:
- '用法: /resload'
- UNSAFE command, does not save residences first.
- Loads the residence save file after you have made changes.
version: version:
Description: 显示领地插件的版本信息 Description: 显示领地插件的版本信息
Info: Info:
- '用法: /res version' - '用法: /res version'
resreload:
Description: 重新加载插件配置(仅限管理员使用)
Info:
- '用法: /resreload'
resload:
Description: 载入已保存的配置文件 (不安全, 仅限管理员使用).
Info:
- '用法: /resload'
- UNSAFE command, does not save residences first.
- Loads the residence save file after you have made changes.

View File

@@ -1,15 +1,15 @@
name: Residence name: ${project.artifactId}
main: com.bekvon.bukkit.residence.ResidenceCommandListener description: ${project.description}
version: 2.7.0.6 main: com.bekvon.bukkit.residence.${project.artifactId}
website: http://ci.citycraft.cn:8800/jenkins/job/Residence/ version: ${project.version}
description: Cuboid Residence Plugin website: http://ci.citycraft.cn:8800/jenkins/job/${project.artifactId}/
authors: [bekvon,nate302,t00thpick1,喵♂呜] authors: [bekvon,nate302,t00thpick1,喵♂呜]
contributors: [lemon42,smbarbour,inorixu,Shayana_fr] contributors: [lemon42,smbarbour,inorixu,Shayana_fr]
softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit] softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit]
commands: commands:
residence: residence:
description: 管理领地. description: 管理领地.
aliese: [res] aliases: [res]
usage: §c使用/res ? 或 /residence ? 或 /resadmin ? 获取更多帮助. usage: §c使用/res ? 或 /residence ? 或 /resadmin ? 获取更多帮助.
resadmin: resadmin:
description: 管理员命令 管理领地. description: 管理员命令 管理领地.