DoorInteraction class

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

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

extends: SimpleBlockInteraction

Поля (97)

МодификаторыТипИмя
private final Vector3i blockPosition
private final BlockType blockType
private final DoorBlockUtils.DoorState doorState
private final int filler
DoorBlockUtils.DoorState var10
int var10
Ref var10
Vector3i var10
String var10
int var10
String var10
BlockBoundingBoxes var11
BlockSection var11
Rotation var11
DoorBlockUtils.DoorState var11
ChunkStore var11
String var11
String var12
ChunkSection var12
Vector3i var12
Rotation var12
Ref var12
BlockType var13
BlockType var13
DoorInteraction.DoorInfo var13
int var13
Store var13
BlockBoundingBoxes var14
Ref var14
BlockType var14
BlockSection var14
BlockType var15
BlockChunk var15
int var15
BlockType var15
BlockBoundingBoxes var16
BlockComponentSection var16
int var16
BlockType var17
int var17
RotationTuple var17
String var18
var18
var18
String var18
String var19
var19
var19
DoorBlockUtils.DoorState var19
BlockGathering var20
Ref var20
PhysicsDropType var21
TransformComponent var21
SoftBlockDropType var22
Vector3d var22
Holder[] var23
DoorBlockUtils.DoorState var23
var23
var23
var23
var23
List var24
DoorBlockUtils.DoorState var24
Vector3d var25
DoorBlockUtils.DoorState var25
BlockType var26
boolean var27
Vector3d var28
int var29
BlockBoundingBoxes var30
BlockBoundingBoxes.RotatedVariantBoxes var31
Box var32
Vector3d var33
Rotation var34
Store var4
Item var5
Store var5
BlockType var6
Ref var6
Ref var7
int var7
int var7
BlockSection var7
DoorInteraction.DoorInfo var8
Store var8
int var8
BlockBoundingBoxes var8
BlockType var8
int var8
DoorInteraction.DoorInfo var8
boolean var9
BlockSection var9
int var9
BlockBoundingBoxes.RotatedVariantBoxes var9
RotationTuple var9
int var9
DoorBlockUtils.DoorState var9

Методы (36)

МодификаторыВозвратСигнатура
public DoorInfopublic DoorInfo(@Nonnull BlockType var1, int var2, @Nonnull Vector3i var3, @Nonnull DoorBlockUtils.DoorState var4)
abstract activateDoor activateDoor(var0, var1, var2, var8.blockType, var8.blockPosition, var8.doorState, var10)
static void breakSoftBlocksInHitboxvoid breakSoftBlocksInHitbox(@Nonnull CommandBuffer<EntityStore> var0, @Nonnull ChunkStore var1, @Nonnull Vector3i var2, @Nonnull BlockBoundingBoxes.RotatedVariantBoxes var3)
static boolean checkForDoubleDoorboolean checkForDoubleDoor(@Nonnull World var0, @Nonnull CommandBuffer<EntityStore> var1, @Nonnull ChunkStore var2, @Nonnull Vector3i var3, @Nonnull BlockType var4, int var5, @Nonnull DoorBlockUtils.DoorState var6, @Nonnull DoorBlockUtils.DoorState var7)
public Vector3i getBlockPositionpublic Vector3i getBlockPosition()
public BlockType getBlockTypepublic BlockType getBlockType()
public DoorBlockUtils.DoorState getDoorStatepublic DoorBlockUtils.DoorState getDoorState()
public boolean getIsHorizontalboolean getIsHorizontal()
if if(var8 == null)
if if(var9 == null)
if if(var13 != null)
if if(var14 != null)
if if(var17 == null)
if if(var11 != null)
if if(var15 != null)
if if(var16 != null && var16 != var11)
if if(var4x != 0 || var5 != 0 || var6 != 0)
if if(var11 != null)
if if(var12 != null)
if if(var15 != null)
if if(var16 != null)
if if(var20 != null)
if if(var21 != null)
if if(var5 == null)
if if(var6 == null)
if if(var8 == null)
if if(var13 != null && var13.doorState == var4)
if if(var13.filler != 0)
if if(var7 == null)
if if(var14 != null)
if if(var15 != null)
if if(var19 != DoorBlockUtils.DoorState.CLOSED)
if if(var24 == null)
if if(var26 != null)
if if(var27)
if if(var7 != DoorBlockUtils.DoorState.CLOSED)

