hytale-server/com/hypixel/hytale/builtin/adventure/objectives/config/task/ObjectiveTaskAsset.java

116 lines
4.0 KiB
Java

package com.hypixel.hytale.builtin.adventure.objectives.config.task;
import com.hypixel.hytale.builtin.adventure.objectives.config.taskcondition.TaskConditionAsset;
import com.hypixel.hytale.codec.Codec;
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.codec.lookup.CodecMapCodec;
import com.hypixel.hytale.math.vector.Vector3i;
import java.text.MessageFormat;
import java.util.Arrays;
import javax.annotation.Nonnull;
public abstract class ObjectiveTaskAsset {
public static final CodecMapCodec<ObjectiveTaskAsset> CODEC = new CodecMapCodec<>("Type");
public static final BuilderCodec<ObjectiveTaskAsset> BASE_CODEC = BuilderCodec.abstractBuilder(ObjectiveTaskAsset.class)
.append(
new KeyedCodec<>("DescriptionId", Codec.STRING),
(objectiveTaskAsset, s) -> objectiveTaskAsset.descriptionId = s,
objectiveTaskAsset -> objectiveTaskAsset.descriptionId
)
.add()
.append(
new KeyedCodec<>("TaskConditions", new ArrayCodec<>(TaskConditionAsset.CODEC, TaskConditionAsset[]::new)),
(useBlockObjectiveTaskAsset, inventoryConditions) -> useBlockObjectiveTaskAsset.taskConditions = inventoryConditions,
useBlockObjectiveTaskAsset -> useBlockObjectiveTaskAsset.taskConditions
)
.add()
.append(
new KeyedCodec<>("MapMarkers", new ArrayCodec<>(Vector3i.CODEC, Vector3i[]::new)),
(taskAsset, vector3is) -> taskAsset.mapMarkers = vector3is,
taskAsset -> taskAsset.mapMarkers
)
.add()
.build();
public static final String TASK_DESCRIPTION_KEY = "server.objectives.{0}.taskSet.{1}.task.{2}";
protected String descriptionId;
protected TaskConditionAsset[] taskConditions;
protected Vector3i[] mapMarkers;
private String defaultDescriptionId;
public ObjectiveTaskAsset(String descriptionId, TaskConditionAsset[] taskConditions, Vector3i[] mapMarkers) {
this.descriptionId = descriptionId;
this.taskConditions = taskConditions;
this.mapMarkers = mapMarkers;
}
protected ObjectiveTaskAsset() {
}
public String getDescriptionId() {
return this.descriptionId;
}
@Nonnull
public String getDescriptionKey(String objectiveId, int taskSetIndex, int taskIndex) {
if (this.descriptionId != null) {
return this.descriptionId;
} else {
if (this.defaultDescriptionId == null) {
this.defaultDescriptionId = MessageFormat.format("server.objectives.{0}.taskSet.{1}.task.{2}", objectiveId, taskSetIndex, taskIndex);
}
return this.defaultDescriptionId;
}
}
public TaskConditionAsset[] getTaskConditions() {
return this.taskConditions;
}
public Vector3i[] getMapMarkers() {
return this.mapMarkers;
}
public abstract ObjectiveTaskAsset.TaskScope getTaskScope();
public boolean matchesAsset(@Nonnull ObjectiveTaskAsset task) {
if (!Arrays.equals((Object[])task.taskConditions, (Object[])this.taskConditions)) {
return false;
} else if (!Arrays.equals((Object[])task.mapMarkers, (Object[])this.mapMarkers)) {
return false;
} else {
return !task.getClass().equals(this.getClass()) ? false : this.matchesAsset0(task);
}
}
protected abstract boolean matchesAsset0(ObjectiveTaskAsset var1);
@Nonnull
@Override
public String toString() {
return "ObjectiveTaskAsset{descriptionId='"
+ this.descriptionId
+ "', taskConditions="
+ Arrays.toString((Object[])this.taskConditions)
+ ", mapMarkers="
+ Arrays.toString((Object[])this.mapMarkers)
+ "}";
}
public static enum TaskScope {
PLAYER,
MARKER,
PLAYER_AND_MARKER;
public boolean isTaskPossibleForMarker() {
return this == MARKER || this == PLAYER_AND_MARKER;
}
public boolean isTaskPossibleForPlayer() {
return this == PLAYER || this == PLAYER_AND_MARKER;
}
}
}