NeighbourBlockTagsLocationCondition class
Пакет: com.hypixel.hytale.builtin.adventure.worldlocationcondition
Файл: com/hypixel/hytale/builtin/adventure/worldlocationcondition/NeighbourBlockTagsLocationCondition.java
extends: WorldLocationCondition
Поля (12)
| Модификаторы | Тип | Имя |
|---|---|---|
|
ABOVE,
BELOW, |
SIDEWAYS |
|
int |
var1 |
|
|
var1 |
|
NeighbourBlockTagsLocationCondition |
var2 |
|
long |
var5 |
|
int |
var5 |
|
TagPattern |
var6 |
|
WorldChunk |
var7 |
|
BlockType |
var7 |
|
int |
var8 |
|
AssetExtraInfo.Data |
var8 |
|
int |
var9 |
Методы (9)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
NeighbourDirection NeighbourDirection() |
private |
boolean |
checkBlockHasTagboolean checkBlockHasTag(int var1, int var2, int var3, @Nullable WorldChunk var4) |
|
|
if if(var3 <= 0) |
|
|
if if(var7 == null) |
|
|
if if(this.neighbourDirection == NeighbourBlockTagsLocationCondition.NeighbourDirection.SIDEWAYS) |
|
|
if if(var4 == null) |
|
|
if if(var6 != null) |
|
|
if if(var7 == null) |
|
|
if if(this == var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.worldlocationcondition;
class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
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.EnumCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.range.IntRange;
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.tagpattern.config.TagPattern;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldlocationcondition.WorldLocationCondition;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class NeighbourBlockTagsLocationCondition class="kw">extends WorldLocationCondition {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<NeighbourBlockTagsLocationCondition> CODEC = BuilderCodec.builder(
NeighbourBlockTagsLocationCondition.class, NeighbourBlockTagsLocationCondition::new, WorldLocationCondition.BASE_CODEC
)
.append(new KeyedCodec<>("TagPattern", Codec.STRING), (var0, var1) -> var0.tagPatternId = var1, var0 -> var0.tagPatternId)
.documentation("A TagPattern can be used if the block at the chosen location needs to fulfill specific conditions.")
.addValidator(Validators.nonNull())
.add()
.<NeighbourBlockTagsLocationCondition.NeighbourDirection>append(
new KeyedCodec<>("NeighbourBlock", new EnumCodec<>(NeighbourBlockTagsLocationCondition.NeighbourDirection.class)),
(var0, var1) -> var0.neighbourDirection = var1,
var0 -> var0.neighbourDirection
)
.documentation("Defines which block has to be checked related to original location. Possible values: Above, Below, Sideways.")
.addValidator(Validators.nonNull())
.add()
.<IntRange>append(new KeyedCodec<>("Support", IntRange.CODEC), (var0, var1) -> var0.support = var1, var0 -> var0.support)
.documentation("Additional field used if NeighbourBlock is set to Sideways.")
.add()
.build();
class="kw">protected String tagPatternId;
class="kw">protected NeighbourBlockTagsLocationCondition.NeighbourDirection neighbourDirection;
class="kw">protected IntRange support = new IntRange(1, 4);
class="kw">public NeighbourBlockTagsLocationCondition() {
}
@Override
class="kw">public boolean test(@Nonnull World var1, int var2, int var3, int var4) {
if (var3 <= 0) {
class="kw">return false;
}
long var5 = ChunkUtil.indexChunkFromBlock(var2, var4);
WorldChunk var7 = var1.getNonTickingChunk(var5);
if (var7 == null) {
class="kw">return false;
}
if (this.neighbourDirection == NeighbourBlockTagsLocationCondition.NeighbourDirection.SIDEWAYS) {
int var9 = 0;
if (this.checkBlockHasTag(var2 - 1, var3, var4, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2 - 1, var4)))) {
var9++;
}
if (this.checkBlockHasTag(var2 + 1, var3, var4, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2 + 1, var4)))) {
var9++;
}
if (this.checkBlockHasTag(var2, var3, var4 - 1, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2, var4 - 1)))) {
var9++;
}
if (this.checkBlockHasTag(var2, var3, var4 + 1, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2, var4 + 1)))) {
var9++;
}
class="kw">return this.support.includes(var9);
} else {
int var8 = class="kw">switch (this.neighbourDirection) {
case ABOVE -> var3 + 1;
case BELOW -> var3 - 1;
case SIDEWAYS -> var3;
};
class="kw">return this.checkBlockHasTag(var2, var8, var4, var7);
}
}
class="kw">private boolean checkBlockHasTag(int var1, int var2, int var3, @Nullable WorldChunk var4) {
if (var4 == null) {
class="kw">return false;
}
int var5 = var4.getBlock(var1, var2, var3);
TagPattern var6 = TagPattern.getAssetMap().getAsset(this.tagPatternId);
if (var6 != null) {
BlockType var7 = BlockType.getAssetMap().getAsset(var5);
if (var7 == null) {
class="kw">return false;
}
AssetExtraInfo.Data var8 = var7.getData();
class="kw">return var8 == null ? false : var6.test(var8.getTags());
} else {
HytaleLogger.getLogger().at(Level.WARNING).log("No TagPattern asset found for id: %s", this.tagPatternId);
class="kw">return false;
}
}
@Override
class="kw">public boolean equals(@Nullable Object var1) {
if (this == var1) {
class="kw">return true;
}
if (var1 != null && this.getClass() == var1.getClass()) {
NeighbourBlockTagsLocationCondition var2 = (NeighbourBlockTagsLocationCondition)var1;
if (!this.tagPatternId.equals(var2.tagPatternId)) {
class="kw">return false;
} else if (this.neighbourDirection != var2.neighbourDirection) {
class="kw">return false;
} else {
class="kw">return this.support != null ? this.support.equals(var2.support) : var2.support == null;
}
} else {
class="kw">return false;
}
}
@Override
class="kw">public int hashCode() {
int var1 = this.tagPatternId.hashCode();
var1 = 31 * var1 + this.neighbourDirection.hashCode();
class="kw">return 31 * var1 + (this.support != null ? this.support.hashCode() : 0);
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "NeighbourBlockTagsLocationCondition{tagPatternId='"
+ this.tagPatternId
+ "', neighbourDirection="
+ this.neighbourDirection
+ ", support="
+ this.support
+ "} "
+ super.toString();
}
class="kw">protected enum NeighbourDirection {
ABOVE,
BELOW,
SIDEWAYS;
NeighbourDirection() {
}
}
}