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();
}
}