mirror of
https://github.com/EssentialsX/Essentials.git
synced 2025-02-03 05:51:22 +01:00
Fix Essentials /sethome to more strictly obey home limits.
This commit is contained in:
parent
cc0a65bace
commit
a2886d76d2
@ -54,19 +54,21 @@ public class Settings implements ISettings
|
||||
@Override
|
||||
public int getHomeLimit(final User user)
|
||||
{
|
||||
final Set<String> homeList = getMultipleHomes();
|
||||
if (homeList == null)
|
||||
int limit = 1;
|
||||
if (user.isAuthorized("essentials.sethome.multiple"))
|
||||
{
|
||||
//TODO: Replace this code to remove backwards compat, after settings are automatically updated
|
||||
// return getHomeLimit("default");
|
||||
return config.getInt("multiple-homes", 5);
|
||||
limit = getHomeLimit("default");
|
||||
}
|
||||
int limit = getHomeLimit("default");
|
||||
for (String set : homeList)
|
||||
|
||||
final Set<String> homeList = getMultipleHomes();
|
||||
if (homeList != null)
|
||||
{
|
||||
if (user.isAuthorized("essentials.sethome.multiple." + set) && (limit < getHomeLimit(set)))
|
||||
for (String set : homeList)
|
||||
{
|
||||
limit = getHomeLimit(set);
|
||||
if (user.isAuthorized("essentials.sethome.multiple." + set) && (limit < getHomeLimit(set)))
|
||||
{
|
||||
limit = getHomeLimit(set);
|
||||
}
|
||||
}
|
||||
}
|
||||
return limit;
|
||||
@ -530,7 +532,6 @@ public class Settings implements ISettings
|
||||
}
|
||||
return newSigns;
|
||||
}
|
||||
|
||||
private boolean warnOnBuildDisallow;
|
||||
|
||||
private boolean _warnOnBuildDisallow()
|
||||
|
@ -248,16 +248,6 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
|
||||
return getHome(getHomes().get(0));
|
||||
}
|
||||
|
||||
public void setHome()
|
||||
{
|
||||
setHome("home", getLocation());
|
||||
}
|
||||
|
||||
public void setHome(final String name)
|
||||
{
|
||||
setHome(name, getLocation());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLastLocation()
|
||||
{
|
||||
|
@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.User;
|
||||
import java.util.Locale;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Server;
|
||||
|
||||
|
||||
@ -16,6 +17,10 @@ public class Commandsethome extends EssentialsCommand
|
||||
@Override
|
||||
public void run(final Server server, final User user, final String commandLabel, String[] args) throws Exception
|
||||
{
|
||||
User usersHome = user;
|
||||
String name = "home";
|
||||
final Location location = user.getLocation();
|
||||
|
||||
if (args.length > 0)
|
||||
{
|
||||
//Allowing both formats /sethome khobbits house | /sethome khobbits:house
|
||||
@ -27,33 +32,13 @@ public class Commandsethome extends EssentialsCommand
|
||||
|
||||
if (args.length < 2)
|
||||
{
|
||||
if (user.isAuthorized("essentials.sethome.multiple"))
|
||||
{
|
||||
if ("bed".equals(args[0].toLowerCase(Locale.ENGLISH)))
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
if ((user.isAuthorized("essentials.sethome.multiple.unlimited")) || (user.getHomes().size() < ess.getSettings().getHomeLimit(user))
|
||||
|| (user.getHomes().contains(args[0].toLowerCase(Locale.ENGLISH))))
|
||||
{
|
||||
user.setHome(args[0].toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(_("maxHomes", ess.getSettings().getHomeLimit(user)));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(_("maxHomes", 1));
|
||||
}
|
||||
name = args[0].toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (user.isAuthorized("essentials.sethome.others"))
|
||||
{
|
||||
User usersHome = ess.getUser(ess.getServer().getPlayer(args[0]));
|
||||
usersHome = ess.getUser(ess.getServer().getPlayer(args[0]));
|
||||
if (usersHome == null)
|
||||
{
|
||||
usersHome = ess.getOfflineUser(args[0]);
|
||||
@ -62,24 +47,41 @@ public class Commandsethome extends EssentialsCommand
|
||||
{
|
||||
throw new Exception(_("playerNotFound"));
|
||||
}
|
||||
String name = args[1].toLowerCase(Locale.ENGLISH);
|
||||
if (!user.isAuthorized("essentials.sethome.multiple"))
|
||||
{
|
||||
name = "home";
|
||||
}
|
||||
if ("bed".equals(name.toLowerCase(Locale.ENGLISH)))
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
usersHome.setHome(name, user.getLocation());
|
||||
name = args[1].toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (checkHomeLimit(user, usersHome, name))
|
||||
{
|
||||
user.setHome();
|
||||
name = "home";
|
||||
}
|
||||
if ("bed".equals(name))
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
usersHome.setHome(name, location);
|
||||
user.sendMessage(_("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ()));
|
||||
|
||||
}
|
||||
|
||||
private boolean checkHomeLimit(final User user, final User usersHome, String name) throws Exception
|
||||
{
|
||||
if (!user.isAuthorized("essentials.sethome.multiple.unlimited"))
|
||||
{
|
||||
int limit = ess.getSettings().getHomeLimit(user);
|
||||
if (usersHome.getHomes().size() == limit && usersHome.getHomes().contains(name))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (usersHome.getHomes().size() >= limit)
|
||||
{
|
||||
throw new Exception(_("maxHomes", ess.getSettings().getHomeLimit(user)));
|
||||
}
|
||||
if (limit == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ public class UserTest extends TestCase
|
||||
{
|
||||
User user = ess.getUser(base1);
|
||||
Location loc = base1.getLocation();
|
||||
user.setHome();
|
||||
user.setHome("home", loc);
|
||||
OfflinePlayer base2 = server.createPlayer(base1.getName(), ess);
|
||||
User user2 = ess.getUser(base2);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user