Objective class

Пакет: com.hypixel.hytale.builtin.adventure.objectives

Файл: com/hypixel/hytale/builtin/adventure/objectives/Objective.java

implements: NetworkSerializable<com.hypixel.hytale.protocol.Objective>

Поля (47)

МодификаторыТипИмя
break
break
ObjectiveAsset var1
boolean var1
ObjectiveAsset var1
TaskSet var2
ObjectiveAsset var2
ObjectiveAsset var2
ObjectiveAsset var2
ObjectiveTaskAsset[] var2
ObjectiveLineAsset var2
UUID var2
var2
var2
com.hypixel.hytale.protocol.Objective var2
ObjectivePlugin var3
TaskSet[] var3
PlayerRef var3
PlayerRef var3
ObjectivePlugin var3
World var3
Store var3
PlayerRef var3
ObjectiveAsset var3
ObjectiveTask[] var3
World var3
TaskSet[] var4
TrackOrUpdateObjective var4
ObjectiveCompletionAsset[] var4
ObjectiveTask[] var4
TaskSet[] var4
PlayerRef var4
Ref var4
ObjectiveTaskAsset[] var5
ObjectiveTaskAsset var5
PlayerRef var5
TransformComponent var5
ObjectiveTask[] var6
TransactionRecord[] var6
ObjectiveTask var6
boolean var6
var6
PlayerRef var6
ObjectiveTask var7
Ref var7
TransactionRecord[] var8
TrackOrUpdateObjective var9

Методы (71)

МодификаторыВозвратСигнатура
public void addActivePlayerUUIDvoid addActivePlayerUUID(UUID var1)
public void cancelvoid cancel()
private void cancelReloadvoid cancelReload(@Nonnull ObjectiveTask[] var1)
public boolean checkTaskSetCompletionboolean checkTaskSetCompletion(@Nonnull Store<EntityStore> var1)
public void completevoid complete(@Nonnull Store<EntityStore> var1)
public boolean consumeDirtyboolean consumeDirty()
for for(int var7 = 0; var7 < var5.length; var7++)
for for(ObjectiveTask var5 : this.currentTasks)
for for(ObjectiveTask var10 : this.currentTasks)
for for(ObjectiveTask var5 : this.currentTasks)
for for(ObjectiveCompletionAsset var8 : var4)
for for(ObjectiveTask var4 : this.currentTasks)
for for(ObjectiveTask var4 : this.currentTasks)
for for(ObjectiveTask var8 : this.currentTasks)
for for(int var4 = 0; var4 < var1.length; var4++)
for for(ObjectiveTask var5 : this.currentTasks)
for for(ObjectiveTask var5 : var1)
for for(ObjectiveTask var5 : this.currentTasks)
for for(ObjectiveTask var10 : var1)
for for(UUID var3 : this.playerUUIDs)
for for(UUID var4 : this.playerUUIDs)
for for(UUID var5 : this.playerUUIDs)
for for(int var3 = 0; var3 < this.currentTasks.length; var3++)
public void forEachParticipantvoid forEachParticipant(@Nonnull Consumer<Ref<EntityStore>> var1)
public <T> void forEachParticipant<T> void forEachParticipant(@Nonnull BiConsumer<Ref<EntityStore>, T> var1, T var2)
public <T, U> void forEachParticipant<T, U> void forEachParticipant(@Nonnull TriConsumer<Ref<EntityStore>, T, U> var1, @Nonnull T var2, @Nonnull U var3)
public String getCurrentDescriptionString getCurrentDescription()
public int getCurrentTaskSetIndexint getCurrentTaskSetIndex()
public ItemStack getObjectiveItemStarterItemStack getObjectiveItemStarter()
public Set<UUID> getPlayerUUIDsSet<UUID> getPlayerUUIDs()
public UUID getWorldUUIDUUID getWorldUUID()
if if(this.currentTaskSetIndex >= var4.length)
if if(this.currentTasks == null)
if if(var10 == var5)
if if(this.currentTasks == null)
if if(this.currentTaskSetIndex < var3.length)
if if(var3 != null)
if if(var3 != null)
if if(var4 != null)
if if(this.currentTasks != null)
if if(this.currentTasks != null)
if if(var2 != null)
if if(var3 != null)
if if(var4 != null)
if if(var3 != null)
if if(this.objectiveLineHistoryData != null && var2 == null)
if if(var3 == null)
if if(this.currentTaskSetIndex >= var4.length)
if if(var6 != null)
if if(this.currentTasks == null)
if if(var5 != null)
if if(this.currentTasks != null)
if if(!var6)
if if(var4 != null)
if if(var5 != null)
if if(var6 != null)
if if(this.markerUUID != null)
if if(var2 == null)
if if(this.objectiveLineHistoryData != null)
public boolean isCompletedboolean isCompleted()
public boolean isDirtyboolean isDirty()
public void markDirtyvoid markDirty()
public void reloadObjectiveAssetvoid reloadObjectiveAsset(@Nonnull Map<String, ObjectiveAsset> var1)
public void removeActivePlayerUUIDvoid removeActivePlayerUUID(UUID var1)
private void revertRemovedTasksvoid revertRemovedTasks(@Nonnull ObjectiveTask[] var1)
public void setObjectiveItemStartervoid setObjectiveItemStarter(@Nonnull ItemStack var1)
public void setObjectiveLineHistoryDatavoid setObjectiveLineHistoryData(@Nullable ObjectiveLineHistoryData var1)
public boolean setupboolean setup(@Nonnull Store<EntityStore> var1)
public boolean setupCurrentTasksboolean setupCurrentTasks(@Nonnull Store<EntityStore> var1)
protected void taskSetCompletevoid taskSetComplete(@Nonnull Store<EntityStore> var1)
public void unloadvoid unload()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.objectives;

