]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/commands/BoxCommand.java
Add feedback to commands
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / commands / BoxCommand.java
1 package com.irtimaled.bbor.client.commands;
2
3 import com.irtimaled.bbor.client.providers.CustomBoxProvider;
4 import com.irtimaled.bbor.common.models.Coords;
5 import com.mojang.brigadier.CommandDispatcher;
6 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
7 import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
8 import net.minecraft.command.Commands;
9 import net.minecraft.command.ISuggestionProvider;
10 import net.minecraft.command.arguments.BlockPosArgument;
11 import net.minecraft.util.math.BlockPos;
12
13 public class BoxCommand {
14     private static final String COMMAND = "bbor:box";
15     private static final String ADD = "add";
16     private static final String CLEAR = "clear";
17     private static final String FROM = "from";
18     private static final String TO = "to";
19
20     public static void register(CommandDispatcher<ISuggestionProvider> commandDispatcher) {
21         LiteralArgumentBuilder command = Commands.literal(COMMAND)
22                 .then(Commands.literal(ADD)
23                         .then(Commands.argument(FROM, BlockPosArgument.blockPos())
24                                 .then(Commands.argument(TO, BlockPosArgument.blockPos())
25                                         .executes(context -> {
26                                             BlockPos from = BlockPosArgument.getBlockPos(context, FROM);
27                                             BlockPos to = BlockPosArgument.getBlockPos(context, TO);
28                                             Coords minCoords = getMinCoords(from, to);
29                                             Coords maxCoords = getMaxCoords(from, to);
30                                             CustomBoxProvider.add(minCoords, maxCoords);
31
32                                             String feedback = getPosBasedFeedback("Box added", from, to);
33                                             CommandHelper.feedback(context, feedback);
34                                             return 0;
35                                         }))))
36                 .then(Commands.literal(CLEAR)
37                         .executes(context -> {
38                             CustomBoxProvider.clear();
39
40                             CommandHelper.feedback(context, "All boxes cleared");
41                             return 0;
42                         })
43                         .then(Commands.argument(FROM, BlockPosArgument.blockPos())
44                                 .then(Commands.argument(TO, BlockPosArgument.blockPos())
45                                         .executes(context -> {
46                                             BlockPos from = BlockPosArgument.getBlockPos(context, FROM);
47                                             BlockPos to = BlockPosArgument.getBlockPos(context, TO);
48                                             Coords minCoords = getMinCoords(from, to);
49                                             Coords maxCoords = getMaxCoords(from, to);
50                                             boolean removed = CustomBoxProvider.remove(minCoords, maxCoords);
51
52                                             String prefix = removed ? "Box cleared" : "No box found";
53                                             String feedback = getPosBasedFeedback(prefix, from, to);
54                                             CommandHelper.feedback(context, feedback);
55                                             return 0;
56                                         }))))
57                 .executes(context -> {
58                     throw INCOMPLETE_COMMAND.create();
59                 });
60         commandDispatcher.register(command);
61     }
62
63     private static Coords getMaxCoords(BlockPos from, BlockPos to) {
64         return new Coords(Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ()));
65     }
66
67     private static Coords getMinCoords(BlockPos from, BlockPos to) {
68         return new Coords(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), Math.min(from.getZ(), to.getZ()));
69     }
70
71     private static String getPosBasedFeedback(String prefix, BlockPos from, BlockPos to) {
72         return String.format("%s with start [%d, %d, %d] and end [%d, %d, %d]", prefix, from.getX(), from.getY(), from.getZ(), to.getX(), to.getY(), to.getZ());
73     }
74
75     private static final SimpleCommandExceptionType INCOMPLETE_COMMAND =
76             CommandHelper.getIncompleteCommandException(COMMAND, ADD, CLEAR);
77 }