From 4e3a1c769f7cb4e365f601ac321b9385a3e12e24 Mon Sep 17 00:00:00 2001 From: Benjamin Elsdon Date: Sun, 24 Apr 2022 19:06:52 +0800 Subject: [PATCH] THE MAILBOX ACTUALLY WORKS CORRECTLY NOW --- src/main/java/emu/grasscutter/game/Mail.java | 2 +- .../packet/send/PacketGetAllMailRsp.java | 101 +++++++++++------- 2 files changed, 63 insertions(+), 40 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/Mail.java b/src/main/java/emu/grasscutter/game/Mail.java index 9511bdb63..0eb377eac 100644 --- a/src/main/java/emu/grasscutter/game/Mail.java +++ b/src/main/java/emu/grasscutter/game/Mail.java @@ -47,7 +47,7 @@ public class Mail { this._id = _id; this.mailContent = mailContent; this.itemList = itemList; - this.sendTime = (int) Instant.now().EPOCH.getEpochSecond(); + this.sendTime = (int) Instant.now().getEpochSecond(); this.expireTime = expireTime; this.importance = importance; this.isRead = false; diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java index 00cd263b9..43f57df12 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java @@ -11,7 +11,9 @@ import emu.grasscutter.net.proto.GetAllMailRspOuterClass.GetAllMailRsp; import emu.grasscutter.net.proto.MailDataOuterClass.MailData; import emu.grasscutter.net.proto.MailTextContentOuterClass.MailTextContent; +import javax.swing.*; import java.util.ArrayList; +import java.util.Base64; import java.util.List; public class PacketGetAllMailRsp extends GenshinPacket { @@ -20,48 +22,69 @@ public class PacketGetAllMailRsp extends GenshinPacket { super(PacketOpcodes.GetAllMailRsp); Grasscutter.getLogger().info(String.valueOf(isGiftMail)); - GetAllMailRsp.Builder proto = GetAllMailRsp.newBuilder(); - - List mailDataList = new ArrayList(); - - // Dummy data. - for(Mail message : player.getMail()) { - MailTextContent.Builder mailTextContent = MailTextContent.newBuilder(); - mailTextContent.setTitle(message.mailContent.title); - mailTextContent.setContent(message.mailContent.content); - mailTextContent.setSender(message.mailContent.sender); - - List mailItems = new ArrayList(); - - for(Mail.MailItem item : message.itemList) { - MailItemOuterClass.MailItem.Builder mailItem = MailItemOuterClass.MailItem.newBuilder(); - ItemParamOuterClass.ItemParam.Builder itemParam = ItemParamOuterClass.ItemParam.newBuilder(); - itemParam.setItemId(item.itemId); - itemParam.setCount(item.itemCount); - mailItem.setItemParam(itemParam.build()); - - mailItems.add(mailItem.build()); + if (isGiftMail) { + // TODO: Gift Mail + // Make sure to send the stupid empty packet + Base64.Decoder decoder = Base64.getDecoder(); + byte[] rsp = decoder.decode("IAE="); + try { + GetAllMailRsp var = GetAllMailRsp.parseFrom(rsp); + this.setData(var.toBuilder().build()); + } catch (Exception e) { } - MailDataOuterClass.MailData.Builder mailData = MailDataOuterClass.MailData.newBuilder(); - mailData.setMailId(message._id); - mailData.setMailTextContent(mailTextContent.build()); - mailData.addAllItemList(mailItems); - mailData.setSendTime((int)message.sendTime); - mailData.setExpireTime((int)message.expireTime); - mailData.setImportance(message.importance); - mailData.setIsRead(message.isRead); - mailData.setIsAttachmentGot(message.isAttachmentGot); - mailData.setStateValue(message.stateValue); + } else { + if (player.getMail().size() != 0) { // Make sure the player has mail + GetAllMailRsp.Builder proto = GetAllMailRsp.newBuilder(); + List mailDataList = new ArrayList(); - mailDataList.add(mailData.build()); + for (Mail message : player.getMail()) { + if(message.stateValue == 1) { //Make sure it isn't a gift + MailTextContent.Builder mailTextContent = MailTextContent.newBuilder(); + mailTextContent.setTitle(message.mailContent.title); + mailTextContent.setContent(message.mailContent.content); + mailTextContent.setSender(message.mailContent.sender); + + List mailItems = new ArrayList<>(); + + for (Mail.MailItem item : message.itemList) { + MailItemOuterClass.MailItem.Builder mailItem = MailItemOuterClass.MailItem.newBuilder(); + ItemParamOuterClass.ItemParam.Builder itemParam = ItemParamOuterClass.ItemParam.newBuilder(); + itemParam.setItemId(item.itemId); + itemParam.setCount(item.itemCount); + mailItem.setItemParam(itemParam.build()); + + mailItems.add(mailItem.build()); + } + + MailDataOuterClass.MailData.Builder mailData = MailDataOuterClass.MailData.newBuilder(); + mailData.setMailId(message._id); + mailData.setMailTextContent(mailTextContent.build()); + mailData.addAllItemList(mailItems); + mailData.setSendTime((int) message.sendTime); + mailData.setExpireTime((int) message.expireTime); + mailData.setImportance(message.importance); + mailData.setIsRead(message.isRead); + mailData.setIsAttachmentGot(message.isAttachmentGot); + mailData.setStateValue(1); + + mailDataList.add(mailData.build()); + } + } + + proto.addAllMailList(mailDataList); + proto.setIsTruncated(true); + + this.setData(proto.build()); + } else { + // Make sure to send the stupid empty packet + Base64.Decoder decoder = Base64.getDecoder(); + byte[] rsp = decoder.decode("IAE="); + try { + GetAllMailRsp var = GetAllMailRsp.parseFrom(rsp); + this.setData(var.toBuilder().build()); + } catch (Exception e) {} + } } - - proto.addAllMailList(mailDataList); - //proto.setIsTruncated(true); - - Grasscutter.getLogger().info(Grasscutter.getDispatchServer().getGsonFactory().toJson(proto.build())); - - this.setData(proto.build()); } }