UpdateSleepPacketSystem class
Пакет: com.hypixel.hytale.builtin.beds.sleep.systems.player
Файл: com/hypixel/hytale/builtin/beds/sleep/systems/player/UpdateSleepPacketSystem.java
extends: DelayedEntitySystem<EntityStore>
Поля (24)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
MAX_SAMPLE_COUNT |
|
yield |
PACKET_NO_SLEEP_UI |
|
boolean |
var10 |
|
UUID[] |
var11 |
|
boolean |
var16 |
|
Ref |
var17 |
|
boolean |
var18 |
|
World |
var2 |
|
long |
var20 |
|
List |
var3 |
|
World |
var4 |
|
int |
var4 |
|
WorldSomnolence |
var5 |
|
int |
var5 |
|
UpdateSleepState |
var6 |
|
|
var6 |
|
WorldSleep |
var6 |
|
List |
var6 |
|
SleepTracker |
var7 |
|
PlayerSomnolence |
var7 |
|
PlayerRef |
var8 |
|
PlayerSleep |
var8 |
|
SleepClock |
var9 |
|
Ref |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
SleepMultiplayerreturn new SleepMultiplayer(var4, var5, var11) |
|
|
for for(PlayerRef var8 : var3) |
|
|
if if(var6 != null) |
|
|
if if(var10) |
abstract |
|
super super(0.25F) |
|
return |
switchreturn switch(var8) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.beds.sleep.systems.player;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.components.PlayerSleep;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.components.PlayerSomnolence;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.components.SleepTracker;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSleep;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSlumber;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSomnolence;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.systems.world.CanSleepInWorld;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.systems.world.StartSlumberSystem;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.DelayedEntitySystem;
class="kw">import com.hypixel.hytale.protocol.packets.world.SleepClock;
class="kw">import com.hypixel.hytale.protocol.packets.world.SleepMultiplayer;
class="kw">import com.hypixel.hytale.protocol.packets.world.UpdateSleepState;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class UpdateSleepPacketSystem class="kw">extends DelayedEntitySystem<EntityStore> {
class="kw">private class="kw">static class="kw">final int MAX_SAMPLE_COUNT = 5;
class="kw">private class="kw">static class="kw">final float SYSTEM_INTERVAL_S = 0.25F;
@Nonnull
class="kw">private class="kw">static class="kw">final Duration SPAN_BEFORE_BLACK_SCREEN = Duration.ofMillis(1200L);
@Nonnull
class="kw">private class="kw">static class="kw">final UUID[] EMPTY_UUIDS = new UUID[0];
@Nonnull
class="kw">private class="kw">static class="kw">final UpdateSleepState PACKET_NO_SLEEP_UI = new UpdateSleepState(false, false, null, null);
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PlayerSomnolence> playerSomnolenceComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, SleepTracker> sleepTrackerComponentType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, WorldSomnolence> worldSomnolenceResourceType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public UpdateSleepPacketSystem(
@Nonnull ComponentType<EntityStore, PlayerRef> var1,
@Nonnull ComponentType<EntityStore, PlayerSomnolence> var2,
@Nonnull ComponentType<EntityStore, SleepTracker> var3,
@Nonnull ResourceType<EntityStore, WorldSomnolence> var4,
@Nonnull ResourceType<EntityStore, WorldTimeResource> var5
) {
super(0.25F);
this.playerRefComponentType = var1;
this.playerSomnolenceComponentType = var2;
this.sleepTrackerComponentType = var3;
this.worldSomnolenceResourceType = var4;
this.worldTimeResourceType = var5;
this.query = Query.and(var1, var2, var3);
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) {
UpdateSleepState var6 = this.createSleepPacket(var4, var2, var3);
SleepTracker var7 = var3.getComponent(var2, this.sleepTrackerComponentType);
assert var7 != null;
var6 = var7.generatePacketToSend(var6);
if (var6 != null) {
PlayerRef var8 = var3.getComponent(var2, this.playerRefComponentType);
assert var8 != null;
var8.getPacketHandler().write(var6);
}
}
@Nonnull
class="kw">private UpdateSleepState createSleepPacket(@Nonnull Store<EntityStore> var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3) {
World var4 = var1.getExternalData().getWorld();
WorldSomnolence var5 = var1.getResource(this.worldSomnolenceResourceType);
WorldSleep var6 = var5.getState();
PlayerSomnolence var7 = var3.getComponent(var2, this.playerSomnolenceComponentType);
assert var7 != null;
PlayerSleep var8 = var7.getSleepState();
SleepClock var9 = var6 class="kw">instanceof WorldSlumber var10 ? var10.createSleepClock() : null;
class="kw">return class="kw">switch (var8) {
case PlayerSleep.FullyAwake var12 -> PACKET_NO_SLEEP_UI;
case PlayerSleep.NoddingOff var13 -> {
if (CanSleepInWorld.check(var4).isNegative()) {
yield PACKET_NO_SLEEP_UI;
} else {
long var20 = Duration.between(var13.realTimeStart(), Instant.now()).toMillis();
boolean var16 = var20 > SPAN_BEFORE_BLACK_SCREEN.toMillis();
Ref var17 = var3.getReferenceTo(var2);
boolean var18 = StartSlumberSystem.isReadyToSleep(var1, var17);
yield new UpdateSleepState(var16, false, var9, var18 ? this.createSleepMultiplayer(var1) : null);
}
}
case PlayerSleep.Slumber var14 -> new UpdateSleepState(true, true, var9, null);
class="kw">default -> throw new MatchException(null, null);
};
}
@Nullable
class="kw">private SleepMultiplayer createSleepMultiplayer(@Nonnull Store<EntityStore> var1) {
World var2 = var1.getExternalData().getWorld();
List var3 = new ObjectArrayList(var2.getPlayerRefs());
var3.removeIf(var0 -> var0.getReference() == null);
if (var3.size() <= 1) {
class="kw">return null;
}
var3.sort(Comparator.comparingLong(var1x -> var1x.getUuid().hashCode() + var2.hashCode()));
int var4 = 0;
int var5 = 0;
List var6 = new ObjectArrayList(var3.size());
for (PlayerRef var8 : var3) {
Ref var9 = var8.getReference();
if (var9 != null && var9.isValid()) {
boolean var10 = StartSlumberSystem.isReadyToSleep(var1, var9);
if (var10) {
var4++;
} else {
var5++;
var6.add(var8.getUuid());
}
}
}
UUID[] var11 = var6.size() > 5 ? EMPTY_UUIDS : var6.toArray(UUID[]::new);
class="kw">return new SleepMultiplayer(var4, var5, var11);
}
}