hytale-server/com/hypixel/hytale/builtin/instances/config/InstanceWorldConfig.java

88 lines
3.4 KiB
Java

package com.hypixel.hytale.builtin.instances.config;
import com.hypixel.hytale.builtin.instances.removal.RemovalCondition;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.server.core.universe.world.WorldConfig;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class InstanceWorldConfig {
public static final String ID = "Instance";
@Nonnull
public static final BuilderCodec<InstanceWorldConfig> CODEC = BuilderCodec.builder(InstanceWorldConfig.class, InstanceWorldConfig::new)
.append(
new KeyedCodec<>("RemovalConditions", new ArrayCodec<>(RemovalCondition.CODEC, RemovalCondition[]::new)),
(o, i) -> o.removalConditions = i,
o -> o.removalConditions
)
.documentation(
"The set of conditions that have to be met to remove the world.\n\nIf no conditions are provided (e.g. a empty list) then the world will not be removed automatically"
)
.addValidator(Validators.nonNull())
.add()
.<WorldReturnPoint>append(new KeyedCodec<>("ReturnPoint", WorldReturnPoint.CODEC), (o, i) -> o.returnPoint = i, o -> o.returnPoint)
.documentation("The location to send players to when leaving this world.")
.add()
.<Boolean>append(new KeyedCodec<>("PreventReconnection", Codec.BOOLEAN), (o, i) -> o.preventReconnection = i, o -> o.preventReconnection)
.documentation(
"Whether to prevent reconnecting into this world.\n\nPlayers that reconnect back into the world will forced out of the world to the return point (or their own)."
)
.add()
.<InstanceDiscoveryConfig>append(new KeyedCodec<>("Discovery", InstanceDiscoveryConfig.CODEC), (o, i) -> o.discovery = i, o -> o.discovery)
.documentation("Optional discovery configuration for displaying an event title when a player enters this instance for the first time.")
.add()
.build();
@Nonnull
private RemovalCondition[] removalConditions = RemovalCondition.EMPTY;
@Nullable
private WorldReturnPoint returnPoint;
private boolean preventReconnection = false;
@Nullable
private InstanceDiscoveryConfig discovery;
@Nullable
public static InstanceWorldConfig get(@Nonnull WorldConfig config) {
return config.getPluginConfig().get(InstanceWorldConfig.class);
}
@Nonnull
public static InstanceWorldConfig ensureAndGet(@Nonnull WorldConfig config) {
return config.getPluginConfig().computeIfAbsent(InstanceWorldConfig.class, v -> new InstanceWorldConfig());
}
public boolean shouldPreventReconnection() {
return this.preventReconnection;
}
@Nonnull
public RemovalCondition[] getRemovalConditions() {
return this.removalConditions;
}
public void setRemovalConditions(@Nonnull RemovalCondition... removalConditions) {
this.removalConditions = removalConditions;
}
@Nullable
public WorldReturnPoint getReturnPoint() {
return this.returnPoint;
}
public void setReturnPoint(@Nullable WorldReturnPoint returnPoint) {
this.returnPoint = returnPoint;
}
@Nullable
public InstanceDiscoveryConfig getDiscovery() {
return this.discovery;
}
public void setDiscovery(@Nullable InstanceDiscoveryConfig discovery) {
this.discovery = discovery;
}
}