DoorState enum

Пакет: com.hypixel.hytale.server.core.modules.interaction

Файл: com/hypixel/hytale/server/core/modules/interaction/DoorBlockUtils.java

Поля (1)

МодификаторыТипИмя
CLOSED, OPENED_IN, OPENED_OUT

Методы (3)

МодификаторыВозвратСигнатура
public static DoorBlockUtils.DoorState fromBlockStatepublic static DoorBlockUtils.DoorState fromBlockState(@Nullable String var0)
if if(var0 == null)
return switchreturn switch(var0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction;

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
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.server.DoorInteraction;
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.util.FillerBlockUtil;
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="kw">final class DoorBlockUtils {
   class="kw">public class="kw">static class="kw">final String OPEN_DOOR_IN = "OpenDoorIn";
   class="kw">public class="kw">static class="kw">final String OPEN_DOOR_OUT = "OpenDoorOut";
   class="kw">public class="kw">static class="kw">final String CLOSE_DOOR_IN = "CloseDoorIn";
   class="kw">public class="kw">static class="kw">final String CLOSE_DOOR_OUT = "CloseDoorOut";

   class="kw">private DoorBlockUtils() {
   }

   class="kw">public class="kw">static boolean isHorizontalDoor(@Nonnull BlockType var0) {
      String var1 = var0.getInteractions().get(InteractionType.Use);
      if (var1 == null) {
         class="kw">return false;
      }

      RootInteraction var2 = RootInteraction.getAssetMap().getAsset(var1);
      if (var2 == null) {
         class="kw">return false;
      }

      for (String var6 : var2.getInteractionIds()) {
         Interaction var7 = Interaction.getAssetMap().getAsset(var6);
         if (var7 class="kw">instanceof DoorInteraction var8) {
            class="kw">return var8.getIsHorizontal();
         }
      }

      class="kw">return false;
   }

   @Nonnull
   class="kw">public class="kw">static String getInteractionState(@Nonnull DoorBlockUtils.DoorState var0, @Nonnull DoorBlockUtils.DoorState var1) {
      if (var1 == DoorBlockUtils.DoorState.CLOSED && var0 == DoorBlockUtils.DoorState.OPENED_IN) {
         class="kw">return "CloseDoorOut";
      } else if (var1 == DoorBlockUtils.DoorState.CLOSED && var0 == DoorBlockUtils.DoorState.OPENED_OUT) {
         class="kw">return "CloseDoorIn";
      } else {
         class="kw">return var1 == DoorBlockUtils.DoorState.OPENED_IN ? "OpenDoorOut" : "OpenDoorIn";
      }
   }

   @Nonnull
   class="kw">public class="kw">static DoorBlockUtils.DoorState getOppositeDoorState(@Nonnull DoorBlockUtils.DoorState var0) {
      class="kw">return class="kw">switch (var0) {
         case CLOSED -> DoorBlockUtils.DoorState.CLOSED;
         case OPENED_IN -> DoorBlockUtils.DoorState.OPENED_OUT;
         case OPENED_OUT -> DoorBlockUtils.DoorState.OPENED_IN;
      };
   }

   class="kw">public class="kw">static boolean isInFrontOfDoor(@Nonnull Vector3i var0, @Nullable Rotation var1, @Nonnull Vector3d var2) {
      double var3 = Math.toRadians(var1 != null ? var1.getDegrees() : 0.0);
      Vector3d var5 = new Vector3d(TrigMathUtil.sin(var3), 0.0, TrigMathUtil.cos(var3));
      Vector3d var6 = Vector3dUtil.directionTo(new Vector3d(var0).add(0.5, 0.5, 0.5), var2);
      class="kw">return var6.dot(var5) < 0.0;
   }

   class="kw">public class="kw">static boolean canOpenDoor(@Nonnull ChunkStore var0, @Nonnull Vector3i var1, @Nonnull String var2) {
      Store var3 = var0.getStore();
      Ref var4 = var0.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
      if (var4 != null && var4.isValid()) {
         BlockSection var5 = var3.getComponent(var4, BlockSection.getComponentType());
         if (var5 == null) {
            class="kw">return false;
         }

         int var6 = var5.get(var1.x, var1.y, var1.z);
         BlockType var7 = BlockType.getAssetMap().getAsset(var6);
         if (var7 == null) {
            class="kw">return false;
         }

         BlockType var8 = var7.getBlockForState(var2);
         if (var8 == null) {
            class="kw">return false;
         }

         int var9 = var5.getRotationIndex(var1.x, var1.y, var1.z);
         class="kw">return BlockOperations.testPlaceBlock(var0.getStore(), var5, var1.x, var1.y, var1.z, var8, var9, (var1x, var2x, var3x, var4x, var5x, var6x) -> {
            if (var6x != 0) {
               var1x -= FillerBlockUtil.unpackX(var6x);
               var2x -= FillerBlockUtil.unpackY(var6x);
               var3x -= FillerBlockUtil.unpackZ(var6x);
            }

            class="kw">return var1x == var1.x && var2x == var1.y && var3x == var1.z;
         });
      } else {
         class="kw">return false;
      }
   }

   class="kw">public enum DoorState {
      CLOSED,
      OPENED_IN,
      OPENED_OUT;

      DoorState() {
      }

      @Nonnull
      class="kw">public class="kw">static DoorBlockUtils.DoorState fromBlockState(@Nullable String var0) {
         if (var0 == null) {
            class="kw">return CLOSED;
         }

         class="kw">return class="kw">switch (var0) {
            case "OpenDoorOut" -> OPENED_IN;
            case "OpenDoorIn" -> OPENED_OUT;
            class="kw">default -> CLOSED;
         };
      }
   }
}