class="kw">import com.hypixel.hytale.builtin.adventure.objectives.config.ObjectiveAsset;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.config.ObjectiveLineAsset;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.config.completion.ObjectiveCompletionAsset;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.config.task.ObjectiveTaskAsset;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.config.task.TaskSet;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.historydata.ObjectiveHistoryData;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.historydata.ObjectiveLineHistoryData;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.task.ObjectiveTask;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.transaction.TransactionRecord;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.transaction.TransactionUtil;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.function.consumer.TriConsumer;
class="kw">import com.hypixel.hytale.protocol.packets.assets.TrackOrUpdateObjective;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.HashSet;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class Objective class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.Objective> {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<Objective> CODEC = BuilderCodec.builder(Objective.class, Objective::new)
      .append(new KeyedCodec<>("ObjectiveUUID", Codec.UUID_BINARY), (var0, var1) -> var0.objectiveUUID = var1, var0 -> var0.objectiveUUID)
      .add()
      .append(new KeyedCodec<>("ObjectiveId", Codec.STRING), (var0, var1) -> var0.objectiveId = var1, var0 -> var0.objectiveId)
      .add()
      .append(
         new KeyedCodec<>("ObjectiveLineData", ObjectiveLineHistoryData.CODEC),
         (var0, var1) -> var0.objectiveLineHistoryData = var1,
         var0 -> var0.objectiveLineHistoryData
      )
      .add()
      .append(
         new KeyedCodec<>("ObjectiveData", ObjectiveHistoryData.CODEC), (var0, var1) -> var0.objectiveHistoryData = var1, var0 -> var0.objectiveHistoryData
      )
      .add()
      .append(new KeyedCodec<>("Players", new ArrayCodec<>(Codec.UUID_STRING, UUID[]::new)), (var0, var1) -> {
         var0.playerUUIDs = new HashSet<>();
         Collections.addAll(var0.playerUUIDs, var1);
      }, var0 -> var0.playerUUIDs.toArray(UUID[]::new))
      .add()
      .append(
         new KeyedCodec<>("CurrentTasks", new ArrayCodec<>(ObjectiveTask.CODEC, ObjectiveTask[]::new)),
         (var0, var1) -> var0.currentTasks = var1,
         var0 -> var0.currentTasks
      )
      .add()
      .append(new KeyedCodec<>("CurrentTaskSetIndex", Codec.INTEGER), (var0, var1) -> var0.currentTaskSetIndex = var1, var0 -> var0.currentTaskSetIndex)
      .add()
      .append(new KeyedCodec<>("WorldUUID", Codec.UUID_BINARY), (var0, var1) -> var0.worldUUID = var1, var0 -> var0.worldUUID)
      .add()
      .append(new KeyedCodec<>("ObjectiveItemStarter", ItemStack.CODEC), (var0, var1) -> var0.objectiveItemStarter = var1, var0 -> var0.objectiveItemStarter)
      .add()
      .build();
   class="kw">protected UUID objectiveUUID;
   class="kw">protected String objectiveId;
   @Nullable
   class="kw">protected ObjectiveLineHistoryData objectiveLineHistoryData;
   class="kw">protected ObjectiveHistoryData objectiveHistoryData;
   class="kw">protected Set<UUID> playerUUIDs;
   @Nonnull
   class="kw">protected Set<UUID> activePlayerUUIDs = ConcurrentHashMap.newKeySet();
   @Nullable
   class="kw">protected ObjectiveTask[] currentTasks;
   class="kw">protected int currentTaskSetIndex;
   class="kw">protected boolean completed;
   class="kw">protected UUID worldUUID;
   @Nullable
   class="kw">protected UUID markerUUID;
   class="kw">protected boolean dirty;
   class="kw">protected ItemStack objectiveItemStarter;

