From ddafeb9ed31b12d463058e36c50692d5fa634334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=8F=E3=83=A0=E3=82=B9=E3=82=B1=20=E3=83=8F=E3=83=A0?= Date: Mon, 3 Apr 2023 00:18:48 +0900 Subject: [PATCH 1/2] fix: mail --- .../net/proto/GetAllMailNotifyOuterClass.java | 547 +++++++ .../GetAllMailResultNotifyOuterClass.java | 1288 +++++++++++++++++ .../java/emu/grasscutter/game/mail/Mail.java | 59 +- .../grasscutter/net/packet/PacketOpcodes.java | 2 - .../packet/recv/HandlerGetAllMailNotify.java | 47 + .../packet/recv/HandlerGetAllMailReq.java | 21 - .../send/PacketGetAllMailResultNotify.java | 22 + .../packet/send/PacketGetAllMailRsp.java | 78 - .../java/emu/grasscutter/utils/Utils.java | 26 +- 9 files changed, 1967 insertions(+), 123 deletions(-) create mode 100644 src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java create mode 100644 src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java delete mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java delete mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java diff --git a/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java b/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java new file mode 100644 index 000000000..506cd35b6 --- /dev/null +++ b/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailNotifyOuterClass.java @@ -0,0 +1,547 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: GetAllMailNotify.proto + +package emu.grasscutter.net.proto; + +public final class GetAllMailNotifyOuterClass { + private GetAllMailNotifyOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface GetAllMailNotifyOrBuilder extends + // @@protoc_insertion_point(interface_extends:GetAllMailNotify) + com.google.protobuf.MessageOrBuilder { + + /** + * bool is_collected = 6; + * @return The isCollected. + */ + boolean getIsCollected(); + } + /** + *
+   * Name: PFHIOOMPNBH
+   * CmdId: 1442
+   * 
+ * + * Protobuf type {@code GetAllMailNotify} + */ + public static final class GetAllMailNotify extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:GetAllMailNotify) + GetAllMailNotifyOrBuilder { + private static final long serialVersionUID = 0L; + // Use GetAllMailNotify.newBuilder() to construct. + private GetAllMailNotify(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GetAllMailNotify() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GetAllMailNotify(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GetAllMailNotify( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 48: { + + isCollected_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.internal_static_GetAllMailNotify_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.internal_static_GetAllMailNotify_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.class, emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.Builder.class); + } + + public static final int IS_COLLECTED_FIELD_NUMBER = 6; + private boolean isCollected_; + /** + * bool is_collected = 6; + * @return The isCollected. + */ + @java.lang.Override + public boolean getIsCollected() { + return isCollected_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (isCollected_ != false) { + output.writeBool(6, isCollected_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (isCollected_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, isCollected_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify)) { + return super.equals(obj); + } + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify other = (emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify) obj; + + if (getIsCollected() + != other.getIsCollected()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + IS_COLLECTED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsCollected()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Name: PFHIOOMPNBH
+     * CmdId: 1442
+     * 
+ * + * Protobuf type {@code GetAllMailNotify} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:GetAllMailNotify) + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotifyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.internal_static_GetAllMailNotify_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.internal_static_GetAllMailNotify_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.class, emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.Builder.class); + } + + // Construct using emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + isCollected_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.internal_static_GetAllMailNotify_descriptor; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify getDefaultInstanceForType() { + return emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.getDefaultInstance(); + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify build() { + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify buildPartial() { + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify result = new emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify(this); + result.isCollected_ = isCollected_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify) { + return mergeFrom((emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify other) { + if (other == emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify.getDefaultInstance()) return this; + if (other.getIsCollected() != false) { + setIsCollected(other.getIsCollected()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private boolean isCollected_ ; + /** + * bool is_collected = 6; + * @return The isCollected. + */ + @java.lang.Override + public boolean getIsCollected() { + return isCollected_; + } + /** + * bool is_collected = 6; + * @param value The isCollected to set. + * @return This builder for chaining. + */ + public Builder setIsCollected(boolean value) { + + isCollected_ = value; + onChanged(); + return this; + } + /** + * bool is_collected = 6; + * @return This builder for chaining. + */ + public Builder clearIsCollected() { + + isCollected_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:GetAllMailNotify) + } + + // @@protoc_insertion_point(class_scope:GetAllMailNotify) + private static final emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify(); + } + + public static emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetAllMailNotify parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GetAllMailNotify(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_GetAllMailNotify_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_GetAllMailNotify_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\026GetAllMailNotify.proto\"(\n\020GetAllMailNo" + + "tify\022\024\n\014is_collected\030\006 \001(\010B\033\n\031emu.grassc" + + "utter.net.protob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_GetAllMailNotify_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_GetAllMailNotify_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_GetAllMailNotify_descriptor, + new java.lang.String[] { "IsCollected", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java b/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java new file mode 100644 index 000000000..6b9963acf --- /dev/null +++ b/src/generated/main/java/emu/grasscutter/net/proto/GetAllMailResultNotifyOuterClass.java @@ -0,0 +1,1288 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: GetAllMailResultNotify.proto + +package emu.grasscutter.net.proto; + +public final class GetAllMailResultNotifyOuterClass { + private GetAllMailResultNotifyOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface GetAllMailResultNotifyOrBuilder extends + // @@protoc_insertion_point(interface_extends:GetAllMailResultNotify) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 retcode = 6; + * @return The retcode. + */ + int getRetcode(); + + /** + * uint32 packet_be_sent_num = 1; + * @return The packetBeSentNum. + */ + int getPacketBeSentNum(); + + /** + * repeated .MailData mail_list = 10; + */ + java.util.List + getMailListList(); + /** + * repeated .MailData mail_list = 10; + */ + emu.grasscutter.net.proto.MailDataOuterClass.MailData getMailList(int index); + /** + * repeated .MailData mail_list = 10; + */ + int getMailListCount(); + /** + * repeated .MailData mail_list = 10; + */ + java.util.List + getMailListOrBuilderList(); + /** + * repeated .MailData mail_list = 10; + */ + emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder getMailListOrBuilder( + int index); + + /** + * string transaction = 5; + * @return The transaction. + */ + java.lang.String getTransaction(); + /** + * string transaction = 5; + * @return The bytes for transaction. + */ + com.google.protobuf.ByteString + getTransactionBytes(); + + /** + * bool is_collected = 8; + * @return The isCollected. + */ + boolean getIsCollected(); + + /** + * uint32 packet_num = 13; + * @return The packetNum. + */ + int getPacketNum(); + } + /** + *
+   * Name: ILFMLLOCKFB
+   * CmdId: 1429
+   * 
+ * + * Protobuf type {@code GetAllMailResultNotify} + */ + public static final class GetAllMailResultNotify extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:GetAllMailResultNotify) + GetAllMailResultNotifyOrBuilder { + private static final long serialVersionUID = 0L; + // Use GetAllMailResultNotify.newBuilder() to construct. + private GetAllMailResultNotify(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GetAllMailResultNotify() { + mailList_ = java.util.Collections.emptyList(); + transaction_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GetAllMailResultNotify(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GetAllMailResultNotify( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + packetBeSentNum_ = input.readUInt32(); + break; + } + case 42: { + java.lang.String s = input.readStringRequireUtf8(); + + transaction_ = s; + break; + } + case 48: { + + retcode_ = input.readInt32(); + break; + } + case 64: { + + isCollected_ = input.readBool(); + break; + } + case 82: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + mailList_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + mailList_.add( + input.readMessage(emu.grasscutter.net.proto.MailDataOuterClass.MailData.parser(), extensionRegistry)); + break; + } + case 104: { + + packetNum_ = input.readUInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + mailList_ = java.util.Collections.unmodifiableList(mailList_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.internal_static_GetAllMailResultNotify_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.internal_static_GetAllMailResultNotify_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.class, emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.Builder.class); + } + + public static final int RETCODE_FIELD_NUMBER = 6; + private int retcode_; + /** + * int32 retcode = 6; + * @return The retcode. + */ + @java.lang.Override + public int getRetcode() { + return retcode_; + } + + public static final int PACKET_BE_SENT_NUM_FIELD_NUMBER = 1; + private int packetBeSentNum_; + /** + * uint32 packet_be_sent_num = 1; + * @return The packetBeSentNum. + */ + @java.lang.Override + public int getPacketBeSentNum() { + return packetBeSentNum_; + } + + public static final int MAIL_LIST_FIELD_NUMBER = 10; + private java.util.List mailList_; + /** + * repeated .MailData mail_list = 10; + */ + @java.lang.Override + public java.util.List getMailListList() { + return mailList_; + } + /** + * repeated .MailData mail_list = 10; + */ + @java.lang.Override + public java.util.List + getMailListOrBuilderList() { + return mailList_; + } + /** + * repeated .MailData mail_list = 10; + */ + @java.lang.Override + public int getMailListCount() { + return mailList_.size(); + } + /** + * repeated .MailData mail_list = 10; + */ + @java.lang.Override + public emu.grasscutter.net.proto.MailDataOuterClass.MailData getMailList(int index) { + return mailList_.get(index); + } + /** + * repeated .MailData mail_list = 10; + */ + @java.lang.Override + public emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder getMailListOrBuilder( + int index) { + return mailList_.get(index); + } + + public static final int TRANSACTION_FIELD_NUMBER = 5; + private volatile java.lang.Object transaction_; + /** + * string transaction = 5; + * @return The transaction. + */ + @java.lang.Override + public java.lang.String getTransaction() { + java.lang.Object ref = transaction_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + transaction_ = s; + return s; + } + } + /** + * string transaction = 5; + * @return The bytes for transaction. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTransactionBytes() { + java.lang.Object ref = transaction_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + transaction_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int IS_COLLECTED_FIELD_NUMBER = 8; + private boolean isCollected_; + /** + * bool is_collected = 8; + * @return The isCollected. + */ + @java.lang.Override + public boolean getIsCollected() { + return isCollected_; + } + + public static final int PACKET_NUM_FIELD_NUMBER = 13; + private int packetNum_; + /** + * uint32 packet_num = 13; + * @return The packetNum. + */ + @java.lang.Override + public int getPacketNum() { + return packetNum_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (packetBeSentNum_ != 0) { + output.writeUInt32(1, packetBeSentNum_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transaction_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, transaction_); + } + if (retcode_ != 0) { + output.writeInt32(6, retcode_); + } + if (isCollected_ != false) { + output.writeBool(8, isCollected_); + } + for (int i = 0; i < mailList_.size(); i++) { + output.writeMessage(10, mailList_.get(i)); + } + if (packetNum_ != 0) { + output.writeUInt32(13, packetNum_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (packetBeSentNum_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, packetBeSentNum_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(transaction_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, transaction_); + } + if (retcode_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, retcode_); + } + if (isCollected_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(8, isCollected_); + } + for (int i = 0; i < mailList_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, mailList_.get(i)); + } + if (packetNum_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(13, packetNum_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify)) { + return super.equals(obj); + } + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify other = (emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify) obj; + + if (getRetcode() + != other.getRetcode()) return false; + if (getPacketBeSentNum() + != other.getPacketBeSentNum()) return false; + if (!getMailListList() + .equals(other.getMailListList())) return false; + if (!getTransaction() + .equals(other.getTransaction())) return false; + if (getIsCollected() + != other.getIsCollected()) return false; + if (getPacketNum() + != other.getPacketNum()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + RETCODE_FIELD_NUMBER; + hash = (53 * hash) + getRetcode(); + hash = (37 * hash) + PACKET_BE_SENT_NUM_FIELD_NUMBER; + hash = (53 * hash) + getPacketBeSentNum(); + if (getMailListCount() > 0) { + hash = (37 * hash) + MAIL_LIST_FIELD_NUMBER; + hash = (53 * hash) + getMailListList().hashCode(); + } + hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + getTransaction().hashCode(); + hash = (37 * hash) + IS_COLLECTED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsCollected()); + hash = (37 * hash) + PACKET_NUM_FIELD_NUMBER; + hash = (53 * hash) + getPacketNum(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Name: ILFMLLOCKFB
+     * CmdId: 1429
+     * 
+ * + * Protobuf type {@code GetAllMailResultNotify} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:GetAllMailResultNotify) + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotifyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.internal_static_GetAllMailResultNotify_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.internal_static_GetAllMailResultNotify_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.class, emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.Builder.class); + } + + // Construct using emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getMailListFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + retcode_ = 0; + + packetBeSentNum_ = 0; + + if (mailListBuilder_ == null) { + mailList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + mailListBuilder_.clear(); + } + transaction_ = ""; + + isCollected_ = false; + + packetNum_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.internal_static_GetAllMailResultNotify_descriptor; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify getDefaultInstanceForType() { + return emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.getDefaultInstance(); + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify build() { + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify buildPartial() { + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify result = new emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify(this); + int from_bitField0_ = bitField0_; + result.retcode_ = retcode_; + result.packetBeSentNum_ = packetBeSentNum_; + if (mailListBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + mailList_ = java.util.Collections.unmodifiableList(mailList_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.mailList_ = mailList_; + } else { + result.mailList_ = mailListBuilder_.build(); + } + result.transaction_ = transaction_; + result.isCollected_ = isCollected_; + result.packetNum_ = packetNum_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify) { + return mergeFrom((emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify other) { + if (other == emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.getDefaultInstance()) return this; + if (other.getRetcode() != 0) { + setRetcode(other.getRetcode()); + } + if (other.getPacketBeSentNum() != 0) { + setPacketBeSentNum(other.getPacketBeSentNum()); + } + if (mailListBuilder_ == null) { + if (!other.mailList_.isEmpty()) { + if (mailList_.isEmpty()) { + mailList_ = other.mailList_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureMailListIsMutable(); + mailList_.addAll(other.mailList_); + } + onChanged(); + } + } else { + if (!other.mailList_.isEmpty()) { + if (mailListBuilder_.isEmpty()) { + mailListBuilder_.dispose(); + mailListBuilder_ = null; + mailList_ = other.mailList_; + bitField0_ = (bitField0_ & ~0x00000001); + mailListBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getMailListFieldBuilder() : null; + } else { + mailListBuilder_.addAllMessages(other.mailList_); + } + } + } + if (!other.getTransaction().isEmpty()) { + transaction_ = other.transaction_; + onChanged(); + } + if (other.getIsCollected() != false) { + setIsCollected(other.getIsCollected()); + } + if (other.getPacketNum() != 0) { + setPacketNum(other.getPacketNum()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int retcode_ ; + /** + * int32 retcode = 6; + * @return The retcode. + */ + @java.lang.Override + public int getRetcode() { + return retcode_; + } + /** + * int32 retcode = 6; + * @param value The retcode to set. + * @return This builder for chaining. + */ + public Builder setRetcode(int value) { + + retcode_ = value; + onChanged(); + return this; + } + /** + * int32 retcode = 6; + * @return This builder for chaining. + */ + public Builder clearRetcode() { + + retcode_ = 0; + onChanged(); + return this; + } + + private int packetBeSentNum_ ; + /** + * uint32 packet_be_sent_num = 1; + * @return The packetBeSentNum. + */ + @java.lang.Override + public int getPacketBeSentNum() { + return packetBeSentNum_; + } + /** + * uint32 packet_be_sent_num = 1; + * @param value The packetBeSentNum to set. + * @return This builder for chaining. + */ + public Builder setPacketBeSentNum(int value) { + + packetBeSentNum_ = value; + onChanged(); + return this; + } + /** + * uint32 packet_be_sent_num = 1; + * @return This builder for chaining. + */ + public Builder clearPacketBeSentNum() { + + packetBeSentNum_ = 0; + onChanged(); + return this; + } + + private java.util.List mailList_ = + java.util.Collections.emptyList(); + private void ensureMailListIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + mailList_ = new java.util.ArrayList(mailList_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + emu.grasscutter.net.proto.MailDataOuterClass.MailData, emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder, emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder> mailListBuilder_; + + /** + * repeated .MailData mail_list = 10; + */ + public java.util.List getMailListList() { + if (mailListBuilder_ == null) { + return java.util.Collections.unmodifiableList(mailList_); + } else { + return mailListBuilder_.getMessageList(); + } + } + /** + * repeated .MailData mail_list = 10; + */ + public int getMailListCount() { + if (mailListBuilder_ == null) { + return mailList_.size(); + } else { + return mailListBuilder_.getCount(); + } + } + /** + * repeated .MailData mail_list = 10; + */ + public emu.grasscutter.net.proto.MailDataOuterClass.MailData getMailList(int index) { + if (mailListBuilder_ == null) { + return mailList_.get(index); + } else { + return mailListBuilder_.getMessage(index); + } + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder setMailList( + int index, emu.grasscutter.net.proto.MailDataOuterClass.MailData value) { + if (mailListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMailListIsMutable(); + mailList_.set(index, value); + onChanged(); + } else { + mailListBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder setMailList( + int index, emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder builderForValue) { + if (mailListBuilder_ == null) { + ensureMailListIsMutable(); + mailList_.set(index, builderForValue.build()); + onChanged(); + } else { + mailListBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder addMailList(emu.grasscutter.net.proto.MailDataOuterClass.MailData value) { + if (mailListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMailListIsMutable(); + mailList_.add(value); + onChanged(); + } else { + mailListBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder addMailList( + int index, emu.grasscutter.net.proto.MailDataOuterClass.MailData value) { + if (mailListBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMailListIsMutable(); + mailList_.add(index, value); + onChanged(); + } else { + mailListBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder addMailList( + emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder builderForValue) { + if (mailListBuilder_ == null) { + ensureMailListIsMutable(); + mailList_.add(builderForValue.build()); + onChanged(); + } else { + mailListBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder addMailList( + int index, emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder builderForValue) { + if (mailListBuilder_ == null) { + ensureMailListIsMutable(); + mailList_.add(index, builderForValue.build()); + onChanged(); + } else { + mailListBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder addAllMailList( + java.lang.Iterable values) { + if (mailListBuilder_ == null) { + ensureMailListIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, mailList_); + onChanged(); + } else { + mailListBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder clearMailList() { + if (mailListBuilder_ == null) { + mailList_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + mailListBuilder_.clear(); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public Builder removeMailList(int index) { + if (mailListBuilder_ == null) { + ensureMailListIsMutable(); + mailList_.remove(index); + onChanged(); + } else { + mailListBuilder_.remove(index); + } + return this; + } + /** + * repeated .MailData mail_list = 10; + */ + public emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder getMailListBuilder( + int index) { + return getMailListFieldBuilder().getBuilder(index); + } + /** + * repeated .MailData mail_list = 10; + */ + public emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder getMailListOrBuilder( + int index) { + if (mailListBuilder_ == null) { + return mailList_.get(index); } else { + return mailListBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .MailData mail_list = 10; + */ + public java.util.List + getMailListOrBuilderList() { + if (mailListBuilder_ != null) { + return mailListBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(mailList_); + } + } + /** + * repeated .MailData mail_list = 10; + */ + public emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder addMailListBuilder() { + return getMailListFieldBuilder().addBuilder( + emu.grasscutter.net.proto.MailDataOuterClass.MailData.getDefaultInstance()); + } + /** + * repeated .MailData mail_list = 10; + */ + public emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder addMailListBuilder( + int index) { + return getMailListFieldBuilder().addBuilder( + index, emu.grasscutter.net.proto.MailDataOuterClass.MailData.getDefaultInstance()); + } + /** + * repeated .MailData mail_list = 10; + */ + public java.util.List + getMailListBuilderList() { + return getMailListFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + emu.grasscutter.net.proto.MailDataOuterClass.MailData, emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder, emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder> + getMailListFieldBuilder() { + if (mailListBuilder_ == null) { + mailListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + emu.grasscutter.net.proto.MailDataOuterClass.MailData, emu.grasscutter.net.proto.MailDataOuterClass.MailData.Builder, emu.grasscutter.net.proto.MailDataOuterClass.MailDataOrBuilder>( + mailList_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + mailList_ = null; + } + return mailListBuilder_; + } + + private java.lang.Object transaction_ = ""; + /** + * string transaction = 5; + * @return The transaction. + */ + public java.lang.String getTransaction() { + java.lang.Object ref = transaction_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + transaction_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string transaction = 5; + * @return The bytes for transaction. + */ + public com.google.protobuf.ByteString + getTransactionBytes() { + java.lang.Object ref = transaction_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + transaction_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string transaction = 5; + * @param value The transaction to set. + * @return This builder for chaining. + */ + public Builder setTransaction( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + transaction_ = value; + onChanged(); + return this; + } + /** + * string transaction = 5; + * @return This builder for chaining. + */ + public Builder clearTransaction() { + + transaction_ = getDefaultInstance().getTransaction(); + onChanged(); + return this; + } + /** + * string transaction = 5; + * @param value The bytes for transaction to set. + * @return This builder for chaining. + */ + public Builder setTransactionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + transaction_ = value; + onChanged(); + return this; + } + + private boolean isCollected_ ; + /** + * bool is_collected = 8; + * @return The isCollected. + */ + @java.lang.Override + public boolean getIsCollected() { + return isCollected_; + } + /** + * bool is_collected = 8; + * @param value The isCollected to set. + * @return This builder for chaining. + */ + public Builder setIsCollected(boolean value) { + + isCollected_ = value; + onChanged(); + return this; + } + /** + * bool is_collected = 8; + * @return This builder for chaining. + */ + public Builder clearIsCollected() { + + isCollected_ = false; + onChanged(); + return this; + } + + private int packetNum_ ; + /** + * uint32 packet_num = 13; + * @return The packetNum. + */ + @java.lang.Override + public int getPacketNum() { + return packetNum_; + } + /** + * uint32 packet_num = 13; + * @param value The packetNum to set. + * @return This builder for chaining. + */ + public Builder setPacketNum(int value) { + + packetNum_ = value; + onChanged(); + return this; + } + /** + * uint32 packet_num = 13; + * @return This builder for chaining. + */ + public Builder clearPacketNum() { + + packetNum_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:GetAllMailResultNotify) + } + + // @@protoc_insertion_point(class_scope:GetAllMailResultNotify) + private static final emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify(); + } + + public static emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetAllMailResultNotify parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GetAllMailResultNotify(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_GetAllMailResultNotify_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_GetAllMailResultNotify_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\034GetAllMailResultNotify.proto\032\016MailData" + + ".proto\"\242\001\n\026GetAllMailResultNotify\022\017\n\007ret" + + "code\030\006 \001(\005\022\032\n\022packet_be_sent_num\030\001 \001(\r\022\034" + + "\n\tmail_list\030\n \003(\0132\t.MailData\022\023\n\013transact" + + "ion\030\005 \001(\t\022\024\n\014is_collected\030\010 \001(\010\022\022\n\npacke" + + "t_num\030\r \001(\rB\033\n\031emu.grasscutter.net.proto" + + "b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + emu.grasscutter.net.proto.MailDataOuterClass.getDescriptor(), + }); + internal_static_GetAllMailResultNotify_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_GetAllMailResultNotify_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_GetAllMailResultNotify_descriptor, + new java.lang.String[] { "Retcode", "PacketBeSentNum", "MailList", "Transaction", "IsCollected", "PacketNum", }); + emu.grasscutter.net.proto.MailDataOuterClass.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/main/java/emu/grasscutter/game/mail/Mail.java b/src/main/java/emu/grasscutter/game/mail/Mail.java index 286db6ef6..5ddbcfa34 100644 --- a/src/main/java/emu/grasscutter/game/mail/Mail.java +++ b/src/main/java/emu/grasscutter/game/mail/Mail.java @@ -6,13 +6,14 @@ import dev.morphia.annotations.Indexed; import dev.morphia.annotations.Transient; import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.game.player.Player; +import emu.grasscutter.net.proto.*; +import emu.grasscutter.utils.Utils; +import org.bson.types.ObjectId; import java.time.Instant; import java.util.ArrayList; import java.util.List; -import org.bson.types.ObjectId; - @Entity(value = "mail", useDiscriminator = false) public class Mail { @Id private ObjectId id; @@ -51,18 +52,32 @@ public class Mail { } public ObjectId getId() { - return id; - } + return id; + } - public int getOwnerUid() { - return ownerUid; - } + public int getOwnerUid() { + return ownerUid; + } - public void setOwnerUid(int ownerUid) { - this.ownerUid = ownerUid; - } + public void setOwnerUid(int ownerUid) { + this.ownerUid = ownerUid; + } - @Entity + public MailDataOuterClass.MailData toProto(Player player) { + return MailDataOuterClass.MailData.newBuilder() + .setMailId(player.getMailId(this)) + .setMailTextContent(this.mailContent.toProto()) + .addAllItemList(this.itemList.stream().map(MailItem::toProto).toList()) + .setSendTime((int) this.sendTime) + .setExpireTime((int) this.expireTime) + .setImportance(this.importance) + .setIsRead(this.isRead) + .setIsAttachmentGot(this.isAttachmentGot) + .setCollectState(MailCollectStateOuterClass.MailCollectState.MAIL_COLLECT_STATE_NOT_COLLECTIBLE) + .build(); + } + + @Entity public static class MailContent { public String title; public String content; @@ -87,6 +102,14 @@ public class Mail { this.content = content; this.sender = sender; } + + public MailTextContentOuterClass.MailTextContent toProto() { + return MailTextContentOuterClass.MailTextContent.newBuilder() + .setTitle(this.title) + .setContent(this.content) + .setSender(this.sender) + .build(); + } } @Entity @@ -105,13 +128,25 @@ public class Mail { this(itemId, 1); } - public MailItem(int itemId, int itemCount) { this(itemId, itemCount, 1); } + public MailItem(int itemId, int itemCount) { + this(itemId, itemCount, 1); + } public MailItem(int itemId, int itemCount, int itemLevel) { this.itemId = itemId; this.itemCount = itemCount; this.itemLevel = itemLevel; } + + public MailItemOuterClass.MailItem toProto() { + return MailItemOuterClass.MailItem.newBuilder() + .setEquipParam(Utils.make(() -> EquipParamOuterClass.EquipParam.newBuilder() + .setItemId(this.itemId) + .setItemNum(this.itemCount) + .setItemLevel(this.itemLevel) + .setPromoteLevel(0)//mock + .build())).build(); + } } public void save() { diff --git a/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java b/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java index e442d4708..431013bb0 100644 --- a/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java +++ b/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java @@ -577,8 +577,6 @@ public class PacketOpcodes { public static final int GetAllActivatedBargainDataRsp = 457; public static final int GetAllH5ActivityInfoReq = 5693; public static final int GetAllH5ActivityInfoRsp = 5698; - public static final int GetAllMailReq = 1459; - public static final int GetAllMailRsp = 1407; public static final int GetAllSceneGalleryInfoReq = 5572; public static final int GetAllSceneGalleryInfoRsp = 5582; public static final int GetAllUnlockNameCardReq = 4046; diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java new file mode 100644 index 000000000..c3178a624 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java @@ -0,0 +1,47 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.game.player.Player; +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.GetAllMailNotifyOuterClass; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketGetAllMailResultNotify; +import emu.grasscutter.utils.Utils; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +@Opcodes(PacketOpcodes.GetAllMailNotify) +public class HandlerGetAllMailNotify extends PacketHandler { + private static final int MAX_MAIL_DATA_NUM_PER_PACKET = 40; + + private static void subdivide(Player player) { + var notGiftedMails = player.getAllMail().stream().filter(mail -> mail.stateValue == 1).toList(); + var packetsBeSent = notGiftedMails.size() / MAX_MAIL_DATA_NUM_PER_PACKET + 1; + var curPacketNum = new AtomicInteger(1); + for (int i = 0; i < packetsBeSent; i++) { + player.sendPacket(new PacketGetAllMailResultNotify(packetsBeSent, curPacketNum.get(), Utils.make(() -> { + var index = (curPacketNum.get() - 1) * MAX_MAIL_DATA_NUM_PER_PACKET; + return notGiftedMails.subList(index, curPacketNum.get() == packetsBeSent ? notGiftedMails.size() - 1 : index + MAX_MAIL_DATA_NUM_PER_PACKET - 1); + }).stream().map(mail -> mail.toProto(player)).toList(), createTransaction(player), false)); + curPacketNum.incrementAndGet(); + } + } + + private static String createTransaction(Player player) { + return player.getUid() + "-" + Utils.getCurrentSeconds() + "-" + 0;//mock + } + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + var req = GetAllMailNotifyOuterClass.GetAllMailNotify.parseFrom(payload); + var gift = req.getIsCollected(); + if (gift) { + session.send(new PacketGetAllMailResultNotify(1, 1, List.of(), "", true)); + return; + } + + subdivide(session.getPlayer()); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailReq.java deleted file mode 100644 index a1c451ab0..000000000 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailReq.java +++ /dev/null @@ -1,21 +0,0 @@ -package emu.grasscutter.server.packet.recv; - -import emu.grasscutter.Grasscutter; -import emu.grasscutter.net.packet.Opcodes; -import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.packet.PacketHandler; -import emu.grasscutter.net.proto.GetAllMailReqOuterClass; -import emu.grasscutter.net.proto.GetPlayerTokenReqOuterClass; -import emu.grasscutter.server.game.GameSession; -import emu.grasscutter.server.packet.send.PacketGetAllMailRsp; -import emu.grasscutter.server.packet.send.PacketGetGachaInfoRsp; - -@Opcodes(PacketOpcodes.GetAllMailReq) -public class HandlerGetAllMailReq extends PacketHandler { - - @Override - public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { - GetAllMailReqOuterClass.GetAllMailReq req = GetAllMailReqOuterClass.GetAllMailReq.parseFrom(payload); - session.send(new PacketGetAllMailRsp(session.getPlayer(), req.getIsCollected())); - } -} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java new file mode 100644 index 000000000..15bb0993a --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java @@ -0,0 +1,22 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass; +import emu.grasscutter.net.proto.MailDataOuterClass; + +import java.util.List; + +public class PacketGetAllMailResultNotify extends BasePacket { + public PacketGetAllMailResultNotify(int packetBeSentNum, int packetNum, List mailData, String transaction, boolean isGift) { + super(PacketOpcodes.GetAllMailResultNotify); + + this.setData(GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.newBuilder() + .setPacketBeSentNum(packetBeSentNum) + .addAllMailList(mailData) + .setTransaction(transaction) + .setIsCollected(isGift) + .setPacketNum(packetNum) + .build()); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java deleted file mode 100644 index 82833b947..000000000 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailRsp.java +++ /dev/null @@ -1,78 +0,0 @@ -package emu.grasscutter.server.packet.send; - -import emu.grasscutter.Grasscutter; -import emu.grasscutter.game.mail.Mail; -import emu.grasscutter.game.player.Player; -import emu.grasscutter.net.packet.BasePacket; -import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.proto.EquipParamOuterClass; -import emu.grasscutter.net.proto.GetAllMailRspOuterClass.GetAllMailRsp; -import emu.grasscutter.net.proto.ItemParamOuterClass; -import emu.grasscutter.net.proto.MailDataOuterClass; -import emu.grasscutter.net.proto.MailDataOuterClass.MailData; -import emu.grasscutter.net.proto.MailItemOuterClass; -import emu.grasscutter.net.proto.MailTextContentOuterClass.MailTextContent; - -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; - -public class PacketGetAllMailRsp extends BasePacket { - - public PacketGetAllMailRsp(Player player, boolean isGiftMail) { - super(PacketOpcodes.GetAllMailRsp); - GetAllMailRsp.Builder proto = GetAllMailRsp.newBuilder(); - - if (isGiftMail) { - proto.setIsCollected(true); - } else { - proto.setIsCollected(false); - - if (player.getAllMail().size() != 0) { // Make sure the player has mail - List mailDataList = new ArrayList(); - - for (Mail message : player.getAllMail()) { - if (message.stateValue == 1) { // Make sure it isn't a gift - if (message.expireTime > (int) Instant.now().getEpochSecond()) { // Make sure the message isn't expired (The game won't show expired mail, but I don't want to send unnecessary information). - if (mailDataList.size() <= 1000) { // Make sure that there isn't over 1000 messages in the mailbox. (idk what will happen if there is but the game probably won't like it.) - 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(); - EquipParamOuterClass.EquipParam.Builder itemParam = EquipParamOuterClass.EquipParam.newBuilder(); - itemParam.setItemId(item.itemId); - itemParam.setItemNum(item.itemCount); - mailItem.setEquipParam(itemParam.build()); - - mailItems.add(mailItem.build()); - } - - MailDataOuterClass.MailData.Builder mailData = MailDataOuterClass.MailData.newBuilder(); - mailData.setMailId(player.getMailId(message)); - 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.setCollectStateValue(1); - - mailDataList.add(mailData.build()); - } - } - } - } - - proto.addAllMailList(mailDataList); - proto.setIsTruncated(mailDataList.size() > 1000); // When enabled this will send a notification to the user telling them their inbox is full and they should delete old messages when opening the mailbox. - } - } - this.setData(proto.build()); - } -} diff --git a/src/main/java/emu/grasscutter/utils/Utils.java b/src/main/java/emu/grasscutter/utils/Utils.java index 088c60778..e9cad44b2 100644 --- a/src/main/java/emu/grasscutter/utils/Utils.java +++ b/src/main/java/emu/grasscutter/utils/Utils.java @@ -1,14 +1,5 @@ package emu.grasscutter.utils; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.time.*; -import java.time.temporal.TemporalAdjusters; -import java.util.*; -import java.util.concurrent.ThreadLocalRandom; - import emu.grasscutter.Grasscutter; import emu.grasscutter.config.ConfigContainer; import emu.grasscutter.data.DataLoader; @@ -17,10 +8,21 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; - import org.slf4j.Logger; import javax.annotation.Nullable; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.time.DayOfWeek; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.function.Supplier; import static emu.grasscutter.utils.FileUtils.getResourcePath; import static emu.grasscutter.utils.Language.translate; @@ -29,6 +31,10 @@ import static emu.grasscutter.utils.Language.translate; public final class Utils { public static final Random random = new Random(); + public static T make(Supplier factory) { + return factory.get(); + } + public static int randomRange(int min, int max) { return random.nextInt(max - min + 1) + min; } From 90fb606f68564f0c4042b279ba326b40579e03bd Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sun, 2 Apr 2023 21:23:02 -0400 Subject: [PATCH 2/2] Simplify the mail handler --- .../java/emu/grasscutter/game/mail/Mail.java | 20 ++++++---- .../packet/recv/HandlerGetAllMailNotify.java | 38 ++---------------- .../send/PacketGetAllMailResultNotify.java | 40 ++++++++++++++----- 3 files changed, 45 insertions(+), 53 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/mail/Mail.java b/src/main/java/emu/grasscutter/game/mail/Mail.java index 5ddbcfa34..7c599f077 100644 --- a/src/main/java/emu/grasscutter/game/mail/Mail.java +++ b/src/main/java/emu/grasscutter/game/mail/Mail.java @@ -7,15 +7,19 @@ import dev.morphia.annotations.Transient; import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.game.player.Player; import emu.grasscutter.net.proto.*; -import emu.grasscutter.utils.Utils; +import emu.grasscutter.net.proto.EquipParamOuterClass.EquipParam; +import emu.grasscutter.net.proto.MailCollectStateOuterClass.MailCollectState; +import emu.grasscutter.net.proto.MailTextContentOuterClass.MailTextContent; import org.bson.types.ObjectId; import java.time.Instant; import java.util.ArrayList; import java.util.List; +import static emu.grasscutter.net.proto.MailItemOuterClass.MailItem.*; + @Entity(value = "mail", useDiscriminator = false) -public class Mail { +public final class Mail { @Id private ObjectId id; @Indexed private int ownerUid; public MailContent mailContent; @@ -73,7 +77,7 @@ public class Mail { .setImportance(this.importance) .setIsRead(this.isRead) .setIsAttachmentGot(this.isAttachmentGot) - .setCollectState(MailCollectStateOuterClass.MailCollectState.MAIL_COLLECT_STATE_NOT_COLLECTIBLE) + .setCollectState(MailCollectState.MAIL_COLLECT_STATE_NOT_COLLECTIBLE) .build(); } @@ -103,8 +107,8 @@ public class Mail { this.sender = sender; } - public MailTextContentOuterClass.MailTextContent toProto() { - return MailTextContentOuterClass.MailTextContent.newBuilder() + public MailTextContent toProto() { + return MailTextContent.newBuilder() .setTitle(this.title) .setContent(this.content) .setSender(this.sender) @@ -139,13 +143,13 @@ public class Mail { } public MailItemOuterClass.MailItem toProto() { - return MailItemOuterClass.MailItem.newBuilder() - .setEquipParam(Utils.make(() -> EquipParamOuterClass.EquipParam.newBuilder() + return newBuilder().setEquipParam(EquipParam.newBuilder() .setItemId(this.itemId) .setItemNum(this.itemCount) .setItemLevel(this.itemLevel) .setPromoteLevel(0)//mock - .build())).build(); + .build()) + .build(); } } diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java index c3178a624..9ccbcfdc4 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetAllMailNotify.java @@ -1,47 +1,17 @@ package emu.grasscutter.server.packet.recv; -import emu.grasscutter.game.player.Player; import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.proto.GetAllMailNotifyOuterClass; +import emu.grasscutter.net.proto.GetAllMailNotifyOuterClass.GetAllMailNotify; import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.packet.send.PacketGetAllMailResultNotify; -import emu.grasscutter.utils.Utils; - -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; @Opcodes(PacketOpcodes.GetAllMailNotify) -public class HandlerGetAllMailNotify extends PacketHandler { - private static final int MAX_MAIL_DATA_NUM_PER_PACKET = 40; - - private static void subdivide(Player player) { - var notGiftedMails = player.getAllMail().stream().filter(mail -> mail.stateValue == 1).toList(); - var packetsBeSent = notGiftedMails.size() / MAX_MAIL_DATA_NUM_PER_PACKET + 1; - var curPacketNum = new AtomicInteger(1); - for (int i = 0; i < packetsBeSent; i++) { - player.sendPacket(new PacketGetAllMailResultNotify(packetsBeSent, curPacketNum.get(), Utils.make(() -> { - var index = (curPacketNum.get() - 1) * MAX_MAIL_DATA_NUM_PER_PACKET; - return notGiftedMails.subList(index, curPacketNum.get() == packetsBeSent ? notGiftedMails.size() - 1 : index + MAX_MAIL_DATA_NUM_PER_PACKET - 1); - }).stream().map(mail -> mail.toProto(player)).toList(), createTransaction(player), false)); - curPacketNum.incrementAndGet(); - } - } - - private static String createTransaction(Player player) { - return player.getUid() + "-" + Utils.getCurrentSeconds() + "-" + 0;//mock - } - +public final class HandlerGetAllMailNotify extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { - var req = GetAllMailNotifyOuterClass.GetAllMailNotify.parseFrom(payload); - var gift = req.getIsCollected(); - if (gift) { - session.send(new PacketGetAllMailResultNotify(1, 1, List.of(), "", true)); - return; - } - - subdivide(session.getPlayer()); + var req = GetAllMailNotify.parseFrom(payload); + session.send(new PacketGetAllMailResultNotify(session.getPlayer(), req.getIsCollected())); } } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java index 15bb0993a..87689de28 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketGetAllMailResultNotify.java @@ -1,22 +1,40 @@ package emu.grasscutter.server.packet.send; +import emu.grasscutter.game.player.Player; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass; -import emu.grasscutter.net.proto.MailDataOuterClass; +import emu.grasscutter.net.proto.GetAllMailResultNotifyOuterClass.GetAllMailResultNotify; +import emu.grasscutter.utils.Utils; +import java.time.Instant; import java.util.List; -public class PacketGetAllMailResultNotify extends BasePacket { - public PacketGetAllMailResultNotify(int packetBeSentNum, int packetNum, List mailData, String transaction, boolean isGift) { +public final class PacketGetAllMailResultNotify extends BasePacket { + /** + * @param player The player to fetch the mail for. + * @param gifts Is the mail for gifts? + */ + public PacketGetAllMailResultNotify(Player player, boolean gifts) { super(PacketOpcodes.GetAllMailResultNotify); - this.setData(GetAllMailResultNotifyOuterClass.GetAllMailResultNotify.newBuilder() - .setPacketBeSentNum(packetBeSentNum) - .addAllMailList(mailData) - .setTransaction(transaction) - .setIsCollected(isGift) - .setPacketNum(packetNum) - .build()); + var packet = GetAllMailResultNotify.newBuilder() + .setTransaction(player.getUid() + "-" + Utils.getCurrentSeconds() + "-" + 0) + .setIsCollected(gifts) + .setPacketBeSentNum(1) + .setPacketNum(1); + + var inbox = player.getAllMail(); + if (!gifts && inbox.size() > 0) { + packet.addAllMailList(inbox.stream() + .filter(mail -> mail.stateValue == 1) + .filter(mail -> mail.expireTime > Instant.now().getEpochSecond()) + .map(mail -> mail.toProto(player)).toList()); + } else { + // Empty mailbox. + // TODO: Implement the gift mailbox. + packet.addAllMailList(List.of()); + } + + this.setData(packet.build()); } }