mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2025-11-25 21:56:06 +00:00
@@ -5,14 +5,6 @@
|
||||
|
||||
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.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -21,8 +13,15 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
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
|
||||
@@ -32,64 +31,125 @@ public class LeaseManager {
|
||||
private Map<String, Long> leaseExpireTime;
|
||||
|
||||
ResidenceManager manager;
|
||||
Residence plugin;
|
||||
|
||||
public LeaseManager(ResidenceManager m) {
|
||||
public LeaseManager(final Residence plugin, final ResidenceManager m) {
|
||||
this.plugin = plugin;
|
||||
manager = m;
|
||||
leaseExpireTime = Collections
|
||||
.synchronizedMap(new HashMap<String, Long>());
|
||||
leaseExpireTime = Collections.synchronizedMap(new HashMap<String, Long>());
|
||||
}
|
||||
|
||||
public boolean leaseExpires(String area) {
|
||||
return leaseExpireTime.containsKey(area);
|
||||
public static LeaseManager load(final Residence plugin, final Map<String, Long> root, final ResidenceManager m) {
|
||||
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)) {
|
||||
return new Date(leaseExpireTime.get(area));
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
public void setExpireTime(String area, int days) {
|
||||
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) {
|
||||
public void renewArea(final String area, final Player player) {
|
||||
if (!leaseExpires(area)) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("LeaseNotExpire"));
|
||||
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("LeaseNotExpire"));
|
||||
return;
|
||||
}
|
||||
PermissionGroup limits = Residence.getPermissionManager().getGroup(
|
||||
player);
|
||||
int max = limits.getMaxLeaseTime();
|
||||
int add = limits.getLeaseGiveTime();
|
||||
int rem = daysRemaining(area);
|
||||
EconomyInterface econ = Residence.getEconomyManager();
|
||||
final PermissionGroup limits = plugin.getPermissionManager().getGroup(player);
|
||||
final int max = limits.getMaxLeaseTime();
|
||||
final int add = limits.getLeaseGiveTime();
|
||||
final int rem = daysRemaining(area);
|
||||
final EconomyInterface econ = plugin.getEconomyManager();
|
||||
if (econ != null) {
|
||||
double cost = limits.getLeaseRenewCost();
|
||||
ClaimedResidence res = manager.getByName(area);
|
||||
int amount = (int) Math.ceil((double) res.getTotalSize() * cost);
|
||||
final double cost = limits.getLeaseRenewCost();
|
||||
final ClaimedResidence res = manager.getByName(area);
|
||||
final int amount = (int) Math.ceil(res.getTotalSize() * cost);
|
||||
if (cost != 0D) {
|
||||
// Account account =
|
||||
// iConomy.getBank().getAccount(player.getName());
|
||||
@@ -99,156 +159,38 @@ public class LeaseManager {
|
||||
*/) {
|
||||
econ.subtract(player.getName(), amount);
|
||||
econ.add("Lease Money", amount);
|
||||
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 + plugin.getLanguage().getPhrase("MoneyCharged",
|
||||
ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN));
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase(
|
||||
"NotEnoughMoney"));
|
||||
player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotEnoughMoney"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rem + add > max) {
|
||||
setExpireTime(player, area, max);
|
||||
player.sendMessage(ChatColor.GOLD
|
||||
+ Residence.getLanguage().getPhrase("LeaseRenewMax"));
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ Residence.getLanguage().getPhrase("LeaseRenew",
|
||||
ChatColor.GREEN + "" + getExpireTime(area))
|
||||
+ ChatColor.YELLOW);
|
||||
player.sendMessage(ChatColor.GOLD + plugin.getLanguage().getPhrase("LeaseRenewMax"));
|
||||
player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area)) + ChatColor.YELLOW);
|
||||
return;
|
||||
}
|
||||
Long get = leaseExpireTime.get(area);
|
||||
if (get != null) {
|
||||
get = get + daysToMs(add);
|
||||
leaseExpireTime.put(area, get);
|
||||
} else
|
||||
} else {
|
||||
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() {
|
||||
leaseExpireTime.clear();
|
||||
String[] list = manager.getResidenceList();
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
if (list[i] != null) {
|
||||
ClaimedResidence res = Residence.getResidenceManager()
|
||||
.getByName(list[i]);
|
||||
PermissionGroup group = Residence.getPermissionManager()
|
||||
.getGroup(res.getPermissions().getOwner(),
|
||||
res.getPermissions().getWorld());
|
||||
this.setExpireTime(null, list[i], group.getLeaseGiveTime());
|
||||
final String[] list = manager.getResidenceList();
|
||||
for (final String element : list) {
|
||||
if (element != null) {
|
||||
final ClaimedResidence res = plugin.getResidenceManager().getByName(element);
|
||||
final PermissionGroup group = plugin.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld());
|
||||
this.setExpireTime(null, element, group.getLeaseGiveTime());
|
||||
}
|
||||
}
|
||||
System.out.println("[Residence] - Set default leases.");
|
||||
@@ -258,23 +200,44 @@ public class LeaseManager {
|
||||
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)) {
|
||||
leaseExpireTime.put(newName, leaseExpireTime.get(oldName));
|
||||
leaseExpireTime.remove(oldName);
|
||||
}
|
||||
}
|
||||
|
||||
public static LeaseManager load(Map<String, Long> root, ResidenceManager m) {
|
||||
LeaseManager l = new LeaseManager(m);
|
||||
if (root != null) {
|
||||
for (Object val : root.values()) {
|
||||
if (!(val instanceof Long)) {
|
||||
root.remove(val);
|
||||
}
|
||||
}
|
||||
l.leaseExpireTime = Collections.synchronizedMap(root);
|
||||
private int daysRemaining(final String area) {
|
||||
final Long get = leaseExpireTime.get(area);
|
||||
if (get <= System.currentTimeMillis()) {
|
||||
return 0;
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user