   class="kw">public Objective(@Nonnull ObjectiveAsset var1, @Nullable UUID var2, @Nonnull Set<UUID> var3, @Nonnull UUID var4, @Nullable UUID var5) {
      this.objectiveId = var1.getId();
      this.currentTaskSetIndex = 0;
      this.playerUUIDs = var3;
      this.worldUUID = var4;
      this.objectiveUUID = var2 == null ? UUID.randomUUID() : var2;
      this.markerUUID = var5;
      this.objectiveHistoryData = new ObjectiveHistoryData(var1.getId(), var1.getCategory());
   }

   class="kw">protected Objective() {
   }

   @Nonnull
   class="kw">public UUID getObjectiveUUID() {
      class="kw">return this.objectiveUUID;
   }

   @Nonnull
   class="kw">public String getObjectiveId() {
      class="kw">return this.objectiveId;
   }

   @Nullable
   class="kw">public ObjectiveAsset getObjectiveAsset() {
      class="kw">return ObjectiveAsset.getAssetMap().getAsset(this.objectiveId);
   }

   @Nullable
   class="kw">public ObjectiveLineHistoryData getObjectiveLineHistoryData() {
      class="kw">return this.objectiveLineHistoryData;
   }

   class="kw">public void setObjectiveLineHistoryData(@Nullable ObjectiveLineHistoryData var1) {
      this.objectiveLineHistoryData = var1;
   }

   @Nonnull
   class="kw">public ObjectiveHistoryData getObjectiveHistoryData() {
      class="kw">return this.objectiveHistoryData;
   }

   @Nullable
   class="kw">public ObjectiveLineAsset getObjectiveLineAsset() {
      class="kw">return this.objectiveLineHistoryData == null ? null : ObjectiveLineAsset.getAssetMap().getAsset(this.objectiveLineHistoryData.getId());
   }

   class="kw">public Set<UUID> getPlayerUUIDs() {
      class="kw">return this.playerUUIDs;
   }

   @Nonnull
   class="kw">public Set<UUID> getActivePlayerUUIDs() {
      class="kw">return this.activePlayerUUIDs;
   }

   @Nullable
   class="kw">public ObjectiveTask[] getCurrentTasks() {
      class="kw">return this.currentTasks;
   }

   class="kw">public int getCurrentTaskSetIndex() {
      class="kw">return this.currentTaskSetIndex;
   }

   class="kw">public String getCurrentDescription() {
      ObjectiveAsset var1 = Objects.requireNonNull(this.getObjectiveAsset());
      TaskSet var2 = var1.getTaskSets()[this.currentTaskSetIndex];
      class="kw">return var2.getDescriptionId() != null ? var2.getDescriptionKey(this.objectiveId, this.currentTaskSetIndex) : var1.getDescriptionKey();
   }

   class="kw">public boolean isCompleted() {
      class="kw">return this.completed;
   }

   class="kw">public UUID getWorldUUID() {
      class="kw">return this.worldUUID;
   }

   @Nullable
   class="kw">public UUID getMarkerUUID() {
      class="kw">return this.markerUUID;
   }

   class="kw">public boolean isDirty() {
      class="kw">return this.dirty;
   }

   class="kw">public ItemStack getObjectiveItemStarter() {
      class="kw">return this.objectiveItemStarter;
   }

