run it in an executor service

This commit is contained in:
Chayapak 2023-07-01 10:02:23 +07:00
parent c2894c64d2
commit 69a64eae28

View file

@ -53,74 +53,20 @@ public class MailCommand extends Command {
// kinda messy ngl // kinda messy ngl
switch (args[0]) { bot.executorService().submit(() -> {
case "send" -> { switch (args[0]) {
int senderMailsSentTotal = 0; case "send" -> {
for (JsonElement mailElement : MailPlugin.mails()) { int senderMailsSentTotal = 0;
final Mail mail = gson.fromJson(mailElement, Mail.class); for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (mail.sentBy() == null) continue; if (mail.sentBy() == null) continue;
if (!mail.sentBy().equals(sender.profile().getName())) continue; if (!mail.sentBy().equals(sender.profile().getName())) continue;
senderMailsSentTotal++; senderMailsSentTotal++;
}
if (senderMailsSentTotal > 256) return Component.text("You are sending too much mails!").color(NamedTextColor.RED);
bot.mail().send(
new Mail(
sender.profile().getName(),
args[1],
Instant.now().toEpochMilli(),
bot.host() + ":" + bot.port(),
String.join(" ", Arrays.copyOfRange(args, 2, args.length))
)
);
return Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor()));
}
case "sendselecteditem" -> {
int senderMailsSentTotal = 0;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
senderMailsSentTotal++;
}
if (senderMailsSentTotal > 256) return Component.text("You are sending too much mails!").color(NamedTextColor.RED);
final CompletableFuture<CompoundTag> future = bot.core().runTracked(
"minecraft:data get entity " +
UUIDUtilities.selector(sender.profile().getId()) +
" SelectedItem.tag.message"
);
if (future == null) return Component.text("There was an error while sending your mail").color(NamedTextColor.RED);
future.thenApply(tags -> {
if (!tags.contains("LastOutput") || !(tags.get("LastOutput") instanceof StringTag)) return tags;
final StringTag lastOutput = tags.get("LastOutput");
final Component output = GsonComponentSerializer.gson().deserialize(lastOutput.getValue());
final List<Component> children = output.children();
// too lazy to use translation,.,.,.
final String parsed = ComponentUtilities.stringify(children.get(0));
if (parsed.startsWith("Found no elements matching ")) {
context.sendOutput(Component.text("Player has no `message` NBT tag in the selected item").color(NamedTextColor.RED));
return tags;
} }
final String value = ComponentUtilities.stringify(((TranslatableComponent) children.get(0)).args().get(1)); if (senderMailsSentTotal > 256) context.sendOutput(Component.text("You are sending too much mails!").color(NamedTextColor.RED));
if (!value.startsWith("\"") && !value.endsWith("\"") && !value.startsWith("'") && !value.endsWith("'")) {
context.sendOutput(Component.text("`message` NBT is not a string").color(NamedTextColor.RED));
return tags;
}
bot.mail().send( bot.mail().send(
new Mail( new Mail(
@ -128,104 +74,156 @@ public class MailCommand extends Command {
args[1], args[1],
Instant.now().toEpochMilli(), Instant.now().toEpochMilli(),
bot.host() + ":" + bot.port(), bot.host() + ":" + bot.port(),
value.substring(1).substring(0, value.length() - 2) String.join(" ", Arrays.copyOfRange(args, 2, args.length))
) )
); );
context.sendOutput( context.sendOutput(Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())));
Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())) }
case "sendselecteditem" -> {
int senderMailsSentTotal = 0;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
senderMailsSentTotal++;
}
if (senderMailsSentTotal > 256) context.sendOutput(Component.text("You are sending too much mails!").color(NamedTextColor.RED));
final CompletableFuture<CompoundTag> future = bot.core().runTracked(
"minecraft:data get entity " +
UUIDUtilities.selector(sender.profile().getId()) +
" SelectedItem.tag.message"
); );
return tags; if (future == null) context.sendOutput(Component.text("There was an error while sending your mail").color(NamedTextColor.RED));
});
return null; future.thenApply(tags -> {
if (!tags.contains("LastOutput") || !(tags.get("LastOutput") instanceof StringTag)) return tags;
final StringTag lastOutput = tags.get("LastOutput");
final Component output = GsonComponentSerializer.gson().deserialize(lastOutput.getValue());
final List<Component> children = output.children();
// too lazy to use translation,.,.,.
final String parsed = ComponentUtilities.stringify(children.get(0));
if (parsed.startsWith("Found no elements matching ")) {
context.sendOutput(Component.text("Player has no `message` NBT tag in the selected item").color(NamedTextColor.RED));
return tags;
}
final String value = ComponentUtilities.stringify(((TranslatableComponent) children.get(0)).args().get(1));
if (!value.startsWith("\"") && !value.endsWith("\"") && !value.startsWith("'") && !value.endsWith("'")) {
context.sendOutput(Component.text("`message` NBT is not a string").color(NamedTextColor.RED));
return tags;
}
bot.mail().send(
new Mail(
sender.profile().getName(),
args[1],
Instant.now().toEpochMilli(),
bot.host() + ":" + bot.port(),
value.substring(1).substring(0, value.length() - 2)
)
);
context.sendOutput(
Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor()))
);
return tags;
});
}
case "read" -> {
// TODO: use less for loops?
int senderMailSize = 0;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
senderMailSize++;
}
if (senderMailSize == 0) context.sendOutput(Component.text("You have no new mails").color(NamedTextColor.RED));
final List<Component> mailsComponent = new ArrayList<>();
int i = 1;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
final DateTimeFormatter formatter = DateTimeFormat.forPattern("MMMM d, YYYY, hh:mm:ss a Z");
final String formattedTime = formatter.print(mail.timeSent());
mailsComponent.add(
Component.translatable(
"""
%s %s Sent by: %s %s
Contents:
%s""",
Component.text(i).color(ColorUtilities.getColorByString(bot.config().colorPalette().number())),
Component.text("-").color(NamedTextColor.DARK_GRAY),
Component.text(mail.sentBy()).color(ColorUtilities.getColorByString(bot.config().colorPalette().username())),
Component
.text("[Hover here for more info]")
.color(NamedTextColor.GREEN)
.hoverEvent(
HoverEvent.showText(
Component.translatable(
"""
Time sent: %s
Server: %s""",
Component.text(formattedTime).color(ColorUtilities.getColorByString(bot.config().colorPalette().string())),
Component.text(mail.server()).color(ColorUtilities.getColorByString(bot.config().colorPalette().string()))
).color(NamedTextColor.GREEN)
)
),
Component.text(mail.contents()).color(NamedTextColor.WHITE)
).color(NamedTextColor.GREEN)
);
i++;
}
final Component component = Component.empty()
.append(Component.text("Mails ").color(NamedTextColor.GREEN))
.append(Component.text("(").color(NamedTextColor.DARK_GRAY))
.append(Component.text(senderMailSize).color(NamedTextColor.GRAY))
.append(Component.text(")").color(NamedTextColor.DARK_GRAY))
.append(Component.newline())
.append(Component.join(JoinConfiguration.newlines(), mailsComponent));
if (context.inGame()) {
bot.chat().tellraw(
component,
context.sender().profile().getId()
);
} else {
context.sendOutput(component);
}
for (JsonElement mailElement : MailPlugin.mails().deepCopy()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (mail.sentTo().equals(sender.profile().getName())) MailPlugin.mails().remove(mailElement);
}
PersistentDataUtilities.put("mails", MailPlugin.mails());
}
default -> context.sendOutput(Component.text("Invalid argument").color(NamedTextColor.RED));
} }
case "read" -> { });
// TODO: use less for loops?
int senderMailSize = 0; return null;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
senderMailSize++;
}
if (senderMailSize == 0) return Component.text("You have no new mails").color(NamedTextColor.RED);
final List<Component> mailsComponent = new ArrayList<>();
int i = 1;
for (JsonElement mailElement : MailPlugin.mails()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (!mail.sentTo().equals(sender.profile().getName())) continue;
final DateTimeFormatter formatter = DateTimeFormat.forPattern("MMMM d, YYYY, hh:mm:ss a Z");
final String formattedTime = formatter.print(mail.timeSent());
mailsComponent.add(
Component.translatable(
"""
%s %s Sent by: %s %s
Contents:
%s""",
Component.text(i).color(ColorUtilities.getColorByString(bot.config().colorPalette().number())),
Component.text("-").color(NamedTextColor.DARK_GRAY),
Component.text(mail.sentBy()).color(ColorUtilities.getColorByString(bot.config().colorPalette().username())),
Component
.text("[Hover here for more info]")
.color(NamedTextColor.GREEN)
.hoverEvent(
HoverEvent.showText(
Component.translatable(
"""
Time sent: %s
Server: %s""",
Component.text(formattedTime).color(ColorUtilities.getColorByString(bot.config().colorPalette().string())),
Component.text(mail.server()).color(ColorUtilities.getColorByString(bot.config().colorPalette().string()))
).color(NamedTextColor.GREEN)
)
),
Component.text(mail.contents()).color(NamedTextColor.WHITE)
).color(NamedTextColor.GREEN)
);
i++;
}
final Component component = Component.empty()
.append(Component.text("Mails ").color(NamedTextColor.GREEN))
.append(Component.text("(").color(NamedTextColor.DARK_GRAY))
.append(Component.text(senderMailSize).color(NamedTextColor.GRAY))
.append(Component.text(")").color(NamedTextColor.DARK_GRAY))
.append(Component.newline())
.append(Component.join(JoinConfiguration.newlines(), mailsComponent));
if (context.inGame()) {
bot.chat().tellraw(
component,
context.sender().profile().getId()
);
} else {
context.sendOutput(component);
}
for (JsonElement mailElement : MailPlugin.mails().deepCopy()) {
final Mail mail = gson.fromJson(mailElement, Mail.class);
if (mail.sentTo().equals(sender.profile().getName())) MailPlugin.mails().remove(mailElement);
}
PersistentDataUtilities.put("mails", MailPlugin.mails());
return null;
}
default -> {
return Component.text("Invalid argument").color(NamedTextColor.RED);
}
}
} }
} }