PortalInstanceRelinker class

Пакет: com.hypixel.hytale.builtin.portals

Файл: com/hypixel/hytale/builtin/portals/PortalInstanceRelinker.java

Поля (14)

МодификаторыТипИмя
Map var1
int var10
Ref var11
PortalDevice var12
var12
String var2
PortalInstanceLinks.DevicePos var4
PortalInstanceLinks.Link var5
ChunkStore var5
World var6
Store var6
BlockSection var7
BlockComponentSection var8
BlockType var9

Методы (6)

МодификаторыВозвратСигнатура
if if(var1 != null)
if if(var7 != null && var8 != null)
if if(var12 == null)
static boolean isInDeviceStateboolean isInDeviceState(@Nonnull BlockType var0, @Nonnull PortalDeviceConfig var1)
static void relinkvoid relink(@Nonnull World var0, @Nullable Ref<ChunkStore> var1, @Nonnull PortalInstanceLinks.DevicePos var2, @Nonnull PortalInstanceLinks.Link var3, @Nonnull World var4)
static void relinkAllvoid relinkAll(@Nonnull World var0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.portals.components.PortalDevice;
class="kw">import com.hypixel.hytale.builtin.portals.components.PortalDeviceConfig;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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.storage.ChunkStore;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">final class PortalInstanceRelinker {
   class="kw">private PortalInstanceRelinker() {
   }

   class="kw">public class="kw">static void relinkAll(@Nonnull World var0) {
      Map var1 = PortalInstanceLinks.linksFor(var0);
      if (var1 != null) {
         for (Entry var3 : var1.entrySet()) {
            PortalInstanceLinks.DevicePos var4 = var3.getKey();
            PortalInstanceLinks.Link var5 = var3.getValue();
            World var6 = Universe.get().getWorld(var5.destinationWorldUuid());
            if (var6 != null && var6.isAlive()) {
               var0.getChunkStore()
                  .getChunkSectionReferenceAtBlockAsync(var4.x(), var4.y(), var4.z(), 4)
                  .thenAcceptAsync(var4x -> relink(var0, (Ref<ChunkStore>)var4x, var4, var5, var6), var0)
                  .exceptionally(
                     var2 -> {
                        ((HytaleLogger.Api)HytaleLogger.getLogger().at(Level.WARNING).withCause(var2))
                           .log("Could not re-link the portal device at %d, %d, %d in %s", var4.x(), var4.y(), var4.z(), var0.getName());
                        class="kw">return null;
                     }
                  );
            } else {
               PortalInstanceLinks.forget(var0, var4);
            }
         }
      }
   }

   class="kw">private class="kw">static void relink(
      @Nonnull World var0,
      @Nullable Ref<ChunkStore> var1,
      @Nonnull PortalInstanceLinks.DevicePos var2,
      @Nonnull PortalInstanceLinks.Link var3,
      @Nonnull World var4
   ) {
      if (var1 != null && var1.isValid()) {
         ChunkStore var5 = var0.getChunkStore();
         Store var6 = var5.getStore();
         BlockSection var7 = var6.getComponent(var1, BlockSection.getComponentType());
         BlockComponentSection var8 = var6.getComponent(var1, BlockComponentSection.getComponentType());
         if (var7 != null && var8 != null) {
            BlockType var9 = BlockType.getAssetMap().getAsset(var7.get(var2.x(), var2.y(), var2.z()));
            if (var9 != null && isInDeviceState(var9, var3.config())) {
               int var10 = ChunkUtil.indexBlock(var2.x(), var2.y(), var2.z());
               Ref var11 = var8.getBlockReference(var10);
               if (var11 != null && var11.isValid()) {
                  PortalDevice var12 = var6.getComponent(var11, PortalDevice.getComponentType());
                  if (var12 == null || var12.getDestinationWorld() == null) {
                     if (var12 == null) {
                        var12 = new PortalDevice(var3.config(), var9.getId());
                        var6.putComponent(var11, PortalDevice.getComponentType(), var12);
                     }

                     var12.setDestinationWorld(var4);
                     var8.markBlockNeedsSaving(var10);
                     BlockOperations.setBlockInteractionState(var5, var1, var2.x(), var2.y(), var2.z(), var9, var3.config().getOnState(), false);
                     HytaleLogger.getLogger()
                        .at(Level.INFO)
                        .log("Re-linked the portal device at %d, %d, %d in %s to %s", var2.x(), var2.y(), var2.z(), var0.getName(), var4.getName());
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static boolean isInDeviceState(@Nonnull BlockType var0, @Nonnull PortalDeviceConfig var1) {
      if (var0.getState() == null) {
         class="kw">return false;
      }

      String var2 = var0.getStateForBlock(var0);
      class="kw">return var2 == null
         ? false
         : Objects.equals(var2, var1.getOnState()) || Objects.equals(var2, var1.getOffState()) || Objects.equals(var2, var1.getSpawningState());
   }
}