TeleporterInteraction class
Пакет: com.hypixel.hytale.builtin.adventure.teleporter.interaction.server
Файл: com/hypixel/hytale/builtin/adventure/teleporter/interaction/server/TeleporterInteraction.java
extends: SimpleBlockInteraction
Поля (17)
| Модификаторы | Тип | Имя |
|---|---|---|
|
Player |
var10 |
|
Archetype |
var11 |
|
BlockSection |
var12 |
|
BlockType |
var13 |
|
String |
var14 |
|
BlockType |
var15 |
|
Vector3d |
var16 |
|
SpatialResource |
var17 |
|
List |
var18 |
|
TransformComponent |
var19 |
|
Teleport |
var20 |
|
ChunkStore |
var5 |
|
Ref |
var6 |
|
Ref |
var7 |
|
boolean |
var8 |
|
Teleporter |
var8 |
|
Ref |
var9 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(!var8) |
|
|
if if(var7 == null) |
|
|
if if(var8 == null) |
|
|
if if(var12 == null) |
|
|
if if(var13 == null) |
|
|
if if(var15 != null) |
|
|
if if(var19 == null) |
|
|
if if(var20 == null) |
|
|
if if(this.particle != null) |
private |
boolean |
interactboolean interact(@Nonnull World var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull InteractionContext var3, @Nonnull Vector3i var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.teleporter.interaction.server;
class="kw">import com.hypixel.hytale.builtin.adventure.teleporter.component.Teleporter;
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.validation.Validators;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.PendingTeleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class TeleporterInteraction class="kw">extends SimpleBlockInteraction {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<TeleporterInteraction> CODEC = BuilderCodec.builder(
TeleporterInteraction.class, TeleporterInteraction::new, SimpleBlockInteraction.CODEC
)
.appendInherited(
new KeyedCodec<>("Particle", Codec.STRING), (var0, var1) -> var0.particle = var1, var0 -> var0.particle, (var0, var1) -> var0.particle = var1.particle
)
.documentation("The particle to play on the entity when teleporting.")
.add()
.<Double>appendInherited(
new KeyedCodec<>("ClearOutXZ", Codec.DOUBLE),
(var0, var1) -> var0.clearoutXZ = var1,
var0 -> var0.clearoutXZ,
(var0, var1) -> var0.clearoutXZ = var1.clearoutXZ
)
.addValidator(Validators.greaterThanOrEqual(0.0))
.documentation("Upon reaching the warp destination, how far away one has to move on the XZ plane in order to use another Teleporter.")
.add()
.<Double>appendInherited(
new KeyedCodec<>("ClearOutY", Codec.DOUBLE),
(var0, var1) -> var0.clearoutY = var1,
var0 -> var0.clearoutY,
(var0, var1) -> var0.clearoutY = var1.clearoutY
)
.addValidator(Validators.greaterThanOrEqual(0.0))
.documentation("Upon reaching the warp destination, how far away one has to move along the Y axis in order to use another Teleporter.")
.add()
.build();
@Nullable
class="kw">private String particle;
class="kw">private double clearoutXZ = 1.3;
class="kw">private double clearoutY = 2.5;
class="kw">public TeleporterInteraction() {
}
@Nonnull
@Override
class="kw">public WaitForDataFrom getWaitForDataFrom() {
class="kw">return WaitForDataFrom.Server;
}
@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
) {
boolean var8 = this.interact(var1, var2, var4, var6);
if (!var8) {
var4.getState().state = InteractionState.Failed;
}
}
class="kw">private boolean interact(@Nonnull World var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull InteractionContext var3, @Nonnull Vector3i var4) {
ChunkStore var5 = var1.getChunkStore();
Ref var6 = var5.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
if (var6 != null && var6.isValid()) {
Ref var7 = BlockModule.getBlockEntity(var5.getStore(), var6, var4.x, var4.y, var4.z);
if (var7 == null) {
class="kw">return false;
}
Teleporter var8 = var5.getStore().getComponent(var7, Teleporter.getComponentType());
if (var8 == null) {
class="kw">return false;
}
Ref var9 = var3.getEntity();
Player var10 = var2.getComponent(var9, Player.getComponentType());
if (var10 != null && var10.isWaitingForClientReady()) {
class="kw">return false;
}
Archetype var11 = var2.getArchetype(var9);
if (var11.contains(Teleport.getComponentType()) || var11.contains(PendingTeleport.getComponentType())) {
class="kw">return false;
}
if (var11.contains(UsedTeleporter.getComponentType())) {
class="kw">return false;
}
BlockSection var12 = var5.getStore().getComponent(var6, BlockSection.getComponentType());
if (var12 == null) {
class="kw">return false;
}
BlockType var13 = BlockType.getAssetMap().getAsset(var12.get(var4.x, var4.y, var4.z));
if (var13 == null) {
class="kw">return false;
}
if (!var8.isValid()) {
String var14 = var13.getStateForBlock(var13);
if (!"class="kw">default".equals(var14)) {
BlockType var15 = var13.getBlockForState("class="kw">default");
if (var15 != null) {
BlockOperations.setBlockInteractionState(var5, var6, var4.x, var4.y, var4.z, var15, "class="kw">default", true);
}
}
}
TransformComponent var19 = var2.getComponent(var9, TransformComponent.getComponentType());
if (var19 == null) {
class="kw">return false;
}
Teleport var20 = var8.toTeleport(var19.getPosition(), var19.getRotation(), var4);
if (var20 == null) {
class="kw">return false;
}
var2.addComponent(var9, Teleport.getComponentType(), var20);
var2.addComponent(
var9, UsedTeleporter.getComponentType(), new UsedTeleporter(var8.getWorldUuid(), var20.getPosition(), this.clearoutXZ, this.clearoutY)
);
if (this.particle != null) {
Vector3d var16 = var19.getPosition();
SpatialResource var17 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
List var18 = SpatialResource.getThreadLocalReferenceList();
var17.getSpatialStructure().collect(var16, 75.0, var18);
ParticleUtil.spawnParticleEffect(this.particle, var16, var18, var2);
}
class="kw">return true;
} else {
class="kw">return false;
}
}
@Override
class="kw">protected void simulateInteractWithBlock(
@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
) {
if (var2.getServerState() != null) {
var2.getState().state = var2.getServerState().state;
}
}
}