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);
}
}
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);
}
}