   class="kw">public void setObjectiveItemStarter(@Nonnull ItemStack var1) {
      this.objectiveItemStarter = var1;
   }

   class="kw">public boolean setup(@Nonnull Store<EntityStore> var1) {
      ObjectiveAsset var2 = Objects.requireNonNull(this.getObjectiveAsset());
      ObjectivePlugin var3 = ObjectivePlugin.get();
      TaskSet[] var4 = var2.getTaskSets();
      if (this.currentTaskSetIndex >= var4.length) {
         var3.getLogger().at(Level.WARNING).log("Current taskSet index is higher than total number of taskSets for objective %s", this.objectiveId);
         class="kw">return false;
      }

      ObjectiveTaskAsset[] var5 = var4[this.currentTaskSetIndex].getTasks();
      ObjectiveTask[] var6 = new ObjectiveTask[var5.length];

      for (int var7 = 0; var7 < var5.length; var7++) {
         var6[var7] = var3.createTask(var5[var7], this.currentTaskSetIndex, var7);
      }

      this.currentTasks = var6;
      class="kw">return this.setupCurrentTasks(var1);
   }

   class="kw">public boolean setupCurrentTasks(@Nonnull Store<EntityStore> var1) {
      if (this.currentTasks == null) {
         class="kw">return false;
      }

      for (ObjectiveTask var5 : this.currentTasks) {
         if (!var5.isComplete()) {
            TransactionRecord[] var6 = var5.setup(this, var1);
            if (var6 != null && TransactionUtil.anyFailed(var6)) {
               ObjectivePlugin.get().getLogger().at(Level.WARNING).log("Failed to setup objective tasks, transaction records:%s", Arrays.toString(var6));

               for (ObjectiveTask var10 : this.currentTasks) {
                  var10.revertTransactionRecords();
                  if (var10 == var5) {
                     break;
                  }
               }

               class="kw">return false;
            }
         }
      }

      class="kw">return true;
   }

   class="kw">public boolean checkTaskSetCompletion(@Nonnull Store<EntityStore> var1) {
      if (this.currentTasks == null) {
         class="kw">return false;
      }

      for (ObjectiveTask var5 : this.currentTasks) {
         if (!var5.isComplete()) {
            class="kw">return false;
         }
      }

      this.taskSetComplete(var1);
      class="kw">return true;
   }

   class="kw">protected void taskSetComplete(@Nonnull Store<EntityStore> var1) {
      ObjectiveAsset var2 = Objects.requireNonNull(this.getObjectiveAsset());
      this.currentTaskSetIndex++;
      TaskSet[] var3 = var2.getTaskSets();
      if (this.currentTaskSetIndex < var3.length) {
         if (!this.setup(var1)) {
            this.taskSetComplete(var1);
         } else {
            TrackOrUpdateObjective var4 = new TrackOrUpdateObjective(this.toPacket());
            this.forEachParticipant((var1x, var2x) -> {
               PlayerRef var3 = var1.getComponent(var1x, PlayerRef.getComponentType());
               if (var3 != null) {
                  var3.getPacketHandler().writeNoCache(var2x);
               }
            }, var4);
            this.checkTaskSetCompletion(var1);
         }
      } else {
         this.complete(var1);
      }
   }

   class="kw">public void complete(@Nonnull Store<EntityStore> var1) {
      ObjectiveAsset var2 = Objects.requireNonNull(this.getObjectiveAsset());
      this.forEachParticipant((var1x, var2x) -> {
         PlayerRef var3 = var1.getComponent(var1x, PlayerRef.getComponentType());
         if (var3 != null) {
            var3.sendMessage(var2x);
         }
      }, Message.translation("server.modules.objective.completed").param("title", Message.translation(var2.getTitleKey())));
      ObjectivePlugin var3 = ObjectivePlugin.get();
      ObjectiveCompletionAsset[] var4 = var2.getCompletionHandlers();
      if (var4 != null) {
         for (ObjectiveCompletionAsset var8 : var4) {
            var3.createCompletion(var8).handle(this, var1);
         }
      }

      this.completed = true;
      var3.objectiveCompleted(this, var1);
   }

   class="kw">public void cancel() {
      if (this.currentTasks != null) {
         for (ObjectiveTask var4 : this.currentTasks) {
            var4.revertTransactionRecords();
         }
      }
   }

