ControlDoorsEffect class

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/ControlDoorsEffect.java

extends: TriggerEffect

Поля (47)

МодификаторыТипИмя
OPEN, CLOSE
return
return
return
return
return
LongOpenHashSet var10
String var10
DoorBlockUtils.DoorState var11
DoorBlockUtils.DoorState var12
var12
var12
TriggerVolumeShape var13
int var13
Vector3d var14
Rotation var14
int var15
BlockSection var15
int var16
BlockType var16
int var17
String var17
int var18
DoorBlockUtils.DoorState var18
int var19
Ref var19
Store var2
int var20
Ref var24
BlockSection var25
BlockType var26
Vector3i var27
Ref var28
BlockSection var29
World var3
BlockType var30
Vector3d var4
Ref var4
Vector3d var5
BlockSection var5
String var5
ChunkStore var6
int var6
Store var7
Vector3d var8
Vector3d var9
Vector3i var9

Методы (17)

МодификаторыВозвратСигнатура
DoorAction DoorAction()
abstract return new Vector3ireturn new Vector3i(var1, var2, var3)
private void applyDoorStatevoid applyDoorState(@Nonnull World var1, @Nonnull ChunkStore var2, @Nonnull BlockSection var3, @Nonnull BlockType var4, int var5, int var6, int var7, @Nonnull Vector3d var8)
for for(int var21 = var15; var21 <= var18; var21++)
for for(int var22 = var16; var22 <= var19; var22++)
for for(int var23 = var17; var23 <= var20; var23++)
if if(var25 != null)
if if(var29 != null)
if if(var5 == null)
if if(this.action == ControlDoorsEffect.DoorAction.OPEN)
if if(var11 != DoorBlockUtils.DoorState.CLOSED)
if if(var15 == null)
if if(var16 == null)
if if(var11 == DoorBlockUtils.DoorState.CLOSED)
static void tryOpenvoid tryOpen(@Nonnull World var0, @Nonnull ChunkStore var1, @Nonnull Vector3i var2, @Nonnull BlockType var3, @Nonnull DoorBlockUtils.DoorState var4)
abstract tryOpen tryOpen(var1, var2, var9, var4, var12)
abstract tryOpen tryOpen(var1, var2, var9, var16, var18)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.shape.TriggerVolumeShape;
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.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.DoorBlockUtils;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class ControlDoorsEffect class="kw">extends TriggerEffect {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<ControlDoorsEffect> CODEC = BuilderCodec.builder(ControlDoorsEffect.class, ControlDoorsEffect::new, BASE_CODEC)
      .append(new KeyedCodec<>("Action", new EnumCodec<>(ControlDoorsEffect.DoorAction.class)), (var0, var1) -> var0.action = var1, var0 -> var0.action)
      .add()
      .build();
   @Nonnull
   class="kw">private ControlDoorsEffect.DoorAction action = ControlDoorsEffect.DoorAction.CLOSE;

   class="kw">public ControlDoorsEffect() {
   }

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();
      World var3 = var2.getExternalData().getWorld();
      Vector3d var4 = var1.getActorPosition();
      Vector3d var5 = var4 != null ? var4 : new Vector3d(var1.getVolume().getPosition());
      ChunkStore var6 = var3.getChunkStore();
      Store var7 = var6.getStore();
      Vector3d var8 = new Vector3d();
      Vector3d var9 = new Vector3d();
      LongOpenHashSet var10 = new LongOpenHashSet();

      for (VolumeEntry var12 : var1.getSpatialVolumes()) {
         TriggerVolumeShape var13 = var12.getShape();
         Vector3d var14 = var12.getPosition();
         var13.getWorldAABB(var14, var8, var9);
         int var15 = MathUtil.floor(var8.x());
         int var16 = MathUtil.floor(var8.y());
         int var17 = MathUtil.floor(var8.z());
         int var18 = MathUtil.floor(var9.x());
         int var19 = MathUtil.floor(var9.y());
         int var20 = MathUtil.floor(var9.z());

         for (int var21 = var15; var21 <= var18; var21++) {
            for (int var22 = var16; var22 <= var19; var22++) {
               for (int var23 = var17; var23 <= var20; var23++) {
                  Ref var24 = var6.getChunkSectionReferenceAtBlock(var21, var22, var23);
                  if (var24 != null && var24.isValid()) {
                     BlockSection var25 = var7.getComponent(var24, BlockSection.getComponentType());
                     if (var25 != null) {
                        BlockType var26 = BlockType.getAssetMap().getAsset(var25.get(var21, var22, var23));
                        if (var26 != null && var26.isDoor()) {
                           Vector3i var27 = doorAnchorForCell(var6, var21, var22, var23);
                           if (var10.add(BlockUtil.pack(var27.x, var27.y, var27.z))) {
                              Ref var28 = var6.getChunkSectionReferenceAtBlock(var27.x, var27.y, var27.z);
                              if (var28 != null && var28.isValid()) {
                                 BlockSection var29 = var7.getComponent(var28, BlockSection.getComponentType());
                                 if (var29 != null) {
                                    BlockType var30 = BlockType.getAssetMap().getAsset(var29.get(var27.x, var27.y, var27.z));
                                    if (var30 != null && var30.isDoor()) {
                                       this.applyDoorState(var3, var6, var29, var30, var27.x, var27.y, var27.z, var5);
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static Vector3i doorAnchorForCell(@Nonnull ChunkStore var0, int var1, int var2, int var3) {
      Ref var4 = var0.getChunkSectionReferenceAtBlock(var1, var2, var3);
      if (var4 != null && var4.isValid()) {
         BlockSection var5 = var0.getStore().getComponent(var4, BlockSection.getComponentType());
         if (var5 == null) {
            class="kw">return new Vector3i(var1, var2, var3);
         }

         int var6 = var5.getFiller(var1, var2, var3);
         class="kw">return var6 == 0
            ? new Vector3i(var1, var2, var3)
            : new Vector3i(var1 - FillerBlockUtil.unpackX(var6), var2 - FillerBlockUtil.unpackY(var6), var3 - FillerBlockUtil.unpackZ(var6));
      } else {
         class="kw">return new Vector3i(var1, var2, var3);
      }
   }

   class="kw">private void applyDoorState(
      @Nonnull World var1, @Nonnull ChunkStore var2, @Nonnull BlockSection var3, @Nonnull BlockType var4, int var5, int var6, int var7, @Nonnull Vector3d var8
   ) {
      Vector3i var9 = new Vector3i(var5, var6, var7);
      String var10 = var4.getStateForBlock(var4);
      DoorBlockUtils.DoorState var11 = DoorBlockUtils.DoorState.fromBlockState(var10);
      if (this.action == ControlDoorsEffect.DoorAction.OPEN) {
         if (var11 != DoorBlockUtils.DoorState.CLOSED) {
            class="kw">return;
         }

         DoorBlockUtils.DoorState var12;
         if (DoorBlockUtils.isHorizontalDoor(var4)) {
            var12 = DoorBlockUtils.DoorState.OPENED_IN;
         } else {
            int var13 = var3.getRotationIndex(var5, var6, var7);
            Rotation var14 = RotationTuple.get(var13).yaw();
            var12 = DoorBlockUtils.isInFrontOfDoor(var9, var14, var8) ? DoorBlockUtils.DoorState.OPENED_OUT : DoorBlockUtils.DoorState.OPENED_IN;
         }

         DoorBlockUtils.DoorState var18 = DoorBlockUtils.getOppositeDoorState(var12);
         tryOpen(var1, var2, var9, var4, var12);
         Ref var19 = var2.getChunkSectionReferenceAtBlock(var5, var6, var7);
         if (var19 == null || !var19.isValid()) {
            class="kw">return;
         }

         BlockSection var15 = var2.getStore().getComponent(var19, BlockSection.getComponentType());
         if (var15 == null) {
            class="kw">return;
         }

         BlockType var16 = BlockType.getAssetMap().getAsset(var15.get(var5, var6, var7));
         if (var16 == null) {
            class="kw">return;
         }

         if (DoorBlockUtils.DoorState.fromBlockState(var16.getStateForBlock(var16)) == DoorBlockUtils.DoorState.CLOSED) {
            tryOpen(var1, var2, var9, var16, var18);
         }
      } else {
         if (var11 == DoorBlockUtils.DoorState.CLOSED) {
            class="kw">return;
         }

         String var17 = DoorBlockUtils.getInteractionState(var11, DoorBlockUtils.DoorState.CLOSED);
         var1.setBlockInteractionState(var9, var4, var17);
      }
   }

   class="kw">private class="kw">static void tryOpen(
      @Nonnull World var0, @Nonnull ChunkStore var1, @Nonnull Vector3i var2, @Nonnull BlockType var3, @Nonnull DoorBlockUtils.DoorState var4
   ) {
      String var5 = DoorBlockUtils.getInteractionState(DoorBlockUtils.DoorState.CLOSED, var4);
      if (DoorBlockUtils.canOpenDoor(var1, var2, var5)) {
         var0.setBlockInteractionState(var2, var3, var5);
      }
   }

   class="kw">private enum DoorAction {
      OPEN,
      CLOSE;

      DoorAction() {
      }
   }
}