PatternedConnectedBlockRuleSet class
Пакет: com.hypixel.hytale.server.core.universe.world.connectedblocks.config
Файл: com/hypixel/hytale/server/core/universe/world/connectedblocks/config/PatternedConnectedBlockRuleSet.java
extends: ConnectedBlockRuleSet
Поля (22)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BuilderCodec<PatternedConnectedBlockRuleSet> |
CODEC |
|
PatternedConnectedBlockRuleSetAsset |
var1 |
|
ConnectedBlockShapeConfig |
var10 |
|
ConnectedBlockContext |
var11 |
|
ConnectedBlockPatternOutput |
var16 |
|
ConnectedBlockRule |
var17 |
|
RotationTuple |
var18 |
|
com.hypixel.hytale.protocol.PatternedConnectedBlockRuleSet |
var2 |
|
RotationTuple |
var21 |
|
ObjectIterator |
var3 |
|
int |
var4 |
|
it.unimi.dsi.fastutil.objects.Object2IntMap.Entry |
var4 |
|
String |
var5 |
|
BlockType |
var5 |
|
ConnectedBlockOutput |
var6 |
|
Map |
var6 |
|
int |
var7 |
|
PatternedConnectedBlockRuleSetAsset |
var7 |
|
ConnectedBlockShapeConfig |
var7 |
|
ConnectedBlockPatternConfig[] |
var8 |
|
RotationTuple |
var8 |
|
String |
var9 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(ConnectedBlockPatternConfig var15 : var8) |
|
|
if if(var7 != -1) |
|
|
if if(var7 == null) |
|
|
if if(var8 == null) |
|
|
if if(var10 == null) |
|
|
if if(var16 != null) |
|
|
if if(var17 == null) |
|
|
if if(var4 == -1) |
|
|
if if(var5 == null) |
|
|
if if(var7 == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.connectedblocks.config;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
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.connectedblocks.ConnectedBlockRuleSet;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.ConnectedBlockUpdateMode;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.ConnectedBlocksUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.builtin.ConnectedBlockOutput;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.rule.ConnectedBlockContext;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.rule.ConnectedBlockRule;
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 it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Optional;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3ic;
class="kw">public class PatternedConnectedBlockRuleSet class="kw">extends ConnectedBlockRuleSet {
class="kw">public class="kw">static class="kw">final BuilderCodec<PatternedConnectedBlockRuleSet> CODEC = BuilderCodec.builder(
PatternedConnectedBlockRuleSet.class, PatternedConnectedBlockRuleSet::new
)
.append(new KeyedCodec<>("RuleSetId", Codec.STRING), (var0, var1) -> var0.ruleSetId = var1, var0 -> var0.ruleSetId)
.addValidator(Validators.nonNull())
.addValidator(PatternedConnectedBlockRuleSetAsset.VALIDATOR_CACHE.getValidator())
.documentation("The name of a ConnectedBlockRuleSetAsset asset")
.add()
.append(
new KeyedCodec<>("TemplatedShapes", new MapCodec<>(ConnectedBlockOutput.CODEC, HashMap::new), true),
(var0, var1) -> var0.shapeNameToOutputMap = var1,
var0 -> var0.shapeNameToOutputMap
)
.add()
.build();
@Nonnull
class="kw">private String ruleSetId;
class="kw">private Map<String, ConnectedBlockOutput> shapeNameToOutputMap = new Object2ObjectOpenHashMap();
class="kw">private class="kw">final Int2ObjectMap<String> templatedShapePerBlockType = new Int2ObjectOpenHashMap();
class="kw">private class="kw">final Object2IntMap<String> shapeNameToResolvedIndex = new Object2IntOpenHashMap();
class="kw">public PatternedConnectedBlockRuleSet() {
}
@Override
class="kw">public void updateCachedBlockTypes(@Nonnull BlockType var1, @Nonnull BlockTypeAssetMap<String, BlockType> var2) {
super.updateCachedBlockTypes(var1, var2);
this.shapeNameToResolvedIndex.defaultReturnValue(-1);
for (Entry var4 : this.shapeNameToOutputMap.entrySet()) {
String var5 = var4.getKey();
ConnectedBlockOutput var6 = var4.getValue();
int var7 = var6.resolve(var1, var2);
if (var7 != -1) {
this.shapeNameToResolvedIndex.put(var5, var7);
this.templatedShapePerBlockType.put(var7, var5);
}
}
}
@Nullable
class="kw">public String getShapeIdForBlockType(int var1) {
class="kw">return (String)this.templatedShapePerBlockType.get(var1);
}
@Override
class="kw">public boolean onlyUpdateOnPlacement() {
class="kw">return false;
}
@Override
class="kw">public Optional<ConnectedBlocksUtil.ConnectedBlockResult> getConnectedBlockType(
@Nonnull ChunkStore var1, @Nonnull Vector3ic var2, @Nonnull BlockType var3, int var4, @Nonnull Vector3ic var5, boolean var6
) {
PatternedConnectedBlockRuleSetAsset var7 = this.getRuleSetAsset();
if (var7 == null) {
class="kw">return Optional.empty();
}
ConnectedBlockPatternConfig[] var8 = var7.getPatterns();
if (var8 == null) {
class="kw">return Optional.empty();
}
String var9 = this.getShapeIdForBlockType(BlockType.getAssetMap().getIndex(var3.getId()));
ConnectedBlockShapeConfig var10 = var7.getShapes().get(var9);
if (var10 == null) {
class="kw">return Optional.empty();
}
ConnectedBlockContext var11 = new ConnectedBlockContext(var1, this, var2, RotationTuple.NONE);
var11.buildQuickAccessRegion();
for (ConnectedBlockPatternConfig var15 : var8) {
ConnectedBlockPatternOutput var16 = var15.getOutput();
if (var16 != null) {
ConnectedBlockRule var17 = var15.getRule();
if (var17 == null) {
class="kw">return Optional.ofNullable(this.resolvePatternOutput(var7, var16, var4));
}
RotationTuple var18 = RotationTuple.get(var4);
for (RotationTuple var20 : var15.getAllowedTransformRotations()) {
RotationTuple var21 = var15.isTransformRulesWithOrientation() ? RotationTuple.compose(var18, var20) : var20;
var11.setRotation(var21);
if (var17.check(var11)) {
class="kw">return Optional.ofNullable(this.resolvePatternOutput(var7, var16, var21.index()));
}
}
}
}
class="kw">return Optional.empty();
}
@Nullable
class="kw">public PatternedConnectedBlockRuleSetAsset getRuleSetAsset() {
class="kw">return PatternedConnectedBlockRuleSetAsset.getAssetMap().getAsset(this.ruleSetId);
}
@Nullable
class="kw">private ConnectedBlocksUtil.ConnectedBlockResult resolvePatternOutput(PatternedConnectedBlockRuleSetAsset var1, ConnectedBlockPatternOutput var2, int var3) {
int var4 = this.shapeNameToResolvedIndex.getInt(var2.getShapeId());
if (var4 == -1) {
class="kw">return null;
}
BlockType var5 = BlockType.getAssetMap().getAsset(var4);
if (var5 == null) {
class="kw">return null;
}
Map var6 = var1.getShapes();
ConnectedBlockShapeConfig var7 = var6.get(var2.getShapeId());
if (var7 == null) {
class="kw">return null;
}
RotationTuple var8 = RotationTuple.compose(RotationTuple.get(var3), var7.getRelativeRotation());
class="kw">return new ConnectedBlocksUtil.ConnectedBlockResult(var5.getId(), var8.index());
}
@Nullable
@Override
class="kw">public com.hypixel.hytale.protocol.ConnectedBlockRuleSet toPacket(@Nonnull BlockTypeAssetMap<String, BlockType> var1) {
com.hypixel.hytale.protocol.PatternedConnectedBlockRuleSet var2 = new com.hypixel.hytale.protocol.PatternedConnectedBlockRuleSet();
var2.ruleSetId = this.ruleSetId;
var2.shapeNameToBlockId = new HashMap<>(this.shapeNameToResolvedIndex.size());
ObjectIterator var3 = this.shapeNameToResolvedIndex.object2IntEntrySet().iterator();
while (var3.hasNext()) {
it.unimi.dsi.fastutil.objects.Object2IntMap.Entry var4 = (it.unimi.dsi.fastutil.objects.Object2IntMap.Entry<String>)var3.next();
var2.shapeNameToBlockId.put((String)var4.getKey(), var4.getIntValue());
}
class="kw">return var2;
}
@Nonnull
@Override
class="kw">public ConnectedBlockUpdateMode getUpdateMode() {
PatternedConnectedBlockRuleSetAsset var1 = this.getRuleSetAsset();
class="kw">return var1 == null ? super.getUpdateMode() : var1.getUpdateMode();
}
}