HyCodeYourTale
classpublicPriority 3

CaveNodeTypeStorage

com.hypixel.hytale.server.worldgen.loader.cave.CaveNodeTypeStorage

5

Methods

5

Public Methods

5

Fields

1

Constructors

Constructors

public
CaveNodeTypeStorage(SeedString<SeedStringResource> seed, Path dataFolder, Path caveFolder, ZoneFileContext zoneContext)

Methods

Public Methods (5)

public
void add(String name, CaveNodeType caveNodeType)
public
CaveNodeType getCaveNodeType(String name)
public
CaveNodeType getOrLoadCaveNodeType(String name)
@Nonnull
public
SeedString<SeedStringResource> getSeed()
public
CaveNodeType loadCaveNodeType(String name)
@Nonnull

Fields

Protected Fields (5)

protectedPath caveFolder
protectedMap<String, CaveNodeType> caveNodeTypes
protectedPath dataFolder
protectedSeedString<SeedStringResource> seed
protectedZoneFileContext zoneContext

Related Classes

Source Code

package com.hypixel.hytale.server.worldgen.loader.cave;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
import com.hypixel.hytale.procedurallib.json.SeedString;
import com.hypixel.hytale.server.worldgen.SeedStringResource;
import com.hypixel.hytale.server.worldgen.cave.CaveNodeType;
import com.hypixel.hytale.server.worldgen.loader.context.ZoneFileContext;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nonnull;

public class CaveNodeTypeStorage {
   protected final SeedString<SeedStringResource> seed;
   protected final Path dataFolder;
   protected final Path caveFolder;
   protected final ZoneFileContext zoneContext;
   @Nonnull
   protected final Map<String, CaveNodeType> caveNodeTypes;

   public CaveNodeTypeStorage(SeedString<SeedStringResource> seed, Path dataFolder, Path caveFolder, ZoneFileContext zoneContext) {
      this.seed = seed;
      this.dataFolder = dataFolder;
      this.caveFolder = caveFolder;
      this.zoneContext = zoneContext;
      this.caveNodeTypes = new HashMap<>();
   }

   public SeedString<SeedStringResource> getSeed() {
      return this.seed;
   }

   public void add(String name, CaveNodeType caveNodeType) {
      if (this.caveNodeTypes.containsKey(name)) {
         throw new Error(String.format("CaveNodeType (%s) has already been added to CaveNodeTypeStorage!", name));
      } else {
         this.caveNodeTypes.put(name, caveNodeType);
      }
   }

   @Nonnull
   public CaveNodeType getOrLoadCaveNodeType(@Nonnull String name) {
      CaveNodeType caveNodeType = this.getCaveNodeType(name);
      if (caveNodeType == null) {
         caveNodeType = this.loadCaveNodeType(name);
      }

      return caveNodeType;
   }

   public CaveNodeType getCaveNodeType(String name) {
      return this.caveNodeTypes.get(name);
   }

   @Nonnull
   public CaveNodeType loadCaveNodeType(@Nonnull String name) {
      Path file = this.caveFolder.resolve(String.format("%s.node.json", name.replace(".", File.separator)));

      try {
         JsonReader reader = new JsonReader(Files.newBufferedReader(file));

         CaveNodeType var5;
         try {
            JsonObject caveNodeJson = JsonParser.parseReader(reader).getAsJsonObject();
            var5 = new CaveNodeTypeJsonLoader(this.seed, this.dataFolder, caveNodeJson, name, this, this.zoneContext).load();
         } catch (Throwable var7) {
            try {
               reader.close();
            } catch (Throwable var6) {
               var7.addSuppressed(var6);
            }

            throw var7;
         }

         reader.close();
         return var5;
      } catch (Throwable var8) {
         throw new Error(String.format("Error while loading CaveNodeType %s for world generator from %s", name, file.toString()), var8);
      }
   }

   public interface Constants {
      String ERROR_ALREADY_ADDED = "CaveNodeType (%s) has already been added to CaveNodeTypeStorage!";
      String ERROR_LOADING_CAVE_NODE_TYPE = "Error while loading CaveNodeType %s for world generator from %s";
      String FILE_SUFFIX = "%s.node.json";
   }
}