PortalWorld.java
package com.hypixel.hytale.builtin.portals.resources;
import com.hypixel.hytale.builtin.portals.PortalsPlugin;
import com.hypixel.hytale.builtin.portals.components.voidevent.config.VoidEventConfig;
import com.hypixel.hytale.builtin.portals.integrations.PortalGameplayConfig;
import com.hypixel.hytale.builtin.portals.integrations.PortalRemovalCondition;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.Resource;
import com.hypixel.hytale.component.ResourceType;
import com.hypixel.hytale.math.vector.Transform;
import com.hypixel.hytale.protocol.packets.interface_.PortalDef;
import com.hypixel.hytale.protocol.packets.interface_.PortalState;
import com.hypixel.hytale.protocol.packets.interface_.UpdatePortal;
import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
import com.hypixel.hytale.server.core.asset.type.portalworld.PortalType;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import java.util.Collections;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Nullable;
public class PortalWorld implements Resource<EntityStore> {
private String portalTypeId;
private int timeLimitSeconds;
PortalRemovalCondition worldRemovalCondition;
PortalGameplayConfig storedGameplayConfig;
Set<UUID> diedInWorld;
Set<UUID> seesUi;
Transform spawnPoint;
Ref<EntityStore> voidEventRef;
{
}
ResourceType<EntityStore, PortalWorld> {
PortalsPlugin.getInstance().getPortalResourceType();
}
{
.portalTypeId = portalType.getId();
.timeLimitSeconds = timeLimitSeconds;
.worldRemovalCondition = removalCondition;
.storedGameplayConfig = gameplayConfig;
.diedInWorld = Collections.newSetFromMap( ());
.seesUi = Collections.newSetFromMap( ());
}
PortalType {
.portalTypeId == ? : (PortalType)PortalType.getAssetMap().getAsset(.portalTypeId);
}
{
.getPortalType() != ;
}
{
.timeLimitSeconds;
}
{
.worldRemovalCondition.getElapsedSeconds(world);
}
{
.worldRemovalCondition.getRemainingSeconds(world);
}
{
.worldRemovalCondition.setRemainingSeconds(world, seconds);
}
Set<UUID> {
.diedInWorld;
}
Set<UUID> {
.seesUi;
}
PortalGameplayConfig {
.getPortalType().getGameplayConfig();
gameplayConfig == ? : (PortalGameplayConfig)gameplayConfig.getPluginConfig().get(PortalGameplayConfig.class);
portalGameplayConfig != ? portalGameplayConfig : .storedGameplayConfig;
}
VoidEventConfig {
.getGameplayConfig().getVoidEvent();
}
Transform {
.spawnPoint;
}
{
.spawnPoint = spawnPoint;
}
Ref<EntityStore> {
(.voidEventRef != && !.voidEventRef.isValid()) {
.voidEventRef = ;
}
.voidEventRef;
}
{
.getVoidEventRef() != ;
}
{
.voidEventRef = voidEventRef;
}
UpdatePortal {
.getPortalType().isVoidInvasionEnabled();
explorationSeconds;
breachSeconds;
(hasBreach) {
breachSeconds = .getGameplayConfig().getVoidEvent().getDurationSeconds();
explorationSeconds = .timeLimitSeconds - breachSeconds;
} {
explorationSeconds = .timeLimitSeconds;
breachSeconds = ;
}
(.getPortalType().getDescription().getDisplayNameKey(), explorationSeconds, breachSeconds);
(.createStateForPacket(world), portalDef);
}
UpdatePortal {
(.createStateForPacket(world), (PortalDef));
}
PortalState {
.worldRemovalCondition.getRemainingSeconds(world);
.getGameplayConfig().getVoidEvent().getDurationSeconds();
(.getPortalType().isVoidInvasionEnabled() && remainingSeconds > ()breachSeconds) {
remainingSeconds -= ()breachSeconds;
}
(()Math.ceil(remainingSeconds), .isVoidEventActive());
}
Resource<EntityStore> {
();
clone.portalTypeId = .portalTypeId;
clone.timeLimitSeconds = .timeLimitSeconds;
clone.worldRemovalCondition = .worldRemovalCondition;
clone;
}
}