TF-EssentialsX/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java

91 lines
3.7 KiB
Java
Raw Normal View History

package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.LocationUtil;
2013-06-08 21:31:19 +00:00
import com.earth2me.essentials.utils.NumberUtil;
import org.bukkit.Location;
2011-11-18 17:42:26 +00:00
import org.bukkit.Server;
import java.util.Collections;
import java.util.List;
2015-04-15 04:06:16 +00:00
import java.util.Locale;
import java.util.concurrent.TimeUnit;
2015-04-15 04:06:16 +00:00
import static com.earth2me.essentials.I18n.tl;
2015-04-15 04:06:16 +00:00
public class Commandsethome extends EssentialsCommand {
public Commandsethome() {
super("sethome");
}
2015-04-15 04:06:16 +00:00
@Override
public void run(final Server server, final User user, final String commandLabel, String[] args) throws Exception {
User usersHome = user;
String name = "home";
2015-04-15 04:06:16 +00:00
if (args.length > 0) {
//Allowing both formats /sethome khobbits house | /sethome khobbits:house
final String[] nameParts = args[0].split(":");
if (nameParts[0].length() != args[0].length()) {
args = nameParts;
}
2015-04-15 04:06:16 +00:00
if (args.length < 2) {
name = args[0].toLowerCase(Locale.ENGLISH);
} else {
name = args[1].toLowerCase(Locale.ENGLISH);
if (user.isAuthorized("essentials.sethome.others")) {
usersHome = getPlayer(server, args[0], true, true);
if (usersHome == null) {
throw new PlayerNotFoundException();
}
}
}
}
if (checkHomeLimit(user, usersHome, name)) {
name = "home";
}
if ("bed".equals(name) || NumberUtil.isInt(name)) {
throw new NoSuchFieldException(tl("invalidHomeName"));
}
final Location location = user.getLocation();
2015-04-15 04:06:16 +00:00
if (!ess.getSettings().isTeleportSafetyEnabled() && LocationUtil.isBlockUnsafeForUser(usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ())) {
throw new Exception(tl("unsafeTeleportDestination", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ()));
}
if (ess.getSettings().isConfirmHomeOverwrite() && usersHome.hasHome(name) && (!name.equals(usersHome.getLastHomeConfirmation()) || name.equals(usersHome.getLastHomeConfirmation()) && System.currentTimeMillis() - usersHome.getLastHomeConfirmationTimestamp() > TimeUnit.MINUTES.toMillis(2))) {
usersHome.setLastHomeConfirmation(name);
usersHome.setLastHomeConfirmationTimestamp();
user.sendMessage(tl("homeConfirmation", name));
return;
}
2015-04-15 04:06:16 +00:00
usersHome.setHome(name, location);
user.sendMessage(tl("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ(), name));
usersHome.setLastHomeConfirmation(null);
2011-06-28 09:13:18 +00:00
2015-04-15 04:06:16 +00:00
}
2015-04-15 04:06:16 +00:00
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(tl("maxHomes", ess.getSettings().getHomeLimit(user)));
}
return limit == 1;
2015-04-15 04:06:16 +00:00
}
return false;
}
@Override
protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) {
return Collections.emptyList();
}
}