ReachLocationMarkerSystems.java
package com.hypixel.hytale.builtin.adventure.objectives.markers.reachlocation;
import com.hypixel.hytale.builtin.adventure.objectives.Objective;
import com.hypixel.hytale.builtin.adventure.objectives.ObjectiveDataStore;
import com.hypixel.hytale.builtin.adventure.objectives.ObjectivePlugin;
import com.hypixel.hytale.builtin.adventure.objectives.task.ObjectiveTaskRef;
import com.hypixel.hytale.builtin.adventure.objectives.task.ReachLocationTask;
import com.hypixel.hytale.component.AddReason;
import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.component.Holder;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.RemoveReason;
import com.hypixel.hytale.component.ResourceType;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.component.dependency.Dependency;
import com.hypixel.hytale.component.dependency.Order;
import com.hypixel.hytale.component.dependency.OrderPriority;
import com.hypixel.hytale.component.dependency.SystemDependency;
import com.hypixel.hytale.component.query.Query;
import com.hypixel.hytale.component.spatial.SpatialResource;
import com.hypixel.hytale.component.system.HolderSystem;
import com.hypixel.hytale.component.system.RefSystem;
import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
import com.hypixel.hytale.logger.HytaleLogger;
com.hypixel.hytale.math.vector.Vector3d;
com.hypixel.hytale.server.core.entity.UUIDComponent;
com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
com.hypixel.hytale.server.core.modules.entity.system.PlayerSpatialSystem;
com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
it.unimi.dsi.fastutil.objects.ObjectList;
java.util.HashSet;
java.util.Set;
java.util.UUID;
java.util.logging.Level;
javax.annotation.Nonnull;
{
HytaleLogger.forEnclosingClass();
ThreadLocal<Set<UUID>> THREAD_LOCAL_TEMP_UUIDS = ThreadLocal.withInitial(HashSet::);
{
}
<EntityStore> {
ComponentType<EntityStore, ReachLocationMarker> reachLocationMarkerComponent;
ComponentType<EntityStore, TransformComponent> transformComponentType;
Query<EntityStore> query;
{
.reachLocationMarkerComponent = reachLocationMarkerComponent;
.transformComponentType = TransformComponent.getComponentType();
.query = Query.<EntityStore>and(reachLocationMarkerComponent, .transformComponentType);
}
Query<EntityStore> {
.query;
}
{
(ReachLocationMarker)commandBuffer.getComponent(ref, .reachLocationMarkerComponent);
reachLocationMarkerComponent != ;
(TransformComponent)commandBuffer.getComponent(ref, .transformComponentType);
transformComponent != ;
transformComponent.getPosition();
ObjectivePlugin.get().getObjectiveDataStore();
(ObjectiveTaskRef<ReachLocationTask> taskRef : objectiveDataStore.getTaskRefsForType(ReachLocationTask.class)) {
objectiveDataStore.getObjective(taskRef.getObjectiveUUID());
(objective != ) {
(taskRef.getObjectiveTask()).setupMarker(objective, reachLocationMarkerComponent, pos, commandBuffer);
}
}
}
{
}
}
<EntityStore> {
Query<EntityStore> query = Query.<EntityStore>and(ReachLocationMarker.getComponentType(), Query.not(NetworkId.getComponentType()));
{
}
{
holder.addComponent(NetworkId.getComponentType(), (((EntityStore)store.getExternalData()).takeNextNetworkId()));
}
{
}
Query<EntityStore> {
.query;
}
}
<EntityStore> {
ComponentType<EntityStore, ReachLocationMarker> reachLocationMarkerComponent;
ComponentType<EntityStore, TransformComponent> transformComponentType;
ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> playerSpatialComponent;
ComponentType<EntityStore, UUIDComponent> uuidComponentType = UUIDComponent.getComponentType();
Query<EntityStore> query;
Set<Dependency<EntityStore>> dependencies;
{
.reachLocationMarkerComponent = reachLocationMarkerComponent;
.transformComponentType = TransformComponent.getComponentType();
.playerSpatialComponent = playerSpatialComponent;
.query = Query.<EntityStore>and(reachLocationMarkerComponent, .transformComponentType);
.dependencies = Set.of( (Order.AFTER, PlayerSpatialSystem.class, OrderPriority.CLOSEST));
}
Set<Dependency<EntityStore>> {
.dependencies;
}
Query<EntityStore> {
.query;
}
{
;
}
{
(ReachLocationMarker)archetypeChunk.getComponent(index, .reachLocationMarkerComponent);
reachLocationMarkerComponent != ;
reachLocationMarkerComponent.getMarkerId();
(ReachLocationMarkerAsset)ReachLocationMarkerAsset.getAssetMap().getAsset(markerId);
(asset == ) {
ReachLocationMarkerSystems.LOGGER.at(Level.WARNING).log(, markerId, reachLocationMarkerComponent);
commandBuffer.removeEntity(archetypeChunk.getReferenceTo(index), RemoveReason.REMOVE);
} {
Set<UUID> previousPlayers = (Set)ReachLocationMarkerSystems.THREAD_LOCAL_TEMP_UUIDS.get();
previousPlayers.clear();
previousPlayers.addAll(reachLocationMarkerComponent.getPlayers());
Set<UUID> players = reachLocationMarkerComponent.getPlayers();
players.clear();
SpatialResource<Ref<EntityStore>, EntityStore> spatialResource = (SpatialResource)store.getResource(.playerSpatialComponent);
ObjectList<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
(TransformComponent)archetypeChunk.getComponent(index, .transformComponentType);
transformComponent != ;
transformComponent.getPosition();
spatialResource.getSpatialStructure().ordered(position, ()asset.getRadius(), results);
ObjectivePlugin.get().getObjectiveDataStore();
( ; i < results.size(); ++i) {
Ref<EntityStore> otherEntityReference = (Ref)results.get(i);
(UUIDComponent)commandBuffer.getComponent(otherEntityReference, .uuidComponentType);
otherUuidComponent != ;
otherUuidComponent.getUuid();
players.add(otherUuid);
(!previousPlayers.contains(otherUuid)) {
(ObjectiveTaskRef<ReachLocationTask> taskRef : objectiveDataStore.getTaskRefsForType(ReachLocationTask.class)) {
objectiveDataStore.getObjective(taskRef.getObjectiveUUID());
(objective != ) {
(taskRef.getObjectiveTask()).onPlayerReachLocationMarker(store, otherEntityReference, markerId, objective);
}
}
}
}
}
}
}
}