package com.hypixel.hytale.server.spawning.suppression.component; import com.hypixel.fastutil.longs.Long2ObjectConcurrentHashMap; import com.hypixel.hytale.codec.KeyedCodec; import com.hypixel.hytale.codec.builder.BuilderCodec; import com.hypixel.hytale.codec.codecs.map.ObjectMapCodec; import com.hypixel.hytale.component.Resource; import com.hypixel.hytale.component.ResourceType; import com.hypixel.hytale.math.util.ChunkUtil; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.spawning.SpawningPlugin; import com.hypixel.hytale.server.spawning.suppression.SpawnSuppressorEntry; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.Nonnull; public class SpawnSuppressionController implements Resource { public static final BuilderCodec CODEC = BuilderCodec.builder(SpawnSuppressionController.class, SpawnSuppressionController::new) .append( new KeyedCodec<>( "SpawnSuppressorMap", new ObjectMapCodec<>(SpawnSuppressorEntry.CODEC, ConcurrentHashMap::new, UUID::toString, UUID::fromString, false) ), (spawnSuppressionController, o) -> spawnSuppressionController.spawnSuppressorMap = o, spawnSuppressionController -> spawnSuppressionController.spawnSuppressorMap ) .add() .build(); private final Long2ObjectConcurrentHashMap chunkSuppressionMap = new Long2ObjectConcurrentHashMap<>( true, ChunkUtil.indexChunk(Integer.MIN_VALUE, Integer.MIN_VALUE) ); private Map spawnSuppressorMap = new ConcurrentHashMap<>(); public static ResourceType getResourceType() { return SpawningPlugin.get().getSpawnSuppressionControllerResourceType(); } public Map getSpawnSuppressorMap() { return this.spawnSuppressorMap; } @Nonnull public Long2ObjectConcurrentHashMap getChunkSuppressionMap() { return this.chunkSuppressionMap; } @Nonnull @Override public Resource clone() { SpawnSuppressionController controller = new SpawnSuppressionController(); controller.chunkSuppressionMap.putAll(this.chunkSuppressionMap); controller.spawnSuppressorMap.putAll(this.spawnSuppressorMap); return controller; } }