   class="kw">public void unload() {
      if (this.currentTasks != null) {
         for (ObjectiveTask var4 : this.currentTasks) {
            var4.unloadTransactionRecords();
         }
      }
   }

   class="kw">public void reloadObjectiveAsset(@Nonnull Map<String, ObjectiveAsset> var1) {
      ObjectiveTaskAsset[] var2 = this.checkPossibleAssetReload(var1);
      if (var2 != null) {
         World var3 = Universe.get().getWorld(this.worldUUID);
         if (var3 != null) {
            var3.execute(() -> {
               Store var3 = var3.getEntityStore().getStore();
               ObjectiveTask[] var4 = this.setupAndUpdateTasks(var2, var3);
               if (var4 != null) {
                  this.revertRemovedTasks(var4);
                  this.currentTasks = var4;

                  for (ObjectiveTask var8 : this.currentTasks) {
                     var8.assetChanged(this);
                  }

                  if (!this.checkTaskSetCompletion(var3)) {
                     TrackOrUpdateObjective var9 = new TrackOrUpdateObjective(this.toPacket());
                     this.forEachParticipant((var1x, var2x) -> {
                        PlayerRef var3 = var3.getComponent(var1x, PlayerRef.getComponentType());
                        if (var3 != null) {
                           var3.getPacketHandler().writeNoCache(var2x);
                        }
                     }, var9);
                  }
               }
            });
         }
      }
   }

   @Nullable
   class="kw">private ObjectiveTaskAsset[] checkPossibleAssetReload(@Nonnull Map<String, ObjectiveAsset> var1) {
      ObjectiveLineAsset var2 = this.getObjectiveLineAsset();
      if (this.objectiveLineHistoryData != null && var2 == null) {
         this.cancel();
         class="kw">return null;
      } else {
         ObjectiveAsset var3 = var1.get(this.objectiveId);
         if (var3 == null) {
            class="kw">return null;
         } else {
            TaskSet[] var4 = var3.getTaskSets();
            if (this.currentTaskSetIndex >= var4.length) {
               this.cancel();
               class="kw">return null;
            } else {
               class="kw">return var4[this.currentTaskSetIndex].getTasks();
            }
         }
      }
   }

   @Nullable
   class="kw">private ObjectiveTask[] setupAndUpdateTasks(@Nonnull ObjectiveTaskAsset[] var1, @Nonnull Store<EntityStore> var2) {
      ObjectiveTask[] var3 = new ObjectiveTask[var1.length];

      for (int var4 = 0; var4 < var1.length; var4++) {
         ObjectiveTaskAsset var5 = var1[var4];
         ObjectiveTask var6 = this.findMatchingObjectiveTask(var5);
         if (var6 != null) {
            var6.setAsset(var5);
            var3[var4] = var6;
         } else {
            ObjectiveTask var7 = var3[var4] = ObjectivePlugin.get().createTask(var5, this.currentTaskSetIndex, var4);
            TransactionRecord[] var8 = var7.setup(this, var2);
            if (TransactionUtil.anyFailed(var8)) {
               this.cancelReload(var3);
               class="kw">return null;
            }
         }
      }

      class="kw">return var3;
   }

   @Nullable
   class="kw">private ObjectiveTask findMatchingObjectiveTask(@Nonnull ObjectiveTaskAsset var1) {
      if (this.currentTasks == null) {
         class="kw">return null;
      }

      for (ObjectiveTask var5 : this.currentTasks) {
         if (var5.getAsset().matchesAsset(var1)) {
            class="kw">return var5;
         }
      }

      class="kw">return null;
   }

   class="kw">private void cancelReload(@Nonnull ObjectiveTask[] var1) {
      for (ObjectiveTask var5 : var1) {
         if (var5 != null) {
            var5.revertTransactionRecords();
         }
      }

      this.cancel();
      this.currentTasks = null;
   }

   class="kw">private void revertRemovedTasks(@Nonnull ObjectiveTask[] var1) {
      if (this.currentTasks != null) {
         for (ObjectiveTask var5 : this.currentTasks) {
            boolean var6 = false;

            for (ObjectiveTask var10 : var1) {
               if (var10.equals(var5)) {
                  var6 = true;
                  break;
               }
            }

            if (!var6) {
               var5.revertTransactionRecords();
            }
         }
      }
   }

   class="kw">public void forEachParticipant(@Nonnull Consumer<Ref<EntityStore>> var1) {
      for (UUID var3 : this.playerUUIDs) {
         PlayerRef var4 = Universe.get().getPlayer(var3);
         if (var4 != null) {
            var1.accept(var4.getReference());
         }
      }
   }

   class="kw">public <T> void forEachParticipant(@Nonnull BiConsumer<Ref<EntityStore>, T> var1, T var2) {
      for (UUID var4 : this.playerUUIDs) {
         PlayerRef var5 = Universe.get().getPlayer(var4);
         if (var5 != null) {
            var1.accept(var5.getReference(), var2);
         }
      }
   }

   class="kw">public <T, U> void forEachParticipant(@Nonnull TriConsumer<Ref<EntityStore>, T, U> var1, @Nonnull T var2, @Nonnull U var3) {
      for (UUID var5 : this.playerUUIDs) {
         PlayerRef var6 = Universe.get().getPlayer(var5);
         if (var6 != null) {
            Ref var7 = var6.getReference();
            if (var7 != null && var7.isValid()) {
               var1.accept(var6.getReference(), var2, var3);
            }
         }
      }
   }

   @Nullable
   class="kw">public Vector3d getPosition(@Nonnull ComponentAccessor<EntityStore> var1) {
      UUID var2 = null;
      if (this.markerUUID != null) {
         var2 = this.markerUUID;
      } else if (!this.playerUUIDs.isEmpty()) {
         var2 = this.playerUUIDs.iterator().next();
      }

      if (var2 == null) {
         class="kw">return null;
      } else {
         World var3 = var1.getExternalData().getWorld();
         Ref var4 = var3.getEntityRef(var2);
         if (var4 != null && var4.isValid()) {
            TransformComponent var5 = var1.getComponent(var4, TransformComponent.getComponentType());
            class="kw">return var5 != null ? var5.getPosition() : null;
         } else {
            class="kw">return null;
         }
      }
   }

   class="kw">public void addActivePlayerUUID(UUID var1) {
      this.activePlayerUUIDs.add(var1);
   }

   class="kw">public void removeActivePlayerUUID(UUID var1) {
      this.activePlayerUUIDs.remove(var1);
   }

   class="kw">public void markDirty() {
      this.dirty = true;
   }

   class="kw">public boolean consumeDirty() {
      boolean var1 = this.dirty;
      this.dirty = false;
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public com.hypixel.hytale.protocol.Objective toPacket() {
      ObjectiveAsset var1 = Objects.requireNonNull(this.getObjectiveAsset());
      com.hypixel.hytale.protocol.Objective var2 = new com.hypixel.hytale.protocol.Objective();
      var2.objectiveUuid = this.objectiveUUID;
      var2.objectiveTitleKey = Message.translation(var1.getTitleKey()).getFormattedMessage();
      var2.objectiveDescriptionKey = Message.translation(this.getCurrentDescription()).getFormattedMessage();
      if (this.objectiveLineHistoryData != null) {
         var2.objectiveLineId = this.objectiveLineHistoryData.getId();
      }

      var2.tasks = new com.hypixel.hytale.protocol.ObjectiveTask[this.currentTasks.length];

      for (int var3 = 0; var3 < this.currentTasks.length; var3++) {
         var2.tasks[var3] = this.currentTasks[var3].toPacket(this);
      }

      class="kw">return var2;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "Objective{objectiveUUID="
         + this.objectiveUUID
         + ", objectiveId='"
         + this.objectiveId
         + "', objectiveLineHistoryData="
         + this.objectiveLineHistoryData
         + ", objectiveHistoryData="
         + this.objectiveHistoryData
         + ", playerUUIDs="
         + this.playerUUIDs
         + ", activePlayerUUIDs="
         + this.activePlayerUUIDs
         + ", currentTasks="
         + Arrays.toString(this.currentTasks)
         + ", currentTaskSetIndex="
         + this.currentTaskSetIndex
         + ", completed="
         + this.completed
         + ", worldUUID="
         + this.worldUUID
         + ", markerUUID="
         + this.markerUUID
         + ", dirty="
         + this.dirty
         + "}";
   }
}