diff --git a/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java b/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java index 77cb611..17f66ef 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java @@ -369,15 +369,21 @@ public void run() { * If null or empty, new block modifications will be made. * @return A map of the blocks that were changed, with their original materials, to allow reverting the changes later. */ - public Map showLocationOfElevator(Map map) { + public Map showLocationOfElevator(Map map, Location atDoor, BoundingBox boundingBox, BoundingBox boundingBoxExpanded) { if (map != null && !map.isEmpty()) { map.forEach((location, material) -> location.getBlock().setType(material)); return map; } - Location atDoor = elevatorMovement.getAtDoor().clone(); - BoundingBox boundingBox = elevatorMovement.getBoundingBox().clone(); - BoundingBox expandedBoundingBox = this.boundingBoxExpanded.clone(); + if (atDoor == null) { + atDoor = elevatorMovement.getAtDoor().clone(); + } + if (boundingBox == null) { + boundingBox = elevatorMovement.getBoundingBox().clone(); + } + if (boundingBoxExpanded == null) { + boundingBoxExpanded = this.boundingBoxExpanded.clone(); + } Map blockMap = new HashMap<>(); @@ -385,8 +391,8 @@ public Map showLocationOfElevator(Map ma Location minX = new Location(world, boundingBox.getMinX(), boundingBox.getMinY(), boundingBox.getMinZ()); Location maxX = new Location(world, boundingBox.getMaxX(), boundingBox.getMaxY(), boundingBox.getMaxZ()); - Location expandedMinX = new Location(world, expandedBoundingBox.getMinX(), expandedBoundingBox.getMinY(), expandedBoundingBox.getMinZ()); - Location expandedMaxX = new Location(world, expandedBoundingBox.getMaxX(), expandedBoundingBox.getMaxY(), expandedBoundingBox.getMaxZ()); + Location expandedMinX = new Location(world, boundingBoxExpanded.getMinX(), boundingBoxExpanded.getMinY(), boundingBoxExpanded.getMinZ()); + Location expandedMaxX = new Location(world, boundingBoxExpanded.getMaxX(), boundingBoxExpanded.getMaxY(), boundingBoxExpanded.getMaxZ()); // Save the blocks. blockMap.put(atDoor, atDoor.getBlock().getType()); @@ -399,7 +405,7 @@ public Map showLocationOfElevator(Map ma maxX.getBlock().setType(Material.DIAMOND_BLOCK); expandedMinX.getBlock().setType(Material.REDSTONE_BLOCK); expandedMaxX.getBlock().setType(Material.REDSTONE_BLOCK); - atDoor.getBlock().setType(Material.OBSIDIAN); + atDoor.getBlock().setType(Material.EMERALD_BLOCK); return blockMap; } diff --git a/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java b/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java index afff8da..1bafdda 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java @@ -827,12 +827,12 @@ public void run() { } else { player.sendMessage(Translate.chat("&6/elevator realign &e &9")); } - } else if (args[0].equalsIgnoreCase("show-boundingbox")) { // /elevator show-boundingbox - if (!player.hasPermission("world16elevators.show-boundingbox")) { + } else if (args[0].equalsIgnoreCase("boundingbox")) { // elevator boundingbox + if (!player.hasPermission("world16elevators.boundingbox")) { player.sendMessage(Translate.color("&bYou don't have permission to use this command.")); return true; } - if (args.length == 3) { + if (args.length >= 4) { ElevatorArguments elevatorArguments = getElevatorArguments(args, 2); ElevatorController elevatorController = elevatorArguments.getElevatorController(); if (elevatorController == null) { @@ -845,18 +845,67 @@ public void run() { return true; } + String setting = elevatorArguments.getOtherArgumentsAt(0); + if (setting == null) { + player.sendMessage(Translate.miniMessage("Setting cannot be null.")); + return true; + } + ChatClickCallbackManager chatClickCallbackManager = this.plugin.getOtherPlugins().getWorld16Utils().getChatClickCallbackManager(); - Map blockMap = elevator.showLocationOfElevator(null); + if (setting.equalsIgnoreCase("show")) { + Map blockMap = elevator.showLocationOfElevator(null, null, null, null); + + player.sendMessage(Translate.miniMessage("Click here to undo the block changes").clickEvent(chatClickCallbackManager.create(player, p1 -> { + elevator.showLocationOfElevator(blockMap, null, null, null); // Undo the changes. + p1.sendMessage(Translate.miniMessage("The original blocks have been restored.")); + }))); + + player.sendMessage(Translate.miniMessage("The normal bounding box is the diamond blocks, and the expanded bounding box is the redstone blocks.")); + } else if (setting.equalsIgnoreCase("shift")) { + Integer y = Utils.asIntegerOrElse(elevatorArguments.getOtherArgumentsAt(1), null); + if (y == null) { + player.sendMessage("Y cannot be null."); + return true; + } - player.sendMessage(Translate.miniMessage("Click here to undo the block changes").clickEvent(chatClickCallbackManager.create(player, p1 -> { - elevator.showLocationOfElevator(blockMap); // Undo the changes. - p1.sendMessage(Translate.miniMessage("The original blocks have been restored.")); - }))); + player.sendMessage(Translate.miniMessage("You are about to shift the elevator by " + y + " blocks.")); - player.sendMessage(Translate.miniMessage("The normal bounding box is the diamond blocks, and the expanded bounding box is the redstone blocks.")); + // Copy the stuff + BoundingBox copyBoundingBox = elevator.getElevatorMovement().getBoundingBox().clone(); + BoundingBox copyExpandedBoundingBox = elevator.getBoundingBoxExpanded().clone(); + Location copyAtDoor = elevator.getElevatorMovement().getAtDoor().clone(); + + // Shift the stuff + copyBoundingBox.shift(0, y, 0); + copyExpandedBoundingBox.shift(0, y, 0); + copyAtDoor.add(0, y, 0); + + // Show the blocks. + Map blockMap = elevator.showLocationOfElevator(null, copyAtDoor, copyBoundingBox, copyExpandedBoundingBox); + + // Click here to confirm the changes. + player.sendMessage(Translate.miniMessage("CLICK HERE TO CONFIRM THE CHANGES.").clickEvent(chatClickCallbackManager.create(player, p1 -> { + // Remove the blocks. + elevator.showLocationOfElevator(blockMap, copyAtDoor, copyBoundingBox, copyExpandedBoundingBox); + + // Set the new values. + elevator.getElevatorMovement().setBoundingBox(copyBoundingBox); + elevator.setBoundingBoxExpanded(copyExpandedBoundingBox); + elevator.getElevatorMovement().setAtDoor(copyAtDoor); + + p1.sendMessage(Translate.miniMessage("The changes have been confirmed.")); + }))); + + // Click here to undo the block changes if you don't want to confirm the changes. + player.sendMessage(Translate.miniMessage("Click here to undo the block changes").clickEvent(chatClickCallbackManager.create(player, p1 -> { + // Undo the changes. + elevator.showLocationOfElevator(blockMap, copyAtDoor, copyBoundingBox, copyExpandedBoundingBox); + p1.sendMessage(Translate.miniMessage("The original blocks have been restored.")); + }))); + } return true; } else { - player.sendMessage(Translate.chat("&6/elevator realign &e &9")); + player.sendMessage(Translate.color("&6/elevator boundingbox &e &9 &eshow/shift &3")); } } return true; diff --git a/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java b/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java index 44649ac..8236d5f 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java @@ -45,7 +45,7 @@ public ElevatorTab(World16Elevators plugin) { tabCompleteList.add("tostring"); tabCompleteList.add("teleport"); tabCompleteList.add("realign"); - tabCompleteList.add("show-boundingbox"); + tabCompleteList.add("boundingbox"); this.elevatorControllerMap = this.plugin.getMemoryHolder().getElevatorControllerMap(); this.soundList = new ArrayList<>(); for (Sound value : Sound.values()) { @@ -192,13 +192,22 @@ public List onTabComplete(CommandSender sender, Command cmd, String aile return this.elevatorControllerMap.containsKey(args[1]) ? new ArrayList<>(this.elevatorControllerMap.get(args[1]).getElevatorsMap().keySet()) : null; } return null; - } else if (args[0].equalsIgnoreCase("realign") || args[0].equalsIgnoreCase("show-boundingbox")) { + } else if (args[0].equalsIgnoreCase("realign")) { if (args.length == 2) { return getContainsString(args[1], controllerList); } else if (args.length == 3) { return this.elevatorControllerMap.containsKey(args[1]) ? new ArrayList<>(this.elevatorControllerMap.get(args[1]).getElevatorsMap().keySet()) : null; } return null; + } else if (args[0].equalsIgnoreCase("boundingbox")) { + if (args.length == 2) { + return getContainsString(args[1], controllerList); + } else if (args.length == 3) { + return this.elevatorControllerMap.containsKey(args[1]) ? new ArrayList<>(this.elevatorControllerMap.get(args[1]).getElevatorsMap().keySet()) : null; + } else if (args.length == 4) { + return getContainsString(args[3], Arrays.asList("show", "shift")); + } + return null; } return null; }