MountInteraction class
Пакет: com.hypixel.hytale.builtin.mounts.interactions
Файл: com/hypixel/hytale/builtin/mounts/interactions/MountInteraction.java
extends: SimpleInstantInteraction
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
Ref |
var4 |
|
Ref |
var5 |
|
CommandBuffer |
var6 |
|
MountedComponent |
var7 |
|
MountedByComponent |
var8 |
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var4 == null) |
|
|
if if(var7 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.mounts.interactions;
class="kw">import com.hypixel.hytale.builtin.mounts.MountedByComponent;
class="kw">import com.hypixel.hytale.builtin.mounts.MountedComponent;
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.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.vector.Vector3fUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.MountController;
class="kw">import com.hypixel.hytale.server.core.entity.EntityUtils;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.util.InteractionValidation;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3f;
class="kw">public class MountInteraction class="kw">extends SimpleInstantInteraction {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static class="kw">final BuilderCodec<MountInteraction> CODEC = BuilderCodec.builder(
MountInteraction.class, MountInteraction::new, SimpleInstantInteraction.CODEC
)
.appendInherited(
new KeyedCodec<>("AttachmentOffset", Vector3fUtil.CODEC),
(var0, var1) -> var0.attachmentOffset.set(var1.x, var1.y, var1.z),
var0 -> new Vector3f(var0.attachmentOffset),
(var0, var1) -> var0.attachmentOffset = new Vector3f(var1.attachmentOffset)
)
.add()
.<MountController>appendInherited(
new KeyedCodec<>("Controller", new EnumCodec<>(MountController.class)),
(var0, var1) -> var0.controller = var1,
var0 -> var0.controller,
(var0, var1) -> var0.controller = var1.controller
)
.addValidator(Validators.nonNull())
.add()
.build();
class="kw">private Vector3f attachmentOffset = new Vector3f();
class="kw">private MountController controller;
class="kw">public MountInteraction() {
}
@Override
class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
Ref var4 = var2.getTargetEntity();
if (var4 == null) {
var2.getState().state = InteractionState.Failed;
} else {
Ref var5 = var2.getEntity();
CommandBuffer var6 = var2.getCommandBuffer();
MountedComponent var7 = var6.getComponent(var5, MountedComponent.getComponentType());
if (var7 != null) {
var6.removeComponent(var5, MountedComponent.getComponentType());
var2.getState().state = InteractionState.Failed;
} else if (!InteractionValidation.canPlayerInteractWithEntity(var5, var6, var2.getHeldItem(), var4)) {
LOGGER.at(Level.WARNING)
.log("%s failed mount interaction distance check for target entity %d", EntityUtils.getEntityName(var5, var6), var4.getIndex());
var2.getState().state = InteractionState.Failed;
} else {
MountedByComponent var8 = var6.getComponent(var4, MountedByComponent.getComponentType());
if (var8 != null && !var8.getPassengers().isEmpty()) {
var2.getState().state = InteractionState.Failed;
} else {
var6.addComponent(var5, MountedComponent.getComponentType(), new MountedComponent(var4, this.attachmentOffset, this.controller));
}
}
}
}
}