MaterialKey class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.material

Файл: com/hypixel/hytale/builtin/hytalegenerator/material/MaterialCache.java

Поля (3)

МодификаторыТипИмя
private final MaterialCache.FluidKey fluidKey
private final MaterialCache.SolidKey solidKey
int var1

Методы (5)

МодификаторыВозвратСигнатура
public final boolean equalspublic final boolean equals(Object var1)
public MaterialCache.FluidKey getFluidKeypublic MaterialCache.FluidKey getFluidKey()
public MaterialCache.SolidKey getSolidKeypublic MaterialCache.SolidKey getSolidKey()
public int hashCodepublic int hashCode()
public void setpublic void set(@Nonnull Material var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockRotationUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
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 MaterialCache {
   @Nonnull
   class="kw">private class="kw">final Map<MaterialCache.SolidKey, SolidMaterial> solidMap = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final Map<MaterialCache.FluidKey, FluidMaterial> fluidMap = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final Map<MaterialCache.MaterialKey, Material> materialMap = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">public class="kw">final SolidMaterial UNKNOWN_SOLID = this.getSolidMaterial(new MaterialCache.SolidKey(1, 0, 0, 0, null));
   @Nonnull
   class="kw">public class="kw">final SolidMaterial EMPTY_AIR = this.getSolidMaterial("Empty");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial ROCK_STONE = this.getSolidMaterial("Rock_Stone");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial SOIL_GRASS = this.getSolidMaterial("Soil_Grass");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial SOIL_DIRT = this.getSolidMaterial("Soil_Dirt");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial SOIL_MUD = this.getSolidMaterial("Soil_Mud");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial SOIL_NEEDLES = this.getSolidMaterial("Soil_Needles");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial SOIL_GRAVEL = this.getSolidMaterial("Soil_Gravel");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial ROCK_QUARTZITE = this.getSolidMaterial("Rock_Quartzite");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial ROCK_MARBLE = this.getSolidMaterial("Rock_Marble");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial ROCK_SHALE = this.getSolidMaterial("Rock_Shale");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial FLUID_WATER = this.getSolidMaterial("Fluid_Water");
   @Nonnull
   class="kw">public class="kw">final SolidMaterial BEDROCK = this.getSolidMaterial("Rock_Volcanic");
   @Nonnull
   class="kw">public class="kw">final FluidMaterial UNKNOWN_FLUID = this.getFluidMaterial(new MaterialCache.FluidKey(1, (byte)0));
   @Nonnull
   class="kw">public class="kw">final FluidMaterial EMPTY_FLUID = this.getFluidMaterial(Fluid.EMPTY.getId());
   @Nonnull
   class="kw">public class="kw">final Material EMPTY;
   @Nonnull
   class="kw">public class="kw">final Material FALLBACK_MATERIAL = this.getMaterial(
      new MaterialCache.MaterialKey(new MaterialCache.SolidKey(this.UNKNOWN_SOLID), new MaterialCache.FluidKey(this.UNKNOWN_FLUID))
   );

   class="kw">public MaterialCache() {
      this.EMPTY = this.getMaterial(new MaterialCache.MaterialKey(new MaterialCache.SolidKey(this.EMPTY_AIR), new MaterialCache.FluidKey(this.EMPTY_FLUID)));
   }

   @Nonnull
   class="kw">public Material getMaterial(@Nonnull MaterialCache.MaterialKey var1) {
      Material var2 = this.materialMap.get(var1);
      class="kw">return var2 != null ? var2 : this.materialMap.computeIfAbsent(new MaterialCache.MaterialKey(var1), var1x -> {
         SolidMaterial var2 = this.getSolidMaterial(var1x.solidKey);
         FluidMaterial var3 = this.getFluidMaterial(var1x.fluidKey);
         class="kw">return new Material(var2, var3);
      });
   }

   @Nonnull
   class="kw">public Material getMaterialRotated(@Nonnull MaterialCache.MaterialKey var1, @Nonnull RotationTuple var2) {
      RotationTuple var3 = RotationTuple.compose(var2, RotationTuple.get(var1.solidKey.rotation));
      int var4 = var3.index();
      int var5 = BlockRotationUtil.getRotatedFiller(var1.solidKey.filler, var2);
      var1.solidKey.setRotation(var4);
      var1.solidKey.setFiller(var5);
      class="kw">return this.getMaterial(var1);
   }

   @Nonnull
   class="kw">public FluidMaterial getFluidMaterial(@Nonnull MaterialCache.FluidKey var1) {
      FluidMaterial var2 = this.fluidMap.get(var1);
      class="kw">return var2 != null ? var2 : this.fluidMap.computeIfAbsent(new MaterialCache.FluidKey(var1), var1x -> new FluidMaterial(this, var1x));
   }

   @Nonnull
   class="kw">public FluidMaterial getFluidMaterial(@Nonnull String var1) {
      Fluid var2 = Fluid.getAssetMap().getAsset(var1);
      if (var2 == null) {
         LoggerUtil.getLogger().warning("Attempted to register a Fluid with an invalid name " + var1 + ": using Unknown instead.");
         class="kw">return this.UNKNOWN_FLUID;
      } else {
         int var3 = Fluid.getAssetMap().getIndex(var1);
         byte var4 = var3 == 0 ? 0 : (byte)var2.getMaxFluidLevel();
         MaterialCache.FluidKey var5 = new MaterialCache.FluidKey(var3, var4);
         class="kw">return this.getFluidMaterial(var5);
      }
   }

   @Nonnull
   class="kw">public SolidMaterial getSolidMaterial(@Nonnull MaterialCache.SolidKey var1) {
      SolidMaterial var2 = this.solidMap.get(var1);
      class="kw">return var2 != null ? var2 : this.solidMap.computeIfAbsent(new MaterialCache.SolidKey(var1), var1x -> new SolidMaterial(this, var1x));
   }

   @Nonnull
   class="kw">public SolidMaterial getSolidMaterial(@Nonnull String var1) {
      class="kw">return this.getSolidMaterial(var1, RotationTuple.NONE);
   }

   @Nonnull
   class="kw">public SolidMaterial getSolidMaterial(@Nonnull String var1, @Nonnull RotationTuple var2) {
      BlockType var3 = BlockType.fromString(var1);
      if (var3 == null) {
         HytaleLogger.getLogger().at(Level.WARNING).log("Attempted to register a Solid Material with invalid name %s: using Unknown instead.", var1);
         class="kw">return this.UNKNOWN_SOLID;
      } else {
         int var4 = BlockType.getAssetMap().getIndex(var3.getId());
         if (BlockType.getAssetMap().getAsset(var4) == null) {
            HytaleLogger.getLogger().at(Level.WARNING).log("Attempted to register an invalid Solid Material ID %d: using Unknown instead.", var4);
            class="kw">return this.UNKNOWN_SOLID;
         } else {
            MaterialCache.SolidKey var5 = new MaterialCache.SolidKey(var4, 0, var2.index(), 0, null);
            SolidMaterial var6 = this.solidMap.get(var5);
            class="kw">return var6 != null ? var6 : this.solidMap.computeIfAbsent(var5, var1x -> new SolidMaterial(this, var1x));
         }
      }
   }

   class="kw">public class="kw">static class FluidKey {
      class="kw">private int fluidId;
      class="kw">private byte fluidLevel;

      class="kw">public FluidKey() {
         this.fluidId = 0;
         this.fluidLevel = 0;
      }

      class="kw">public FluidKey(@Nonnull FluidMaterial var1) {
         this.fluidId = var1.fluidId;
         this.fluidLevel = var1.fluidLevel;
      }

      class="kw">public FluidKey(int var1, byte var2) {
         this.fluidId = var1;
         this.fluidLevel = var2;
      }

      class="kw">public FluidKey(@Nonnull MaterialCache.FluidKey var1) {
         this.fluidId = var1.fluidId;
         this.fluidLevel = var1.fluidLevel;
      }

      class="kw">public int getFluidId() {
         class="kw">return this.fluidId;
      }

      class="kw">public byte getFluidLevel() {
         class="kw">return this.fluidLevel;
      }

      class="kw">public void set(int var1, byte var2) {
         this.fluidId = var1;
         this.fluidLevel = var2;
      }

      class="kw">public void set(@Nonnull FluidMaterial var1) {
         this.fluidId = var1.fluidId;
         this.fluidLevel = var1.fluidLevel;
      }

      class="kw">public void setFluidId(int var1) {
         this.fluidId = var1;
      }

      class="kw">public void setFluidLevel(byte var1) {
         this.fluidLevel = var1;
      }

      @Override
      class="kw">public class="kw">final boolean equals(Object var1) {
         class="kw">return !(var1 class="kw">instanceof MaterialCache.FluidKey var2) ? false : this.fluidId == var2.fluidId && this.fluidLevel == var2.fluidLevel;
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.fluidId;
         class="kw">return 31 * var1 + this.fluidLevel;
      }
   }

   class="kw">public class="kw">static class MaterialKey {
      @Nonnull
      class="kw">private class="kw">final MaterialCache.SolidKey solidKey;
      @Nonnull
      class="kw">private class="kw">final MaterialCache.FluidKey fluidKey;

      class="kw">public MaterialKey() {
         this.solidKey = new MaterialCache.SolidKey();
         this.fluidKey = new MaterialCache.FluidKey();
      }

      class="kw">public MaterialKey(@Nonnull MaterialCache.MaterialKey var1) {
         this.solidKey = new MaterialCache.SolidKey(var1.solidKey);
         this.fluidKey = new MaterialCache.FluidKey(var1.fluidKey);
      }

      class="kw">public MaterialKey(@Nonnull MaterialCache.SolidKey var1, @Nonnull MaterialCache.FluidKey var2) {
         this.solidKey = var1;
         this.fluidKey = var2;
      }

      @Nonnull
      class="kw">public MaterialCache.SolidKey getSolidKey() {
         class="kw">return this.solidKey;
      }

      @Nonnull
      class="kw">public MaterialCache.FluidKey getFluidKey() {
         class="kw">return this.fluidKey;
      }

      class="kw">public void set(@Nonnull Material var1) {
         this.solidKey.set(var1.solid());
         this.fluidKey.set(var1.fluid());
      }

      @Override
      class="kw">public class="kw">final boolean equals(Object var1) {
         class="kw">return !(var1 class="kw">instanceof MaterialCache.MaterialKey var2) ? false : this.solidKey.equals(var2.solidKey) && this.fluidKey.equals(var2.fluidKey);
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.solidKey.hashCode();
         class="kw">return 31 * var1 + this.fluidKey.hashCode();
      }
   }

   class="kw">public class="kw">static class SolidKey {
      class="kw">private int blockId;
      class="kw">private int support;
      class="kw">private int rotation;
      class="kw">private int filler;
      @Nullable
      class="kw">private Holder<ChunkStore> holder;

      class="kw">public SolidKey() {
         this.blockId = 0;
         this.support = 0;
         this.rotation = 0;
         this.filler = 0;
         this.holder = null;
      }

      class="kw">public SolidKey(@Nonnull SolidMaterial var1) {
         this.blockId = var1.blockId;
         this.support = var1.support;
         this.rotation = var1.rotation;
         this.filler = var1.filler;
         this.holder = var1.holder;
      }

      class="kw">public SolidKey(int var1, int var2, int var3, int var4, @Nullable Holder<ChunkStore> var5) {
         this.blockId = var1;
         this.support = var2;
         this.rotation = var3;
         this.filler = var4;
         this.holder = var5;
      }

      class="kw">public SolidKey(@Nonnull MaterialCache.SolidKey var1) {
         this.blockId = var1.blockId;
         this.support = var1.support;
         this.rotation = var1.rotation;
         this.filler = var1.filler;
         this.holder = var1.holder;
      }

      class="kw">public int getBlockId() {
         class="kw">return this.blockId;
      }

      class="kw">public int getSupport() {
         class="kw">return this.support;
      }

      class="kw">public int getRotation() {
         class="kw">return this.rotation;
      }

      class="kw">public int getFiller() {
         class="kw">return this.filler;
      }

      @Nullable
      class="kw">public Holder<ChunkStore> getHolder() {
         class="kw">return this.holder;
      }

      class="kw">public void set(int var1, int var2, int var3, int var4, @Nullable Holder<ChunkStore> var5) {
         this.blockId = var1;
         this.support = var2;
         this.rotation = var3;
         this.filler = var4;
         this.holder = var5;
      }

      class="kw">public void set(@Nonnull SolidMaterial var1) {
         this.blockId = var1.blockId;
         this.support = var1.support;
         this.rotation = var1.rotation;
         this.filler = var1.filler;
         this.holder = var1.holder;
      }

      class="kw">public void setBlockId(int var1) {
         this.blockId = var1;
      }

      class="kw">public void setSupport(int var1) {
         this.support = var1;
      }

      class="kw">public void setRotation(int var1) {
         this.rotation = var1;
      }

      class="kw">public void setFiller(int var1) {
         this.filler = var1;
      }

      class="kw">public void setHolder(@Nullable Holder<ChunkStore> var1) {
         this.holder = var1;
      }

      @Override
      class="kw">public class="kw">final boolean equals(Object var1) {
         class="kw">return !(var1 class="kw">instanceof MaterialCache.SolidKey var2)
            ? false
            : this.blockId == var2.blockId
               && this.support == var2.support
               && this.rotation == var2.rotation
               && this.filler == var2.filler
               && Objects.equals(this.holder, var2.holder);
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.blockId;
         var1 = 31 * var1 + this.support;
         var1 = 31 * var1 + this.rotation;
         var1 = 31 * var1 + this.filler;
         class="kw">return 31 * var1 + Objects.hashCode(this.holder);
      }
   }
}