ConnectedBlockContext class
Пакет: com.hypixel.hytale.server.core.universe.world.connectedblocks.config.rule
Файл: com/hypixel/hytale/server/core/universe/world/connectedblocks/config/rule/ConnectedBlockContext.java
implements: ConnectedBlockRule.Context
Поля (36)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
QUICK_ACCESS_REGION_SIZE |
|
Store |
var1 |
|
int |
var10 |
|
int |
var10 |
|
int |
var10 |
|
int |
var11 |
|
Ref |
var2 |
|
Vector3i |
var2 |
|
Vector3i |
var2 |
|
Ref |
var2 |
|
int |
var2 |
|
PatternedConnectedBlockRuleSetAsset |
var2 |
|
BlockSection |
var3 |
|
int |
var3 |
|
int |
var3 |
|
PatternedConnectedBlockRuleSet |
var3 |
|
|
var3 |
|
Vector3i |
var4 |
|
int |
var4 |
|
int |
var4 |
|
PatternedConnectedBlockRuleSetAsset |
var4 |
|
|
var4 |
|
BlockSection |
var5 |
|
|
var5 |
|
int |
var5 |
|
int |
var5 |
|
BlockSection |
var6 |
|
BlockSection |
var6 |
|
int |
var7 |
|
int |
var7 |
|
int |
var8 |
|
RotationTuple |
var8 |
|
Ref |
var9 |
|
int |
var9 |
|
int |
var9 |
|
PatternedConnectedBlockRuleSetAsset |
var9 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
buildQuickAccessRegionvoid buildQuickAccessRegion() |
|
|
for for(int var6 = this.origin.x - 1; var6 <= this.origin.x + 1; var6++) |
|
|
for for(int var7 = this.origin.z - 1; var7 <= this.origin.z + 1; var7++) |
|
|
for for(int var8 = this.origin.y - 1; var8 <= this.origin.y + 1; var8++) |
|
|
if if(var3 != null) |
|
|
if if(var5 != null) |
|
|
if if(this.quickAccessFillers[var9] != 0) |
|
|
if if(var6 == null) |
|
|
if if(var7 != 0) |
|
|
if if(this.quickAccessFillers[var9] != 0) |
|
|
if if(var6 == null) |
|
|
if if(var7 != 0) |
|
|
if if(var1 == null) |
|
|
if if(var2 == Integer.MIN_VALUE) |
|
|
if if(var9 != null) |
|
|
if if(var4 == null) |
|
|
if if(var1 == null) |
static |
boolean |
isInQuickAccessboolean isInQuickAccess(int var0, int var1, int var2) |
static |
int |
quickAccessIndexBlockint quickAccessIndexBlock(int var0, int var1, int var2) |
public |
void |
setRotationvoid setRotation(RotationTuple var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.connectedblocks.config.rule;
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.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.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.PatternedConnectedBlockRuleSet;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.PatternedConnectedBlockRuleSetAsset;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.shape.ConnectedBlockShapeConfig;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;
class="kw">public class ConnectedBlockContext class="kw">implements ConnectedBlockRule.Context {
class="kw">private class="kw">static class="kw">final int QUICK_ACCESS_REGION_SIZE = 27;
class="kw">private class="kw">final PatternedConnectedBlockRuleSet ruleSet;
class="kw">private class="kw">final ChunkStore chunkStore;
class="kw">private class="kw">final Vector3i origin = new Vector3i();
class="kw">private RotationTuple rotation;
class="kw">private class="kw">final Vector3i temp = new Vector3i();
class="kw">private int[] quickAccessBlockIds;
class="kw">private int[] quickAccessRotations;
class="kw">private int[] quickAccessFillers;
class="kw">public ConnectedBlockContext(ChunkStore var1, PatternedConnectedBlockRuleSet var2, Vector3ic var3, RotationTuple var4) {
this.chunkStore = var1;
this.ruleSet = var2;
this.origin.set(var3);
this.rotation = var4;
}
class="kw">private class="kw">static int quickAccessIndexBlock(int var0, int var1, int var2) {
class="kw">return (var2 + 1) * 9 + (var1 + 1) * 3 + var0 + 1;
}
class="kw">private class="kw">static boolean isInQuickAccess(int var0, int var1, int var2) {
class="kw">return var0 >= -1 && var0 <= 1 && var1 >= -1 && var1 <= 1 && var2 >= -1 && var2 <= 1;
}
class="kw">public void buildQuickAccessRegion() {
Store var1 = this.chunkStore.getStore();
Ref var2 = this.chunkStore.getChunkSectionReferenceAtBlock(this.origin.x, this.origin.y, this.origin.z);
if (var2 != null && var2.isValid()) {
BlockSection var3 = var1.getComponent(var2, BlockSection.getComponentType());
if (var3 != null) {
this.quickAccessBlockIds = new int[27];
this.quickAccessRotations = new int[27];
this.quickAccessFillers = new int[27];
Vector3i var4 = new Vector3i(this.origin);
BlockSection var5 = var3;
for (int var6 = this.origin.x - 1; var6 <= this.origin.x + 1; var6++) {
for (int var7 = this.origin.z - 1; var7 <= this.origin.z + 1; var7++) {
for (int var8 = this.origin.y - 1; var8 <= this.origin.y + 1; var8++) {
if (!ChunkUtil.isSameChunkSection(var4.x, var4.y, var4.z, var6, var8, var7)) {
var4.set(var6, var8, var7);
Ref var9 = this.chunkStore.getChunkSectionReferenceAtBlock(var6, var8, var7);
var5 = var9 != null && var9.isValid() ? var1.getComponent(var9, BlockSection.getComponentType()) : null;
}
if (var5 != null) {
int var11 = ChunkUtil.indexBlock(var6, var8, var7);
int var10 = quickAccessIndexBlock(var6 - this.origin.x, var8 - this.origin.y, var7 - this.origin.z);
this.quickAccessBlockIds[var10] = var5.get(var11);
this.quickAccessRotations[var10] = var5.getRotationIndex(var11);
this.quickAccessFillers[var10] = var5.getFiller(var11);
}
}
}
}
}
}
}
@Override
class="kw">public BlockType getLocalBlockType(Vector3ic var1) {
Vector3i var2 = this.temp;
this.rotation.applyRotationTo(var2.set(var1));
int var3 = var2.x;
int var4 = var2.y;
int var5 = var2.z;
var2.add(this.origin);
if (this.quickAccessBlockIds != null && isInQuickAccess(var3, var4, var5)) {
int var9 = quickAccessIndexBlock(var3, var4, var5);
if (this.quickAccessFillers[var9] != 0) {
class="kw">return null;
}
int var10 = this.quickAccessBlockIds[var9];
class="kw">return BlockType.getAssetMap().getAsset(var10);
} else {
BlockSection var6 = this.fetchBlockSection(var2);
if (var6 == null) {
class="kw">return null;
}
int var7 = var6.getFiller(var2.x, var2.y, var2.z);
if (var7 != 0) {
class="kw">return null;
}
int var8 = var6.get(var2.x, var2.y, var2.z);
class="kw">return BlockType.getAssetMap().getAsset(var8);
}
}
@Override
class="kw">public RotationTuple getLocalRotation(Vector3ic var1) {
Vector3i var2 = this.temp;
this.rotation.applyRotationTo(var2.set(var1));
int var3 = var2.x;
int var4 = var2.y;
int var5 = var2.z;
var2.add(this.origin);
if (this.quickAccessRotations != null && isInQuickAccess(var3, var4, var5)) {
int var9 = quickAccessIndexBlock(var3, var4, var5);
if (this.quickAccessFillers[var9] != 0) {
class="kw">return null;
}
int var10 = this.quickAccessRotations[var9];
class="kw">return RotationTuple.composeInverse(this.rotation, RotationTuple.get(var10));
} else {
BlockSection var6 = this.fetchBlockSection(var2);
if (var6 == null) {
class="kw">return null;
}
int var7 = var6.getFiller(var2.x, var2.y, var2.z);
if (var7 != 0) {
class="kw">return null;
}
RotationTuple var8 = var6.getRotation(var2.x, var2.y, var2.z);
class="kw">return RotationTuple.composeInverse(this.rotation, var8);
}
}
@Nullable
class="kw">private BlockSection fetchBlockSection(Vector3i var1) {
Ref var2 = this.chunkStore.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
class="kw">return var2 != null && var2.isValid() ? this.chunkStore.getStore().getComponent(var2, BlockSection.getComponentType()) : null;
}
@Nullable
@Override
class="kw">public ConnectedBlockShapeConfig getShapeForBlockType(@Nullable BlockType var1) {
if (var1 == null) {
class="kw">return null;
}
int var2 = BlockType.getAssetMap().getIndex(var1.getId());
if (var2 == Integer.MIN_VALUE) {
class="kw">return null;
}
PatternedConnectedBlockRuleSet var3 = this.ruleSet;
PatternedConnectedBlockRuleSetAsset var4 = this.ruleSet.getRuleSetAsset();
if (var1.getConnectedBlockRuleSet() class="kw">instanceof PatternedConnectedBlockRuleSet var5) {
PatternedConnectedBlockRuleSetAsset var9 = var5.getRuleSetAsset();
if (var9 != null) {
var4 = var9;
var3 = var5;
}
}
if (var4 == null) {
class="kw">return null;
}
for (ConnectedBlockShapeConfig var7 : var4.getShapes().values()) {
if (var7.matches(var3, var1)) {
class="kw">return var7;
}
}
class="kw">return null;
}
@Nullable
@Override
class="kw">public ConnectedBlockShapeConfig getShapeById(String var1) {
if (var1 == null) {
class="kw">return null;
}
PatternedConnectedBlockRuleSetAsset var2 = this.ruleSet.getRuleSetAsset();
class="kw">return var2 == null ? null : var2.getShapes().get(var1);
}
class="kw">public void setRotation(RotationTuple var1) {
this.rotation = var1;
}
}