SpawnMinecartInteraction class
Пакет: com.hypixel.hytale.builtin.mounts.interactions
Файл: com/hypixel/hytale/builtin/mounts/interactions/SpawnMinecartInteraction.java
extends: SimpleBlockInteraction
Поля (60)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BuilderCodec<SpawnMinecartInteraction> |
CODEC |
|
Vector3d |
var10 |
|
double |
var10 |
|
|
var10 |
|
Rotation3f |
var11 |
|
HeadRotation |
var12 |
|
double |
var12 |
|
|
var12 |
|
ChunkStore |
var13 |
|
Store |
var14 |
|
double |
var14 |
|
long |
var15 |
|
double |
var16 |
|
Ref |
var17 |
|
WorldChunk |
var18 |
|
BlockType |
var19 |
|
Vector3fc |
var19 |
|
BlockChunk |
var20 |
|
Vector3fc |
var20 |
|
int |
var21 |
|
double |
var21 |
|
RailConfig |
var22 |
|
BlockBoundingBoxes.RotatedVariantBoxes |
var23 |
|
double |
var23 |
|
Model |
var24 |
|
ModelAsset |
var25 |
|
|
var25 |
|
double |
var25 |
|
double |
var27 |
|
double |
var29 |
|
double |
var31 |
|
double |
var33 |
|
|
var33 |
|
double |
var35 |
|
|
var35 |
|
double |
var37 |
|
|
var37 |
|
double |
var39 |
|
double |
var41 |
|
double |
var43 |
|
double |
var45 |
|
double |
var47 |
|
double |
var49 |
|
RailPoint[] |
var5 |
|
double |
var51 |
|
double |
var53 |
|
double |
var55 |
|
double |
var57 |
|
double |
var59 |
|
double |
var6 |
|
|
var6 |
|
double |
var61 |
|
double |
var63 |
|
double |
var65 |
|
float |
var67 |
|
float |
var68 |
|
Ref |
var8 |
|
double |
var8 |
|
|
var8 |
|
Holder |
var9 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
alignToRailvoid alignToRail(@Nonnull Vector3i var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, float var3, @Nonnull RailConfig var4) |
|
|
for for(int var18 = 0; var18 < var5.length - 1; var18++) |
|
|
if if(var12 != null) |
|
|
if if(var18 != null) |
|
|
if if(var22 != null) |
|
|
if if(var25 == null) |
|
|
if if(var65 >= 0.0 && var65 <= 0.8F && var65 < var6) |
|
|
if if(var14 * var33 + var16 * var37 < 0.0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.mounts.interactions;
class="kw">import com.hypixel.hytale.builtin.mounts.minecart.MinecartComponent;
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.EnumMapCodec;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Holder;
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.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.RailConfig;
class="kw">import com.hypixel.hytale.protocol.RailPoint;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentModel;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.Interactions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction;
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.chunk.WorldChunk;
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 java.util.Collections;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3fc;
class="kw">import org.joml.Vector3i;
class="kw">public class SpawnMinecartInteraction class="kw">extends SimpleBlockInteraction {
class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnMinecartInteraction> CODEC = BuilderCodec.builder(
SpawnMinecartInteraction.class, SpawnMinecartInteraction::new, SimpleBlockInteraction.CODEC
)
.documentation("Spawns a minecart at the target block")
.<String>appendInherited(
new KeyedCodec<>("Model", Codec.STRING), (var0, var1) -> var0.modelId = var1, var0 -> var0.modelId, (var0, var1) -> var0.modelId = var1.modelId
)
.addValidator(ModelAsset.VALIDATOR_CACHE.getValidator())
.add()
.<Map<InteractionType, String>>appendInherited(
new KeyedCodec<>("CartInteractions", new EnumMapCodec<>(InteractionType.class, RootInteraction.CHILD_ASSET_CODEC)),
(var0, var1) -> var0.cartInteractions = var1,
var0 -> var0.cartInteractions,
(var0, var1) -> var0.cartInteractions = var1.cartInteractions
)
.addValidatorLate(() -> RootInteraction.VALIDATOR_CACHE.getMapValueValidator().late())
.add()
.build();
class="kw">private String modelId;
class="kw">private Map<InteractionType, String> cartInteractions = Collections.emptyMap();
class="kw">public SpawnMinecartInteraction() {
}
@Override
class="kw">protected void interactWithBlock(
@Nonnull World var1,
@Nonnull CommandBuffer<EntityStore> var2,
@Nonnull InteractionType var3,
@Nonnull InteractionContext var4,
@Nullable ItemStack var5,
@Nonnull Vector3i var6,
@Nonnull CooldownHandler var7
) {
Ref var8 = var4.getEntity();
Holder var9 = EntityStore.REGISTRY.newHolder();
Vector3d var10 = Vector3iUtil.toVector3d(var6);
var10.add(0.5, 0.5, 0.5);
Rotation3f var11 = new Rotation3f();
HeadRotation var12 = var2.getComponent(var8, HeadRotation.getComponentType());
if (var12 != null) {
var11.setYaw(var12.getRotation().yaw());
}
ChunkStore var13 = var1.getChunkStore();
Store var14 = var13.getStore();
long var15 = ChunkUtil.indexChunkFromBlock(var6.x, var6.z);
Ref var17 = var13.getChunkReference(var15);
if (var17 != null && var17.isValid()) {
WorldChunk var18 = var14.getComponent(var17, WorldChunk.getComponentType());
if (var18 != null) {
BlockType var19 = var18.getBlockType(var6);
BlockChunk var20 = var14.getComponent(var17, BlockChunk.getComponentType());
assert var20 != null;
int var21 = var20.getSectionAtBlockY(var6.y).getRotationIndex(var6.x, var6.y, var6.z);
RailConfig var22 = var19.getRailConfig(var21);
if (var22 != null) {
alignToRail(var6, var10, var11, var11.yaw(), var22);
} else {
BlockBoundingBoxes.RotatedVariantBoxes var23 = BlockBoundingBoxes.getAssetMap().getAsset(var19.getHitboxTypeIndex()).get(var21);
var10.add(0.0, var23.getBoundingBox().max.y - 0.5, 0.0);
}
var9.addComponent(TransformComponent.getComponentType(), new TransformComponent(var10, var11));
var9.ensureComponent(UUIDComponent.getComponentType());
ModelAsset var25 = ModelAsset.getAssetMap().getAsset(this.modelId);
if (var25 == null) {
var25 = ModelAsset.DEBUG;
}
Model var24 = Model.createRandomScaleModel(var25);
var9.addComponent(PersistentModel.getComponentType(), new PersistentModel(var24.toReference()));
var9.addComponent(ModelComponent.getComponentType(), new ModelComponent(var24));
var9.addComponent(BoundingBox.getComponentType(), new BoundingBox(var24.getBoundingBox()));
var9.ensureComponent(Interactable.getComponentType());
var9.addComponent(Interactions.getComponentType(), new Interactions(this.cartInteractions));
var9.putComponent(MinecartComponent.getComponentType(), new MinecartComponent(var4.getHeldItem() != null ? var4.getHeldItem().getItemId() : null));
var2.addEntity(var9, AddReason.SPAWN);
}
}
}
@Override
class="kw">protected void simulateInteractWithBlock(
@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
) {
}
class="kw">private class="kw">static void alignToRail(@Nonnull Vector3i var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, float var3, @Nonnull RailConfig var4) {
RailPoint[] var5 = var4.points;
double var6 = Double.MAX_VALUE;
double var8 = var1.x;
double var10 = var1.y;
double var12 = var1.z;
double var14 = -TrigMathUtil.sin(var3);
double var16 = -TrigMathUtil.cos(var3);
for (int var18 = 0; var18 < var5.length - 1; var18++) {
Vector3fc var19 = var5[var18].point;
Vector3fc var20 = var5[var18 + 1].point;
double var21 = var0.x + var19.x();
double var23 = var0.y + var19.y();
double var25 = var0.z + var19.z();
double var27 = var0.x + var20.x();
double var29 = var0.y + var20.y();
double var31 = var0.z + var20.z();
double var33 = var27 - var21;
double var35 = var29 - var23;
double var37 = var31 - var25;
double var39 = Math.sqrt(var33 * var33 + var35 * var35 + var37 * var37);
double var41 = 1.0 / var39;
var33 *= var41;
var35 *= var41;
var37 *= var41;
double var43 = var1.x - var21;
double var45 = var1.y - var23;
double var47 = var1.z - var25;
double var49 = var33 * var43 + var35 * var45 + var37 * var47;
double var51 = Math.min(var39, Math.max(0.0, var49));
double var53 = var21 + var33 * var51;
double var55 = var23 + var35 * var51;
double var57 = var25 + var37 * var51;
double var59 = var53 - var1.x;
double var61 = var55 - var1.y;
double var63 = var57 - var1.z;
double var65 = var59 * var59 + var61 * var61 + var63 * var63;
if (var65 >= 0.0 && var65 <= 0.8F && var65 < var6) {
var8 = var53;
var10 = var55;
var12 = var57;
var6 = var65;
if (var14 * var33 + var16 * var37 < 0.0) {
var33 = -var33;
var35 = -var35;
var37 = -var37;
}
float var67 = (float)(Math.atan2(var33, var37) + Math.PI);
float var68 = (float)Math.asin(var35);
var2.setYaw(var67);
var2.setPitch(var68);
}
}
if (!(var6 >= Double.MAX_VALUE)) {
var1.set(var8, var10, var12);
}
}
}