AxisRotation enum
Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions
Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/conditions/BlockTypeCondition.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final Rotation |
rotation |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
DEG_270 DEG_270(Rotation.TwoSeventy) |
|
public boolean |
matchespublic boolean matches(@Nonnull Rotation var1) |
|
private static BlockTypeCondition.AxisRotation |
ofprivate static BlockTypeCondition.AxisRotation of(@Nonnull Rotation var0) |
|
return |
switchreturn switch(var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.YawRotation;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
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.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
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.Rotation;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Arrays;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class BlockTypeCondition class="kw">extends TriggerCondition {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<BlockTypeCondition> CODEC = BuilderCodec.builder(BlockTypeCondition.class, BlockTypeCondition::new, BASE_CODEC)
.append(
new KeyedCodec<>("BlockType", Codec.STRING_ARRAY, false),
(var0, var1) -> var0.blockTypes = var1 != null ? var1 : new String[0],
var0 -> var0.blockTypes.length == 0 ? null : var0.blockTypes
)
.add()
.append(
new KeyedCodec<>("PositionSource", new EnumCodec<>(BlockTypeCondition.PositionSource.class), false),
(var0, var1) -> var0.positionSource = var1 != null ? var1 : BlockTypeCondition.PositionSource.EVENT,
var0 -> var0.positionSource
)
.add()
.append(
new KeyedCodec<>("PositionOffset", Vector3dUtil.CODEC, false),
(var0, var1) -> var0.positionOffset = var1 != null ? var1 : new Vector3d(),
var0 -> var0.hasOffset() ? var0.positionOffset : null
)
.add()
.append(
new KeyedCodec<>("RotationX", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
(var0, var1) -> var0.rotationX = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
var0 -> var0.rotationX == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationX
)
.add()
.append(
new KeyedCodec<>("RotationY", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
(var0, var1) -> var0.rotationY = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
var0 -> var0.rotationY == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationY
)
.add()
.append(
new KeyedCodec<>("RotationZ", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
(var0, var1) -> var0.rotationZ = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
var0 -> var0.rotationZ == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationZ
)
.add()
.append(
new KeyedCodec<>("State", Codec.STRING, false),
(var0, var1) -> var0.state = var1 != null ? var1 : "",
var0 -> var0.state.isEmpty() ? null : var0.state
)
.add()
.build();
@Nonnull
class="kw">private String[] blockTypes = new String[0];
@Nonnull
class="kw">private String state = "";
@Nonnull
class="kw">private BlockTypeCondition.AxisRotation rotationX = BlockTypeCondition.AxisRotation.ANY;
@Nonnull
class="kw">private BlockTypeCondition.AxisRotation rotationY = BlockTypeCondition.AxisRotation.ANY;
@Nonnull
class="kw">private BlockTypeCondition.AxisRotation rotationZ = BlockTypeCondition.AxisRotation.ANY;
@Nonnull
class="kw">private BlockTypeCondition.PositionSource positionSource = BlockTypeCondition.PositionSource.EVENT;
@Nonnull
class="kw">private Vector3d positionOffset = new Vector3d();
class="kw">public BlockTypeCondition() {
}
@Nonnull
class="kw">public class="kw">static BlockTypeCondition create(@Nonnull TriggerEventType var0, @Nonnull String... var1) {
BlockTypeCondition var2 = new BlockTypeCondition();
var2.setEventType(var0);
var2.blockTypes = var1;
class="kw">return var2;
}
@Override
class="kw">public boolean test(@Nonnull TriggerContext var1) {
if (this.positionSource == BlockTypeCondition.PositionSource.EVENT && !this.hasOffset() && this.state.isEmpty()) {
String var8 = var1.getBlockId();
if (var8 == null) {
class="kw">return false;
} else {
class="kw">return !this.matchesBlockTypes(var8, null) ? false : this.matchesRotation(var1, var1.getBlockPosition());
}
} else {
Vector3d var2 = this.resolvePosition(var1);
if (var2 == null) {
class="kw">return false;
}
World var3 = var1.getStore().getExternalData().getWorld();
if (var3 == null) {
class="kw">return false;
}
int var4 = MathUtil.floor(var2.x());
int var5 = MathUtil.floor(var2.y());
int var6 = MathUtil.floor(var2.z());
BlockType var7 = var3.getBlockType(var4, var5, var6);
if (var7 != null && var7 != BlockType.EMPTY) {
if (!this.matchesBlockTypes(var7.getId(), var7)) {
class="kw">return false;
} else {
class="kw">return !this.matchesState(var7) ? false : this.matchesRotation(var1, var2);
}
} else {
class="kw">return false;
}
}
}
@Override
class="kw">public void rotateInPlace(float var1, @Nonnull Vector3d var2) {
if (this.positionSource == BlockTypeCondition.PositionSource.VOLUME_ORIGIN && this.positionOffset != null) {
YawRotation.rotateBlockOffset(this.positionOffset, var1, var2);
}
int var3 = YawRotation.quarterTurns(var1);
if (var3 > 0 && this.rotationY != BlockTypeCondition.AxisRotation.ANY && this.rotationY.rotation != null) {
this.rotationY = BlockTypeCondition.AxisRotation.of(YawRotation.rotate(this.rotationY.rotation, var3));
}
}
@Nullable
class="kw">private Vector3d resolvePosition(@Nonnull TriggerContext var1) {
Vector3d var2 = class="kw">switch (this.positionSource) {
case EVENT -> var1.getBlockPosition();
case VOLUME_ORIGIN -> new Vector3d(var1.getVolume().getPosition());
case ENTITY -> var1.getActorPosition();
case WORLD_ABSOLUTE -> new Vector3d();
};
class="kw">return var2 != null ? var2.add(this.positionOffset) : null;
}
class="kw">private boolean matchesBlockTypes(@Nonnull String var1, @Nullable BlockType var2) {
if (this.blockTypes.length == 0) {
class="kw">return true;
}
List var3 = Arrays.asList(this.blockTypes);
if (var3.contains(var1)) {
class="kw">return true;
}
if (var2 == null) {
var2 = BlockType.getAssetMap().getAsset(var1);
if (var2 == null) {
class="kw">return false;
}
}
String var4 = var2.getBlockKeyForState("class="kw">default");
class="kw">return var4 != null && var3.contains(var4);
}
class="kw">private boolean matchesState(@Nonnull BlockType var1) {
if (this.state.isEmpty()) {
class="kw">return true;
}
String var2 = var1.getStateForBlock(var1);
if (var2 == null) {
var2 = "class="kw">default";
}
for (String var6 : this.state.split(",", -1)) {
String var7 = var6.trim();
if (!var7.isEmpty() && var7.equalsIgnoreCase(var2)) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">private boolean matchesRotation(@Nonnull TriggerContext var1, @Nullable Vector3d var2) {
if (this.rotationX == BlockTypeCondition.AxisRotation.ANY
&& this.rotationY == BlockTypeCondition.AxisRotation.ANY
&& this.rotationZ == BlockTypeCondition.AxisRotation.ANY) {
class="kw">return true;
}
if (var2 == null) {
class="kw">return false;
}
World var3 = var1.getStore().getExternalData().getWorld();
if (var3 == null) {
class="kw">return false;
}
int var4 = MathUtil.floor(var2.x());
int var5 = MathUtil.floor(var2.y());
int var6 = MathUtil.floor(var2.z());
ChunkStore var7 = var3.getChunkStore();
Ref var8 = var7.getChunkReference(ChunkUtil.indexChunkFromBlock(var4, var6));
if (var8 != null && var8.isValid()) {
BlockChunk var9 = var7.getStore().getComponent(var8, BlockChunk.getComponentType());
if (var9 == null) {
class="kw">return false;
}
int var10 = var9.getSectionAtBlockY(var5).getRotationIndex(var4, var5, var6);
RotationTuple var11 = RotationTuple.get(var10);
class="kw">return this.rotationX.matches(var11.pitch()) && this.rotationY.matches(var11.yaw()) && this.rotationZ.matches(var11.roll());
} else {
class="kw">return false;
}
}
class="kw">private boolean hasOffset() {
class="kw">return this.positionOffset.x() != 0.0 || this.positionOffset.y() != 0.0 || this.positionOffset.z() != 0.0;
}
class="kw">public enum AxisRotation {
ANY(null),
DEG_0(Rotation.None),
DEG_90(Rotation.Ninety),
DEG_180(Rotation.OneEighty),
DEG_270(Rotation.TwoSeventy);
@Nullable
class="kw">private class="kw">final Rotation rotation;
AxisRotation(@Nullable Rotation nullxx) {
this.rotation = nullxx;
}
class="kw">public boolean matches(@Nonnull Rotation var1) {
class="kw">return this.rotation == null || this.rotation == var1;
}
@Nonnull
class="kw">private class="kw">static BlockTypeCondition.AxisRotation of(@Nonnull Rotation var0) {
class="kw">return class="kw">switch (var0) {
case None -> DEG_0;
case Ninety -> DEG_90;
case OneEighty -> DEG_180;
case TwoSeventy -> DEG_270;
};
}
}
class="kw">public enum PositionSource {
EVENT,
VOLUME_ORIGIN,
ENTITY,
WORLD_ABSOLUTE;
PositionSource() {
}
}
}