package com.hypixel.hytale.builtin.adventure.objectives.transaction;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.codec.lookup.CodecMapCodec;
import com.hypixel.hytale.common.util.ArrayUtil;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public abstract class TransactionRecord {
public static final CodecMapCodec<TransactionRecord> CODEC = new CodecMapCodec<TransactionRecord>("Type");
public static final BuilderCodec<TransactionRecord> BASE_CODEC;
protected TransactionStatus status;
private String reason;
public TransactionRecord() {
this.status = TransactionStatus.SUCCESS;
}
public TransactionStatus getStatus() {
return this.status;
}
public abstract void revert();
public abstract void complete();
public abstract void unload();
public abstract boolean shouldBeSerialized();
@Nonnull
public TransactionRecord fail(String reason) {
this.status = TransactionStatus.FAIL;
this.reason = reason;
return this;
}
@Nonnull
public String toString() {
String var10000 = String.valueOf(this.status);
return "TransactionRecord{status=" + var10000 + ", reason='" + this.reason + "'}";
}
@Nonnull
public static <T extends TransactionRecord> TransactionRecord[] appendTransaction(@Nullable TransactionRecord[] transactions, @Nonnull T transaction) {
return transactions == null ? new TransactionRecord[]{transaction} : (TransactionRecord[])ArrayUtil.append(transactions, transaction);
}
@Nonnull
public static <T extends TransactionRecord> TransactionRecord[] appendFailedTransaction(TransactionRecord[] transactions, @Nonnull T transaction, String reason) {
return appendTransaction(transactions, transaction.fail(reason));
}
static {
BASE_CODEC = ((BuilderCodec.Builder)BuilderCodec.abstractBuilder(TransactionRecord.class).append(new KeyedCodec("Status", new EnumCodec(TransactionStatus.class, EnumCodec.EnumStyle.LEGACY)), (spawnEntityTransactionRecord, status) -> spawnEntityTransactionRecord.status = status, (spawnEntityTransactionRecord) -> spawnEntityTransactionRecord.status).add()).build();
CODEC.register((String)"SpawnEntity", SpawnEntityTransactionRecord.class, SpawnEntityTransactionRecord.CODEC);
CODEC.register((String)"SpawnBlock", SpawnTreasureChestTransactionRecord.class, SpawnTreasureChestTransactionRecord.CODEC);
}
}