SpawnDeployableAtLocationInteraction class
Пакет: com.hypixel.hytale.builtin.deployables.interaction
Файл: com/hypixel/hytale/builtin/deployables/interaction/SpawnDeployableAtLocationInteraction.java
extends: SimpleInstantInteraction
Поля (28)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
break |
|
|
break |
|
|
break |
|
|
return |
|
|
return |
|
|
return |
|
long |
var10 |
|
Rotation3f |
var11 |
|
Ref |
var12 |
|
Store |
var13 |
|
BlockChunk |
var14 |
|
Rotation |
var15 |
|
Ref |
var16 |
|
Ref |
var17 |
|
TransformComponent |
var18 |
|
Ref |
var19 |
|
HeadRotation |
var20 |
|
Vector3d |
var21 |
|
CommandBuffer |
var4 |
|
|
var4 |
|
World |
var5 |
|
Rotation3f |
var6 |
|
|
var6 |
|
Vector3d |
var7 |
|
|
var7 |
|
|
var7 |
|
BlockPosition |
var8 |
|
ChunkStore |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Unhandled origin source") |
|
|
if if(var8 == null) |
|
|
if if(var14 == null) |
|
|
switch switch(this.originSource) |
|
|
switch switch(this.offsetRotationMode) |
|
|
switch switch(this.deployableRotationMode) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.deployables.interaction;
class="kw">import com.hypixel.hytale.builtin.deployables.DeployablesUtils;
class="kw">import com.hypixel.hytale.builtin.deployables.config.DeployableConfig;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
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.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.OriginSource;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RelativeRotationMode;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
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 com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class SpawnDeployableAtLocationInteraction class="kw">extends SimpleInstantInteraction {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnDeployableAtLocationInteraction> CODEC = BuilderCodec.builder(
SpawnDeployableAtLocationInteraction.class, SpawnDeployableAtLocationInteraction::new, SimpleInstantInteraction.CODEC
)
.documentation("Spawns a deployable at a specific location.")
.<DeployableConfig>appendInherited(
new KeyedCodec<>("Config", DeployableConfig.CODEC), (var0, var1) -> var0.config = var1, var0 -> var0.config, (var0, var1) -> var0.config = var1.config
)
.addValidator(Validators.nonNull())
.add()
.<Vector3d>appendInherited(
new KeyedCodec<>("Offset", Vector3dUtil.CODEC), (var0, var1) -> var0.offset = var1, var0 -> var0.offset, (var0, var1) -> var0.offset = var1.offset
)
.addValidator(Validators.nonNull())
.add()
.<Rotation>appendInherited(
new KeyedCodec<>("RotationYaw", Rotation.CODEC),
(var0, var1) -> var0.rotationYaw = var1,
var0 -> var0.rotationYaw,
(var0, var1) -> var0.rotationYaw = var1.rotationYaw
)
.addValidator(Validators.nonNull())
.add()
.<OriginSource>appendInherited(
new KeyedCodec<>("OriginSource", OriginSource.CODEC),
(var0, var1) -> var0.originSource = var1,
var0 -> var0.originSource,
(var0, var1) -> var0.originSource = var1.originSource
)
.addValidator(Validators.nonNull())
.add()
.<RelativeRotationMode>appendInherited(
new KeyedCodec<>("OffsetRotationMode", RelativeRotationMode.CODEC),
(var0, var1) -> var0.offsetRotationMode = var1,
var0 -> var0.offsetRotationMode,
(var0, var1) -> var0.offsetRotationMode = var1.offsetRotationMode
)
.addValidator(Validators.nonNull())
.add()
.<RelativeRotationMode>appendInherited(
new KeyedCodec<>("DeployableRotationMode", RelativeRotationMode.CODEC),
(var0, var1) -> var0.deployableRotationMode = var1,
var0 -> var0.deployableRotationMode,
(var0, var1) -> var0.deployableRotationMode = var1.deployableRotationMode
)
.addValidator(Validators.nonNull())
.add()
.build();
class="kw">private DeployableConfig config;
@Nonnull
class="kw">private Vector3d offset = new Vector3d();
@Nonnull
class="kw">private Rotation rotationYaw = Rotation.None;
@Nonnull
class="kw">private OriginSource originSource = OriginSource.ENTITY;
@Nonnull
class="kw">private RelativeRotationMode offsetRotationMode = RelativeRotationMode.NONE;
@Nonnull
class="kw">private RelativeRotationMode deployableRotationMode = RelativeRotationMode.NONE;
class="kw">public SpawnDeployableAtLocationInteraction() {
}
@Override
class="kw">public boolean needsRemoteSync() {
class="kw">return false;
}
@Override
class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
CommandBuffer var4;
Rotation3f var6;
Vector3d var7;
var4 = var2.getCommandBuffer();
assert var4 != null;
World var5 = var4.getExternalData().getWorld();
var6 = new Rotation3f(0.0F, (float)this.rotationYaw.getRadians(), 0.0F);
label60:
class="kw">switch (this.originSource) {
case ENTITY:
Ref var16 = var2.getEntity();
TransformComponent var18 = var4.getComponent(var16, TransformComponent.getComponentType());
assert var18 != null;
HeadRotation var20 = var4.getComponent(var16, HeadRotation.getComponentType());
Rotation3f var11 = var20 != null ? var20.getRotation() : var18.getRotation();
Vector3d var21 = new Vector3d(this.offset);
class="kw">switch (this.offsetRotationMode) {
case NONE:
class="kw">default:
break;
case YAW:
var21.rotateY(var11.yaw());
break;
case FULL:
var11.transform(var21);
}
var7 = new Vector3d(var18.getPosition()).add(var21);
class="kw">switch (this.deployableRotationMode) {
case NONE:
class="kw">default:
break label60;
case YAW:
var6.addYaw(var11.yaw());
break label60;
case FULL:
var6.add(var11);
break label60;
}
case BLOCK:
BlockPosition var8 = var2.getTargetBlock();
if (var8 == null) {
class="kw">return;
}
ChunkStore var9 = var5.getChunkStore();
long var10 = ChunkUtil.indexChunkFromBlock(var8.x, var8.z);
Ref var12 = var9.getChunkReference(var10);
if (var12 == null || !var12.isValid()) {
class="kw">return;
}
Store var13 = var9.getStore();
BlockChunk var14 = var13.getComponent(var12, BlockChunk.getComponentType());
if (var14 == null) {
class="kw">return;
}
Rotation var15 = var14.getSectionAtBlockY(var8.y).getRotation(var8.x, var8.y, var8.z).yaw();
var7 = new Vector3d();
var15.rotateY(this.offset, var7);
var6.addYaw((float)var15.getRadians());
var7.add(var8.x, var8.y, var8.z);
break;
class="kw">default:
throw new IllegalArgumentException("Unhandled origin source");
}
Ref var17 = var2.getOwningEntity();
Ref var19 = var17 != null ? var17 : var2.getEntity();
DeployablesUtils.spawnDeployable(var4, var4.getStore(), this.config, var19, var7, var6, "UP");
}
}