Unverified Commit 712d1763 authored by GanyusLeftHorn's avatar GanyusLeftHorn Committed by GitHub
Browse files

Custom Teams (#1731)

* Add support for creating and deleting custom teams.

* Add support for creating and deleting custom teams.

* Move some logic to TeamInfo::toProto
parent 4f015c10
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: AddCustomTeamReq.proto
package emu.grasscutter.net.proto;
public final class AddCustomTeamReqOuterClass {
private AddCustomTeamReqOuterClass() {}
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 AddCustomTeamReqOrBuilder extends
// @@protoc_insertion_point(interface_extends:AddCustomTeamReq)
com.google.protobuf.MessageOrBuilder {
}
/**
* <pre>
* CmdId: 1687
* EnetChannelId: 0
* EnetIsReliable: true
* IsAllowClient: true
* </pre>
*
* Protobuf type {@code AddCustomTeamReq}
*/
public static final class AddCustomTeamReq extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:AddCustomTeamReq)
AddCustomTeamReqOrBuilder {
private static final long serialVersionUID = 0L;
// Use AddCustomTeamReq.newBuilder() to construct.
private AddCustomTeamReq(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private AddCustomTeamReq() {
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new AddCustomTeamReq();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private AddCustomTeamReq(
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.AddCustomTeamReqOuterClass.internal_static_AddCustomTeamReq_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.internal_static_AddCustomTeamReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.class, emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.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.AddCustomTeamReqOuterClass.AddCustomTeamReq)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq other = (emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq) 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.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq 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.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq 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.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq 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.AddCustomTeamReqOuterClass.AddCustomTeamReq parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq 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.AddCustomTeamReqOuterClass.AddCustomTeamReq parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq 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.AddCustomTeamReqOuterClass.AddCustomTeamReq 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;
}
/**
* <pre>
* CmdId: 1687
* EnetChannelId: 0
* EnetIsReliable: true
* IsAllowClient: true
* </pre>
*
* Protobuf type {@code AddCustomTeamReq}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:AddCustomTeamReq)
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReqOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.internal_static_AddCustomTeamReq_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.internal_static_AddCustomTeamReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.class, emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.Builder.class);
}
// Construct using emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.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.AddCustomTeamReqOuterClass.internal_static_AddCustomTeamReq_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq getDefaultInstanceForType() {
return emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq build() {
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq buildPartial() {
emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq result = new emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq(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.AddCustomTeamReqOuterClass.AddCustomTeamReq) {
return mergeFrom((emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq other) {
if (other == emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq.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.AddCustomTeamReqOuterClass.AddCustomTeamReq parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq) 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:AddCustomTeamReq)
}
// @@protoc_insertion_point(class_scope:AddCustomTeamReq)
private static final emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq();
}
public static emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<AddCustomTeamReq>
PARSER = new com.google.protobuf.AbstractParser<AddCustomTeamReq>() {
@java.lang.Override
public AddCustomTeamReq parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new AddCustomTeamReq(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<AddCustomTeamReq> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<AddCustomTeamReq> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.AddCustomTeamReqOuterClass.AddCustomTeamReq getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_AddCustomTeamReq_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_AddCustomTeamReq_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\026AddCustomTeamReq.proto\"\022\n\020AddCustomTea" +
"mReqB\033\n\031emu.grasscutter.net.protob\006proto" +
"3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_AddCustomTeamReq_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_AddCustomTeamReq_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_AddCustomTeamReq_descriptor,
new java.lang.String[] { });
}
// @@protoc_insertion_point(outer_class_scope)
}
...@@ -76,21 +76,21 @@ public final class AvatarDataNotifyOuterClass { ...@@ -76,21 +76,21 @@ public final class AvatarDataNotifyOuterClass {
int key); int key);
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return A list containing the unk3000NIGPICLBHMA. * @return A list containing the customTeamIds.
*/ */
java.util.List<java.lang.Integer> getUnk3000NIGPICLBHMAList(); java.util.List<java.lang.Integer> getCustomTeamIdsList();
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return The count of unk3000NIGPICLBHMA. * @return The count of customTeamIds.
*/ */
int getUnk3000NIGPICLBHMACount(); int getCustomTeamIdsCount();
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param index The index of the element to return. * @param index The index of the element to return.
* @return The unk3000NIGPICLBHMA at the given index. * @return The customTeamIds at the given index.
*/ */
int getUnk3000NIGPICLBHMA(int index); int getCustomTeamIds(int index);
/** /**
* <code>repeated uint64 temp_avatar_guid_list = 12;</code> * <code>repeated uint64 temp_avatar_guid_list = 12;</code>
...@@ -160,8 +160,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -160,8 +160,7 @@ public final class AvatarDataNotifyOuterClass {
* <pre> * <pre>
* CmdId: 1633 * CmdId: 1633
* EnetChannelId: 0 * EnetChannelId: 0
* EnetIsReliable: false * EnetIsReliable: true
* IsAllowClient: true
* </pre> * </pre>
* *
* Protobuf type {@code AvatarDataNotify} * Protobuf type {@code AvatarDataNotify}
...@@ -177,7 +176,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -177,7 +176,7 @@ public final class AvatarDataNotifyOuterClass {
} }
private AvatarDataNotify() { private AvatarDataNotify() {
ownedCostumeList_ = emptyIntList(); ownedCostumeList_ = emptyIntList();
unk3000NIGPICLBHMA_ = emptyIntList(); customTeamIds_ = emptyIntList();
tempAvatarGuidList_ = emptyLongList(); tempAvatarGuidList_ = emptyLongList();
ownedFlycloakList_ = emptyIntList(); ownedFlycloakList_ = emptyIntList();
avatarList_ = java.util.Collections.emptyList(); avatarList_ = java.util.Collections.emptyList();
...@@ -269,21 +268,21 @@ public final class AvatarDataNotifyOuterClass { ...@@ -269,21 +268,21 @@ public final class AvatarDataNotifyOuterClass {
} }
case 72: { case 72: {
if (!((mutable_bitField0_ & 0x00000004) != 0)) { if (!((mutable_bitField0_ & 0x00000004) != 0)) {
unk3000NIGPICLBHMA_ = newIntList(); customTeamIds_ = newIntList();
mutable_bitField0_ |= 0x00000004; mutable_bitField0_ |= 0x00000004;
} }
unk3000NIGPICLBHMA_.addInt(input.readUInt32()); customTeamIds_.addInt(input.readUInt32());
break; break;
} }
case 74: { case 74: {
int length = input.readRawVarint32(); int length = input.readRawVarint32();
int limit = input.pushLimit(length); int limit = input.pushLimit(length);
if (!((mutable_bitField0_ & 0x00000004) != 0) && input.getBytesUntilLimit() > 0) { if (!((mutable_bitField0_ & 0x00000004) != 0) && input.getBytesUntilLimit() > 0) {
unk3000NIGPICLBHMA_ = newIntList(); customTeamIds_ = newIntList();
mutable_bitField0_ |= 0x00000004; mutable_bitField0_ |= 0x00000004;
} }
while (input.getBytesUntilLimit() > 0) { while (input.getBytesUntilLimit() > 0) {
unk3000NIGPICLBHMA_.addInt(input.readUInt32()); customTeamIds_.addInt(input.readUInt32());
} }
input.popLimit(limit); input.popLimit(limit);
break; break;
...@@ -352,7 +351,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -352,7 +351,7 @@ public final class AvatarDataNotifyOuterClass {
avatarList_ = java.util.Collections.unmodifiableList(avatarList_); avatarList_ = java.util.Collections.unmodifiableList(avatarList_);
} }
if (((mutable_bitField0_ & 0x00000004) != 0)) { if (((mutable_bitField0_ & 0x00000004) != 0)) {
unk3000NIGPICLBHMA_.makeImmutable(); // C customTeamIds_.makeImmutable(); // C
} }
if (((mutable_bitField0_ & 0x00000001) != 0)) { if (((mutable_bitField0_ & 0x00000001) != 0)) {
ownedCostumeList_.makeImmutable(); // C ownedCostumeList_.makeImmutable(); // C
...@@ -509,33 +508,33 @@ public final class AvatarDataNotifyOuterClass { ...@@ -509,33 +508,33 @@ public final class AvatarDataNotifyOuterClass {
return map.get(key); return map.get(key);
} }
public static final int UNK3000_NIGPICLBHMA_FIELD_NUMBER = 9; public static final int CUSTOM_TEAM_IDS_FIELD_NUMBER = 9;
private com.google.protobuf.Internal.IntList unk3000NIGPICLBHMA_; private com.google.protobuf.Internal.IntList customTeamIds_;
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return A list containing the unk3000NIGPICLBHMA. * @return A list containing the customTeamIds.
*/ */
@java.lang.Override @java.lang.Override
public java.util.List<java.lang.Integer> public java.util.List<java.lang.Integer>
getUnk3000NIGPICLBHMAList() { getCustomTeamIdsList() {
return unk3000NIGPICLBHMA_; return customTeamIds_;
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return The count of unk3000NIGPICLBHMA. * @return The count of customTeamIds.
*/ */
public int getUnk3000NIGPICLBHMACount() { public int getCustomTeamIdsCount() {
return unk3000NIGPICLBHMA_.size(); return customTeamIds_.size();
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param index The index of the element to return. * @param index The index of the element to return.
* @return The unk3000NIGPICLBHMA at the given index. * @return The customTeamIds at the given index.
*/ */
public int getUnk3000NIGPICLBHMA(int index) { public int getCustomTeamIds(int index) {
return unk3000NIGPICLBHMA_.getInt(index); return customTeamIds_.getInt(index);
} }
private int unk3000NIGPICLBHMAMemoizedSerializedSize = -1; private int customTeamIdsMemoizedSerializedSize = -1;
public static final int TEMP_AVATAR_GUID_LIST_FIELD_NUMBER = 12; public static final int TEMP_AVATAR_GUID_LIST_FIELD_NUMBER = 12;
private com.google.protobuf.Internal.LongList tempAvatarGuidList_; private com.google.protobuf.Internal.LongList tempAvatarGuidList_;
...@@ -681,12 +680,12 @@ public final class AvatarDataNotifyOuterClass { ...@@ -681,12 +680,12 @@ public final class AvatarDataNotifyOuterClass {
if (chooseAvatarGuid_ != 0L) { if (chooseAvatarGuid_ != 0L) {
output.writeUInt64(8, chooseAvatarGuid_); output.writeUInt64(8, chooseAvatarGuid_);
} }
if (getUnk3000NIGPICLBHMAList().size() > 0) { if (getCustomTeamIdsList().size() > 0) {
output.writeUInt32NoTag(74); output.writeUInt32NoTag(74);
output.writeUInt32NoTag(unk3000NIGPICLBHMAMemoizedSerializedSize); output.writeUInt32NoTag(customTeamIdsMemoizedSerializedSize);
} }
for (int i = 0; i < unk3000NIGPICLBHMA_.size(); i++) { for (int i = 0; i < customTeamIds_.size(); i++) {
output.writeUInt32NoTag(unk3000NIGPICLBHMA_.getInt(i)); output.writeUInt32NoTag(customTeamIds_.getInt(i));
} }
if (getOwnedCostumeListList().size() > 0) { if (getOwnedCostumeListList().size() > 0) {
output.writeUInt32NoTag(90); output.writeUInt32NoTag(90);
...@@ -749,17 +748,17 @@ public final class AvatarDataNotifyOuterClass { ...@@ -749,17 +748,17 @@ public final class AvatarDataNotifyOuterClass {
} }
{ {
int dataSize = 0; int dataSize = 0;
for (int i = 0; i < unk3000NIGPICLBHMA_.size(); i++) { for (int i = 0; i < customTeamIds_.size(); i++) {
dataSize += com.google.protobuf.CodedOutputStream dataSize += com.google.protobuf.CodedOutputStream
.computeUInt32SizeNoTag(unk3000NIGPICLBHMA_.getInt(i)); .computeUInt32SizeNoTag(customTeamIds_.getInt(i));
} }
size += dataSize; size += dataSize;
if (!getUnk3000NIGPICLBHMAList().isEmpty()) { if (!getCustomTeamIdsList().isEmpty()) {
size += 1; size += 1;
size += com.google.protobuf.CodedOutputStream size += com.google.protobuf.CodedOutputStream
.computeInt32SizeNoTag(dataSize); .computeInt32SizeNoTag(dataSize);
} }
unk3000NIGPICLBHMAMemoizedSerializedSize = dataSize; customTeamIdsMemoizedSerializedSize = dataSize;
} }
{ {
int dataSize = 0; int dataSize = 0;
...@@ -810,8 +809,8 @@ public final class AvatarDataNotifyOuterClass { ...@@ -810,8 +809,8 @@ public final class AvatarDataNotifyOuterClass {
!= other.getChooseAvatarGuid()) return false; != other.getChooseAvatarGuid()) return false;
if (!internalGetAvatarTeamMap().equals( if (!internalGetAvatarTeamMap().equals(
other.internalGetAvatarTeamMap())) return false; other.internalGetAvatarTeamMap())) return false;
if (!getUnk3000NIGPICLBHMAList() if (!getCustomTeamIdsList()
.equals(other.getUnk3000NIGPICLBHMAList())) return false; .equals(other.getCustomTeamIdsList())) return false;
if (!getTempAvatarGuidListList() if (!getTempAvatarGuidListList()
.equals(other.getTempAvatarGuidListList())) return false; .equals(other.getTempAvatarGuidListList())) return false;
if (!getOwnedFlycloakListList() if (!getOwnedFlycloakListList()
...@@ -842,9 +841,9 @@ public final class AvatarDataNotifyOuterClass { ...@@ -842,9 +841,9 @@ public final class AvatarDataNotifyOuterClass {
hash = (37 * hash) + AVATAR_TEAM_MAP_FIELD_NUMBER; hash = (37 * hash) + AVATAR_TEAM_MAP_FIELD_NUMBER;
hash = (53 * hash) + internalGetAvatarTeamMap().hashCode(); hash = (53 * hash) + internalGetAvatarTeamMap().hashCode();
} }
if (getUnk3000NIGPICLBHMACount() > 0) { if (getCustomTeamIdsCount() > 0) {
hash = (37 * hash) + UNK3000_NIGPICLBHMA_FIELD_NUMBER; hash = (37 * hash) + CUSTOM_TEAM_IDS_FIELD_NUMBER;
hash = (53 * hash) + getUnk3000NIGPICLBHMAList().hashCode(); hash = (53 * hash) + getCustomTeamIdsList().hashCode();
} }
if (getTempAvatarGuidListCount() > 0) { if (getTempAvatarGuidListCount() > 0) {
hash = (37 * hash) + TEMP_AVATAR_GUID_LIST_FIELD_NUMBER; hash = (37 * hash) + TEMP_AVATAR_GUID_LIST_FIELD_NUMBER;
...@@ -959,8 +958,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -959,8 +958,7 @@ public final class AvatarDataNotifyOuterClass {
* <pre> * <pre>
* CmdId: 1633 * CmdId: 1633
* EnetChannelId: 0 * EnetChannelId: 0
* EnetIsReliable: false * EnetIsReliable: true
* IsAllowClient: true
* </pre> * </pre>
* *
* Protobuf type {@code AvatarDataNotify} * Protobuf type {@code AvatarDataNotify}
...@@ -1028,7 +1026,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -1028,7 +1026,7 @@ public final class AvatarDataNotifyOuterClass {
chooseAvatarGuid_ = 0L; chooseAvatarGuid_ = 0L;
internalGetMutableAvatarTeamMap().clear(); internalGetMutableAvatarTeamMap().clear();
unk3000NIGPICLBHMA_ = emptyIntList(); customTeamIds_ = emptyIntList();
bitField0_ = (bitField0_ & ~0x00000004); bitField0_ = (bitField0_ & ~0x00000004);
tempAvatarGuidList_ = emptyLongList(); tempAvatarGuidList_ = emptyLongList();
bitField0_ = (bitField0_ & ~0x00000008); bitField0_ = (bitField0_ & ~0x00000008);
...@@ -1078,10 +1076,10 @@ public final class AvatarDataNotifyOuterClass { ...@@ -1078,10 +1076,10 @@ public final class AvatarDataNotifyOuterClass {
result.avatarTeamMap_ = internalGetAvatarTeamMap(); result.avatarTeamMap_ = internalGetAvatarTeamMap();
result.avatarTeamMap_.makeImmutable(); result.avatarTeamMap_.makeImmutable();
if (((bitField0_ & 0x00000004) != 0)) { if (((bitField0_ & 0x00000004) != 0)) {
unk3000NIGPICLBHMA_.makeImmutable(); customTeamIds_.makeImmutable();
bitField0_ = (bitField0_ & ~0x00000004); bitField0_ = (bitField0_ & ~0x00000004);
} }
result.unk3000NIGPICLBHMA_ = unk3000NIGPICLBHMA_; result.customTeamIds_ = customTeamIds_;
if (((bitField0_ & 0x00000008) != 0)) { if (((bitField0_ & 0x00000008) != 0)) {
tempAvatarGuidList_.makeImmutable(); tempAvatarGuidList_.makeImmutable();
bitField0_ = (bitField0_ & ~0x00000008); bitField0_ = (bitField0_ & ~0x00000008);
...@@ -1165,13 +1163,13 @@ public final class AvatarDataNotifyOuterClass { ...@@ -1165,13 +1163,13 @@ public final class AvatarDataNotifyOuterClass {
} }
internalGetMutableAvatarTeamMap().mergeFrom( internalGetMutableAvatarTeamMap().mergeFrom(
other.internalGetAvatarTeamMap()); other.internalGetAvatarTeamMap());
if (!other.unk3000NIGPICLBHMA_.isEmpty()) { if (!other.customTeamIds_.isEmpty()) {
if (unk3000NIGPICLBHMA_.isEmpty()) { if (customTeamIds_.isEmpty()) {
unk3000NIGPICLBHMA_ = other.unk3000NIGPICLBHMA_; customTeamIds_ = other.customTeamIds_;
bitField0_ = (bitField0_ & ~0x00000004); bitField0_ = (bitField0_ & ~0x00000004);
} else { } else {
ensureUnk3000NIGPICLBHMAIsMutable(); ensureCustomTeamIdsIsMutable();
unk3000NIGPICLBHMA_.addAll(other.unk3000NIGPICLBHMA_); customTeamIds_.addAll(other.customTeamIds_);
} }
onChanged(); onChanged();
} }
...@@ -1492,80 +1490,80 @@ public final class AvatarDataNotifyOuterClass { ...@@ -1492,80 +1490,80 @@ public final class AvatarDataNotifyOuterClass {
return this; return this;
} }
private com.google.protobuf.Internal.IntList unk3000NIGPICLBHMA_ = emptyIntList(); private com.google.protobuf.Internal.IntList customTeamIds_ = emptyIntList();
private void ensureUnk3000NIGPICLBHMAIsMutable() { private void ensureCustomTeamIdsIsMutable() {
if (!((bitField0_ & 0x00000004) != 0)) { if (!((bitField0_ & 0x00000004) != 0)) {
unk3000NIGPICLBHMA_ = mutableCopy(unk3000NIGPICLBHMA_); customTeamIds_ = mutableCopy(customTeamIds_);
bitField0_ |= 0x00000004; bitField0_ |= 0x00000004;
} }
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return A list containing the unk3000NIGPICLBHMA. * @return A list containing the customTeamIds.
*/ */
public java.util.List<java.lang.Integer> public java.util.List<java.lang.Integer>
getUnk3000NIGPICLBHMAList() { getCustomTeamIdsList() {
return ((bitField0_ & 0x00000004) != 0) ? return ((bitField0_ & 0x00000004) != 0) ?
java.util.Collections.unmodifiableList(unk3000NIGPICLBHMA_) : unk3000NIGPICLBHMA_; java.util.Collections.unmodifiableList(customTeamIds_) : customTeamIds_;
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return The count of unk3000NIGPICLBHMA. * @return The count of customTeamIds.
*/ */
public int getUnk3000NIGPICLBHMACount() { public int getCustomTeamIdsCount() {
return unk3000NIGPICLBHMA_.size(); return customTeamIds_.size();
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param index The index of the element to return. * @param index The index of the element to return.
* @return The unk3000NIGPICLBHMA at the given index. * @return The customTeamIds at the given index.
*/ */
public int getUnk3000NIGPICLBHMA(int index) { public int getCustomTeamIds(int index) {
return unk3000NIGPICLBHMA_.getInt(index); return customTeamIds_.getInt(index);
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param index The index to set the value at. * @param index The index to set the value at.
* @param value The unk3000NIGPICLBHMA to set. * @param value The customTeamIds to set.
* @return This builder for chaining. * @return This builder for chaining.
*/ */
public Builder setUnk3000NIGPICLBHMA( public Builder setCustomTeamIds(
int index, int value) { int index, int value) {
ensureUnk3000NIGPICLBHMAIsMutable(); ensureCustomTeamIdsIsMutable();
unk3000NIGPICLBHMA_.setInt(index, value); customTeamIds_.setInt(index, value);
onChanged(); onChanged();
return this; return this;
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param value The unk3000NIGPICLBHMA to add. * @param value The customTeamIds to add.
* @return This builder for chaining. * @return This builder for chaining.
*/ */
public Builder addUnk3000NIGPICLBHMA(int value) { public Builder addCustomTeamIds(int value) {
ensureUnk3000NIGPICLBHMAIsMutable(); ensureCustomTeamIdsIsMutable();
unk3000NIGPICLBHMA_.addInt(value); customTeamIds_.addInt(value);
onChanged(); onChanged();
return this; return this;
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @param values The unk3000NIGPICLBHMA to add. * @param values The customTeamIds to add.
* @return This builder for chaining. * @return This builder for chaining.
*/ */
public Builder addAllUnk3000NIGPICLBHMA( public Builder addAllCustomTeamIds(
java.lang.Iterable<? extends java.lang.Integer> values) { java.lang.Iterable<? extends java.lang.Integer> values) {
ensureUnk3000NIGPICLBHMAIsMutable(); ensureCustomTeamIdsIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll( com.google.protobuf.AbstractMessageLite.Builder.addAll(
values, unk3000NIGPICLBHMA_); values, customTeamIds_);
onChanged(); onChanged();
return this; return this;
} }
/** /**
* <code>repeated uint32 Unk3000_NIGPICLBHMA = 9;</code> * <code>repeated uint32 custom_team_ids = 9;</code>
* @return This builder for chaining. * @return This builder for chaining.
*/ */
public Builder clearUnk3000NIGPICLBHMA() { public Builder clearCustomTeamIds() {
unk3000NIGPICLBHMA_ = emptyIntList(); customTeamIds_ = emptyIntList();
bitField0_ = (bitField0_ & ~0x00000004); bitField0_ = (bitField0_ & ~0x00000004);
onChanged(); onChanged();
return this; return this;
...@@ -2072,17 +2070,17 @@ public final class AvatarDataNotifyOuterClass { ...@@ -2072,17 +2070,17 @@ public final class AvatarDataNotifyOuterClass {
static { static {
java.lang.String[] descriptorData = { java.lang.String[] descriptorData = {
"\n\026AvatarDataNotify.proto\032\020AvatarInfo.pro" + "\n\026AvatarDataNotify.proto\032\020AvatarInfo.pro" +
"to\032\020AvatarTeam.proto\"\343\002\n\020AvatarDataNotif" + "to\032\020AvatarTeam.proto\"\337\002\n\020AvatarDataNotif" +
"y\022\032\n\022owned_costume_list\030\013 \003(\r\022\032\n\022choose_" + "y\022\032\n\022owned_costume_list\030\013 \003(\r\022\032\n\022choose_" +
"avatar_guid\030\010 \001(\004\022=\n\017avatar_team_map\030\007 \003" + "avatar_guid\030\010 \001(\004\022=\n\017avatar_team_map\030\007 \003" +
"(\0132$.AvatarDataNotify.AvatarTeamMapEntry" + "(\0132$.AvatarDataNotify.AvatarTeamMapEntry" +
"\022\033\n\023Unk3000_NIGPICLBHMA\030\t \003(\r\022\035\n\025temp_av" + "\022\027\n\017custom_team_ids\030\t \003(\r\022\035\n\025temp_avatar" +
"atar_guid_list\030\014 \003(\004\022\033\n\023owned_flycloak_l" + "_guid_list\030\014 \003(\004\022\033\n\023owned_flycloak_list\030" +
"ist\030\001 \003(\r\022 \n\013avatar_list\030\006 \003(\0132\013.AvatarI" + "\001 \003(\r\022 \n\013avatar_list\030\006 \003(\0132\013.AvatarInfo\022" +
"nfo\022\032\n\022cur_avatar_team_id\030\002 \001(\r\032A\n\022Avata" + "\032\n\022cur_avatar_team_id\030\002 \001(\r\032A\n\022AvatarTea" +
"rTeamMapEntry\022\013\n\003key\030\001 \001(\r\022\032\n\005value\030\002 \001(" + "mMapEntry\022\013\n\003key\030\001 \001(\r\022\032\n\005value\030\002 \001(\0132\013." +
"\0132\013.AvatarTeam:\0028\001B\033\n\031emu.grasscutter.ne" + "AvatarTeam:\0028\001B\033\n\031emu.grasscutter.net.pr" +
"t.protob\006proto3" "otob\006proto3"
}; };
descriptor = com.google.protobuf.Descriptors.FileDescriptor descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData, .internalBuildGeneratedFileFrom(descriptorData,
...@@ -2095,7 +2093,7 @@ public final class AvatarDataNotifyOuterClass { ...@@ -2095,7 +2093,7 @@ public final class AvatarDataNotifyOuterClass {
internal_static_AvatarDataNotify_fieldAccessorTable = new internal_static_AvatarDataNotify_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_AvatarDataNotify_descriptor, internal_static_AvatarDataNotify_descriptor,
new java.lang.String[] { "OwnedCostumeList", "ChooseAvatarGuid", "AvatarTeamMap", "Unk3000NIGPICLBHMA", "TempAvatarGuidList", "OwnedFlycloakList", "AvatarList", "CurAvatarTeamId", }); new java.lang.String[] { "OwnedCostumeList", "ChooseAvatarGuid", "AvatarTeamMap", "CustomTeamIds", "TempAvatarGuidList", "OwnedFlycloakList", "AvatarList", "CurAvatarTeamId", });
internal_static_AvatarDataNotify_AvatarTeamMapEntry_descriptor = internal_static_AvatarDataNotify_AvatarTeamMapEntry_descriptor =
internal_static_AvatarDataNotify_descriptor.getNestedTypes().get(0); internal_static_AvatarDataNotify_descriptor.getNestedTypes().get(0);
internal_static_AvatarDataNotify_AvatarTeamMapEntry_fieldAccessorTable = new internal_static_AvatarDataNotify_AvatarTeamMapEntry_fieldAccessorTable = new
......
...@@ -8,7 +8,8 @@ import emu.grasscutter.utils.Utils; ...@@ -8,7 +8,8 @@ import emu.grasscutter.utils.Utils;
public final class GameConstants { public final class GameConstants {
public static String VERSION = "3.0.0"; public static String VERSION = "3.0.0";
public static final int MAX_TEAMS = 4; public static final int DEFAULT_TEAMS = 4;
public static final int MAX_TEAMS = 10;
public static final int MAIN_CHARACTER_MALE = 10000005; public static final int MAIN_CHARACTER_MALE = 10000005;
public static final int MAIN_CHARACTER_FEMALE = 10000007; public static final int MAIN_CHARACTER_FEMALE = 10000007;
public static final Position START_POSITION = new Position(2747, 194, -1719); public static final Position START_POSITION = new Position(2747, 194, -1719);
......
...@@ -7,6 +7,7 @@ import java.util.List; ...@@ -7,6 +7,7 @@ import java.util.List;
import dev.morphia.annotations.Entity; import dev.morphia.annotations.Entity;
import emu.grasscutter.game.avatar.Avatar; import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.net.proto.AvatarTeamOuterClass.AvatarTeam;
@Entity @Entity
public class TeamInfo { public class TeamInfo {
...@@ -81,4 +82,16 @@ public class TeamInfo { ...@@ -81,4 +82,16 @@ public class TeamInfo {
this.getAvatars().add(id); this.getAvatars().add(id);
} }
} }
public AvatarTeam toProto(Player player) {
AvatarTeam.Builder avatarTeam = AvatarTeam.newBuilder()
.setTeamName(this.getName());
for (int i = 0; i < this.getAvatars().size(); i++) {
Avatar avatar = player.getAvatars().getAvatarById(this.getAvatars().get(i));
avatarTeam.addAvatarGuidList(avatar.getGuid());
}
return avatarTeam.build();
}
} }
...@@ -20,17 +20,20 @@ import emu.grasscutter.net.packet.PacketOpcodes; ...@@ -20,17 +20,20 @@ import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType; import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
import emu.grasscutter.net.proto.MotionStateOuterClass.MotionState; import emu.grasscutter.net.proto.MotionStateOuterClass.MotionState;
import emu.grasscutter.net.proto.PlayerDieTypeOuterClass.PlayerDieType; import emu.grasscutter.net.proto.PlayerDieTypeOuterClass.PlayerDieType;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.server.event.player.PlayerTeamDeathEvent; import emu.grasscutter.server.event.player.PlayerTeamDeathEvent;
import emu.grasscutter.server.packet.send.PacketAddCustomTeamRsp;
import emu.grasscutter.server.packet.send.PacketAvatarDieAnimationEndRsp; import emu.grasscutter.server.packet.send.PacketAvatarDieAnimationEndRsp;
import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify; import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify;
import emu.grasscutter.server.packet.send.PacketAvatarLifeStateChangeNotify; import emu.grasscutter.server.packet.send.PacketAvatarLifeStateChangeNotify;
import emu.grasscutter.server.packet.send.PacketAvatarSkillInfoNotify;
import emu.grasscutter.server.packet.send.PacketAvatarTeamUpdateNotify; import emu.grasscutter.server.packet.send.PacketAvatarTeamUpdateNotify;
import emu.grasscutter.server.packet.send.PacketChangeAvatarRsp; import emu.grasscutter.server.packet.send.PacketChangeAvatarRsp;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp; import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import emu.grasscutter.server.packet.send.PacketChangeTeamNameRsp; import emu.grasscutter.server.packet.send.PacketChangeTeamNameRsp;
import emu.grasscutter.server.packet.send.PacketChooseCurAvatarTeamRsp; import emu.grasscutter.server.packet.send.PacketChooseCurAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketCustomTeamListNotify;
import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify; import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify;
import emu.grasscutter.server.packet.send.PacketRemoveCustomTeamRsp;
import emu.grasscutter.server.packet.send.PacketSceneTeamUpdateNotify; import emu.grasscutter.server.packet.send.PacketSceneTeamUpdateNotify;
import emu.grasscutter.server.packet.send.PacketSetUpAvatarTeamRsp; import emu.grasscutter.server.packet.send.PacketSetUpAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketWorldPlayerDieNotify; import emu.grasscutter.server.packet.send.PacketWorldPlayerDieNotify;
...@@ -44,7 +47,8 @@ import lombok.Setter; ...@@ -44,7 +47,8 @@ import lombok.Setter;
@Entity @Entity
public class TeamManager extends BasePlayerDataManager { public class TeamManager extends BasePlayerDataManager {
@Getter private Map<Integer, TeamInfo> teams; // This needs to be a LinkedHashMap to guarantee insertion order.
@Getter private LinkedHashMap<Integer, TeamInfo> teams;
private int currentTeamIndex; private int currentTeamIndex;
@Getter @Setter private int currentCharacterIndex; @Getter @Setter private int currentCharacterIndex;
...@@ -70,9 +74,9 @@ public class TeamManager extends BasePlayerDataManager { ...@@ -70,9 +74,9 @@ public class TeamManager extends BasePlayerDataManager {
this(); this();
this.setPlayer(player); this.setPlayer(player);
this.teams = new HashMap<>(); this.teams = new LinkedHashMap<>();
this.currentTeamIndex = 1; this.currentTeamIndex = 1;
for (int i = 1; i <= GameConstants.MAX_TEAMS; i++) { for (int i = 1; i <= GameConstants.DEFAULT_TEAMS; i++) {
this.teams.put(i, new TeamInfo()); this.teams.put(i, new TeamInfo());
} }
} }
...@@ -640,4 +644,42 @@ public class TeamManager extends BasePlayerDataManager { ...@@ -640,4 +644,42 @@ public class TeamManager extends BasePlayerDataManager {
public void onPlayerLogin() { // Hack for now to fix resonances on login public void onPlayerLogin() { // Hack for now to fix resonances on login
this.updateTeamResonances(); this.updateTeamResonances();
} }
public synchronized void addNewCustomTeam() {
// Sanity check - max number of teams.
if (this.teams.size() == GameConstants.MAX_TEAMS) {
player.sendPacket(new PacketAddCustomTeamRsp(Retcode.RET_FAIL));
return;
}
// The id of the new custom team is the lowest id in [5,MAX_TEAMS] that is not yet taken.
int id = -1;
for (int i = 5; i <= GameConstants.MAX_TEAMS; i++) {
if (!this.teams.keySet().contains(i)) {
id = i;
break;
}
}
// Create the new team.
this.teams.put(id, new TeamInfo());
// Send packets.
player.sendPacket(new PacketCustomTeamListNotify(player));
player.sendPacket(new PacketAddCustomTeamRsp());
}
public synchronized void removeCustomTeam(int id) {
// Check if the target id exists.
if (!this.teams.containsKey(id)) {
player.sendPacket(new PacketRemoveCustomTeamRsp(Retcode.RET_FAIL, id));
}
// Remove team.
this.teams.remove(id);
// Send packets.
player.sendPacket(new PacketCustomTeamListNotify(player));
player.sendPacket(new PacketRemoveCustomTeamRsp(id));
}
} }
...@@ -1784,9 +1784,9 @@ public class PacketOpcodes { ...@@ -1784,9 +1784,9 @@ public class PacketOpcodes {
public static final int Unk3000_CPCMICDDBCH = 20011; public static final int Unk3000_CPCMICDDBCH = 20011;
public static final int Unk3000_DCAHJINNNDM = 23107; public static final int Unk3000_DCAHJINNNDM = 23107;
public static final int Unk3000_DCLAGIJJEHB = 402; public static final int Unk3000_DCLAGIJJEHB = 402;
public static final int Unk3000_DFIIBIGPHGE = 1731; public static final int RemoveCustomTeamReq = 1731;
public static final int Unk3000_DHEOMDCCMMC = 429; public static final int Unk3000_DHEOMDCCMMC = 429;
public static final int Unk3000_DHOFMKPKFMF = 1749; public static final int CustomTeamListNotify = 1749;
public static final int Unk3000_DJNBNBMIECP = 5588; public static final int Unk3000_DJNBNBMIECP = 5588;
public static final int Unk3000_DLCDJPKNGBD = 185; public static final int Unk3000_DLCDJPKNGBD = 185;
public static final int Unk3000_DPEJONKFONL = 21750; public static final int Unk3000_DPEJONKFONL = 21750;
...@@ -1807,9 +1807,9 @@ public class PacketOpcodes { ...@@ -1807,9 +1807,9 @@ public class PacketOpcodes {
public static final int Unk3000_HIJKNFBBCFC = 23948; public static final int Unk3000_HIJKNFBBCFC = 23948;
public static final int Unk3000_HPFGNOIGNAG = 21961; public static final int Unk3000_HPFGNOIGNAG = 21961;
public static final int Unk3000_IBMFJMGHCNC = 6060; public static final int Unk3000_IBMFJMGHCNC = 6060;
public static final int Unk3000_IBNIGBFIEEF = 1735; public static final int AddCustomTeamRsp = 1735;
public static final int Unk3000_IGCECHKNKOO = 21804; public static final int Unk3000_IGCECHKNKOO = 21804;
public static final int Unk3000_IMLAPBGLBFF = 1687; public static final int AddCustomTeamReq = 1687;
public static final int Unk3000_IPAKLDNKDAO = 6275; public static final int Unk3000_IPAKLDNKDAO = 6275;
public static final int Unk3000_JDCOHPBDPED = 125; public static final int Unk3000_JDCOHPBDPED = 125;
public static final int Unk3000_JIEPEGAHDNH = 24152; public static final int Unk3000_JIEPEGAHDNH = 24152;
...@@ -1817,7 +1817,7 @@ public class PacketOpcodes { ...@@ -1817,7 +1817,7 @@ public class PacketOpcodes {
public static final int Unk3000_KEJGDDMMBLP = 6376; public static final int Unk3000_KEJGDDMMBLP = 6376;
public static final int Unk3000_KGDKKLOOIPG = 457; public static final int Unk3000_KGDKKLOOIPG = 457;
public static final int Unk3000_KHFMBKILMMD = 24081; public static final int Unk3000_KHFMBKILMMD = 24081;
public static final int Unk3000_KIDDGDPKBEN = 1729; public static final int RemoveCustomTeamRsp = 1729;
public static final int Unk3000_KJNIKBPKAED = 461; public static final int Unk3000_KJNIKBPKAED = 461;
public static final int Unk3000_KKHPGFINACH = 24602; public static final int Unk3000_KKHPGFINACH = 24602;
public static final int Unk3000_KOKEHAPLNHF = 6190; public static final int Unk3000_KOKEHAPLNHF = 6190;
......
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.server.game.GameSession;
@Opcodes(PacketOpcodes.AddCustomTeamReq)
public class HandlerAddCustomTeamReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.getPlayer().getTeamManager().addNewCustomTeam();
}
}
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RemoveCustomTeamReqOuterClass.RemoveCustomTeamReq;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.server.game.GameSession;
@Opcodes(PacketOpcodes.RemoveCustomTeamReq)
public class HandlerRemoveCustomTeamReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
RemoveCustomTeamReq req = RemoveCustomTeamReq.parseFrom(payload);
session.getPlayer().getTeamManager().removeCustomTeam(req.getId());
}
}
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.AddCustomTeamRspOuterClass.AddCustomTeamRsp;
public class PacketAddCustomTeamRsp extends BasePacket {
public PacketAddCustomTeamRsp(Retcode retcode) {
super(PacketOpcodes.AddCustomTeamRsp);
AddCustomTeamRsp proto = AddCustomTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.build();
this.setData(proto);
}
public PacketAddCustomTeamRsp() {
this(Retcode.RET_SUCC);
}
}
...@@ -25,17 +25,16 @@ public class PacketAvatarDataNotify extends BasePacket { ...@@ -25,17 +25,16 @@ public class PacketAvatarDataNotify extends BasePacket {
proto.addAvatarList(avatar.toProto()); proto.addAvatarList(avatar.toProto());
} }
for (Entry<Integer, TeamInfo> entry : player.getTeamManager().getTeams().entrySet()) { // Add the id list for custom teams.
TeamInfo teamInfo = entry.getValue(); for (int id : player.getTeamManager().getTeams().keySet()) {
AvatarTeam.Builder avatarTeam = AvatarTeam.newBuilder() if (id > 4) {
.setTeamName(teamInfo.getName()); proto.addCustomTeamIds(id);
for (int i = 0; i < teamInfo.getAvatars().size(); i++) {
Avatar avatar = player.getAvatars().getAvatarById(teamInfo.getAvatars().get(i));
avatarTeam.addAvatarGuidList(avatar.getGuid());
} }
}
proto.putAvatarTeamMap(entry.getKey(), avatarTeam.build()); for (Entry<Integer, TeamInfo> entry : player.getTeamManager().getTeams().entrySet()) {
TeamInfo teamInfo = entry.getValue();
proto.putAvatarTeamMap(entry.getKey(), teamInfo.toProto(player));
} }
// Set main character // Set main character
......
...@@ -19,15 +19,7 @@ public class PacketAvatarTeamUpdateNotify extends BasePacket { ...@@ -19,15 +19,7 @@ public class PacketAvatarTeamUpdateNotify extends BasePacket {
for (Entry<Integer, TeamInfo> entry : player.getTeamManager().getTeams().entrySet()) { for (Entry<Integer, TeamInfo> entry : player.getTeamManager().getTeams().entrySet()) {
TeamInfo teamInfo = entry.getValue(); TeamInfo teamInfo = entry.getValue();
AvatarTeam.Builder avatarTeam = AvatarTeam.newBuilder() proto.putAvatarTeamMap(entry.getKey(), teamInfo.toProto(player));
.setTeamName(teamInfo.getName());
for (int i = 0; i < teamInfo.getAvatars().size(); i++) {
Avatar avatar = player.getAvatars().getAvatarById(teamInfo.getAvatars().get(i));
avatarTeam.addAvatarGuidList(avatar.getGuid());
}
proto.putAvatarTeamMap(entry.getKey(), avatarTeam.build());
} }
this.setData(proto); this.setData(proto);
......
package emu.grasscutter.server.packet.send;
import java.util.Map.Entry;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.player.TeamInfo;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.AvatarTeamOuterClass.AvatarTeam;
import emu.grasscutter.net.proto.CustomTeamListNotifyOuterClass.CustomTeamListNotify;
public class PacketCustomTeamListNotify extends BasePacket {
public PacketCustomTeamListNotify(Player player) {
super(PacketOpcodes.CustomTeamListNotify);
CustomTeamListNotify.Builder proto = CustomTeamListNotify.newBuilder();
// Add the id list for custom teams.
for (int id : player.getTeamManager().getTeams().keySet()) {
if (id > 4) {
proto.addCustomTeamIds(id);
}
}
// Add the avatar lists for all the teams the player has.
for (Entry<Integer, TeamInfo> entry : player.getTeamManager().getTeams().entrySet()) {
TeamInfo teamInfo = entry.getValue();
proto.putAvatarTeamMap(entry.getKey(), teamInfo.toProto(player));
}
this.setData(proto);
}
}
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.RemoveCustomTeamRspOuterClass.RemoveCustomTeamRsp;
public class PacketRemoveCustomTeamRsp extends BasePacket {
public PacketRemoveCustomTeamRsp(Retcode retcode, int id) {
super(PacketOpcodes.RemoveCustomTeamRsp);
RemoveCustomTeamRsp proto = RemoveCustomTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.setId(id)
.build();
this.setData(proto);
}
public PacketRemoveCustomTeamRsp(int id) {
this(Retcode.RET_SUCC, id);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment