ObjectiveDataStore class

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

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

Поля (10)

МодификаторыТипИмя
Objective var2
Iterator var3
Objective var3
var3
Entry var4
Map var4
String var4
Map var5
Set var5
Set var6

Методы (21)

МодификаторыВозвратСигнатура
public void addEntityTaskForPlayervoid addEntityTaskForPlayer(UUID var1, String var2, UUID var3)
public boolean addObjectiveboolean addObjective(UUID var1, Objective var2)
public <T extends ObjectiveTask> void addTaskRef<T extends ObjectiveTask> void addTaskRef(@Nonnull ObjectiveTaskRef<T> var1)
public Map<String, Set<UUID>> getEntityTasksForPlayerMap<String, Set<UUID>> getEntityTasksForPlayer(UUID var1)
public Objective getObjectiveObjective getObjective(UUID var1)
public <T extends ObjectiveTask> Set<ObjectiveTaskRef<T>> getTaskRefsForType<T extends ObjectiveTask> Set<ObjectiveTaskRef<T>> getTaskRefsForType(Class<T> var1)
if if(var1 != null)
if if(var4 != null)
if if(var5 != null)
if if(var3 != null)
if if(var3 == null)
if if(var2 != null)
public <T extends ObjectiveTask> void registerTaskRef<T extends ObjectiveTask> void registerTaskRef(Class<T> var1)
public void removeEntityTaskvoid removeEntityTask(UUID var1, String var2)
public void removeEntityTaskForPlayervoid removeEntityTaskForPlayer(UUID var1, String var2, UUID var3)
public boolean removeFromDiskboolean removeFromDisk(String var1)
public void removeObjectivevoid removeObjective(UUID var1)
public <T extends ObjectiveTask> void removeTaskRef<T extends ObjectiveTask> void removeTaskRef(@Nullable ObjectiveTaskRef<T> var1)
public void saveToDiskvoid saveToDisk(String var1, @Nonnull Objective var2)
public void saveToDiskAllObjectivesvoid saveToDiskAllObjectives()
public void unloadObjectivevoid unloadObjective(UUID var1)

Исходный код

Показать/скрыть
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.task.ObjectiveTask;
class="kw">import com.hypixel.hytale.builtin.adventure.objectives.task.ObjectiveTaskRef;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.universe.datastore.DataStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.io.IOException;
class="kw">import java.util.Collection;
class="kw">import java.util.Iterator;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ObjectiveDataStore {
   @Nonnull
   class="kw">private class="kw">final Map<UUID, Objective> objectives = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final Map<UUID, Map<String, Set<UUID>>> entityObjectiveUUIDsPerPlayer = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final DataStore<Objective> dataStore;
   @Nonnull
   class="kw">private class="kw">final Map<Class<? class="kw">extends ObjectiveTask>, Set<ObjectiveTaskRef<? class="kw">extends ObjectiveTask>>> taskRefByType = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final HytaleLogger logger;

   class="kw">public ObjectiveDataStore(@Nonnull DataStore<Objective> var1) {
      this.dataStore = var1;
      this.logger = ObjectivePlugin.get().getLogger();
   }

   class="kw">public Objective getObjective(UUID var1) {
      class="kw">return this.objectives.get(var1);
   }

   class="kw">public Map<String, Set<UUID>> getEntityTasksForPlayer(UUID var1) {
      class="kw">return this.entityObjectiveUUIDsPerPlayer.get(var1);
   }

   @Nonnull
   class="kw">public Collection<Objective> getObjectiveCollection() {
      class="kw">return this.objectives.values();
   }

   class="kw">public <T class="kw">extends ObjectiveTask> Set<ObjectiveTaskRef<T>> getTaskRefsForType(Class<T> var1) {
      class="kw">return (Set<ObjectiveTaskRef<T>>)this.taskRefByType.get(var1);
   }

   class="kw">public <T class="kw">extends ObjectiveTask> void addTaskRef(@Nonnull ObjectiveTaskRef<T> var1) {
      this.taskRefByType.get(var1.getObjectiveTask().getClass()).add(var1);
   }

   class="kw">public <T class="kw">extends ObjectiveTask> void removeTaskRef(@Nullable ObjectiveTaskRef<T> var1) {
      if (var1 != null) {
         this.taskRefByType.get(var1.getObjectiveTask().getClass()).remove(var1);
      }
   }

   class="kw">public <T class="kw">extends ObjectiveTask> void registerTaskRef(Class<T> var1) {
      this.taskRefByType.put(var1, ConcurrentHashMap.newKeySet());
   }

   class="kw">public void saveToDisk(String var1, @Nonnull Objective var2) {
      if (var2.consumeDirty()) {
         this.dataStore.save(var1, var2);
      }
   }

   class="kw">public void saveToDiskAllObjectives() {
      for (Entry var2 : this.objectives.entrySet()) {
         this.saveToDisk(var2.getKey().toString(), var2.getValue());
      }
   }

   class="kw">public boolean removeFromDisk(String var1) {
      try {
         this.dataStore.remove(var1);
         class="kw">return true;
      } catch (IOException var3) {
         ((HytaleLogger.Api)this.logger.at(Level.WARNING).withCause(var3)).log("Failed removal of objective with UUID: %s", var1);
         class="kw">return false;
      }
   }

   class="kw">public boolean addObjective(UUID var1, Objective var2) {
      class="kw">return this.objectives.putIfAbsent(var1, var2) == null;
   }

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

   class="kw">public void addEntityTaskForPlayer(UUID var1, String var2, UUID var3) {
      this.entityObjectiveUUIDsPerPlayer
         .computeIfAbsent(var1, var0 -> new ConcurrentHashMap<>())
         .computeIfAbsent(var2, var0 -> ConcurrentHashMap.newKeySet())
         .add(var3);
   }

   class="kw">public void removeEntityTask(UUID var1, String var2) {
      Iterator var3 = this.entityObjectiveUUIDsPerPlayer.entrySet().iterator();

      while (var3.hasNext()) {
         Entry var4 = var3.next();
         Map var5 = var4.getValue();
         Set var6 = var5.get(var2);
         if (var6 != null && var6.remove(var1)) {
            if (var6.isEmpty()) {
               var5.remove(var2);
            }

            if (var5.isEmpty()) {
               var3.remove();
            }
         }
      }
   }

   class="kw">public void removeEntityTaskForPlayer(UUID var1, String var2, UUID var3) {
      Map var4 = this.entityObjectiveUUIDsPerPlayer.get(var3);
      if (var4 != null) {
         Set var5 = var4.get(var2);
         if (var5 != null) {
            if (var5.remove(var1)) {
               if (var5.isEmpty()) {
                  var4.remove(var2);
               }

               if (var4.isEmpty()) {
                  this.entityObjectiveUUIDsPerPlayer.remove(var3);
               }
            }
         }
      }
   }

   @Nullable
   class="kw">public Objective loadObjective(@Nonnull UUID var1, @Nonnull Store<EntityStore> var2) {
      Objective var3 = this.objectives.get(var1);
      if (var3 != null) {
         class="kw">return var3;
      }

      try {
         var3 = this.dataStore.load(var1.toString());
      } catch (IOException var5) {
         ((HytaleLogger.Api)this.logger.at(Level.WARNING).withCause(var5)).log("Unable to load objective with UUID '%s'", var1);
         class="kw">return null;
      }

      if (var3 == null) {
         this.logger.at(Level.WARNING).log("No objective saved with UUID '%s'", var1);
         class="kw">return null;
      } else {
         String var4 = var3.getObjectiveId();
         if (ObjectiveAsset.getAssetMap().getAsset(var4) == null) {
            this.logger.at(Level.WARNING).log("Couldn't find objective '%s'. Skipping objective.", var4);
            class="kw">return null;
         } else if (!var3.setupCurrentTasks(var2)) {
            this.logger.at(Level.WARNING).log("A problem occurred while setting up the objective '%s'. Skipping objective.", var4);
            class="kw">return null;
         } else {
            this.addObjective(var1, var3);
            class="kw">return var3;
         }
      }
   }

   class="kw">public void unloadObjective(UUID var1) {
      Objective var2 = this.objectives.get(var1);
      if (var2 != null) {
         var2.unload();
         this.removeObjective(var2.getObjectiveUUID());
      }
   }
}