Исходный код

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

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.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockGathering;
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.PhysicsDropType;
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.asset.type.blocktype.config.SoftBlockDropType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.BlockHarvestUtils;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.DoorBlockUtils;
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.SoundUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
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 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 DoorInteraction class="kw">extends SimpleBlockInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<DoorInteraction> CODEC = BuilderCodec.builder(DoorInteraction.class, DoorInteraction::new, SimpleBlockInteraction.CODEC)
      .documentation("Opens/Closes a door")
      .<Boolean>appendInherited(
         new KeyedCodec<>("Horizontal", Codec.BOOLEAN),
         (var0, var1) -> var0.horizontal = var1,
         var0 -> var0.horizontal,
         (var0, var1) -> var0.horizontal = var1.horizontal
      )
      .documentation("Whether the door is horizontal (e.g. gates) or vertical (e.g. regular doors).")
      .add()
      .build();
   class="kw">private class="kw">static class="kw">final String DOOR_BLOCKED = "DoorBlocked";
   class="kw">private boolean horizontal;

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

   class="kw">private class="kw">static boolean checkForDoubleDoor(
      @Nonnull World var0,
      @Nonnull CommandBuffer<EntityStore> var1,
      @Nonnull ChunkStore var2,
      @Nonnull Vector3i var3,
      @Nonnull BlockType var4,
      int var5,
      @Nonnull DoorBlockUtils.DoorState var6,
      @Nonnull DoorBlockUtils.DoorState var7
   ) {
      DoorInteraction.DoorInfo var8 = getDoubleDoor(var2, var3, var4, var5, var7);
      if (var8 == null) {
         class="kw">return false;
      }

      boolean var9 = DoorBlockUtils.isHorizontalDoor(var8.blockType);
      DoorBlockUtils.DoorState var10 = var9 ? var6 : DoorBlockUtils.getOppositeDoorState(var6);
      activateDoor(var0, var1, var2, var8.blockType, var8.blockPosition, var8.doorState, var10);
      class="kw">return true;
   }

   @Nullable
   class="kw">private class="kw">static BlockType activateDoor(
      @Nonnull World var0,
      @Nonnull CommandBuffer<EntityStore> var1,
      @Nonnull ChunkStore var2,
      @Nonnull BlockType var3,
      @Nonnull Vector3i var4,
      @Nonnull DoorBlockUtils.DoorState var5,
      @Nonnull DoorBlockUtils.DoorState var6
   ) {
      Ref var7 = var2.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
      if (var7 != null && var7.isValid()) {
         Store var8 = var2.getStore();
         BlockSection var9 = var8.getComponent(var7, BlockSection.getComponentType());
         if (var9 == null) {
            class="kw">return null;
         }

         int var10 = var9.getRotationIndex(var4.x, var4.y, var4.z);
         BlockBoundingBoxes var11 = BlockBoundingBoxes.getAssetMap().getAsset(var3.getHitboxTypeIndex());
         String var12 = DoorBlockUtils.getInteractionState(var5, var6);
         BlockType var13 = var3.getBlockForState(var12);
         if (var13 != null) {
            BlockBoundingBoxes var14 = BlockBoundingBoxes.getAssetMap().getAsset(var13.getHitboxTypeIndex());
            if (var14 != null) {
               breakSoftBlocksInHitbox(var1, var2, var4, var14.get(var10));
            }
         }

         BlockOperations.setBlockInteractionState(var2, var7, var4.x, var4.y, var4.z, var3, var12, false);
         BlockType var17 = BlockType.getAssetMap().getAsset(var9.get(var4.x, var4.y, var4.z));
         if (var17 == null) {
            class="kw">return null;
         }

         BlockType var15 = var17.getBlockForState(var12);
         if (var11 != null) {
            FillerBlockUtil.forEachFillerBlock(
               var11.get(var10), (var2x, var3x, var4x) -> var0.performBlockUpdate(var4.x + var2x, var4.y + var3x, var4.z + var4x)
            );
         }

         if (var15 != null) {
            BlockBoundingBoxes var16 = BlockBoundingBoxes.getAssetMap().getAsset(var15.getHitboxTypeIndex());
            if (var16 != null && var16 != var11) {
               FillerBlockUtil.forEachFillerBlock(
                  var16.get(var10), (var2x, var3x, var4x) -> var0.performBlockUpdate(var4.x + var2x, var4.y + var3x, var4.z + var4x)
               );
            }
         }

         class="kw">return var15;
      } else {
         class="kw">return null;
      }
   }

   class="kw">private class="kw">static void breakSoftBlocksInHitbox(
      @Nonnull CommandBuffer<EntityStore> var0, @Nonnull ChunkStore var1, @Nonnull Vector3i var2, @Nonnull BlockBoundingBoxes.RotatedVariantBoxes var3
   ) {
      Store var4 = var1.getStore();
      FillerBlockUtil.forEachFillerBlock(var3, (var4x, var5, var6) -> {
         if (var4x != 0 || var5 != 0 || var6 != 0) {
            int var7 = var2.x + var4x;
            int var8 = var2.y + var5;
            int var9 = var2.z + var6;
            Ref var10 = var1.getChunkSectionReferenceAtBlock(var7, var8, var9);
            if (var10 != null && var10.isValid()) {
               BlockSection var11 = var4.getComponent(var10, BlockSection.getComponentType());
               if (var11 != null) {
                  ChunkSection var12 = var4.getComponent(var10, ChunkSection.getComponentType());
                  if (var12 != null) {
                     BlockType var13 = BlockType.getAssetMap().getAsset(var11.get(var7, var8, var9));
                     if (var13 != null && var13 != BlockType.EMPTY && var13.getMaterial() == BlockMaterial.Empty) {
                        Ref var14 = var12.getChunkColumnReference();
                        if (var14 != null && var14.isValid()) {
                           BlockChunk var15 = var4.getComponent(var14, BlockChunk.getComponentType());
                           if (var15 != null) {
                              BlockComponentSection var16 = var4.getComponent(var10, BlockComponentSection.getComponentType());
                              if (var16 != null) {
                                 int var17 = 1312;
                                 BlockOperations.setBlock(var1, var10, var12, var11, var16, var15, var7, var8, var9, 0, BlockType.EMPTY, 0, 0, 1312);
                                 String var18 = null;
                                 String var19 = null;
                                 BlockGathering var20 = var13.getGathering();
                                 if (var20 != null) {
                                    PhysicsDropType var21 = var20.getPhysics();
                                    SoftBlockDropType var22 = var20.getSoft();
                                    if (var21 != null) {
                                       var18 = var21.getItemId();
                                       var19 = var21.getDropListId();
                                    } else if (var22 != null) {
                                       var18 = var22.getItemId();
                                       var19 = var22.getDropListId();
                                    }
                                 }

                                 List var24 = BlockHarvestUtils.getDrops(var13, 1, var18, var19);
                                 if (!var24.isEmpty()) {
                                    Vector3d var25 = new Vector3d(var7 + 0.5, var8, var9 + 0.5);
                                    Holder[] var23 = ItemComponent.generateItemDrops(var0, var24, var25, Rotation3f.IDENTITY);
                                    var0.addEntities(var23, AddReason.SPAWN);
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      });
   }

   @Nullable
   class="kw">private class="kw">static DoorInteraction.DoorInfo getDoubleDoor(
      @Nonnull ChunkStore var0, @Nonnull Vector3i var1, @Nonnull BlockType var2, int var3, @Nonnull DoorBlockUtils.DoorState var4
   ) {
      Item var5 = var2.getItem();
      if (var5 == null) {
         class="kw">return null;
      }

      BlockType var6 = BlockType.getAssetMap().getAsset(var5.getId());
      if (var6 == null) {
         class="kw">return null;
      }

      int var7 = var6.getHitboxTypeIndex();
      BlockBoundingBoxes var8 = BlockBoundingBoxes.getAssetMap().getAsset(var7);
      if (var8 == null) {
         class="kw">return null;
      }

      BlockBoundingBoxes.RotatedVariantBoxes var9 = var8.get(Rotation.None, Rotation.None, Rotation.None);
      Vector3i var10 = new Vector3i((int)var9.getBoundingBox().getMax().x * 2 - 1, 0, 0);
      Rotation var11 = RotationTuple.get(var3).yaw();
      Vector3i var12 = new Vector3i(var1).add(MathUtil.rotateVectorYAxis(var10, var11.getDegrees(), false));
      DoorInteraction.DoorInfo var13 = getDoorAtPosition(var0, var12.x, var12.y, var12.z, var11.flip());
      if (var13 != null && var13.doorState == var4) {
         BlockType var14 = var13.blockType;
         if (var13.filler != 0) {
            class="kw">return null;
         }

         int var15 = BlockType.getAssetMap().getAsset(var14.getItem().getId()).getHitboxTypeIndex();
         class="kw">return var15 == var7 ? var13 : null;
      } else {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">public class="kw">static DoorInteraction.DoorInfo getDoorAtPosition(@Nonnull ChunkStore var0, int var1, int var2, int var3, @Nonnull Rotation var4) {
      Store var5 = var0.getStore();
      Ref var6 = var0.getChunkSectionReferenceAtBlock(var1, var2, var3);
      if (var6 != null && var6.isValid()) {
         BlockSection var7 = var5.getComponent(var6, BlockSection.getComponentType());
         if (var7 == null) {
            class="kw">return null;
         } else {
            BlockType var8 = BlockType.getAssetMap().getAsset(var7.get(var1, var2, var3));
            if (var8 != null && var8.isDoor()) {
               RotationTuple var9 = var7.getRotation(var1, var2, var3);
               String var10 = var8.getStateForBlock(var8);
               DoorBlockUtils.DoorState var11 = DoorBlockUtils.DoorState.fromBlockState(var10);
               Rotation var12 = var9.yaw();
               int var13 = var7.getFiller(var1, var2, var3);
               class="kw">return var12 != var4 ? null : new DoorInteraction.DoorInfo(var8, var13, new Vector3i(var1, var2, var3), var11);
            } else {
               class="kw">return null;
            }
         }
      } else {
         class="kw">return null;
      }
   }

   @Override
   class="kw">protected void simulateInteractWithBlock(
      @Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
   ) {
   }

   @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
   ) {
      int var8 = var6.x();
      int var9 = var6.y();
      int var10 = var6.z();
      ChunkStore var11 = var1.getChunkStore();
      Ref var12 = var11.getChunkSectionReferenceAtBlock(var8, var9, var10);
      if (var12 != null && var12.isValid()) {
         Store var13 = var11.getStore();
         BlockSection var14 = var13.getComponent(var12, BlockSection.getComponentType());
         if (var14 != null) {
            BlockType var15 = BlockType.getAssetMap().getAsset(var14.get(var6.x, var6.y, var6.z));
            if (var15 != null) {
               int var16 = var14.getRotationIndex(var8, var9, var10);
               RotationTuple var17 = RotationTuple.get(var16);
               String var18 = var15.getStateForBlock(var15);
               DoorBlockUtils.DoorState var19 = DoorBlockUtils.DoorState.fromBlockState(var18);
               Ref var20 = var4.getEntity();
               TransformComponent var21 = var2.getComponent(var20, TransformComponent.getComponentType());
               assert var21 != null;
               Vector3d var22 = var21.getPosition();
               DoorBlockUtils.DoorState var23;
               if (var19 != DoorBlockUtils.DoorState.CLOSED) {
                  var23 = DoorBlockUtils.DoorState.CLOSED;
               } else if (!this.horizontal && DoorBlockUtils.isInFrontOfDoor(var6, var17.yaw(), var22)) {
                  var23 = DoorBlockUtils.DoorState.OPENED_OUT;
               } else {
                  var23 = DoorBlockUtils.DoorState.OPENED_IN;
               }

               DoorBlockUtils.DoorState var24 = this.checkDoor(var11, var12, var6, var15, var16, var19, var23);
               if (var24 == null) {
                  var4.getState().state = InteractionState.Failed;
               } else {
                  var23 = var24;
                  DoorBlockUtils.DoorState var25 = DoorBlockUtils.getOppositeDoorState(var19);
                  BlockType var26 = activateDoor(var1, var2, var11, var15, var6, var19, var23);
                  boolean var27 = checkForDoubleDoor(var1, var2, var11, var6, var15, var16, var23, var25);
                  if (var26 != null) {
                     Vector3d var28 = new Vector3d();
                     int var29 = BlockType.getAssetMap().getAsset(var15.getItem().getId()).getHitboxTypeIndex();
                     BlockBoundingBoxes var30 = BlockBoundingBoxes.getAssetMap().getAsset(var29);
                     BlockBoundingBoxes.RotatedVariantBoxes var31 = var30.get(var16);
                     Box var32 = var31.getBoundingBox();
                     if (var27) {
                        Vector3d var33 = new Vector3d(var32.middleX(), 0.0, 0.0);
                        Rotation var34 = RotationTuple.get(var16).yaw();
                        var28.add(MathUtil.rotateVectorYAxis(var33, var34.getDegrees(), false));
                        var28.add(var32.middleX(), var32.middleY(), var32.middleZ());
                     } else {
                        var28.add(var32.middleX(), var32.middleY(), var32.middleZ());
                     }

                     var28.add(var6.x, var6.y, var6.z);
                     SoundUtil.playSoundEvent3d(var20, var26.getInteractionSoundEventIndex(), var28, var2);
                  }
               }
            }
         }
      }
   }

   class="kw">public boolean getIsHorizontal() {
      class="kw">return this.horizontal;
   }

   @Nullable
   class="kw">private DoorBlockUtils.DoorState checkDoor(
      @Nonnull ChunkStore var1,
      @Nonnull Ref<ChunkStore> var2,
      @Nonnull Vector3i var3,
      @Nonnull BlockType var4,
      int var5,
      @Nonnull DoorBlockUtils.DoorState var6,
      @Nonnull DoorBlockUtils.DoorState var7
   ) {
      DoorInteraction.DoorInfo var8 = getDoubleDoor(var1, var3, var4, var5, var6);
      DoorBlockUtils.DoorState var9 = DoorBlockUtils.getOppositeDoorState(var7);
      String var10 = DoorBlockUtils.getInteractionState(var6, var9);
      String var11 = DoorBlockUtils.getInteractionState(var6, var7);
      if (DoorBlockUtils.canOpenDoor(var1, var3, var11)) {
         if (this.horizontal || var8 == null || DoorBlockUtils.canOpenDoor(var1, var8.blockPosition, var10)) {
            class="kw">return var7;
         }

         if (DoorBlockUtils.canOpenDoor(var1, var3, var10) && DoorBlockUtils.canOpenDoor(var1, var8.blockPosition, var11)) {
            class="kw">return var9;
         }

         BlockOperations.setBlockInteractionState(var1, var2, var3.x, var3.y, var3.z, var4, "DoorBlocked", false);
         class="kw">return null;
      } else if (DoorBlockUtils.canOpenDoor(var1, var3, var10) && !this.horizontal) {
         if (var8 != null && !DoorBlockUtils.canOpenDoor(var1, var8.blockPosition, var11)) {
            BlockOperations.setBlockInteractionState(var1, var2, var3.x, var3.y, var3.z, var4, "DoorBlocked", false);
            class="kw">return null;
         } else {
            class="kw">return var9;
         }
      } else {
         if (var7 != DoorBlockUtils.DoorState.CLOSED) {
            BlockOperations.setBlockInteractionState(var1, var2, var3.x, var3.y, var3.z, var4, "DoorBlocked", false);
         }

         class="kw">return null;
      }
   }

   class="kw">public class="kw">static class DoorInfo {
      class="kw">private class="kw">final BlockType blockType;
      class="kw">private class="kw">final int filler;
      class="kw">private class="kw">final Vector3i blockPosition;
      class="kw">private class="kw">final DoorBlockUtils.DoorState doorState;

      class="kw">public DoorInfo(@Nonnull BlockType var1, int var2, @Nonnull Vector3i var3, @Nonnull DoorBlockUtils.DoorState var4) {
         this.blockType = var1;
         this.filler = var2;
         this.blockPosition = var3;
         this.doorState = var4;
      }

      @Nonnull
      class="kw">public BlockType getBlockType() {
         class="kw">return this.blockType;
      }

      @Nonnull
      class="kw">public Vector3i getBlockPosition() {
         class="kw">return this.blockPosition;
      }

      @Nonnull
      class="kw">public DoorBlockUtils.DoorState getDoorState() {
         class="kw">return this.doorState;
      }
   }
}