BlockPhysics class

Пакет: com.hypixel.hytale.server.core.blocktype.component

Файл: com/hypixel/hytale/server/core/blocktype/component/BlockPhysics.java

implements: Component<ChunkStore>

Поля (19)

МодификаторыТипИмя
final int VERSION
BlockPhysics var1
long var2
byte[] var2
long var3
MemorySegment var3
MemorySegment var3
BlockPhysics var4
byte var5
byte var5
BlockPhysics var5
BlockPhysics var5
var5
BlockPhysics var5
var5
BlockPhysics var5
var5
BlockPhysics var6
var6

Методы (31)

МодификаторыВозвратСигнатура
static void clearvoid clear(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4)
static void clearvoid clear(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3)
private void deserializevoid deserialize(@Nonnull byte[] var1, ExtraInfo var2)
for for(int var4 = 0; var4 < 16384; var4++)
public int getint get(int var1)
public int getint get(int var1, int var2, int var3)
static ComponentType<ChunkStore, BlockPhysics> getComponentTypeComponentType<ChunkStore, BlockPhysics> getComponentType()
if if(this.supportData == null)
if if(var2 == 0)
if if(var5 == var2)
if if(var5 == 0)
if if(this.nonZeroCount <= 0)
if if(this.supportData != null)
if if(this.supportData != null)
if if(var5 != null)
if if(var4 != null)
if if(var5 == null)
if if(var5 == null)
if if(var6 == null)
if if(var5 == null)
public boolean isDecoboolean isDeco(int var1, int var2, int var3)
public boolean isDecoboolean isDeco(int var1)
static void markDecovoid markDeco(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4)
static void resetvoid reset(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4)
static void resetvoid reset(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3)
private byte[] serializebyte[] serialize(ExtraInfo var1)
public boolean setboolean set(int var1, int var2)
public boolean setboolean set(int var1, int var2, int var3, int var4)
static void setSupportValuevoid setSupportValue(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5)
static void setSupportValuevoid setSupportValue(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3, int var4)
abstract setSupportValue setSupportValue(var0, var1, var2, var3, 0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.blocktype.component;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.common.util.BitUtil;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.blocktype.BlockTypeModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.util.Arrays;
class="kw">import java.util.concurrent.locks.StampedLock;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockPhysics class="kw">implements Component<ChunkStore> {
   class="kw">public class="kw">static class="kw">final int VERSION = 0;
   class="kw">public class="kw">static class="kw">final BuilderCodec<BlockPhysics> CODEC = BuilderCodec.builder(BlockPhysics.class, BlockPhysics::new)
      .versioned()
      .codecVersion(0)
      .append(new KeyedCodec<>("Data", Codec.BYTE_ARRAY), BlockPhysics::deserialize, BlockPhysics::serialize)
      .add()
      .build();
   class="kw">public class="kw">static class="kw">final int SUPPORT_DATA_SIZE = 16384;
   class="kw">public class="kw">static class="kw">final int IS_DECO_VALUE = 15;
   class="kw">public class="kw">static class="kw">final int NULL_SUPPORT = 0;
   class="kw">private class="kw">final StampedLock lock = new StampedLock();
   @Nullable
   class="kw">private byte[] supportData = null;
   class="kw">private int nonZeroCount = 0;

   class="kw">public BlockPhysics() {
   }

   class="kw">public class="kw">static ComponentType<ChunkStore, BlockPhysics> getComponentType() {
      class="kw">return BlockTypeModule.get().getBlockPhysicsComponentType();
   }

   class="kw">public boolean set(int var1, int var2) {
      long var3 = this.lock.writeLock();

      try {
         var2 &= 15;
         if (this.supportData == null) {
            if (var2 == 0) {
               class="kw">return false;
            }

            this.supportData = new byte[16384];
         }

         byte var5 = BitUtil.getAndSetNibble(this.supportData, var1, (byte)var2);
         if (var5 == var2) {
            class="kw">return false;
         }

         if (var5 == 0) {
            this.nonZeroCount++;
         } else if (var2 == 0) {
            this.nonZeroCount--;
            if (this.nonZeroCount <= 0) {
               this.supportData = null;
            }
         }

         class="kw">return true;
      } class="kw">finally {
         this.lock.unlockWrite(var3);
      }
   }

   class="kw">public boolean set(int var1, int var2, int var3, int var4) {
      class="kw">return this.set(ChunkUtil.indexBlock(var1, var2, var3), var4);
   }

   class="kw">public int get(int var1) {
      long var2 = this.lock.readLock();

      try {
         class="kw">return this.supportData == null ? 0 : BitUtil.getNibble(this.supportData, var1);
      } class="kw">finally {
         this.lock.unlockRead(var2);
      }
   }

   class="kw">public int get(int var1, int var2, int var3) {
      class="kw">return this.get(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public boolean isDeco(int var1, int var2, int var3) {
      class="kw">return this.isDeco(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public boolean isDeco(int var1) {
      class="kw">return this.get(var1) == 15;
   }

   @Nonnull
   @Override
   class="kw">public Component<ChunkStore> clone() {
      BlockPhysics var1 = new BlockPhysics();
      if (this.supportData != null) {
         var1.supportData = Arrays.copyOf(this.supportData, this.supportData.length);
         var1.nonZeroCount = this.nonZeroCount;
      }

      class="kw">return var1;
   }

   class="kw">private byte[] serialize(ExtraInfo var1) {
      byte[] var2 = new byte[1 + (this.supportData != null ? 16384 : 0)];
      MemorySegment var3 = MemorySegment.ofArray(var2);
      var3.set(ValueLayout.JAVA_BOOLEAN, 0L, this.supportData != null);
      if (this.supportData != null) {
         MemorySegment.copy(this.supportData, 0, var3, ValueLayout.JAVA_BYTE, 1L, this.supportData.length);
      }

      class="kw">return var2;
   }

   class="kw">private void deserialize(@Nonnull byte[] var1, ExtraInfo var2) {
      MemorySegment var3 = MemorySegment.ofArray(var1);
      if (var3.get(ValueLayout.JAVA_BOOLEAN, 0L)) {
         this.supportData = new byte[16384];
         MemorySegment.copy(var3, ValueLayout.JAVA_BYTE, 1L, this.supportData, 0, 16384);
         this.nonZeroCount = 0;

         for (int var4 = 0; var4 < 16384; var4++) {
            byte var5 = this.supportData[var4];
            if ((var5 & 15) != 0) {
               this.nonZeroCount++;
            }

            if ((var5 & 240) != 0) {
               this.nonZeroCount++;
            }
         }
      } else {
         this.supportData = null;
         this.nonZeroCount = 0;
      }
   }

   class="kw">public class="kw">static void clear(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4) {
      BlockPhysics var5 = var0.getComponent(var1, getComponentType());
      if (var5 != null) {
         var5.set(ChunkUtil.indexBlock(var2, var3, var4), 0);
      }
   }

   class="kw">public class="kw">static void clear(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3) {
      BlockPhysics var4 = var0.getComponent(getComponentType());
      if (var4 != null) {
         var4.set(ChunkUtil.indexBlock(var1, var2, var3), 0);
      }
   }

   class="kw">public class="kw">static void reset(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4) {
      BlockPhysics var5 = var0.getComponent(var1, getComponentType());
      if (var5 == null) {
         var5 = var0.ensureAndGetComponent(var1, getComponentType());
      }

      var5.set(ChunkUtil.indexBlock(var2, var3, var4), 0);
   }

   class="kw">public class="kw">static void reset(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3) {
      setSupportValue(var0, var1, var2, var3, 0);
   }

   class="kw">public class="kw">static void markDeco(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4) {
      BlockPhysics var5 = var0.getComponent(var1, getComponentType());
      if (var5 == null) {
         var5 = var0.ensureAndGetComponent(var1, getComponentType());
      }

      var5.set(ChunkUtil.indexBlock(var2, var3, var4), 15);
   }

   class="kw">public class="kw">static void setSupportValue(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5) {
      BlockPhysics var6 = var0.getComponent(var1, getComponentType());
      if (var6 == null) {
         var6 = var0.ensureAndGetComponent(var1, getComponentType());
      }

      var6.set(ChunkUtil.indexBlock(var2, var3, var4), var5);
   }

   class="kw">public class="kw">static void setSupportValue(@Nonnull Holder<ChunkStore> var0, int var1, int var2, int var3, int var4) {
      BlockPhysics var5 = var0.getComponent(getComponentType());
      if (var5 == null) {
         var5 = var0.ensureAndGetComponent(getComponentType());
      }

      var5.set(ChunkUtil.indexBlock(var1, var2, var3), var4);
   }
}