]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/commands/BoxCommandBuilder.java
ab2272ffd3c4164cba4781badab0dd716e90e60f
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / commands / BoxCommandBuilder.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.builder.LiteralArgumentBuilder;
6 import net.minecraft.command.CommandSource;
7 import net.minecraft.command.Commands;
8 import net.minecraft.command.arguments.BlockPosArgument;
9 import net.minecraft.util.math.BlockPos;
10
11 class BoxCommandBuilder {
12     static LiteralArgumentBuilder<CommandSource> build(String command) {
13         return Commands.literal(command)
14                 .then(Commands.literal(ArgumentNames.ADD)
15                         .then(Commands.argument(ArgumentNames.FROM, BlockPosArgument.blockPos())
16                                 .then(Commands.argument(ArgumentNames.TO, BlockPosArgument.blockPos())
17                                         .executes(context -> {
18                                             BlockPos from = BlockPosArgument.getBlockPos(context, ArgumentNames.FROM);
19                                             BlockPos to = BlockPosArgument.getBlockPos(context, ArgumentNames.TO);
20                                             Coords minCoords = getMinCoords(from, to);
21                                             Coords maxCoords = getMaxCoords(from, to);
22                                             CustomBoxProvider.add(minCoords, maxCoords);
23
24                                             CommandHelper.feedback(context, "bbor.commands.box.added",
25                                                     from.getX(), from.getY(), from.getZ(),
26                                                     to.getX(), to.getY(), to.getZ());
27                                             return 0;
28                                         }))))
29                 .then(Commands.literal(ArgumentNames.CLEAR)
30                         .executes(context -> {
31                             CustomBoxProvider.clear();
32
33                             CommandHelper.feedback(context, "bbor.commands.box.cleared.all");
34                             return 0;
35                         })
36                         .then(Commands.argument(ArgumentNames.FROM, BlockPosArgument.blockPos())
37                                 .then(Commands.argument(ArgumentNames.TO, BlockPosArgument.blockPos())
38                                         .executes(context -> {
39                                             BlockPos from = BlockPosArgument.getBlockPos(context, ArgumentNames.FROM);
40                                             BlockPos to = BlockPosArgument.getBlockPos(context, ArgumentNames.TO);
41                                             Coords minCoords = getMinCoords(from, to);
42                                             Coords maxCoords = getMaxCoords(from, to);
43                                             boolean removed = CustomBoxProvider.remove(minCoords, maxCoords);
44
45                                             String format = removed ? "bbor.commands.box.cleared" : "bbor.commands.box.notFound";
46                                             CommandHelper.feedback(context, format,
47                                                     from.getX(), from.getY(), from.getZ(),
48                                                     to.getX(), to.getY(), to.getZ());
49                                             return 0;
50                                         }))));
51     }
52
53     private static Coords getMaxCoords(BlockPos from, BlockPos to) {
54         return new Coords(Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ()));
55     }
56
57     private static Coords getMinCoords(BlockPos from, BlockPos to) {
58         return new Coords(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), Math.min(from.getZ(), to.getZ()));
59     }
60 }