package com.hypixel.hytale.builtin.adventure.objectives.historydata;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
import com.hypixel.hytale.common.util.ArrayUtil;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import javax.annotation.Nonnull;
public final class ObjectiveLineHistoryData extends CommonObjectiveHistoryData {
public static final BuilderCodec<ObjectiveLineHistoryData> CODEC;
private ObjectiveHistoryData[] objectiveHistoryDataArray;
private String[] nextObjectiveLineIds;
public ObjectiveLineHistoryData(String id, String category, String[] nextObjectiveLineIds) {
super(id, category);
this.nextObjectiveLineIds = nextObjectiveLineIds;
}
private ObjectiveLineHistoryData() {
}
public ObjectiveHistoryData[] getObjectiveHistoryDataArray() {
return this.objectiveHistoryDataArray;
}
public String[] getNextObjectiveLineIds() {
return this.nextObjectiveLineIds;
}
public void addObjectiveHistoryData(@Nonnull ObjectiveHistoryData objectiveHistoryData) {
this.objectiveHistoryDataArray = (ObjectiveHistoryData[])ArrayUtil.append(this.objectiveHistoryDataArray, objectiveHistoryData);
}
@Nonnull
public Map<UUID, ObjectiveLineHistoryData> cloneForPlayers(@Nonnull Set<UUID> playerUUIDs) {
Map<UUID, ObjectiveLineHistoryData> objectiveLineDataPerPlayer = new Object2ObjectOpenHashMap<UUID, ObjectiveLineHistoryData>();
for(ObjectiveHistoryData objectiveHistoryData : this.objectiveHistoryDataArray) {
for(UUID playerUUID : playerUUIDs) {
((ObjectiveLineHistoryData)objectiveLineDataPerPlayer.computeIfAbsent(playerUUID, (k) -> new ObjectiveLineHistoryData())).addObjectiveHistoryData(objectiveHistoryData.cloneForPlayer(playerUUID));
}
}
return objectiveLineDataPerPlayer;
}
public void completed(UUID playerUUID, @Nonnull ObjectiveLineHistoryData objectiveLineHistoryData) {
this.completed();
for(ObjectiveHistoryData latestObjectiveHistoryData : objectiveLineHistoryData.objectiveHistoryDataArray) {
boolean updated = false;
for(ObjectiveHistoryData savedObjectiveHistoryData : this.objectiveHistoryDataArray) {
if (savedObjectiveHistoryData.id.equals(latestObjectiveHistoryData.id)) {
savedObjectiveHistoryData.completed(playerUUID, latestObjectiveHistoryData);
updated = true;
break;
}
}
if (!updated) {
this.addObjectiveHistoryData(latestObjectiveHistoryData);
}
}
}
@Nonnull
public String toString() {
String var10000 = Arrays.toString(this.objectiveHistoryDataArray);
return "ObjectiveLineHistoryData{objectiveHistoryDataArray=" + var10000 + ", nextObjectiveLineIds=" + Arrays.toString(this.nextObjectiveLineIds) + "} " + super.toString();
}
static {
CODEC = ((BuilderCodec.Builder)BuilderCodec.builder(ObjectiveLineHistoryData.class, ObjectiveLineHistoryData::new, BASE_CODEC).append(new KeyedCodec("Objectives", new ArrayCodec(ObjectiveHistoryData.CODEC, (x$0) -> new ObjectiveHistoryData[x$0])), (objectiveLineDetails, objectiveDetails) -> objectiveLineDetails.objectiveHistoryDataArray = objectiveDetails, (objectiveLineDetails) -> objectiveLineDetails.objectiveHistoryDataArray).add()).build();
}
}