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);
}
}