mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2026-05-01 21:31:38 +00:00
2
pom.xml
2
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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初始化完毕!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 + " 语言文件...");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 控制台.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 + "当前命令必须从控制台执行.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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("------------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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+"-----------------------");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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: 管理员命令 管理领地.
|
||||||
|
|||||||
Reference in New Issue
Block a user