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/3] 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 27a9ded4bc21ca935cdabc4f869e49f1d1aaa767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=AA=20Huy=20Giang?= <58503884+lehuygiang28@users.noreply.github.com> Date: Mon, 3 Apr 2023 07:41:01 +0700 Subject: [PATCH 2/3] Update `README_vi-VN.md` (#2094) * Fix `#Building` anchor Fixed `vi-VN`, `ja-JP` & `NL`'s `#Building` anchor * Update `README_vi-VN.md` Updated `README_VI-VN.md` for better translation --- docs/README_vi-VN.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/README_vi-VN.md b/docs/README_vi-VN.md index 12e16cfcb..f89366947 100644 --- a/docs/README_vi-VN.md +++ b/docs/README_vi-VN.md @@ -13,7 +13,7 @@ * Chiến đấu, giao tranh * Danh sách bạn bè * Dịch chuyển -* Hệ thống gacha +* Hệ thống cầu nguyện (gacha) * *Một phần* của tính năng chơi chung (co-op) * Gọi ra quái vật từ bảng điều khiển (console) * Vật phẩm/Nhân vật (nhận vật phẩm/nhân vật, nâng cấp vật phẩm/nhân vật) @@ -26,9 +26,9 @@ * [Java SE - 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) hoặc cao hơn - **Ghi chú:** Nếu bạn chỉ cần **sử dụng**, thì cài **jre** là đủ. + **Ghi chú:** Nếu bạn chỉ muốn **sử dụng**, vậy thì cài đặt **jre** là đủ. -* [MongoDB](https://www.mongodb.com/try/download/community) (khuyến khích phiên bản từ 4.0 trở lên) +* [MongoDB](https://www.mongodb.com/try/download/community) (khuyến khích sử dụng phiên bản từ 4.0 trở lên) * Proxy Daemon: [mitmproxy](https://mitmproxy.org/) (nên sử dụng mitmdump), [Fiddler Classic](https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe), v.v. @@ -62,11 +62,11 @@ - [Hosts file](https://github.com/Grasscutters/Grasscutter/wiki/Resources#hosts-file) -2. Cài đặt network proxy thành `127.0.0.1:8080` hoặc cổng proxy bạn đã chỉ định. +2. Cài đặt network proxy thành `127.0.0.1:8080` hoặc cổng proxy mà bạn đã chỉ định. -- Với mitmproxy: Sau khi thiết lập proxy và cài đặt chứng chỉ, hãy kiểm tra http://mitm.it/ nếu lưu lượng truy cập đi qua mitmproxy. +- Với mitmproxy: Sau khi thiết lập proxy và cài đặt chứng chỉ, hãy kiểm tra http://mitm.it/ để xem liệu lưu lượng có đang thông qua mitmproxy hay không. -**You can also use `start.cmd` to start servers and proxy daemons automatically, but you have to set up `JAVA_HOME` environment and configure the `start_config.cmd` file.** +**Bạn cũng có thể sử dụng `start.cmd` để tự động khởi động máy chủ (servers) và proxy daemons, nhưng trước đó bạn phải thiết lập biến môi trường `JAVA_HOME` và cấu hình tệp `start_config.cmd`.** ### Tự tạo server (Building) @@ -101,6 +101,6 @@ Bạn có thể tìm thấy tệp jar đã được biên dịch tại thư mụ # Khắc phục nhanh các sụ cố -- Nếu quá trình biên dịch (compile) không thành công, vui lòng kiểm tra cài đặt JDK của bạn (Đảm bảo rằng JDK phải từ phiên bản 17 trở lên và PATH của JDK đã được cài đặt). -- Không thể kết nối, không thể đăng nhập, 4206, v.v... - Cài đặt proxy (proxy daemon) của bạn thường là *vấn đề*. Nếu bạn đang sử dụng Fiddler, hãy đổi port (cổng) mặc định khác 8888. -- Thứ tự cài đặt: MongoDB > Grasscutter > Proxy Daemon (mitmdump, fiddler, v.v.) > Game +- Nếu quá trình biên dịch (compile) không thành công, hãy kiểm tra cài đặt JDK của bạn (Đảm bảo rằng JDK phải từ phiên bản 17 trở lên và PATH của JDK đã được cài đặt). +- Không thể kết nối, không thể đăng nhập, 4206, v.v. - *Vấn đề* thường là do cài đặt proxy (proxy daemon) của bạn. Nếu bạn đang sử dụng Fiddler, hãy đổi cổng (port) mặc định sang bất cứ cổng nào khác 8888. +- Thứ tự khởi động: MongoDB > Grasscutter > Proxy Daemon (mitmdump, fiddler, v.v.) > Game From 90fb606f68564f0c4042b279ba326b40579e03bd Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sun, 2 Apr 2023 21:23:02 -0400 Subject: [PATCH 3/3] 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()); } }