package xyz.dwbrss.mcpack.command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.server.permission.PermissionAPI;
import net.minecraftforge.server.permission.events.PermissionGatherEvent;
import net.minecraftforge.server.permission.nodes.PermissionNode;
import net.minecraftforge.server.permission.nodes.PermissionTypes;
import xyz.dwbrss.mcpack.config.LTRConfig;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import static xyz.dwbrss.mcpack.command.RandomStringGenerator.UsingMath;
import static xyz.dwbrss.mcpack.util.Utils.*;
public class CreateKeys{
// 新建权限节点(仅OP可用)
@SubscribeEvent
public void Permission(PermissionGatherEvent.Nodes event) {
PermissionNode<Boolean> node = new PermissionNode<>(MOD_ID, "command.ltr.create_keys", PermissionTypes.BOOLEAN, (player, playerUUID, context) ->{return player.hasPermissions(4);});
event.addNodes(node);
}
// 新建命令
public CreateKeys(CommandDispatcher<CommandSourceStack> dispatcher) {
dispatcher.register(Commands.literal(MOD_ID)
.then(Commands.literal("new")
.then(Commands.argument("number", IntegerArgumentType.integer())
.then(Commands.argument("time(d)", IntegerArgumentType.integer())
.then(Commands.argument("group", StringArgumentType.string())
.executes((command) -> {
return 0;
}))))));
}
private int run(CommandContext<CommandSource> context) throws CommandSyntaxException, Exception {
assert Minecraft.getInstance().player != null;
// 检查玩家是否为OP
if (PermissionAPI.getPermission(player, node) >= 4) {
// 检查参数是否合理
if (IntegerArgumentType.getInteger(context, "time(d)") <= 0 || IntegerArgumentType.getInteger(context, "time(d)") > 2147483647 / 1440) {
Minecraft.getInstance().player.sendMessage(
new TranslatableComponent("message.time_must_be_over_0_and_less_than_1,491,308"),
Util.NIL_UUID
);
} else if (IntegerArgumentType.getInteger(context, "number") <= 0) {
Minecraft.getInstance().player.sendMessage(
new TranslatableComponent("message.number_must_be_over_0"),
Util.NIL_UUID
);
} else {// 如果参数合理
// 新建目录,如果已经有的话就跳过
Path path = Paths.get("ltr_keys");
Path pathCreate = Files.createDirectory(path);
// 获取日期,并以此为文件名
Date date = new Date();
SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//新建文件
File f = new File("a.txt");
FileOutputStream fop = new FileOutputStream(f);
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
// 连接数据库
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);//连接初始数据库
Statement stat = conn.createStatement();
// 为生成密钥创建变量
String key = "";
int time = IntegerArgumentType.getInteger(context, "time(d)");
String group = StringArgumentType.getString(context, "group");
System.out.println("Keys are creating...");
int x = 1;
while (x <= IntegerArgumentType.getInteger(context, "number")) {
// 生成卡密
key = LTRConfig.key_prefix.get() + UsingMath(LTRConfig.key_length.get()) + LTRConfig.key_suffix.get();
// 检查卡密是否已经存在
ResultSet resultSet = stat.executeQuery("select * from LTR_KEY where key=" + key);
if (resultSet.next()) {// 如果存在
System.out.println("The key has already existed, and it will create a new key");
} else {// 如果不存在
// 把卡密保存至mysql中
stat.executeUpdate("insert into LTR_KEY values(" + key + ", " + time + ", " + group + ")");
// 把卡密保存至本地文件里
writer.append(key);
// 换行
writer.append("\r\n");
x++;
}
}
// 关闭写入流,同时把缓冲区内容写入文件
writer.close();
fop.close();
System.out.println("Done! " + IntegerArgumentType.getInteger(context, "number") + " keys have been created");
// 给玩家发送信息
Minecraft.getInstance().player.sendMessage(
new TranslatableComponent("message.keys_have_saved_at"),
Util.NIL_UUID
);
Minecraft.getInstance().player.sendMessage(
new TextComponent("ltr_keys/" + DateFormat.format(date) + ".txt"),
Util.NIL_UUID
);
stat.close();
conn.close();
}
} else {// 如果权限不够
Minecraft.getInstance().player.sendMessage(
new TranslatableComponent("message.permission_is_not_enough"),
Util.NIL_UUID
);}
return 1;
}
} |