V10Lift/src/main/lombok/nl/SBDeveloper/V10Lift/commands/V10LiftCommand.java
stijnb1234 4e9ac799a2 General cleanup
- Moved XSeries to Maven
- Updated UpdateManager
- New ConfigUpdater
2021-04-07 10:41:01 +02:00

1133 lines
48 KiB
Java

package nl.SBDeveloper.V10Lift.commands;
import com.cryptomorin.xseries.XMaterial;
import nl.SBDeveloper.V10Lift.V10LiftPlugin;
import nl.SBDeveloper.V10Lift.api.objects.Floor;
import nl.SBDeveloper.V10Lift.api.objects.Lift;
import nl.SBDeveloper.V10Lift.api.objects.LiftBlock;
import nl.SBDeveloper.V10Lift.api.objects.LiftSign;
import nl.SBDeveloper.V10Lift.managers.DataManager;
import nl.SBDeveloper.V10Lift.managers.VaultManager;
import nl.SBDeveloper.V10Lift.sbutils.LocationSerializer;
import nl.SBDeveloper.V10Lift.utils.ConfigUtil;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import javax.annotation.Nonnull;
import java.sql.SQLException;
import java.util.*;
public class V10LiftCommand implements CommandExecutor {
@Override
public boolean onCommand(@Nonnull CommandSender sender, @Nonnull Command cmd, @Nonnull String label, @Nonnull String[] args) {
if (args.length == 0) {
//v10lift
return helpCommand(sender);
} else if (args[0].equalsIgnoreCase("info") && args.length == 1) {
//v10lift info
return infoCommand(sender);
} else if (args[0].equalsIgnoreCase("create") && (args.length == 1 || args.length == 2)) {
//v10lift create || v10lift create <Name>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return createCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("delete") && args.length == 2) {
//v10lift delete <Name>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return deleteCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("edit") && (args.length == 1 || args.length == 2)) {
//v10lift edit <Name>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return editCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("floor") && (args.length == 3 || args.length == 4)) {
//v10lift floor add <Name> || v10lift floor del <Name> || v10lift floor rename <Old> <New>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return floorCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("input") && (args.length == 2 || args.length == 3)) {
//v10lift input add <Floor name> || v10lift input del
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return inputCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("offline") && args.length == 2) {
//v10lift offline add || v10lift offline del
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return offlineCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("rename") && args.length == 2) {
//v10lift rename <New name>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return renameCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("build") && args.length == 1) {
//v10lift build
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return buildCommand(sender);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("rope") && args.length == 2) {
//v10lift rope add || v10lift rope del
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return ropeCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("door") && (args.length == 1 || args.length == 2)) {
//v10lift door <Name> || v10lift door
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return doorCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("whitelist") && (args.length == 3 || args.length == 4)) {
//v10lift whitelist add <Player> <Floor> || v10lift whitelist del <Player> <Floor>
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return whitelistCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("whois") && (args.length == 1 || args.length == 2)) {
//v10lift whois || v10lift whois <Name>
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return whoisCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("speed") && (args.length == 2 || args.length == 3)) {
//v10lift speed <Speed> [Name]
if (args.length == 2 && !(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return speedCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("sound") && args.length == 1) {
//v10lift sound
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return soundCommand(sender);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("realistic") && args.length == 1) {
//v10lift realistic
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return realisticCommand(sender);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("abort") && args.length == 1) {
//v10lift abort
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "General.PlayerOnly");
return true;
}
if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) {
return abortCommand(sender);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("reload") && args.length == 1) {
//v10lift reload
if (sender.hasPermission("v10lift.reload") || sender.hasPermission("v10lift.admin")) {
return reloadCommand(sender);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("repair") && args.length == 2) {
//v10lift repair <Name>
if (sender.hasPermission("v10lift.repair") || sender.hasPermission("v10lift.admin")) {
return repairCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("disable") && args.length == 2) {
//v10lift disable <Name>
if (sender.hasPermission("v10lift.disable") || sender.hasPermission("v10lift.admin")) {
return disableCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("start")) {
//v10lift start <Name> <Floor>
if (sender.hasPermission("v10lift.start") || sender.hasPermission("v10lift.admin")) {
return startCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else if (args[0].equalsIgnoreCase("stop")) {
//v10lift stop <Name>
if (sender.hasPermission("v10lift.stop") || sender.hasPermission("v10lift.admin")) {
return stopCommand(sender, args);
} else {
ConfigUtil.sendMessage(sender, "General.NoPermission");
}
} else {
return helpCommand(sender);
}
return true;
}
private boolean disableCommand(CommandSender sender, @Nonnull String[] args) {
String liftName = args[1];
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
if (lift.isDefective()) {
ConfigUtil.sendMessage(sender, "Disable.AlreadyDefective");
return true;
}
V10LiftPlugin.getAPI().setDefective(liftName, true);
ConfigUtil.sendMessage(sender, "Disable.Disabled");
return true;
}
private boolean stopCommand(CommandSender sender, @Nonnull String[] args) {
String liftName;
if (args.length == 1 && sender instanceof Player) {
//v10lift stop -> Get liftName from loc and floorName from sign
Player p = (Player) sender;
liftName = V10LiftPlugin.getAPI().getLiftByLocation(p.getLocation());
} else if (args.length == 1) {
ConfigUtil.sendMessage(sender, "Stop.NonPlayer");
return true;
} else {
liftName = args[1];
}
if (liftName == null || !DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
if (!lift.getQueue().isEmpty()) lift.getQueue().clear();
if (!DataManager.containsMovingTask(liftName)) {
ConfigUtil.sendMessage(sender, "Stop.NoMovingTasks", Collections.singletonMap("%Name%", liftName));
return true;
}
Bukkit.getScheduler().cancelTask(DataManager.getMovingTask(liftName));
DataManager.removeMovingTask(liftName);
ConfigUtil.sendMessage(sender, "Stop.Stopped", Collections.singletonMap("%Name%", liftName));
return true;
}
private boolean startCommand(CommandSender sender, @Nonnull String[] args) {
String liftName;
if (args.length == 1 && sender instanceof Player) {
//v10lift start -> Get liftName from loc and floorName from sign
Player p = (Player) sender;
liftName = V10LiftPlugin.getAPI().getLiftByLocation(p.getLocation());
} else if (args.length == 1) {
ConfigUtil.sendMessage(sender, "Start.NonPlayer");
return true;
} else {
liftName = args[1];
}
if (liftName == null || !DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
String floorName = null;
if (args.length == 1 || args.length == 2) {
for (LiftBlock lb : lift.getBlocks()) {
Block block = Objects.requireNonNull(Bukkit.getWorld(lb.getWorld()), "World is null at start command").getBlockAt(lb.getX(), lb.getY(), lb.getZ());
if (block.getState() instanceof Sign) {
Sign sign = (Sign) block.getState();
String f = ChatColor.stripColor(sign.getLine(3));
if (lift.getFloors().containsKey(f)) {
floorName = f;
}
}
}
} else {
floorName = args[2];
}
if (floorName == null || !lift.getFloors().containsKey(floorName)) {
if (floorName == null) floorName = "null";
ConfigUtil.sendMessage(sender, "Start.FloorDoesntExists", Collections.singletonMap("%Name%", floorName));
return true;
}
Floor f = lift.getFloors().get(floorName);
V10LiftPlugin.getAPI().addToQueue(liftName, f, floorName);
ConfigUtil.sendMessage(sender, "Start.Started", Collections.singletonMap("%Name%", liftName));
return true;
}
private boolean reloadCommand(CommandSender sender) {
for (Map.Entry<String, Lift> e : DataManager.getLifts().entrySet()) {
String lift = e.getKey();
if (DataManager.containsMovingTask(lift)) {
Bukkit.getScheduler().cancelTask(DataManager.getMovingTask(lift));
}
e.getValue().setQueue(null);
V10LiftPlugin.getAPI().sortLiftBlocks(lift);
}
DataManager.clearMovingTasks();
V10LiftPlugin.getSConfig().reloadConfig();
try {
V10LiftPlugin.getDBManager().save();
V10LiftPlugin.getDBManager().load();
} catch (SQLException e) {
e.printStackTrace();
}
ConfigUtil.sendMessage(sender, "Reload.Reloaded");
return true;
}
private boolean abortCommand(CommandSender sender) {
Player p = (Player) sender;
boolean abort = false;
if (DataManager.containsPlayer(p.getUniqueId())) {
DataManager.removePlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsWhoisREQPlayer(p.getUniqueId())) {
DataManager.removeWhoisREQPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsInputEditsPlayer(p.getUniqueId())) {
DataManager.removeInputEditsPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsInputRemovesPlayer(p.getUniqueId())) {
DataManager.removeInputRemovesPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsOfflineEditsPlayer(p.getUniqueId())) {
DataManager.removeOfflineEditsPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsOfflineRemovesPlayer(p.getUniqueId())) {
DataManager.removeOfflineRemovesPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsBuilderPlayer(p.getUniqueId())) {
DataManager.removeBuilderPlayer(p.getUniqueId());
V10LiftPlugin.getAPI().sortLiftBlocks(DataManager.getEditPlayer(p.getUniqueId()));
abort = true;
}
if (DataManager.containsRopeEditPlayer(p.getUniqueId())) {
DataManager.removeRopeEditPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsRopeRemovesPlayer(p.getUniqueId())) {
DataManager.removeRopeRemovesPlayer(p.getUniqueId());
abort = true;
}
if (DataManager.containsDoorEditPlayer(p.getUniqueId())) {
DataManager.removeDoorEditPlayer(p.getUniqueId());
abort = true;
}
if (abort) {
ConfigUtil.sendMessage(sender, "Abort.Cancelled");
} else {
ConfigUtil.sendMessage(sender, "Abort.NothingToCancel");
}
return true;
}
private boolean repairCommand(CommandSender sender, @Nonnull String[] args) {
String liftName = args[1];
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
if (!lift.isDefective()) {
ConfigUtil.sendMessage(sender, "Repair.NotDefective");
return true;
}
if (sender instanceof Player) {
Player p = (Player) sender;
if (!p.hasPermission("v10lift.admin")) {
int masterAmount = V10LiftPlugin.getSConfig().getFile().getInt("MasterRepairAmount");
Optional<XMaterial> mat = XMaterial.matchXMaterial(Objects.requireNonNull(V10LiftPlugin.getSConfig().getFile().getString("MasterRepairItem"), "MasterRepairItem is null"));
if (!mat.isPresent()) {
Bukkit.getLogger().severe("[V10Lift] The material for MasterRepairItem is undefined!");
return true;
}
Material masterItem = mat.get().parseMaterial();
if (masterItem == null) {
Bukkit.getLogger().severe("[V10Lift] The material for MasterRepairItem is undefined!");
return true;
}
if (p.getGameMode() != GameMode.CREATIVE && masterAmount > 0) {
if (!p.getInventory().contains(masterItem)) {
Map<String, String> replacements = new HashMap<>();
replacements.put("%Amount%", String.valueOf(masterAmount));
replacements.put("%ItemName%", masterItem.toString().toLowerCase());
ConfigUtil.sendMessage(sender, "Repair.ItemsNeeded", replacements);
return true;
}
p.getInventory().remove(new ItemStack(masterItem, masterAmount));
}
}
}
V10LiftPlugin.getAPI().setDefective(liftName, false);
ConfigUtil.sendMessage(sender, "Repair.Repaired");
return true;
}
private boolean realisticCommand(CommandSender sender) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId()));
lift.setRealistic(!lift.isRealistic());
if (lift.isRealistic()) {
ConfigUtil.sendMessage(sender, "Realistic.TurnedOn");
} else {
ConfigUtil.sendMessage(sender, "Realistic.TurnedOff");
}
return true;
}
private boolean soundCommand(CommandSender sender) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId()));
lift.setSound(!lift.isSound());
if (lift.isSound()) {
ConfigUtil.sendMessage(sender, "Sound.TurnedOn");
} else {
ConfigUtil.sendMessage(sender, "Sound.TurnedOff");
}
return true;
}
private boolean speedCommand(CommandSender sender, @Nonnull String[] args) {
Lift lift;
if (args.length == 3) {
if (!DataManager.containsLift(args[2])) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
lift = DataManager.getLift(args[2]);
} else {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId()));
}
try {
int speed = Integer.parseInt(args[1]);
lift.setSpeed(speed);
if (lift.getSpeed() < 1) lift.setSpeed(1);
ConfigUtil.sendMessage(sender, "Speed.Changed");
} catch (NumberFormatException e) {
ConfigUtil.sendMessage(sender, "Speed.WrongSpeed", Collections.singletonMap("%Speed%", args[1]));
}
return true;
}
private boolean whoisCommand(CommandSender sender, @Nonnull String[] args) {
if (args.length < 2) {
if (!(sender instanceof Player)) {
ConfigUtil.sendMessage(sender, "Whois.UseWithoutName");
return true;
}
//Without name
Player p = (Player) sender;
DataManager.addWhoisREQPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "Whois.WithoutName");
} else {
String liftName = args[1];
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "Whois.DoesntExists");
} else {
V10LiftPlugin.getAPI().sendLiftInfo(sender, liftName);
}
}
return true;
}
private boolean whitelistCommand(CommandSender sender, @Nonnull String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId()));
boolean isGroup = false;
String wgn = null;
UUID wpu = null;
if (args[2].startsWith("g:")) {
if (!V10LiftPlugin.isVaultEnabled()) {
ConfigUtil.sendMessage(sender, "Whitelist.Group.VaultNotFound");
return true;
}
isGroup = true;
wgn = args[2].replace("g:", "");
if (!VaultManager.isGroup(wgn)) {
ConfigUtil.sendMessage(sender, "Whitelist.Group.NotFound", Collections.singletonMap("%Name%", wgn));
return true;
}
} else {
OfflinePlayer wp = Bukkit.getOfflinePlayer(args[2]);
wpu = wp.getUniqueId();
if (!wp.hasPlayedBefore()) {
ConfigUtil.sendMessage(sender, "Whitelist.Player.NotFound", Collections.singletonMap("%Name%", args[2]));
return true;
}
}
String floor = null;
if (args.length < 4) {
Block b = p.getLocation().getBlock();
Floor f = new Floor(b.getY() - 1, Objects.requireNonNull(b.getWorld(), "World was null at whitelistCommand").getName());
if (!lift.getFloors().containsValue(f)) {
ConfigUtil.sendMessage(sender, "General.DetectionFailed");
return true;
}
for (Map.Entry<String, Floor> e : lift.getFloors().entrySet()) {
Floor fl = e.getValue();
if (fl.equals(f)) {
floor = e.getKey();
break;
}
}
} else {
floor = args[3];
if (!lift.getFloors().containsKey(floor)) {
ConfigUtil.sendMessage(sender, "General.FloorDoesntExists", Collections.singletonMap("%Name%", args[3]));
return true;
}
}
Floor f = lift.getFloors().get(floor);
if (args[1].equalsIgnoreCase("add")) {
if (isGroup) {
if (f.getGroupWhitelist().contains(wgn)) {
ConfigUtil.sendMessage(sender, "Whitelist.Group.AlreadyContains");
} else {
f.getGroupWhitelist().add(wgn);
ConfigUtil.sendMessage(sender, "Whitelist.Player.Added");
}
} else {
if (f.getUserWhitelist().contains(wpu)) {
ConfigUtil.sendMessage(sender, "Whitelist.Group.AlreadyContains");
} else {
f.getUserWhitelist().add(wpu);
ConfigUtil.sendMessage(sender, "Whitelist.Player.Added");
}
}
} else if (args[1].equalsIgnoreCase("del")) {
if (isGroup) {
if (!f.getGroupWhitelist().contains(wgn)) {
ConfigUtil.sendMessage(sender, "Whitelist.Group.DoesntContains");
} else {
f.getGroupWhitelist().remove(wgn);
ConfigUtil.sendMessage(sender, "Whitelist.Group.Removed");
}
} else {
if (!f.getUserWhitelist().contains(wpu)) {
ConfigUtil.sendMessage(sender, "Whitelist.Player.DoesntContains");
} else {
f.getUserWhitelist().remove(wpu);
ConfigUtil.sendMessage(sender, "Whitelist.User.Removed");
}
}
} else {
return helpCommand(sender);
}
return true;
}
private boolean doorCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
if (DataManager.containsDoorEditPlayer(p.getUniqueId())) {
DataManager.removeDoorEditPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "Door.Disabled");
return true;
}
Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId()));
String floor = null;
if (args.length < 2) {
Location loc = p.getLocation();
Floor f = new Floor(loc.getBlockY() - 1, Objects.requireNonNull(loc.getWorld(), "World was null at doorCommand").getName());
if (!lift.getFloors().containsValue(f)) {
ConfigUtil.sendMessage(sender, "General.DetectionFailed");
return true;
}
for (Map.Entry<String, Floor> e : lift.getFloors().entrySet()) {
Floor fl = e.getValue();
if (fl.equals(f)) {
floor = e.getKey();
break;
}
}
} else {
floor = args[2];
if (!lift.getFloors().containsKey(floor)) {
ConfigUtil.sendMessage(sender, "General.FloorDoesntExists", Collections.singletonMap("%Name", args[2]));
return true;
}
}
DataManager.addDoorEditPlayer(p.getUniqueId(), floor);
ConfigUtil.sendMessage(sender, "Door.Enabled");
return true;
}
private boolean ropeCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
if (args[1].equalsIgnoreCase("add")) {
if (DataManager.containsRopeEditPlayer(p.getUniqueId()) || DataManager.containsRopeRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "Rope.StillAdjusting");
return true;
}
DataManager.addRopeEditPlayer(p.getUniqueId(), null);
ConfigUtil.sendMessage(sender, "Rope.Add");
} else if (args[1].equalsIgnoreCase("del")) {
if (DataManager.containsRopeEditPlayer(p.getUniqueId()) || DataManager.containsRopeRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "Rope.StillAdjusting");
return true;
}
DataManager.addRopeRemovesPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "Rope.Delete");
}
return true;
}
private boolean buildCommand(CommandSender sender) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
if (DataManager.containsBuilderPlayer(p.getUniqueId())) {
DataManager.removeBuilderPlayer(p.getUniqueId());
V10LiftPlugin.getAPI().sortLiftBlocks(DataManager.getEditPlayer(p.getUniqueId()));
ConfigUtil.sendMessage(sender, "Build.Disabled");
} else {
DataManager.addBuilderPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "Build.Enabled");
}
return true;
}
private boolean renameCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
String liftName = DataManager.getEditPlayer(p.getUniqueId());
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Bukkit.dispatchCommand(sender, "v10lift edit");
V10LiftPlugin.getAPI().renameLift(liftName, args[1]);
Bukkit.dispatchCommand(sender, "v10lift edit " + args[1]);
ConfigUtil.sendMessage(sender, "Rename.Renamed");
return true;
}
private boolean offlineCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
String liftName = DataManager.getEditPlayer(p.getUniqueId());
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
if (args[1].equalsIgnoreCase("add")) {
if (DataManager.containsOfflineEditsPlayer(p.getUniqueId()) || DataManager.containsOfflineRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "OfflineInput.StillAdjusting");
return true;
}
DataManager.addOfflineEditsPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "OfflineInput.RightClick");
} else if (args[1].equalsIgnoreCase("del")) {
if (lift.getOfflineInputs().isEmpty()) {
ConfigUtil.sendMessage(sender, "OfflineInput.NothingToRemove");
return true;
}
if (DataManager.containsOfflineEditsPlayer(p.getUniqueId()) || DataManager.containsOfflineRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "OfflineInput.StillAdjusting");
return true;
}
DataManager.addOfflineRemovesPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "OfflineInput.RightClick");
} else {
return helpCommand(sender);
}
return true;
}
private boolean inputCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
String liftName = DataManager.getEditPlayer(p.getUniqueId());
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
if (args[1].equalsIgnoreCase("add")) {
String floor = null;
if (args.length < 3) {
Block b = p.getLocation().getBlock();
Floor f = new Floor(b.getY() - 1, b.getWorld().getName());
if (!lift.getFloors().containsValue(f)) {
ConfigUtil.sendMessage(sender, "General.DetectionFailed");
return true;
}
for (Map.Entry<String, Floor> e : lift.getFloors().entrySet()) {
Floor fl = e.getValue();
if (fl.equals(f)) {
floor = e.getKey();
}
}
} else {
floor = args[2];
}
if (DataManager.containsInputEditsPlayer(p.getUniqueId()) || DataManager.containsInputRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "Input.StillAdjusting");
return true;
}
DataManager.addInputEditsPlayer(p.getUniqueId(), Objects.requireNonNull(floor, "Floor is null at input add command"));
ConfigUtil.sendMessage(sender, "Input.RightClick");
} else if (args[1].equalsIgnoreCase("del")) {
if (lift.getInputs().isEmpty()) {
ConfigUtil.sendMessage(sender, "Input.NothingToRemove");
return true;
}
if (DataManager.containsInputEditsPlayer(p.getUniqueId()) || DataManager.containsInputRemovesPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "Input.StillAdjusting");
return true;
}
DataManager.addInputRemovesPlayer(p.getUniqueId());
ConfigUtil.sendMessage(sender, "Input.RightClick");
} else {
return helpCommand(sender);
}
return true;
}
private boolean floorCommand(CommandSender sender, String[] args) {
Player p = (Player) sender;
if (!DataManager.containsEditPlayer(p.getUniqueId())) {
ConfigUtil.sendMessage(sender, "General.SwitchOnEdit");
return true;
}
String liftName = DataManager.getEditPlayer(p.getUniqueId());
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
if (args[1].equalsIgnoreCase("add")) {
Block b = p.getLocation().getBlock();
String floorName = args[2];
int response = V10LiftPlugin.getAPI().addFloor(liftName, floorName, new Floor(b.getY() - 1, b.getWorld().getName()));
switch (response) {
case 0:
ConfigUtil.sendMessage(sender, "Floor.Added");
break;
case -2:
ConfigUtil.sendMessage(sender, "Floor.ToHigh");
break;
case -3:
ConfigUtil.sendMessage(sender, "Floor.AlreadyExists");
break;
default:
ConfigUtil.sendMessage(sender, "General.InternalError");
break;
}
} else if (args[1].equalsIgnoreCase("del")) {
String floorName = args[2];
if (!V10LiftPlugin.getAPI().removeFloor(liftName, floorName)) {
ConfigUtil.sendMessage(sender, "General.InternalError");
} else {
ConfigUtil.sendMessage(sender, "Floor.Removed");
}
} else if (args[1].equalsIgnoreCase("rename")) {
if (args.length < 4) {
ConfigUtil.sendMessage(sender, "General.IncorrectUsage", Collections.singletonMap("%Command%", "/v10lift floor rename <Old name> <New name>"));
return true;
}
String floorName = args[2];
String newFloorName = args[3];
int response = V10LiftPlugin.getAPI().renameFloor(liftName, floorName, newFloorName);
switch (response) {
case 0:
ConfigUtil.sendMessage(sender, "Floor.Renamed");
break;
case -2:
ConfigUtil.sendMessage(sender, "Floor.DoesntExists");
break;
case -3:
ConfigUtil.sendMessage(sender, "Floor.AlreadyExists");
break;
default:
ConfigUtil.sendMessage(sender, "General.InternalError");
break;
}
} else {
//args[1] not found!
return helpCommand(sender);
}
return true;
}
private boolean editCommand(@Nonnull CommandSender sender, @Nonnull String[] args) {
Player p = (Player) sender;
if (DataManager.containsEditPlayer(p.getUniqueId())) {
//TURN OFF
if (args.length < 2) {
String liftName = DataManager.getEditPlayer(p.getUniqueId());
if (!DataManager.containsLift(liftName)) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(liftName);
DataManager.removeEditPlayer(p.getUniqueId());
DataManager.removeInputEditsPlayer(p.getUniqueId());
DataManager.removeInputRemovesPlayer(p.getUniqueId());
DataManager.removeOfflineEditsPlayer(p.getUniqueId());
DataManager.removeOfflineRemovesPlayer(p.getUniqueId());
if (DataManager.containsBuilderPlayer(p.getUniqueId())) {
DataManager.removeBuilderPlayer(p.getUniqueId());
V10LiftPlugin.getAPI().sortLiftBlocks(liftName);
}
DataManager.removeRopeEditPlayer(p.getUniqueId());
DataManager.removeRopeRemovesPlayer(p.getUniqueId());
DataManager.removeDoorEditPlayer(p.getUniqueId());
V10LiftPlugin.getDBManager().save();
BlockState bs;
Sign sign;
for (LiftBlock lb : lift.getBlocks()) {
bs = Objects.requireNonNull(Bukkit.getWorld(lb.getWorld()), "World is null at edit command").getBlockAt(lb.getX(), lb.getY(), lb.getZ()).getState();
if (!(bs instanceof Sign)) continue;
sign = (Sign) bs;
if (!sign.getLine(0).equalsIgnoreCase(ConfigUtil.getConfigText("SignText"))) continue;
sign.setLine(3, "");
sign.update();
}
Iterator<LiftSign> liter = lift.getSigns().iterator();
while (liter.hasNext()) {
LiftSign ls = liter.next();
bs = Objects.requireNonNull(Bukkit.getWorld(ls.getWorld()), "World is null at edit command").getBlockAt(ls.getX(), ls.getY(), ls.getZ()).getState();
if (!(bs instanceof Sign)) {
Bukkit.getLogger().severe("[V10Lift] Wrong sign removed at: " + LocationSerializer.serialize(bs.getBlock().getLocation()));
liter.remove();
continue;
}
sign = (Sign) bs;
sign.setLine(3, ls.getOldText());
sign.update();
ls.setOldText(null);
}
ConfigUtil.sendMessage(sender, "Edit.TurnedOff");
} else {
ConfigUtil.sendMessage(sender, "Edit.StillInEditMode");
return true;
}
} else {
//TURN ON
if (args.length < 2) {
ConfigUtil.sendMessage(sender, "General.IncorrectUsage", Collections.singletonMap("%Command%", "/v10lift edit <Name>"));
return true;
}
if (!DataManager.containsLift(args[1])) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(args[1]);
if (!lift.getOwners().contains(p.getUniqueId()) && !p.hasPermission("v10lift.admin")) {
ConfigUtil.sendMessage(sender, "General.NoPermission");
return true;
}
DataManager.addEditPlayer(p.getUniqueId(), args[1]);
BlockState bs;
Sign sign;
for (LiftBlock lb : lift.getBlocks()) {
bs = Objects.requireNonNull(Bukkit.getWorld(lb.getWorld()), "World is null at edit command").getBlockAt(lb.getX(), lb.getY(), lb.getZ()).getState();
if (!(bs instanceof Sign)) continue;
sign = (Sign) bs;
if (!sign.getLine(0).equalsIgnoreCase(ConfigUtil.getConfigText("SignText"))) continue;
sign.setLine(3, ConfigUtil.getConfigText("MaintenanceText"));
sign.update();
}
Iterator<LiftSign> liter = lift.getSigns().iterator();
while (liter.hasNext()) {
LiftSign ls = liter.next();
bs = Objects.requireNonNull(Bukkit.getWorld(ls.getWorld()), "World is null at edit command").getBlockAt(ls.getX(), ls.getY(), ls.getZ()).getState();
if (!(bs instanceof Sign)) {
Bukkit.getLogger().severe("[V10Lift] Wrong sign removed at: " + LocationSerializer.serialize(bs.getBlock().getLocation()));
liter.remove();
continue;
}
sign = (Sign) bs;
ls.setOldText(sign.getLine(3));
sign.setLine(3, ConfigUtil.getConfigText("MaintenanceText"));
sign.update();
}
ConfigUtil.sendMessage(sender, "Edit.TurnedOn");
}
return true;
}
private boolean deleteCommand(@Nonnull CommandSender sender, @Nonnull String[] args) {
Player p = (Player) sender;
if (!DataManager.containsLift(args[1])) {
ConfigUtil.sendMessage(sender, "General.DoesntExists");
return true;
}
Lift lift = DataManager.getLift(args[1]);
if (!lift.getOwners().contains(p.getUniqueId()) && !p.hasPermission("v10lift.admin")) {
ConfigUtil.sendMessage(sender, "General.NoPermission");
return true;
}
if (!V10LiftPlugin.getAPI().removeLift(args[1])) {
ConfigUtil.sendMessage(sender, "Delete.NotRemoved", Collections.singletonMap("%Name%", args[1]));
return true;
}
ConfigUtil.sendMessage(sender, "Delete.Removed", Collections.singletonMap("%Name%", args[1]));
return true;
}
private boolean createCommand(@Nonnull CommandSender sender, @Nonnull String[] args) {
Player p = (Player) sender;
if (DataManager.containsPlayer(p.getUniqueId())) {
//Already building!!
if (args.length < 2) {
ConfigUtil.sendMessage(sender, "General.IncorrectUsage", Collections.singletonMap("%Command%", "/v10lift create <Name>"));
return true;
}
TreeSet<LiftBlock> blocks = DataManager.getPlayer(p.getUniqueId());
if (blocks.isEmpty()) {
ConfigUtil.sendMessage(sender, "Create.NoBlocks");
return true;
}
if (!V10LiftPlugin.getAPI().createLift(p, args[1])) {
ConfigUtil.sendMessage(sender, "General.AlreadyExists");
return true;
}
TreeSet<LiftBlock> blcks = DataManager.getLift(args[1]).getBlocks();
blocks.forEach(block -> V10LiftPlugin.getAPI().addBlockToLift(blcks, block));
V10LiftPlugin.getAPI().sortLiftBlocks(args[1]);
DataManager.removePlayer(p.getUniqueId());
ConfigUtil.sendMessage(p, "Create.Created", Collections.singletonMap("%Name%", args[1]));
p.performCommand("v10lift edit " + args[1]);
} else {
//Not building yet!!
DataManager.addPlayer(p.getUniqueId());
ConfigUtil.sendMessage(p, "Create.AddBlocks");
}
return true;
}
private boolean infoCommand(@Nonnull CommandSender sender) {
sender.sendMessage("§1==================================");
sender.sendMessage("§6V10Lift plugin made by §aSBDeveloper");
sender.sendMessage("§6Version: " + V10LiftPlugin.getInstance().getDescription().getVersion());
sender.sendMessage("§6Type /v10lift help for more information!");
sender.sendMessage("§1==================================");
return true;
}
private boolean helpCommand(@Nonnull CommandSender sender) {
sender.sendMessage("§8V10Lift commands:");
sender.sendMessage("§6/v10lift info§f: Gives you information about the plugin.");
sender.sendMessage("§6/v10lift help§f: Gives you this help page.");
sender.sendMessage("§6/v10lift reload§f: Reload the plugin.");
sender.sendMessage("§6/v10lift create [Name]§f: Create a lift.");
sender.sendMessage("§6/v10lift delete <Name>§f: Delete a lift.");
sender.sendMessage("§6/v10lift rename <New name>§f: Rename a lift.");
sender.sendMessage("§6/v10lift abort§f: Abort your action.");
sender.sendMessage("§6/v10lift whois [Name]§f: See information about a lift.");
sender.sendMessage("§6/v10lift edit [Name]§f: Edit a lift.");
sender.sendMessage("§6/v10lift floor <add/del/rename> <Name> [New name]§f: Add/remove/rename a floor.");
sender.sendMessage("§6/v10lift input <add/del> [Floorname]§f: Add/remove an input.");
sender.sendMessage("§6/v10lift offline <add/del>§f: Add/remove an offline input.");
sender.sendMessage("§6/v10lift build§f: Add/remove blocks to/from a cab.");
sender.sendMessage("§6/v10lift rope <add/del>§f: Add/remove a rope.");
sender.sendMessage("§6/v10lift door§f: Add doors to a lift.");
sender.sendMessage("§6/v10lift speed <New speed>§f: Change the speed of a lift.");
sender.sendMessage("§6/v10lift realistic§f: Toggle realistic mode.");
sender.sendMessage("§6/v10lift repair§f: Repair a lift.");
sender.sendMessage("§6/v10lift whitelist <add/del> <Player/Group> [Floorname]§f: Add/remove someone of the whitelist. Use g:<Groupname> for a group.");
sender.sendMessage("§6/v10lift start [Name] [Floor]§f: Start a lift to a floor.");
sender.sendMessage("§6/v10lift stop [Name]§f: Stop a lift.");
sender.sendMessage("§6/v10lift disable <Name>§f: Disable a lift.");
sender.sendMessage("§6/v10lift repair <Name>§f: Repair a lift.");
return true;
}
}