mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2025-11-24 21:46:16 +00:00
168 lines
5.4 KiB
Java
168 lines
5.4 KiB
Java
package com.bekvon.bukkit.residence.commandsub;
|
|
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandException;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import com.bekvon.bukkit.residence.Residence;
|
|
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
|
|
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
|
|
import com.bekvon.bukkit.residence.protection.CuboidArea;
|
|
import com.bekvon.bukkit.residence.protection.ResidenceManager;
|
|
import com.bekvon.bukkit.residence.selection.SelectionManager;
|
|
import com.bekvon.bukkit.residence.text.Language;
|
|
|
|
import cn.citycraft.PluginHelper.commands.BaseCommand;
|
|
|
|
public class CommandSelect extends BaseCommand {
|
|
Residence plugin;
|
|
|
|
public CommandSelect(final Residence plugin) {
|
|
super("select");
|
|
this.plugin = plugin;
|
|
setMinimumArguments(1);
|
|
setOnlyPlayerExecutable(true);
|
|
setPossibleArguments("请使用/res select ? 查看帮助");
|
|
setPermission("residence.select");
|
|
}
|
|
|
|
@Override
|
|
public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
|
|
final Player player = (Player) sender;
|
|
final boolean resadmin = (command != null);
|
|
final ResidenceManager rmanager = plugin.getResidenceManager();
|
|
final Language language = plugin.getLanguage();
|
|
final PermissionGroup group = plugin.getPermissionManager().getGroup(player);
|
|
final SelectionManager smanager = plugin.getSelectionManager();
|
|
|
|
if (!group.selectCommandAccess() && !resadmin) {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled"));
|
|
return;
|
|
}
|
|
if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled"));
|
|
return;
|
|
}
|
|
|
|
final String subcmd = args[0];
|
|
switch (args.length) {
|
|
case 1:
|
|
switch (subcmd) {
|
|
case "size":
|
|
case "cost":
|
|
if (smanager.hasPlacedBoth(player.getName())) {
|
|
try {
|
|
smanager.showSelectionInfo(player);
|
|
return;
|
|
} catch (final Exception ex) {
|
|
Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex);
|
|
return;
|
|
}
|
|
} else if (smanager.worldEdit(player)) {
|
|
try {
|
|
smanager.showSelectionInfo(player);
|
|
return;
|
|
} catch (final Exception ex) {
|
|
Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
case "vert":
|
|
smanager.vert(player, resadmin);
|
|
return;
|
|
case "sky":
|
|
smanager.sky(player, resadmin);
|
|
return;
|
|
case "bedrock":
|
|
smanager.bedrock(player, resadmin);
|
|
return;
|
|
case "coords":
|
|
final Location playerLoc1 = smanager.getPlayerLoc1(player.getName());
|
|
if (playerLoc1 != null) {
|
|
player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + playerLoc1.getBlockY() + ", "
|
|
+ playerLoc1.getBlockZ() + ")");
|
|
}
|
|
final Location playerLoc2 = smanager.getPlayerLoc2(player.getName());
|
|
if (playerLoc2 != null) {
|
|
player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + playerLoc2.getBlockY() + ", "
|
|
+ playerLoc2.getBlockZ() + ")");
|
|
}
|
|
return;
|
|
case "chunk":
|
|
smanager.selectChunk(player);
|
|
return;
|
|
case "worldedit":
|
|
if (smanager.worldEdit(player)) {
|
|
player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectionSuccess"));
|
|
}
|
|
return;
|
|
}
|
|
return;
|
|
case 2:
|
|
int amount;
|
|
try {
|
|
amount = Integer.parseInt(args[1]);
|
|
} catch (final Exception ex) {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount"));
|
|
return;
|
|
}
|
|
switch (subcmd) {
|
|
case "expand":
|
|
smanager.modify(player, false, amount);
|
|
return;
|
|
case "shift":
|
|
smanager.modify(player, true, amount);
|
|
return;
|
|
}
|
|
return;
|
|
case 3:
|
|
try {
|
|
smanager.selectBySize(player, Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]));
|
|
} catch (final Exception ex) {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail"));
|
|
}
|
|
return;
|
|
default:
|
|
if (args.length > 0) {
|
|
String resName;
|
|
String areaName;
|
|
ClaimedResidence res = null;
|
|
if (args.length > 1) {
|
|
res = rmanager.getByName(args[0]);
|
|
} else {
|
|
res = rmanager.getByLoc(player.getLocation());
|
|
}
|
|
if (res == null) {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
|
|
return;
|
|
}
|
|
resName = res.getName();
|
|
CuboidArea area = null;
|
|
if (args.length > 2) {
|
|
area = res.getArea(args[1]);
|
|
areaName = args[1];
|
|
} else {
|
|
areaName = res.getAreaIDbyLoc(player.getLocation());
|
|
area = res.getArea(areaName);
|
|
}
|
|
if (area != null) {
|
|
smanager.placeLoc1(player, area.getHighLoc());
|
|
smanager.placeLoc2(player, area.getLowLoc());
|
|
player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + ChatColor.GREEN));
|
|
} else {
|
|
player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist"));
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|