PatrolPath class

Пакет: com.hypixel.hytale.builtin.path.path

Файл: com/hypixel/hytale/builtin/path/path/PatrolPath.java

implements: IPrefabPath

Поля (18)

МодификаторыТипИмя
final UUID id
int var1
short var2
short var3
Vector3dc var3
var3
PatrolPathMarkerEntity var4
double var4
var4
PatrolPathMarkerEntity var4
PatrolPathMarkerEntity var5
PatrolPathMarkerEntity var5
IPrefabPathWaypoint var5
IPrefabPathWaypoint var5
PatrolPathMarkerEntity var6
PatrolPathMarkerEntity var7
IPrefabPathWaypoint var7
double var8

Методы (19)

МодификаторыВозвратСигнатура
abstract throw new IndexOutOfBoundsExceptionthrow new IndexOutOfBoundsException()
for for(int var2 = 0; var2 < var1; var2++)
for for(int var4 = 0; var4 < var3; var4++)
for for(int var4 = 0; var4 < var1; var4++)
for for(int var3 = 0; var3 < var1; var3++)
abstract for for(int var5 = var1; var5 < this.waypoints.size()
abstract for for(int var6 = 0; var6 < this.length.get()
abstract for for(int var4 = 0; var4 < this.length.get()
abstract for for(int var3 = 0; var3 < this.length.get()
public IPrefabPathWaypoint getIPrefabPathWaypoint get(int var1)
if if(var5 != null)
if if(var5 != null)
if if(var7 == null)
if if(var5 != null)
if if(var4 != null)
if if(var6 == null)
if if(var7 != null)
if if(var8 < var4)
if if(var4 != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.path.path;

class="kw">import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.builtin.path.PathPlugin;
class="kw">import com.hypixel.hytale.builtin.path.entities.PatrolPathMarkerEntity;
class="kw">import com.hypixel.hytale.builtin.path.waypoint.IPrefabPathWaypoint;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
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.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.atomic.AtomicBoolean;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.concurrent.locks.ReentrantReadWriteLock;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class PatrolPath class="kw">implements IPrefabPath {
   class="kw">private class="kw">final UUID id;
   class="kw">private class="kw">final String name;
   class="kw">private class="kw">final int worldgenId;
   class="kw">private class="kw">final Int2ObjectConcurrentHashMap<IPrefabPathWaypoint> waypoints = new Int2ObjectConcurrentHashMap<>();
   class="kw">private class="kw">final AtomicInteger length = new AtomicInteger(0);
   class="kw">private class="kw">final AtomicInteger loadedCount = new AtomicInteger(0);
   class="kw">private class="kw">final AtomicBoolean pathChanged = new AtomicBoolean(false);
   class="kw">private class="kw">final ReentrantReadWriteLock listLock = new ReentrantReadWriteLock();
   class="kw">private List<IPrefabPathWaypoint> waypointList;

   class="kw">public PatrolPath(int var1, UUID var2, String var3) {
      this.id = var2;
      this.worldgenId = var1;
      this.name = var3;
   }

   @Override
   class="kw">public UUID getId() {
      class="kw">return this.id;
   }

   @Override
   class="kw">public String getName() {
      class="kw">return this.name;
   }

   @Nonnull
   @Override
   class="kw">public List<IPrefabPathWaypoint> getPathWaypoints() {
      if (this.pathChanged.get()) {
         this.listLock.writeLock().lock();

         try {
            this.waypointList = new ObjectArrayList();
            int var1 = this.length.get();

            for (int var2 = 0; var2 < var1; var2++) {
               this.waypointList.add(this.waypoints.get(var2));
            }

            this.pathChanged.set(false);
         } class="kw">finally {
            this.listLock.writeLock().unlock();
         }
      }

      this.listLock.readLock().lock();

      try {
         class="kw">return Collections.unmodifiableList(this.waypointList);
      } class="kw">finally {
         this.listLock.readLock().unlock();
      }
   }

   @Override
   class="kw">public short registerNewWaypoint(@Nonnull IPrefabPathWaypoint var1, int var2) {
      short var3 = (short)this.length.getAndIncrement();
      PathPlugin.get().getLogger().at(Level.FINER).log("Adding waypoint %s to path %s.%s", var3, var2, this.name);

      for (int var4 = 0; var4 < var3; var4++) {
         PatrolPathMarkerEntity var5 = (PatrolPathMarkerEntity)this.waypoints.get(var4);
         if (var5 != null) {
            var5.markNeedsSave();
         }
      }

      this.pathChanged.set(true);
      class="kw">return var3;
   }

   @Override
   class="kw">public void registerNewWaypointAt(int var1, @Nonnull IPrefabPathWaypoint var2, int var3) {
      for (int var4 = 0; var4 < var1; var4++) {
         PatrolPathMarkerEntity var5 = (PatrolPathMarkerEntity)this.waypoints.get(var4);
         if (var5 != null) {
            var5.markNeedsSave();
         }
      }

      for (int var6 = this.waypoints.size() - 1; var6 >= var1; var6--) {
         PatrolPathMarkerEntity var7 = (PatrolPathMarkerEntity)this.waypoints.remove(var6);
         if (var7 == null) {
            this.waypoints.remove(var6 + 1);
         } else {
            var7.setOrder((short)(var6 + 1));
            this.waypoints.put(var6 + 1, var7);
         }
      }

      this.length.getAndIncrement();
      this.pathChanged.set(true);
   }

   @Override
   class="kw">public void addLoadedWaypoint(@Nonnull IPrefabPathWaypoint var1, int var2, int var3, int var4) {
      PathPlugin.get().getLogger().at(Level.FINER).log("Loading waypoint %s to path %s.%s", var3, var4, this.name);
      IPrefabPathWaypoint var5 = this.waypoints.put(var3, var1);
      if (var5 != null) {
         var5.onReplaced();
         PathPlugin.get().getLogger().at(Level.WARNING).log("Waypoint %s replaced in path %s.%s", var3, var4, this.name);
      } else {
         this.loadedCount.getAndIncrement();
      }

      this.length.set(var2);
      this.pathChanged.set(true);
   }

   @Override
   class="kw">public void removeWaypoint(int var1, int var2) {
      this.waypoints.remove(var1);
      this.length.getAndDecrement();
      this.loadedCount.getAndDecrement();

      for (int var3 = 0; var3 < var1; var3++) {
         PatrolPathMarkerEntity var4 = (PatrolPathMarkerEntity)this.waypoints.get(var3);
         if (var4 != null) {
            var4.markNeedsSave();
         }
      }

      for (int var5 = var1; var5 < this.waypoints.size(); var5++) {
         PatrolPathMarkerEntity var6 = (PatrolPathMarkerEntity)this.waypoints.remove(var5 + 1);
         if (var6 == null) {
            this.waypoints.remove(var5);
         } else {
            var6.setOrder(var5);
            this.waypoints.put(var5, var6);
         }
      }

      this.pathChanged.set(true);
   }

   @Override
   class="kw">public void unloadWaypoint(int var1) {
      this.waypoints.remove(var1);
      this.loadedCount.getAndDecrement();
   }

   @Override
   class="kw">public boolean hasLoadedWaypoints() {
      class="kw">return this.loadedCount.get() > 0;
   }

   @Override
   class="kw">public boolean isFullyLoaded() {
      class="kw">return this.loadedCount.get() == this.length.get();
   }

   @Override
   class="kw">public int loadedWaypointCount() {
      class="kw">return this.loadedCount.get();
   }

   @Override
   class="kw">public int getWorldGenId() {
      class="kw">return this.worldgenId;
   }

   @Override
   class="kw">public Vector3dc getNearestWaypointPosition(@Nonnull Vector3d var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      Vector3dc var3 = Vector3dUtil.MAX;
      double var4 = Double.MAX_VALUE;

      for (int var6 = 0; var6 < this.length.get(); var6++) {
         IPrefabPathWaypoint var7 = this.waypoints.get(var6);
         if (var7 != null) {
            double var8 = var1.distanceSquared(var7.getWaypointPosition(var2));
            if (var8 < var4) {
               var3 = var7.getWaypointPosition(var2);
               var4 = var8;
            }
         }
      }

      class="kw">return var3;
   }

   @Override
   class="kw">public void mergeInto(@Nonnull IPrefabPath var1, int var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      for (int var4 = 0; var4 < this.length.get(); var4++) {
         IPrefabPathWaypoint var5 = this.waypoints.get(var4);
         var5.initialise(var1.getId(), var1.getName(), -1, var5.getPauseTime(), var5.getObservationAngle(), var2, var3);
         var1.addLoadedWaypoint(var5, var1.length(), var5.getOrder(), var2);
      }

      this.waypoints.clear();
      this.loadedCount.set(0);
      this.length.set(0);
      this.pathChanged.set(true);
   }

   @Override
   class="kw">public void compact(int var1) {
      short var2 = 0;

      for (int var3 = 0; var3 < this.length.get(); var3++) {
         PatrolPathMarkerEntity var4 = (PatrolPathMarkerEntity)this.waypoints.remove(var3);
         if (var4 != null) {
            var4.setOrder(var2);
            this.waypoints.put(var2++, var4);
         }
      }

      PathPlugin.get().getLogger().at(Level.WARNING).log("Compacted path %s.%s from length %s to %s", var1, this.name, this.length.get(), var2);
      this.loadedCount.set(var2);
      this.length.set(var2);
      this.pathChanged.set(true);
   }

   @Override
   class="kw">public int length() {
      class="kw">return this.length.get();
   }

   class="kw">public IPrefabPathWaypoint get(int var1) {
      if (var1 >= 0 && var1 < this.length.get()) {
         class="kw">return this.waypoints.get(var1);
      } else {
         throw new IndexOutOfBoundsException();
      }
   }
}