validate command
i know the file is a mess i will make it more modular later mabe
This commit is contained in:
parent
88dc82eb1e
commit
087b05fb95
5 changed files with 183 additions and 2 deletions
|
@ -2,16 +2,32 @@ package land.chipmunk.chipmunkmod;
|
||||||
|
|
||||||
import land.chipmunk.chipmunkmod.data.BlockArea;
|
import land.chipmunk.chipmunkmod.data.BlockArea;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
|
||||||
public class Configuration {
|
public class Configuration {
|
||||||
public CommandManager commands = new CommandManager();
|
public CommandManager commands = new CommandManager();
|
||||||
public CommandCore core = new CommandCore();
|
public CommandCore core = new CommandCore();
|
||||||
|
public Bots bots = new Bots();
|
||||||
|
|
||||||
public class CommandManager {
|
public static class CommandManager {
|
||||||
public String prefix = ".";
|
public String prefix = ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CommandCore {
|
public static class CommandCore {
|
||||||
public BlockArea relativeArea = new BlockArea(new BlockPos(0, 0, 0), new BlockPos(15, 0, 15));
|
public BlockArea relativeArea = new BlockArea(new BlockPos(0, 0, 0), new BlockPos(15, 0, 15));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Bots {
|
||||||
|
public BotInfo hbot = new BotInfo("#", null);
|
||||||
|
public BotInfo sbot = new BotInfo(":", null);
|
||||||
|
public BotInfo chipmunk = new BotInfo("'", null);
|
||||||
|
public BotInfo chomens = new BotInfo("*", null);
|
||||||
|
public BotInfo kittycorp = new BotInfo("^", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class BotInfo {
|
||||||
|
public String prefix;
|
||||||
|
public String key;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,5 +70,6 @@ public class CommandManager {
|
||||||
TestCommand.register(dispatcher);
|
TestCommand.register(dispatcher);
|
||||||
CoreCommand.register(dispatcher);
|
CoreCommand.register(dispatcher);
|
||||||
UsernameCommand.register(dispatcher);
|
UsernameCommand.register(dispatcher);
|
||||||
|
ValidateCommand.register(dispatcher);
|
||||||
}
|
}
|
||||||
}
|
}
|
141
src/main/java/land/chipmunk/chipmunkmod/commands/ValidateCommand.java
Executable file
141
src/main/java/land/chipmunk/chipmunkmod/commands/ValidateCommand.java
Executable file
|
@ -0,0 +1,141 @@
|
||||||
|
package land.chipmunk.chipmunkmod.commands;
|
||||||
|
|
||||||
|
import com.mojang.brigadier.Command;
|
||||||
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
import com.mojang.brigadier.context.CommandContext;
|
||||||
|
import static land.chipmunk.chipmunkmod.command.CommandManager.literal;
|
||||||
|
import static land.chipmunk.chipmunkmod.command.CommandManager.argument;
|
||||||
|
import static com.mojang.brigadier.arguments.StringArgumentType.greedyString;
|
||||||
|
import static com.mojang.brigadier.arguments.StringArgumentType.getString;
|
||||||
|
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
|
||||||
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
||||||
|
import land.chipmunk.chipmunkmod.Configuration;
|
||||||
|
import land.chipmunk.chipmunkmod.util.Hexadecimal;
|
||||||
|
|
||||||
|
public class ValidateCommand {
|
||||||
|
private static final SimpleCommandExceptionType UNSPECIFIED_KEY = new SimpleCommandExceptionType(Text.literal("The key of the bot is unspecified (null), did you incorrectly add it to your config?"));
|
||||||
|
|
||||||
|
public static void register (CommandDispatcher<FabricClientCommandSource> dispatcher) {
|
||||||
|
dispatcher.register(
|
||||||
|
literal("validate")
|
||||||
|
.then(literal("hbot").then(argument("command", greedyString()).executes(c -> hbot(c))))
|
||||||
|
.then(literal("sbot").then(argument("command", greedyString()).executes(c -> sbot(c))))
|
||||||
|
// .then(literal("chipmunk").then(argument("command", greedyString()).executes(c -> chipmunk(c))))
|
||||||
|
.then(literal("chomens").then(argument("command", greedyString()).executes(c -> chomens(c))))
|
||||||
|
.then(literal("kittycorp").then(argument("command", greedyString()).executes(c -> kittycorp(c))))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int hbot (CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
|
||||||
|
final Configuration.BotInfo info = ChipmunkMod.CONFIG.bots.hbot;
|
||||||
|
final String command = getString(context, "command");
|
||||||
|
final MinecraftClient client = context.getSource().getClient();
|
||||||
|
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
||||||
|
|
||||||
|
final String prefix = info.prefix;
|
||||||
|
final String key = info.key;
|
||||||
|
if (key == null) throw UNSPECIFIED_KEY.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||||
|
String time = String.valueOf(System.currentTimeMillis() / 10000);
|
||||||
|
String input = command.replaceAll("&[0-9a-fklmnor]", "") + ";" + client.player.getUuidAsString() + ";" + time + ";" + key;
|
||||||
|
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
|
||||||
|
BigInteger bigInt = new BigInteger(1, Arrays.copyOfRange(hash, 0, 4));
|
||||||
|
String stringHash = bigInt.toString(Character.MAX_RADIX);
|
||||||
|
|
||||||
|
networkHandler.sendChatMessage(prefix + command + " " + stringHash);
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new SimpleCommandExceptionType(Text.literal(e.getMessage())).create();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command.SINGLE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int sbot (CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
|
||||||
|
final Configuration.BotInfo info = ChipmunkMod.CONFIG.bots.sbot;
|
||||||
|
final String command = getString(context, "command");
|
||||||
|
final MinecraftClient client = context.getSource().getClient();
|
||||||
|
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
||||||
|
|
||||||
|
final String prefix = info.prefix;
|
||||||
|
final String key = info.key;
|
||||||
|
if (key == null) throw UNSPECIFIED_KEY.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||||
|
String time = String.valueOf(System.currentTimeMillis() / 20000);
|
||||||
|
String input = prefix + command.replaceAll("&[0-9a-fklmnorx]", "") + ";" + client.player.getName() + ";" + time + ";" + key;
|
||||||
|
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
|
||||||
|
BigInteger bigInt = new BigInteger(1, Arrays.copyOfRange(hash, 0, 4));
|
||||||
|
String stringHash = bigInt.toString(Character.MAX_RADIX);
|
||||||
|
|
||||||
|
networkHandler.sendChatMessage(prefix + command + " " + stringHash);
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new SimpleCommandExceptionType(Text.literal(e.getMessage())).create();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command.SINGLE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int chomens (CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
|
||||||
|
final Configuration.BotInfo info = ChipmunkMod.CONFIG.bots.chomens;
|
||||||
|
final String command = getString(context, "command");
|
||||||
|
final ClientPlayNetworkHandler networkHandler = context.getSource().getClient().getNetworkHandler();
|
||||||
|
|
||||||
|
final String prefix = info.prefix;
|
||||||
|
final String key = info.key;
|
||||||
|
if (key == null) throw UNSPECIFIED_KEY.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||||
|
String time = String.valueOf(System.currentTimeMillis() / 10000);
|
||||||
|
String input = time + key;
|
||||||
|
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
|
||||||
|
String stringHash = Hexadecimal.encode(hash).substring(0, 16);
|
||||||
|
|
||||||
|
String[] arguments = command.split(" ");
|
||||||
|
networkHandler.sendChatMessage(prefix + arguments[0] + " " + stringHash + " " + String.join(" ", Arrays.copyOfRange(arguments, 1, arguments.length)));
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new SimpleCommandExceptionType(Text.literal(e.getMessage())).create();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command.SINGLE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int kittycorp (CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
|
||||||
|
final Configuration.BotInfo info = ChipmunkMod.CONFIG.bots.kittycorp;
|
||||||
|
final String command = getString(context, "command");
|
||||||
|
final ClientPlayNetworkHandler networkHandler = context.getSource().getClient().getNetworkHandler();
|
||||||
|
|
||||||
|
final String prefix = info.prefix;
|
||||||
|
final String key = info.key;
|
||||||
|
if (key == null) throw UNSPECIFIED_KEY.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||||
|
String time = String.valueOf(System.currentTimeMillis() / 10000);
|
||||||
|
String input = prefix + command.replaceAll("&[0-9a-fklmnorx]", "") + ";" + time + ";" + key;
|
||||||
|
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
|
||||||
|
BigInteger bigInt = new BigInteger(1, Arrays.copyOfRange(hash, 0, 4));
|
||||||
|
String stringHash = bigInt.toString(Character.MAX_RADIX);
|
||||||
|
|
||||||
|
networkHandler.sendChatMessage(prefix + command + " " + stringHash);
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new SimpleCommandExceptionType(Text.literal(e.getMessage())).create();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command.SINGLE_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package land.chipmunk.chipmunkmod.util;
|
||||||
|
|
||||||
|
public interface Hexadecimal {
|
||||||
|
static String encode (byte b) {
|
||||||
|
return "" + Character.forDigit((b >> 4) & 0xF, 16) + Character.forDigit((b & 0xF), 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String encode (byte[] array) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < array.length; i++) sb.append(encode(array[i]));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Decode
|
||||||
|
}
|
|
@ -8,5 +8,13 @@
|
||||||
"start": { "x": 0, "y": 0, "z": 0 },
|
"start": { "x": 0, "y": 0, "z": 0 },
|
||||||
"end": { "x": 15, "y": 0, "z": 15 }
|
"end": { "x": 15, "y": 0, "z": 15 }
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"bots": {
|
||||||
|
"hbot": { "prefix": "#", "key": null },
|
||||||
|
"sbot": { "prefix": ":", "key": null },
|
||||||
|
"chipmunk": { "prefix": "'", "key": null },
|
||||||
|
"chomens": { "prefix": "*", "key": null },
|
||||||
|
"kittycorp": { "prefix": "^", "key": null }
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue