diff --git a/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java b/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java
index d8f0fd542..7973bafbe 100644
--- a/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java
+++ b/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java
@@ -37,16 +37,15 @@ public class SendMailCommand implements CommandHandler {
if (!mailBeingConstructed.containsKey(senderId)) {
switch (args.size()) {
- case 1:
+ case 1 -> {
MailBuilder mailBuilder;
switch (args.get(0).toLowerCase()) {
- case "help":
+ case "help" -> {
CommandHandler.sendMessage(sender, this.getClass().getAnnotation(Command.class).description() + "\nUsage: " + this.getClass().getAnnotation(Command.class).usage());
return;
- case "all":
- mailBuilder = new MailBuilder(true, new Mail());
- break;
- default:
+ }
+ case "all" -> mailBuilder = new MailBuilder(true, new Mail());
+ default -> {
if (DatabaseHelper.getPlayerById(Integer.parseInt(args.get(0))) != null) {
mailBuilder = new MailBuilder(Integer.parseInt(args.get(0)), new Mail());
break;
@@ -54,29 +53,27 @@ public class SendMailCommand implements CommandHandler {
CommandHandler.sendMessage(sender, "The user with an id of '" + args.get(0) + "' does not exist");
return;
}
+ }
}
mailBeingConstructed.put(senderId, mailBuilder);
CommandHandler.sendMessage(sender, "Starting composition of message.\nPlease use `/sendmail
` to continue.\nYou can use `/sendmail stop` at any time");
- break;
- case 2:
- CommandHandler.sendMessage(sender, "Mail templates coming soon implemented...");
- return;
- default:
- CommandHandler.sendMessage(sender, "Invalid arguments.\nUsage `/sendmail [templateId]`");
- return;
+ }
+ case 2 -> CommandHandler.sendMessage(sender, "Mail templates coming soon implemented...");
+ default -> CommandHandler.sendMessage(sender, "Invalid arguments.\nUsage `/sendmail [templateId]`");
}
} else {
MailBuilder mailBuilder = mailBeingConstructed.get(senderId);
if (args.size() >= 1) {
switch (args.get(0).toLowerCase()) {
- case "stop":
+ case "stop" -> {
mailBeingConstructed.remove(senderId);
CommandHandler.sendMessage(sender, "Message sending cancelled");
return;
- case "finish":
+ }
+ case "finish" -> {
if (mailBuilder.constructionStage == 3) {
- if(mailBuilder.sendToAll == false) {
+ if (mailBuilder.sendToAll == false) {
Grasscutter.getGameServer().getPlayerByUid(mailBuilder.recipient, true).sendMail(mailBuilder.mail);
CommandHandler.sendMessage(sender, "Message sent to user " + mailBuilder.recipient + "!");
} else {
@@ -90,37 +87,40 @@ public class SendMailCommand implements CommandHandler {
CommandHandler.sendMessage(sender, "Message composition not at final stage.\nPlease use `/sendmail " + getConstructionArgs(mailBuilder.constructionStage) + "` or `/sendmail stop` to cancel");
}
return;
- case "help":
+ }
+ case "help" -> {
CommandHandler.sendMessage(sender, "Please use `/sendmail " + getConstructionArgs(mailBuilder.constructionStage) + "`");
return;
- default:
+ }
+ default -> {
switch (mailBuilder.constructionStage) {
- case 0:
+ case 0 -> {
String title = String.join(" ", args.subList(0, args.size()));
mailBuilder.mail.mailContent.title = title;
CommandHandler.sendMessage(sender, "Message title set as '" + title + "'.\nUse '/sendmail ' to continue.");
mailBuilder.constructionStage++;
- break;
- case 1:
+ }
+ case 1 -> {
String contents = String.join(" ", args.subList(0, args.size()));
mailBuilder.mail.mailContent.content = contents;
CommandHandler.sendMessage(sender, "Message contents set as '" + contents + "'.\nUse '/sendmail ' to continue.");
mailBuilder.constructionStage++;
- break;
- case 2:
+ }
+ case 2 -> {
String msgSender = String.join(" ", args.subList(0, args.size()));
mailBuilder.mail.mailContent.sender = msgSender;
CommandHandler.sendMessage(sender, "Message sender set as '" + msgSender + "'.\nUse '/sendmail [amount] [level]' to continue.");
mailBuilder.constructionStage++;
- break;
- case 3:
+ }
+ case 3 -> {
// Literally just copy-pasted from the give command lol.
int item, lvl, amount = 1;
switch (args.size()) {
- default: // *No args*
+ default -> { // *No args*
CommandHandler.sendMessage(sender, "Usage: give [player] [amount]");
return;
- case 1: //
+ }
+ case 1 -> { //
try {
item = Integer.parseInt(args.get(0));
lvl = 1;
@@ -129,13 +129,13 @@ public class SendMailCommand implements CommandHandler {
CommandHandler.sendMessage(sender, "Invalid item id.");
return;
}
- break;
- case 2: // [amount]
+ }
+ case 2 -> { // [amount]
lvl = 1;
item = Integer.parseInt(args.get(0));
amount = Integer.parseInt(args.get(1));
- break;
- case 3: // [amount] [level]
+ }
+ case 3 -> { // [amount] [level]
try {
item = Integer.parseInt(args.get(0));
amount = Integer.parseInt(args.get(1));
@@ -146,12 +146,13 @@ public class SendMailCommand implements CommandHandler {
CommandHandler.sendMessage(sender, "Invalid item or player ID.");
return;
}
- break;
+ }
}
mailBuilder.mail.itemList.add(new Mail.MailItem(item, amount, lvl));
CommandHandler.sendMessage(sender, String.format("Attached %s of %s (level %s) to the message.\nContinue adding more items or use `/sendmail finish` to send the message.", amount, item, lvl));
+ }
}
- break;
+ }
}
} else {
CommandHandler.sendMessage(sender, "Invalid arguments \n Please use `/sendmail " + getConstructionArgs(mailBuilder.constructionStage));
@@ -159,19 +160,25 @@ public class SendMailCommand implements CommandHandler {
}
}
- public String getConstructionArgs(int stage) {
+ private String getConstructionArgs(int stage) {
switch (stage) {
- case 0:
+ case 0 -> {
return "";
- case 1:
+ }
+ case 1 -> {
return "";
- case 2:
+ }
+ case 2 -> {
return "";
- case 3:
+
+ }
+ case 3 -> {
return " [amount] [level]";
- default:
+ }
+ default -> {
Thread.dumpStack();
return "ERROR: invalid construction stage " + stage + ". Check console for stacktrace.";
+ }
}
}
diff --git a/src/main/java/emu/grasscutter/game/GenshinPlayer.java b/src/main/java/emu/grasscutter/game/GenshinPlayer.java
index 5a5b74111..490a8dbdc 100644
--- a/src/main/java/emu/grasscutter/game/GenshinPlayer.java
+++ b/src/main/java/emu/grasscutter/game/GenshinPlayer.java
@@ -37,30 +37,7 @@ import emu.grasscutter.net.proto.PlayerWorldLocationInfoOuterClass;
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.game.GameSession;
-import emu.grasscutter.server.packet.send.PacketAbilityInvocationsNotify;
-import emu.grasscutter.server.packet.send.PacketAvatarAddNotify;
-import emu.grasscutter.server.packet.send.PacketAvatarDataNotify;
-import emu.grasscutter.server.packet.send.PacketAvatarGainCostumeNotify;
-import emu.grasscutter.server.packet.send.PacketAvatarGainFlycloakNotify;
-import emu.grasscutter.server.packet.send.PacketClientAbilityInitFinishNotify;
-import emu.grasscutter.server.packet.send.PacketCombatInvocationsNotify;
-import emu.grasscutter.server.packet.send.PacketGadgetInteractRsp;
-import emu.grasscutter.server.packet.send.PacketItemAddHintNotify;
-import emu.grasscutter.server.packet.send.PacketOpenStateUpdateNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpResultNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerDataNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerPropNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerStoreNotify;
-import emu.grasscutter.server.packet.send.PacketPrivateChatNotify;
-import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
-import emu.grasscutter.server.packet.send.PacketPlayerLevelRewardUpdateNotify;
-import emu.grasscutter.server.packet.send.PacketSetNameCardRsp;
-import emu.grasscutter.server.packet.send.PacketStoreWeightLimitNotify;
-import emu.grasscutter.server.packet.send.PacketUnlockNameCardNotify;
-import emu.grasscutter.server.packet.send.PacketWorldPlayerLocationNotify;
-import emu.grasscutter.server.packet.send.PacketWorldPlayerRTTNotify;
-import emu.grasscutter.server.packet.send.PacketMailChangeNotify;
+import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.DateHelper;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerApplyEnterMpResultNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerApplyEnterMpResultNotify.java
index c55ee3b12..e164b5d0b 100644
--- a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerApplyEnterMpResultNotify.java
+++ b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerApplyEnterMpResultNotify.java
@@ -4,11 +4,12 @@ import emu.grasscutter.game.GenshinPlayer;
import emu.grasscutter.net.packet.GenshinPacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
+import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify;
public class PacketPlayerApplyEnterMpResultNotify extends GenshinPacket {
- public PacketPlayerApplyEnterMpResultNotify(GenshinPlayer target, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) {
+ public PacketPlayerApplyEnterMpResultNotify(GenshinPlayer target, boolean isAgreed, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason reason) {
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()