From edf3ee2db4bfc256b4cf5653b4a31ebe1767c397 Mon Sep 17 00:00:00 2001 From: stijnb1234 Date: Sat, 1 Feb 2020 10:46:33 +0100 Subject: [PATCH] CommandHandler done! ;) --- pom.xml | 8 + .../SBDeveloper/V10Lift/API/V10LiftAPI.java | 45 ++++ .../V10Lift/Commands/V10LiftCommand.java | 237 +++++++++++++++++- src/main/resources/config.yml | 1 + 4 files changed, 283 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index c300fd7..7c70711 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,14 @@ plugin.yml + + . + true + src/main/resources + + config.yml + + diff --git a/src/main/java/nl/SBDeveloper/V10Lift/API/V10LiftAPI.java b/src/main/java/nl/SBDeveloper/V10Lift/API/V10LiftAPI.java index 893befd..e265c3f 100644 --- a/src/main/java/nl/SBDeveloper/V10Lift/API/V10LiftAPI.java +++ b/src/main/java/nl/SBDeveloper/V10Lift/API/V10LiftAPI.java @@ -576,4 +576,49 @@ public class V10LiftAPI { return 0; } + public void sendLiftInfo(Player p, String liftName) { + if (p == null || liftName == null || !DataManager.containsLift(liftName)) return; + + Lift lift = DataManager.getLift(liftName); + + if (!lift.getOwners().contains(p.getUniqueId()) && !p.hasPermission("v10lift.admin")) { + p.sendMessage(ChatColor.RED + "You don't have the permission to check this lift!"); + } else { + p.sendMessage(ChatColor.GOLD + "Elevator: " + ChatColor.YELLOW + liftName); + p.sendMessage(ChatColor.GOLD + "Settings:"); + p.sendMessage(ChatColor.GREEN + " Speed: " + ChatColor.YELLOW + lift.getSpeed()); + p.sendMessage(ChatColor.GREEN + " Realistic Mode: " + ChatColor.YELLOW + lift.isRealistic()); + p.sendMessage(ChatColor.GREEN + " Malfunction: " + ChatColor.YELLOW + lift.isDefective()); + p.sendMessage(ChatColor.GOLD + "Floors:"); + if (lift.getFloors().isEmpty()) { + p.sendMessage(ChatColor.RED + "None."); + } else { + for (Map.Entry entry : lift.getFloors().entrySet()) { + p.sendMessage(ChatColor.GREEN + " " + entry.getKey() + ":"); + Floor f = entry.getValue(); + p.sendMessage(ChatColor.YELLOW + " World: " + ChatColor.GREEN + f.getWorld()); + p.sendMessage(ChatColor.YELLOW + " Height: " + ChatColor.GREEN + f.getY()); + p.sendMessage(ChatColor.YELLOW + " Whitelist:"); + if (f.getWhitelist().isEmpty()) { + p.sendMessage(ChatColor.GOLD + " None."); + } else { + ChatColor color = ChatColor.DARK_PURPLE; + Iterator iter = f.getWhitelist().iterator(); + StringBuilder sb = new StringBuilder(); + sb.append(" ").append(color).append(Bukkit.getOfflinePlayer(iter.next()).getName()); + while (iter.hasNext()) { + if (color == ChatColor.DARK_PURPLE) { + color = ChatColor.LIGHT_PURPLE; + } else { + color = ChatColor.DARK_PURPLE; + } + sb.append(ChatColor.AQUA).append(", ").append(color).append(Bukkit.getOfflinePlayer(iter.next()).getName()); + } + p.sendMessage(sb.toString()); + } + } + } + } + } + } diff --git a/src/main/java/nl/SBDeveloper/V10Lift/Commands/V10LiftCommand.java b/src/main/java/nl/SBDeveloper/V10Lift/Commands/V10LiftCommand.java index b29f165..b802c44 100644 --- a/src/main/java/nl/SBDeveloper/V10Lift/Commands/V10LiftCommand.java +++ b/src/main/java/nl/SBDeveloper/V10Lift/Commands/V10LiftCommand.java @@ -7,9 +7,7 @@ import nl.SBDeveloper.V10Lift.API.Objects.LiftSign; import nl.SBDeveloper.V10Lift.Managers.DataManager; import nl.SBDeveloper.V10Lift.Utils.LocationSerializer; import nl.SBDeveloper.V10Lift.V10LiftPlugin; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; @@ -17,12 +15,10 @@ 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.util.ArrayList; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; +import java.util.*; public class V10LiftCommand implements CommandExecutor { @@ -38,6 +34,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift create || v10lift create if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return createCommand(sender, args); @@ -48,6 +45,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift delete if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return deleteCommand(sender, args); @@ -58,6 +56,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift edit if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return editCommand(sender, args); @@ -68,6 +67,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift floor add || v10lift floor del || v10lift floor rename if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return floorCommand(sender, args); @@ -78,6 +78,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift input add || v10lift input del if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return inputCommand(sender, args); @@ -88,6 +89,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift offline add || v10lift offline del if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return offlineCommand(sender, args); @@ -98,6 +100,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift rename if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return renameCommand(sender, args); @@ -108,6 +111,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift build if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return buildCommand(sender); @@ -118,6 +122,7 @@ public class V10LiftCommand implements CommandExecutor { //v10lift rope add || v10lift rope del if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return ropeCommand(sender, args); @@ -128,14 +133,230 @@ public class V10LiftCommand implements CommandExecutor { //v10lift door || v10lift door if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; } if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { return doorCommand(sender, args); } else { sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); } + } else if (args[0].equalsIgnoreCase("whitelist") && (args.length == 3 || args.length == 4)) { + //v10lift whitelist add || v10lift whitelist del + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return whitelistCommand(sender, args); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else if (args[0].equalsIgnoreCase("whois") && (args.length == 1 || args.length == 2)) { + //v10lift whois || v10lift whois + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return whoisCommand(sender, args); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else if (args[0].equalsIgnoreCase("speed") && args.length == 2) { + //v10lift speed + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return speedCommand(sender, args); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else if (args[0].equalsIgnoreCase("sound") && args.length == 1) { + //v10lift sound + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return soundCommand(sender); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else if (args[0].equalsIgnoreCase("realistic") && args.length == 1) { + //v10lift realistic + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return realisticCommand(sender); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else if (args[0].equalsIgnoreCase("repair") && args.length == 2) { + //v10lift repair + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You have to be a player to do this."); + return true; + } + if (sender.hasPermission("v10lift.build") || sender.hasPermission("v10lift.admin")) { + return repairCommand(sender, args); + } else { + sender.sendMessage(ChatColor.RED + "You don't have the permission to do this!"); + } + } else { + return helpCommand(sender); } - return false; + return true; + } + + private boolean repairCommand(CommandSender sender, @Nonnull String[] args) { + Player p = (Player) sender; + String liftName = args[1]; + if (!DataManager.containsLift(liftName)) { + sender.sendMessage(ChatColor.RED + "Lift " + args[1] + " doesn't exists!"); + return true; + } + + Lift lift = DataManager.getLift(liftName); + + if (!lift.isDefective()) { + sender.sendMessage(ChatColor.RED + "This lift isn't defective!"); + return true; + } + + //TODO Add defaults to config!!! + int masterAmount = 2; + Material masterItem = Material.DIAMOND; + if (p.getGameMode() != GameMode.CREATIVE && masterAmount > 0) { + if (!p.getInventory().contains(masterItem)) { + sender.sendMessage(ChatColor.RED + "You need " + masterAmount + "x " + masterItem.toString().toLowerCase() + "!"); + return true; + } + p.getInventory().remove(new ItemStack(masterItem, masterAmount)); + } + V10LiftPlugin.getAPI().setDefective(liftName, false); + sender.sendMessage(ChatColor.GREEN + "Lift repaired!"); + return true; + } + + private boolean realisticCommand(CommandSender sender) { + Player p = (Player) sender; + if (!DataManager.containsEditPlayer(p.getUniqueId())) { + sender.sendMessage(ChatColor.RED + "First switch on the editor mode!"); + return true; + } + + Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId())); + lift.setRealistic(!lift.isRealistic()); + sender.sendMessage(ChatColor.GREEN + "Realistic mode turned " + (lift.isSound() ? "on" : "off") + "!"); + return true; + } + + private boolean soundCommand(CommandSender sender) { + Player p = (Player) sender; + if (!DataManager.containsEditPlayer(p.getUniqueId())) { + sender.sendMessage(ChatColor.RED + "First switch on the editor mode!"); + return true; + } + + Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId())); + lift.setSound(!lift.isSound()); + sender.sendMessage(ChatColor.GREEN + "Sound mode turned " + (lift.isSound() ? "on" : "off") + "!"); + return true; + } + + private boolean speedCommand(CommandSender sender, String[] args) { + Player p = (Player) sender; + if (!DataManager.containsEditPlayer(p.getUniqueId())) { + sender.sendMessage(ChatColor.RED + "First switch on the editor mode!"); + return true; + } + + Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId())); + try { + int speed = Integer.parseInt(args[1]); + lift.setSpeed(speed); + if (lift.getSpeed() < 1) lift.setSpeed(1); + sender.sendMessage(ChatColor.GREEN + "Lift speed changed!"); + } catch (NumberFormatException e) { + sender.sendMessage(ChatColor.RED + "Wrong speed: " + args[1]); + } + return true; + } + + private boolean whoisCommand(CommandSender sender, @Nonnull String[] args) { + Player p = (Player) sender; + if (args.length < 2) { + //Without name + DataManager.addWhoisREQPlayer(p.getUniqueId()); + sender.sendMessage(ChatColor.GREEN + "Now right-click on the block you want to check."); + } else { + String liftName = args[1]; + if (!DataManager.containsLift(liftName)) { + sender.sendMessage(ChatColor.RED + "Lift " + liftName + " not found!"); + } else { + V10LiftPlugin.getAPI().sendLiftInfo(p, liftName); + } + } + return true; + } + + private boolean whitelistCommand(CommandSender sender, @Nonnull String[] args) { + Player p = (Player) sender; + if (!DataManager.containsEditPlayer(p.getUniqueId())) { + sender.sendMessage(ChatColor.RED + "First switch on the editor mode!"); + return true; + } + + Lift lift = DataManager.getLift(DataManager.getEditPlayer(p.getUniqueId())); + OfflinePlayer wp = Bukkit.getOfflinePlayer(args[2]); + UUID wpu = wp.getUniqueId(); + + 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 doorCommand").getName()); + if (!lift.getFloors().containsValue(f)) { + sender.sendMessage(ChatColor.RED + "Automatic floor detection failed!"); + return true; + } + for (Map.Entry 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)) { + sender.sendMessage(ChatColor.RED + "Floor " + args[3] + " not found!"); + return true; + } + } + + Floor f = lift.getFloors().get(floor); + if (args[1].equalsIgnoreCase("add")) { + if (f.getWhitelist().contains(wpu)) { + sender.sendMessage(ChatColor.RED + "Whitelist already contains this user!"); + } else { + f.getWhitelist().add(wpu); + sender.sendMessage(ChatColor.GREEN + "User added to whitelist!"); + } + } else if (args[1].equalsIgnoreCase("del")) { + if (!f.getWhitelist().contains(wpu)) { + sender.sendMessage(ChatColor.RED + "Whitelist doesn't contain this user!"); + } else { + f.getWhitelist().remove(wpu); + sender.sendMessage(ChatColor.GREEN + "User removed from whitelist!"); + } + } else { + return helpCommand(sender); + } + return true; } private boolean doorCommand(CommandSender sender, String[] args) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e69de29..4ba0571 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -0,0 +1 @@ +test: "jup" \ No newline at end of file