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));
            }
         }
      }
   }
}