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();
}
}
}