HolographicDisplays/core/src/main/java/me/filoghost/holographicdisplays/core/tracking/LineTrackerManager.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);
}
}
}