BsonPrefabBufferDeserializer class
Пакет: com.hypixel.hytale.server.core.prefab.selection.buffer
Файл: com/hypixel/hytale/server/core/prefab/selection/buffer/BsonPrefabBufferDeserializer.java
Поля (71)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BsonPrefabBufferDeserializer |
INSTANCE |
|
Vector3d |
var10 |
|
Int2ObjectOpenHashMap |
var11 |
|
int |
var11 |
|
PrefabBuffer.Builder |
var12 |
|
int |
var12 |
|
BsonValue |
var13 |
|
int |
var13 |
|
BlockTypeAssetMap |
var14 |
|
List |
var14 |
|
BsonDocument |
var18 |
|
int |
var19 |
|
int |
var2 |
|
BsonValue |
var2 |
|
BsonValue |
var2 |
|
int |
var20 |
|
int |
var21 |
|
int |
var22 |
|
int |
var23 |
|
int |
var24 |
|
PrefabBufferBlockEntry |
var25 |
|
int |
var26 |
|
Int2ObjectMap |
var27 |
|
PrefabBufferBlockEntry |
var28 |
|
String |
var29 |
|
BsonValue |
var3 |
|
int |
var3 |
|
int |
var3 |
|
Int2ObjectOpenHashMap |
var3 |
|
BsonValue |
var31 |
|
IndexedLookupTableAssetMap |
var32 |
|
Int2ObjectOpenHashMap |
var33 |
|
BsonDocument |
var37 |
|
int |
var38 |
|
int |
var39 |
|
int |
var4 |
|
int |
var4 |
|
int |
var4 |
|
String |
var4 |
|
BsonArray |
var4 |
|
int |
var40 |
|
int |
var41 |
|
int |
var42 |
|
int |
var43 |
|
int |
var44 |
|
Int2ObjectMap |
var45 |
|
PrefabBufferBlockEntry |
var46 |
|
Vector3i |
var5 |
|
int |
var5 |
|
List |
var5 |
|
int |
var5 |
|
int |
var5 |
|
int |
var6 |
|
Int2ObjectMap |
var6 |
|
Holder[] |
var6 |
|
String |
var6 |
|
|
var6 |
|
|
var6 |
|
Function |
var7 |
|
|
var7 |
|
|
var7 |
|
PrefabBufferBlockEntry[] |
var7 |
|
String |
var7 |
|
BsonDocument |
var7 |
|
Map |
var8 |
|
List |
var8 |
|
float |
var8 |
|
Holder |
var8 |
|
int |
var9 |
|
Holder[] |
var9 |
|
TransformComponent |
var9 |
Методы (42)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Prefab version is too old: " + var4) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Prefab version is too new: " + var4 + " by expected 8") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation X: Short.MIN_VALUE < " + var22 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation Y: Short.MIN_VALUE < " + var23 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation Z: Short.MIN_VALUE < " + var24 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation X: Short.MIN_VALUE < " + var41 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation Y: Short.MIN_VALUE < " + var42 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Violation Z: Short.MIN_VALUE < " + var43 + " < Short.MAX_VALUE") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Chance is smaller than 0%. Given: " + var8) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Chance is larger than 100%. Given: " + var8) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Failed to load block type for " + var1 + " at " + var19 + ", " + var20 + ", " + var21, var30) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Block is already present in column. Given: "
+ var19
+ ", "
+ var20
+ ", "
+ var21
+ ", "
+ var25.blockTypeKey
+ " - Existing: "
+ var28.y
+ ", "
+ var28.blockTypeKey) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Failed to load entity wrapper #" + var5 + ": " + var7, var15) |
static |
void |
deserializeBlockTypevoid deserializeBlockType(@Nonnull PrefabBufferBlockEntry var0,
@Nonnull BsonDocument var1,
@Nonnull BlockTypeAssetMap<String, BlockType> var2,
@Nullable Function<String, String> var3) |
abstract |
|
deserializeBlockType deserializeBlockType(var25, var18, var14, var7) |
static |
void |
deserializeStatevoid deserializeState(@Nonnull PrefabBufferBlockEntry var0, @Nonnull BsonDocument var1) |
abstract |
|
deserializeState deserializeState(var25, var18) |
abstract |
|
for for(BlockMigration var10 = var8.get(var9) |
abstract |
|
for for(int var6 = var4.size() |
|
|
if if(var4 < 8) |
|
|
if if(var4 > 8) |
|
|
if if(var7 == null) |
|
|
if if(var13 != null) |
|
|
if if(-32768 > var22 || var22 > 32767) |
|
|
if if(-32768 > var23 || var23 > 32767) |
|
|
if if(-32768 > var24 || var24 > 32767) |
|
|
if if(var27 == null) |
|
|
if if(var28 != null) |
|
|
if if(var31 != null) |
|
|
if if(-32768 > var41 || var41 > 32767) |
|
|
if if(-32768 > var42 || var42 > 32767) |
|
|
if if(-32768 > var43 || var43 > 32767) |
|
|
if if(var45 == null) |
|
|
if if(var6 != null) |
|
|
if if(var5 != -1) |
|
|
if if(var3 != null) |
|
|
if if(var5 != -1) |
|
|
if if(var8 < 0.0F) |
|
|
if if(var8 > 100.0F) |
|
|
if if(var2 != null) |
|
|
if if(var2 == null) |
|
|
if if(var14 == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.prefab.selection.buffer;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockMigration;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.PrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.PrefabBufferBlockEntry;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Arrays;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonInt32;
class="kw">import org.bson.BsonValue;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class BsonPrefabBufferDeserializer {
class="kw">public class="kw">static class="kw">final BsonPrefabBufferDeserializer INSTANCE = new BsonPrefabBufferDeserializer();
class="kw">public class="kw">static class="kw">final BsonInt32 LEGACY_BLOCK_ID_VERSION = new BsonInt32(8);
class="kw">private class="kw">static class="kw">final BsonInt32 DEFAULT_SUPPORT_VALUE = new BsonInt32(0);
class="kw">private class="kw">static class="kw">final BsonInt32 DEFAULT_FILLER_VALUE = new BsonInt32(0);
class="kw">private class="kw">static class="kw">final BsonInt32 DEFAULT_ROTATION_VALUE = new BsonInt32(0);
class="kw">public BsonPrefabBufferDeserializer() {
}
@Nonnull
class="kw">public PrefabBuffer deserialize(Path var1, @Nonnull BsonDocument var2) {
BsonValue var3 = var2.get("version");
int var4 = var3 != null ? var3.asInt32().getValue() : -1;
if (var4 < 8) {
throw new IllegalArgumentException("Prefab version is too old: " + var4);
}
if (var4 > 8) {
throw new IllegalArgumentException("Prefab version is too new: " + var4 + " by expected 8");
}
Vector3i var5 = new Vector3i();
var5.x = var2.getInt32("anchorX").getValue();
var5.y = var2.getInt32("anchorY").getValue();
var5.z = var2.getInt32("anchorZ").getValue();
int var6 = var2.getInt32("blockIdVersion", LEGACY_BLOCK_ID_VERSION).getValue();
Function var7 = null;
Map var8 = BlockMigration.getAssetMap().getAssetMap();
int var9 = var6;
for (BlockMigration var10 = var8.get(var9); var10 != null; var10 = var8.get(++var9)) {
if (var7 == null) {
var7 = var10::getMigration;
} else {
var7 = var7.andThen(var10::getMigration);
}
}
Int2ObjectOpenHashMap var11 = new Int2ObjectOpenHashMap();
PrefabBuffer.Builder var12 = PrefabBuffer.newBuilder();
var12.setAnchor(var5);
BsonValue var13 = var2.get("blocks");
if (var13 != null) {
BlockTypeAssetMap var14 = BlockType.getAssetMap();
for (BsonValue var17 : var13.asArray()) {
BsonDocument var18 = var17.asDocument();
int var19 = var18.getInt32("x").getValue();
int var20 = var18.getInt32("y").getValue();
int var21 = var18.getInt32("z").getValue();
int var22 = var19 - var5.x;
int var23 = var20 - var5.y;
int var24 = var21 - var5.z;
if (-32768 > var22 || var22 > 32767) {
throw new IllegalArgumentException("Violation X: Short.MIN_VALUE < " + var22 + " < Short.MAX_VALUE");
}
if (-32768 > var23 || var23 > 32767) {
throw new IllegalArgumentException("Violation Y: Short.MIN_VALUE < " + var23 + " < Short.MAX_VALUE");
}
if (-32768 > var24 || var24 > 32767) {
throw new IllegalArgumentException("Violation Z: Short.MIN_VALUE < " + var24 + " < Short.MAX_VALUE");
}
PrefabBufferBlockEntry var25 = var12.newBlockEntry(var23);
try {
deserializeBlockType(var25, var18, var14, var7);
} catch (Throwable var30) {
throw new IllegalStateException("Failed to load block type for " + var1 + " at " + var19 + ", " + var20 + ", " + var21, var30);
}
deserializeState(var25, var18);
var25.supportValue = (byte)var18.getInt32("support", DEFAULT_SUPPORT_VALUE).getValue();
var25.filler = var18.getInt32("filler", DEFAULT_FILLER_VALUE).getValue();
var25.rotation = var18.getInt32("rotation", DEFAULT_ROTATION_VALUE).getValue();
int var26 = MathUtil.packInt(var22, var24);
Int2ObjectMap var27 = (Int2ObjectMap<PrefabBufferBlockEntry>)var11.get(var26);
if (var27 == null) {
var11.put(var26, var27 = new Int2ObjectOpenHashMap());
}
PrefabBufferBlockEntry var28 = (PrefabBufferBlockEntry)var27.putIfAbsent(var23, var25);
if (var28 != null) {
throw new IllegalStateException(
"Block is already present in column. Given: "
+ var19
+ ", "
+ var20
+ ", "
+ var21
+ ", "
+ var25.blockTypeKey
+ " - Existing: "
+ var28.y
+ ", "
+ var28.blockTypeKey
);
}
}
}
BsonValue var31 = var2.get("fluids");
if (var31 != null) {
IndexedLookupTableAssetMap var32 = Fluid.getAssetMap();
for (BsonValue var36 : var31.asArray()) {
BsonDocument var37 = var36.asDocument();
int var38 = var37.getInt32("x").getValue();
int var39 = var37.getInt32("y").getValue();
int var40 = var37.getInt32("z").getValue();
int var41 = var38 - var5.x;
int var42 = var39 - var5.y;
int var43 = var40 - var5.z;
if (-32768 > var41 || var41 > 32767) {
throw new IllegalArgumentException("Violation X: Short.MIN_VALUE < " + var41 + " < Short.MAX_VALUE");
}
if (-32768 > var42 || var42 > 32767) {
throw new IllegalArgumentException("Violation Y: Short.MIN_VALUE < " + var42 + " < Short.MAX_VALUE");
}
if (-32768 > var43 || var43 > 32767) {
throw new IllegalArgumentException("Violation Z: Short.MIN_VALUE < " + var43 + " < Short.MAX_VALUE");
}
int var44 = MathUtil.packInt(var41, var43);
Int2ObjectMap var45 = (Int2ObjectMap<PrefabBufferBlockEntry>)var11.get(var44);
if (var45 == null) {
var11.put(var44, var45 = new Int2ObjectOpenHashMap());
}
PrefabBufferBlockEntry var46 = (PrefabBufferBlockEntry)var45.computeIfAbsent(var42, var12::newBlockEntry);
String var29 = var37.getString("name").getValue();
var46.fluidId = Fluid.getFluidIdOrUnknown(var29, "Unknown fluid '%s'", var29);
var46.fluidLevel = (byte)var37.getInt32("level").getValue();
}
}
Int2ObjectOpenHashMap var33 = deserializeEntityHolders(var2, var5);
var11.int2ObjectEntrySet().fastForEach(var2x -> {
int var3 = var2x.getIntKey();
int var4 = MathUtil.unpackLeft(var3);
int var5 = MathUtil.unpackRight(var3);
Int2ObjectMap var6 = (Int2ObjectMap<PrefabBufferBlockEntry>)var2x.getValue();
PrefabBufferBlockEntry[] var7 = (PrefabBufferBlockEntry[])var6.values().toArray(PrefabBufferBlockEntry[]::new);
Arrays.sort(var7, Comparator.comparingInt(var0x -> var0x.y));
List var8 = (List<Holder<EntityStore>>)var33.remove(var3);
Holder[] var9 = var8 != null && !var8.isEmpty() ? var8.toArray(Holder[]::new) : null;
var12.addColumn(var4, var5, var7, var9);
});
var33.int2ObjectEntrySet().fastForEach(var1x -> {
int var2 = var1x.getIntKey();
int var3 = MathUtil.unpackLeft(var2);
int var4 = MathUtil.unpackRight(var2);
List var5 = (List<Holder<EntityStore>>)var1x.getValue();
Holder[] var6 = !var5.isEmpty() ? var5.toArray(Holder[]::new) : null;
if (var6 != null) {
var12.addColumn(var3, var4, PrefabBufferBlockEntry.EMPTY_ARRAY, var6);
}
});
class="kw">return var12.build();
}
class="kw">private class="kw">static void deserializeBlockType(
@Nonnull PrefabBufferBlockEntry var0,
@Nonnull BsonDocument var1,
@Nonnull BlockTypeAssetMap<String, BlockType> var2,
@Nullable Function<String, String> var3
) {
String var4 = var1.getString("name").getValue();
int var5 = var4.indexOf(37);
String var6;
if (var5 != -1) {
var6 = var4.substring(var5 + 1);
} else {
var6 = var4;
}
var0.blockTypeKey = var6;
if (var3 != null) {
var0.blockTypeKey = var3.apply(var0.blockTypeKey);
}
var0.blockId = BlockType.getBlockIdOrUnknown(var2, var0.blockTypeKey, "Failed to find block. Given %s", var6);
if (var5 != -1) {
String var7 = var4.substring(0, var5);
float var8 = Float.parseFloat(var7);
if (var8 < 0.0F) {
throw new IllegalArgumentException("Chance is smaller than 0%. Given: " + var8);
}
if (var8 > 100.0F) {
throw new IllegalArgumentException("Chance is larger than 100%. Given: " + var8);
}
var0.chance = var8 / 100.0F;
}
}
class="kw">private class="kw">static void deserializeState(@Nonnull PrefabBufferBlockEntry var0, @Nonnull BsonDocument var1) {
BsonValue var2 = var1.get("components");
if (var2 != null) {
var0.state = ChunkStore.REGISTRY.deserialize(var2.asDocument());
}
}
@Nonnull
class="kw">private class="kw">static Int2ObjectOpenHashMap<List<Holder<EntityStore>>> deserializeEntityHolders(@Nonnull BsonDocument var0, @Nonnull Vector3i var1) {
BsonValue var2 = var0.get("entities");
Int2ObjectOpenHashMap var3 = new Int2ObjectOpenHashMap();
if (var2 == null) {
class="kw">return var3;
}
BsonArray var4 = var2.asArray();
int var5 = 0;
for (int var6 = var4.size(); var5 < var6; var5++) {
BsonDocument var7 = var4.get(var5).asDocument();
try {
Holder var8 = EntityStore.REGISTRY.deserialize(var7);
TransformComponent var9 = var8.getComponent(TransformComponent.getComponentType());
assert var9 != null;
Vector3d var10 = var9.getPosition();
var10.add(-var1.x, -var1.y, -var1.z);
int var11 = MathUtil.floor(var10.x()) & 65535;
int var12 = MathUtil.floor(var10.z()) & 65535;
int var13 = MathUtil.packInt(var11, var12);
List var14 = (List<Holder<EntityStore>>)var3.get(var13);
if (var14 == null) {
var3.put(var13, var14 = new ObjectArrayList());
}
var14.add(var8);
} catch (Exception var15) {
throw new IllegalStateException("Failed to load entity wrapper #" + var5 + ": " + var7, var15);
}
}
class="kw">return var3;
}
}