PortalRemovalCondition class

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

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

implements: RemovalCondition

Поля (16)

МодификаторыТипИмя
var1
double var2
Store var2
InstanceDataResource var2
Store var3
Store var3
World var3
double var4
InstanceDataResource var4
Store var4
PortalWorld var4
TimeResource var5
InstanceDataResource var5
Instant var6
TimeResource var6
double var7

Методы (7)

МодификаторыВозвратСигнатура
public double getElapsedSecondsdouble getElapsedSeconds(@Nonnull World var1)
public double getRemainingSecondsdouble getRemainingSeconds(@Nonnull World var1)
private double getTimeLimitSecondsdouble getTimeLimitSeconds()
if if(var6 == null)
static void setRemainingSecondsvoid setRemainingSeconds(@Nonnull World var0, double var1)
private void setTimeLimitSecondsvoid setTimeLimitSeconds(double var1)
abstract this this(60.0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.instances.removal.InstanceDataResource;
class="kw">import com.hypixel.hytale.builtin.instances.removal.RemovalCondition;
class="kw">import com.hypixel.hytale.builtin.instances.removal.TimeoutCondition;
class="kw">import com.hypixel.hytale.builtin.instances.removal.WorldEmptyCondition;
class="kw">import com.hypixel.hytale.builtin.portals.resources.PortalWorld;
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.Store;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import javax.annotation.Nonnull;

class="kw">public class PortalRemovalCondition class="kw">implements RemovalCondition {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PortalRemovalCondition> CODEC = BuilderCodec.<PortalRemovalCondition>builder(
         PortalRemovalCondition.class, PortalRemovalCondition::new
      )
      .documentation("A condition for temporary portal worlds.")
      .<Double>append(new KeyedCodec<>("TimeoutSeconds", Codec.DOUBLE), PortalRemovalCondition::setTimeLimitSeconds, var0 -> var0.getTimeLimitSeconds())
      .documentation("How long the portal world will stay open (in seconds) after being joined.")
      .add()
      .build();
   @Nonnull
   class="kw">private class="kw">final WorldEmptyCondition worldEmptyCondition = new WorldEmptyCondition(90.0);
   class="kw">private TimeoutCondition timeLimitCondition;

   class="kw">public PortalRemovalCondition() {
      this(60.0);
   }

   class="kw">public PortalRemovalCondition(double var1) {
      this.timeLimitCondition = new TimeoutCondition(var1);
   }

   class="kw">private double getTimeLimitSeconds() {
      class="kw">return this.timeLimitCondition.getTimeoutSeconds();
   }

   class="kw">private void setTimeLimitSeconds(double var1) {
      this.timeLimitCondition = new TimeoutCondition(var1);
   }

   class="kw">public double getElapsedSeconds(@Nonnull World var1) {
      double var2 = this.timeLimitCondition.getTimeoutSeconds();
      double var4 = this.getRemainingSeconds(var1);
      class="kw">return Math.max(0.0, var2 - var4);
   }

   class="kw">public double getRemainingSeconds(@Nonnull World var1) {
      Store var2 = var1.getChunkStore().getStore();
      Store var3 = var1.getEntityStore().getStore();
      InstanceDataResource var4 = var2.getResource(InstanceDataResource.getResourceType());
      TimeResource var5 = var3.getResource(TimeResource.getResourceType());
      Instant var6 = var4.getTimeoutTimer();
      if (var6 == null) {
         class="kw">return this.timeLimitCondition.getTimeoutSeconds();
      }

      double var7 = Duration.between(var5.getNow(), var6).toNanos() / 1.0E9;
      class="kw">return Math.max(0.0, var7);
   }

   class="kw">public class="kw">static void setRemainingSeconds(@Nonnull World var0, double var1) {
      var1 = Math.max(0.0, var1);
      Store var3 = var0.getChunkStore().getStore();
      Store var4 = var0.getEntityStore().getStore();
      InstanceDataResource var5 = var3.getResource(InstanceDataResource.getResourceType());
      TimeResource var6 = var4.getResource(TimeResource.getResourceType());
      var5.setTimeoutTimer(var6.getNow().plusMillis((long)(var1 * 1000.0)));
   }

   @Override
   class="kw">public boolean shouldRemoveWorld(@Nonnull Store<ChunkStore> var1) {
      InstanceDataResource var2 = var1.getResource(InstanceDataResource.getResourceType());
      World var3 = var1.getExternalData().getWorld();
      PortalWorld var4 = var3.getEntityStore().getStore().getResource(PortalWorld.getResourceType());
      class="kw">return var2.hadPlayer() && var4.isTimeLimitActive() && this.timeLimitCondition.shouldRemoveWorld(var1)
         ? true
         : this.worldEmptyCondition.shouldRemoveWorld(var1) && var4.getPortalType().isCloseWhenEmpty();
   }
}