From 01d1b356f7acd93f20a485ee7cfa8b1a3e0a6432 Mon Sep 17 00:00:00 2001 From: NotThorny Date: Fri, 27 Jan 2023 20:18:07 -0700 Subject: [PATCH] Implement exiting teapot --- .../net/proto/BackMyWorldReqOuterClass.java | 487 +++++++++++++++ .../net/proto/BackMyWorldRspOuterClass.java | 556 ++++++++++++++++++ .../emu/grasscutter/game/player/Player.java | 2 + .../packet/recv/HandlerBackMyWorldReq.java | 27 + .../packet/send/PacketBackMyWorldRsp.java | 16 + .../send/PacketPlayerEnterSceneNotify.java | 7 + 6 files changed, 1095 insertions(+) create mode 100644 src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldReqOuterClass.java create mode 100644 src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerBackMyWorldReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketBackMyWorldRsp.java diff --git a/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldReqOuterClass.java b/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldReqOuterClass.java new file mode 100644 index 000000000..8890c1255 --- /dev/null +++ b/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldReqOuterClass.java @@ -0,0 +1,487 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: BackMyWorldReq.proto + +package emu.grasscutter.net.proto; + +public final class BackMyWorldReqOuterClass { + private BackMyWorldReqOuterClass() {} + 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 BackMyWorldReqOrBuilder extends + // @@protoc_insertion_point(interface_extends:BackMyWorldReq) + com.google.protobuf.MessageOrBuilder { + } + /** + *
+   * enum CmdId {
+   *   option allow_alias = true;
+   *   NONE = 0;
+   *   CMD_ID = 269;
+   *   ENET_CHANNEL_ID = 0;
+   *   ENET_IS_RELIABLE = 1;
+   *   IS_ALLOW_CLIENT = 1;
+   * }
+   * 
+ * + * Protobuf type {@code BackMyWorldReq} + */ + public static final class BackMyWorldReq extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:BackMyWorldReq) + BackMyWorldReqOrBuilder { + private static final long serialVersionUID = 0L; + // Use BackMyWorldReq.newBuilder() to construct. + private BackMyWorldReq(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private BackMyWorldReq() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new BackMyWorldReq(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private BackMyWorldReq( + 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; + 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.BackMyWorldReqOuterClass.internal_static_BackMyWorldReq_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.BackMyWorldReqOuterClass.internal_static_BackMyWorldReq_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.class, emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.Builder.class); + } + + 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 { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + 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.BackMyWorldReqOuterClass.BackMyWorldReq)) { + return super.equals(obj); + } + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq other = (emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq) obj; + + 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 = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq 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.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq 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.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq 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.BackMyWorldReqOuterClass.BackMyWorldReq parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq 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.BackMyWorldReqOuterClass.BackMyWorldReq parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq 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.BackMyWorldReqOuterClass.BackMyWorldReq 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; + } + /** + *
+     * enum CmdId {
+     *   option allow_alias = true;
+     *   NONE = 0;
+     *   CMD_ID = 269;
+     *   ENET_CHANNEL_ID = 0;
+     *   ENET_IS_RELIABLE = 1;
+     *   IS_ALLOW_CLIENT = 1;
+     * }
+     * 
+ * + * Protobuf type {@code BackMyWorldReq} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:BackMyWorldReq) + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReqOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.BackMyWorldReqOuterClass.internal_static_BackMyWorldReq_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.BackMyWorldReqOuterClass.internal_static_BackMyWorldReq_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.class, emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.Builder.class); + } + + // Construct using emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.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(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return emu.grasscutter.net.proto.BackMyWorldReqOuterClass.internal_static_BackMyWorldReq_descriptor; + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq getDefaultInstanceForType() { + return emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.getDefaultInstance(); + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq build() { + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq buildPartial() { + emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq result = new emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq(this); + 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.BackMyWorldReqOuterClass.BackMyWorldReq) { + return mergeFrom((emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq other) { + if (other == emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq.getDefaultInstance()) return this; + 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.BackMyWorldReqOuterClass.BackMyWorldReq parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + 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:BackMyWorldReq) + } + + // @@protoc_insertion_point(class_scope:BackMyWorldReq) + private static final emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq(); + } + + public static emu.grasscutter.net.proto.BackMyWorldReqOuterClass.BackMyWorldReq getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BackMyWorldReq parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new BackMyWorldReq(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.BackMyWorldReqOuterClass.BackMyWorldReq getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_BackMyWorldReq_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_BackMyWorldReq_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\024BackMyWorldReq.proto\"\020\n\016BackMyWorldReq" + + "B\033\n\031emu.grasscutter.net.protob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_BackMyWorldReq_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_BackMyWorldReq_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_BackMyWorldReq_descriptor, + new java.lang.String[] { }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java b/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java new file mode 100644 index 000000000..d38339e91 --- /dev/null +++ b/src/generated/main/java/emu/grasscutter/net/proto/BackMyWorldRspOuterClass.java @@ -0,0 +1,556 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: BackMyWorldRsp.proto + +package emu.grasscutter.net.proto; + +public final class BackMyWorldRspOuterClass { + private BackMyWorldRspOuterClass() {} + 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 BackMyWorldRspOrBuilder extends + // @@protoc_insertion_point(interface_extends:BackMyWorldRsp) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 retcode = 6; + * @return The retcode. + */ + int getRetcode(); + } + /** + *
+   * enum CmdId {
+   *   option allow_alias = true;
+   *   NONE = 0;
+   *   CMD_ID = 218;
+   *   ENET_CHANNEL_ID = 0;
+   *   ENET_IS_RELIABLE = 1;
+   * }
+   * 
+ * + * Protobuf type {@code BackMyWorldRsp} + */ + public static final class BackMyWorldRsp extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:BackMyWorldRsp) + BackMyWorldRspOrBuilder { + private static final long serialVersionUID = 0L; + // Use BackMyWorldRsp.newBuilder() to construct. + private BackMyWorldRsp(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private BackMyWorldRsp() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new BackMyWorldRsp(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private BackMyWorldRsp( + 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: { + + retcode_ = input.readInt32(); + 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.BackMyWorldRspOuterClass.internal_static_BackMyWorldRsp_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.BackMyWorldRspOuterClass.internal_static_BackMyWorldRsp_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.class, emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.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_; + } + + 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 (retcode_ != 0) { + output.writeInt32(6, retcode_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (retcode_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, retcode_); + } + 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.BackMyWorldRspOuterClass.BackMyWorldRsp)) { + return super.equals(obj); + } + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp other = (emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp) obj; + + if (getRetcode() + != other.getRetcode()) 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 = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp 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.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp 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.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp 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.BackMyWorldRspOuterClass.BackMyWorldRsp parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp 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.BackMyWorldRspOuterClass.BackMyWorldRsp parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp 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.BackMyWorldRspOuterClass.BackMyWorldRsp 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; + } + /** + *
+     * enum CmdId {
+     *   option allow_alias = true;
+     *   NONE = 0;
+     *   CMD_ID = 218;
+     *   ENET_CHANNEL_ID = 0;
+     *   ENET_IS_RELIABLE = 1;
+     * }
+     * 
+ * + * Protobuf type {@code BackMyWorldRsp} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:BackMyWorldRsp) + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRspOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return emu.grasscutter.net.proto.BackMyWorldRspOuterClass.internal_static_BackMyWorldRsp_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return emu.grasscutter.net.proto.BackMyWorldRspOuterClass.internal_static_BackMyWorldRsp_fieldAccessorTable + .ensureFieldAccessorsInitialized( + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.class, emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.Builder.class); + } + + // Construct using emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.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(); + retcode_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return emu.grasscutter.net.proto.BackMyWorldRspOuterClass.internal_static_BackMyWorldRsp_descriptor; + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp getDefaultInstanceForType() { + return emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.getDefaultInstance(); + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp build() { + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp buildPartial() { + emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp result = new emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp(this); + result.retcode_ = retcode_; + 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.BackMyWorldRspOuterClass.BackMyWorldRsp) { + return mergeFrom((emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp other) { + if (other == emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp.getDefaultInstance()) return this; + if (other.getRetcode() != 0) { + setRetcode(other.getRetcode()); + } + 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.BackMyWorldRspOuterClass.BackMyWorldRsp parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + 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; + } + @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:BackMyWorldRsp) + } + + // @@protoc_insertion_point(class_scope:BackMyWorldRsp) + private static final emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp(); + } + + public static emu.grasscutter.net.proto.BackMyWorldRspOuterClass.BackMyWorldRsp getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BackMyWorldRsp parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new BackMyWorldRsp(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.BackMyWorldRspOuterClass.BackMyWorldRsp getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_BackMyWorldRsp_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_BackMyWorldRsp_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\024BackMyWorldRsp.proto\"!\n\016BackMyWorldRsp" + + "\022\017\n\007retcode\030\006 \001(\005B\033\n\031emu.grasscutter.net" + + ".protob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_BackMyWorldRsp_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_BackMyWorldRsp_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_BackMyWorldRsp_descriptor, + new java.lang.String[] { "Retcode", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/main/java/emu/grasscutter/game/player/Player.java b/src/main/java/emu/grasscutter/game/player/Player.java index d993192e6..b19b9faf9 100644 --- a/src/main/java/emu/grasscutter/game/player/Player.java +++ b/src/main/java/emu/grasscutter/game/player/Player.java @@ -97,6 +97,7 @@ public class Player { @Getter private int headImage; @Getter private int nameCardId = 210001; @Getter private Position position; + @Getter @Setter private Position prevPos; @Getter private Position rotation; @Getter private PlayerBirthday birthday; @Getter private PlayerCodex codex; @@ -208,6 +209,7 @@ public class Player { this.questManager = new QuestManager(this); this.buffManager = new PlayerBuffManager(this); this.position = new Position(GameConstants.START_POSITION); + this.prevPos = new Position(); this.rotation = new Position(0, 307, 0); this.sceneId = 3; this.regionId = 1; diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerBackMyWorldReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerBackMyWorldReq.java new file mode 100644 index 000000000..7b2ce1969 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerBackMyWorldReq.java @@ -0,0 +1,27 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.game.world.Scene; +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketBackMyWorldRsp; + +@Opcodes(PacketOpcodes.BackMyWorldReq) +public class HandlerBackMyWorldReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + + Scene scene = session.getPlayer().getScene(); + session.getPlayer().getWorld().transferPlayerToScene( + session.getPlayer(), + scene.getPrevScene(), + TeleportType.WAYPOINT, + session.getPlayer().getPrevPos()); + + session.send(new PacketBackMyWorldRsp()); + } + +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketBackMyWorldRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketBackMyWorldRsp.java new file mode 100644 index 000000000..ef3e962a5 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketBackMyWorldRsp.java @@ -0,0 +1,16 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.BackMyWorldRspOuterClass; + +public class PacketBackMyWorldRsp extends BasePacket { + + public PacketBackMyWorldRsp() { + super(PacketOpcodes.BackMyWorldRsp); + + var proto = BackMyWorldRspOuterClass.BackMyWorldRsp.newBuilder(); + + this.setData(proto.build()); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java index 4ed24c7cb..d30774bb2 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java @@ -43,6 +43,13 @@ public class PacketPlayerEnterSceneNotify extends BasePacket { public PacketPlayerEnterSceneNotify(Player player, Player target, EnterType type, EnterReason reason, int newScene, Position newPos) { super(PacketOpcodes.PlayerEnterSceneNotify); + // Set previous position + if(newScene != 3){ // Hardcoded for now else you always return to beach + // TODO: Don't update position within same scene + }else{ + player.setPrevPos(player.getPosition()); + } + player.setSceneLoadState(SceneLoadState.LOADING); player.setEnterSceneToken(Utils.randomRange(1000, 99999));