XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEServerManager

【Java】我的世界XFE服务器管理器

公开
关注 0 Fork 0 Star 0
UTF-8
package com.xfestudio.xfeservermanager.api.world;

import com.xfestudio.xfeservermanager.api.util.ApiChecks;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;

/** Versioned opaque state produced by a registered codec. */
public record WorldStatePayload(
        String codecId,
        int schemaVersion,
        String mediaType,
        byte[] payload,
        Map<String, String> metadata
) {
    public WorldStatePayload {
        codecId = ApiChecks.lowerIdentifier(codecId, "codecId");
        if (schemaVersion < 1) {
            throw new IllegalArgumentException("schemaVersion must be positive");
        }
        mediaType = ApiChecks.notBlank(mediaType, "mediaType");
        Objects.requireNonNull(payload, "payload");
        payload = Arrays.copyOf(payload, payload.length);
        metadata = ApiChecks.immutableMap(metadata, "metadata");
    }

    @Override
    public byte[] payload() {
        return Arrays.copyOf(payload, payload.length);
    }

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (!(other instanceof WorldStatePayload that)) {
            return false;
        }
        return schemaVersion == that.schemaVersion
                && codecId.equals(that.codecId)
                && mediaType.equals(that.mediaType)
                && Arrays.equals(payload, that.payload)
                && metadata.equals(that.metadata);
    }

    @Override
    public int hashCode() {
        int result = Objects.hash(codecId, schemaVersion, mediaType, metadata);
        return 31 * result + Arrays.hashCode(payload);
    }
}