Skip to content

Commit

Permalink
Able to manually shift the boundingBox
Browse files Browse the repository at this point in the history
  • Loading branch information
andrew121410 committed Sep 6, 2024
1 parent 54b9b2d commit 7a63a01
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 19 deletions.
20 changes: 13 additions & 7 deletions src/main/java/com/andrew121410/mc/world16elevators/Elevator.java
Original file line number Diff line number Diff line change
Expand Up @@ -369,24 +369,30 @@ 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<Location, Material> showLocationOfElevator(Map<Location, Material> map) {
public Map<Location, Material> showLocationOfElevator(Map<Location, Material> 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<Location, Material> blockMap = new HashMap<>();

World world = getBukkitWorld();
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());
Expand All @@ -399,7 +405,7 @@ public Map<Location, Material> showLocationOfElevator(Map<Location, Material> 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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -827,12 +827,12 @@ public void run() {
} else {
player.sendMessage(Translate.chat("&6/elevator realign &e<Controller> &9<Elevator>"));
}
} else if (args[0].equalsIgnoreCase("show-boundingbox")) { // /elevator show-boundingbox <controller> <elevator>
if (!player.hasPermission("world16elevators.show-boundingbox")) {
} else if (args[0].equalsIgnoreCase("boundingbox")) { // elevator boundingbox <controller> <elevator> <show/shift> <y>
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) {
Expand All @@ -845,18 +845,67 @@ public void run() {
return true;
}

String setting = elevatorArguments.getOtherArgumentsAt(0);
if (setting == null) {
player.sendMessage(Translate.miniMessage("<red>Setting cannot be null."));
return true;
}

ChatClickCallbackManager chatClickCallbackManager = this.plugin.getOtherPlugins().getWorld16Utils().getChatClickCallbackManager();
Map<Location, Material> blockMap = elevator.showLocationOfElevator(null);
if (setting.equalsIgnoreCase("show")) {
Map<Location, Material> blockMap = elevator.showLocationOfElevator(null, null, null, null);

player.sendMessage(Translate.miniMessage("<yellow><u>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("<green>The original blocks have been restored."));
})));

player.sendMessage(Translate.miniMessage("<green>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("<yellow><u>Click here to undo the block changes").clickEvent(chatClickCallbackManager.create(player, p1 -> {
elevator.showLocationOfElevator(blockMap); // Undo the changes.
p1.sendMessage(Translate.miniMessage("<green>The original blocks have been restored."));
})));
player.sendMessage(Translate.miniMessage("<gray>You are about to shift the elevator by " + y + " blocks."));

player.sendMessage(Translate.miniMessage("<green>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<Location, Material> blockMap = elevator.showLocationOfElevator(null, copyAtDoor, copyBoundingBox, copyExpandedBoundingBox);

// Click here to confirm the changes.
player.sendMessage(Translate.miniMessage("<red><bold><u>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("<green>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("<yellow><u>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("<green>The original blocks have been restored."));
})));
}
return true;
} else {
player.sendMessage(Translate.chat("&6/elevator realign &e<Controller> &9<Elevator>"));
player.sendMessage(Translate.color("&6/elevator boundingbox &e<Controller> &9<Elevator> &eshow/shift &3<y>"));
}
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down Expand Up @@ -192,13 +192,22 @@ public List<String> 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;
}
Expand Down

0 comments on commit 7a63a01

Please # to comment.