79 lines
2.7 KiB
Java
79 lines
2.7 KiB
Java
/*
|
|
* Copyright (C) filoghost and contributors
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
package me.filoghost.holographicdisplays.core.tracking;
|
|
|
|
import me.filoghost.holographicdisplays.core.base.BaseItemHologramLine;
|
|
import me.filoghost.holographicdisplays.core.base.BaseTextHologramLine;
|
|
import me.filoghost.holographicdisplays.core.listener.LineClickListener;
|
|
import me.filoghost.holographicdisplays.core.placeholder.tracking.ActivePlaceholderTracker;
|
|
import me.filoghost.holographicdisplays.core.tick.CachedPlayer;
|
|
import me.filoghost.holographicdisplays.nms.common.NMSManager;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
|
|
public class LineTrackerManager {
|
|
|
|
private final NMSManager nmsManager;
|
|
private final ActivePlaceholderTracker placeholderTracker;
|
|
private final LineClickListener lineClickListener;
|
|
private final Collection<LineTracker<?>> lineTrackers;
|
|
|
|
public LineTrackerManager(
|
|
NMSManager nmsManager,
|
|
ActivePlaceholderTracker placeholderTracker,
|
|
LineClickListener lineClickListener) {
|
|
this.nmsManager = nmsManager;
|
|
this.placeholderTracker = placeholderTracker;
|
|
this.lineClickListener = lineClickListener;
|
|
this.lineTrackers = new LinkedList<>();
|
|
}
|
|
|
|
public TextLineTracker startTracking(BaseTextHologramLine line) {
|
|
TextLineTracker tracker = new TextLineTracker(line, nmsManager, lineClickListener, placeholderTracker);
|
|
lineTrackers.add(tracker);
|
|
return tracker;
|
|
}
|
|
|
|
public ItemLineTracker startTracking(BaseItemHologramLine line) {
|
|
ItemLineTracker tracker = new ItemLineTracker(line, nmsManager, lineClickListener);
|
|
lineTrackers.add(tracker);
|
|
return tracker;
|
|
}
|
|
|
|
public void update(List<CachedPlayer> onlinePlayers, List<CachedPlayer> movedPlayers, int maxViewRange) {
|
|
Iterator<LineTracker<?>> iterator = lineTrackers.iterator();
|
|
while (iterator.hasNext()) {
|
|
LineTracker<?> lineTracker = iterator.next();
|
|
|
|
// Remove deleted trackers
|
|
if (lineTracker.shouldBeRemoved()) {
|
|
iterator.remove();
|
|
lineTracker.onRemoval();
|
|
continue;
|
|
}
|
|
|
|
lineTracker.update(onlinePlayers, movedPlayers, maxViewRange);
|
|
}
|
|
}
|
|
|
|
public void resetViewersAndSendDestroyPackets() {
|
|
for (LineTracker<?> tracker : lineTrackers) {
|
|
tracker.resetViewersAndSendDestroyPackets();
|
|
}
|
|
}
|
|
|
|
public void removeViewer(Player player) {
|
|
for (LineTracker<?> tracker : lineTrackers) {
|
|
tracker.removeViewer(player);
|
|
}
|
|
}
|
|
|
|
}
|