2021-07-24 12:51:14 +02:00
|
|
|
/*
|
|
|
|
* Copyright (C) filoghost and contributors
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
*/
|
2022-05-22 00:10:31 +02:00
|
|
|
package me.filoghost.holographicdisplays.core.tracking;
|
2021-07-24 12:51:14 +02:00
|
|
|
|
2021-08-25 15:45:33 +02:00
|
|
|
import me.filoghost.holographicdisplays.nms.common.NMSManager;
|
2022-05-22 00:10:31 +02:00
|
|
|
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.core.tick.TickClock;
|
2021-07-24 12:51:14 +02:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.LinkedList;
|
2022-02-12 21:39:35 +01:00
|
|
|
import java.util.List;
|
2021-07-24 12:51:14 +02:00
|
|
|
|
|
|
|
public class LineTrackerManager {
|
|
|
|
|
2022-02-20 17:11:54 +01:00
|
|
|
private final TickClock tickClock;
|
2021-07-24 12:51:14 +02:00
|
|
|
private final NMSManager nmsManager;
|
2021-09-22 21:05:34 +02:00
|
|
|
private final ActivePlaceholderTracker placeholderTracker;
|
2021-07-31 09:06:36 +02:00
|
|
|
private final LineClickListener lineClickListener;
|
2021-07-24 12:51:14 +02:00
|
|
|
private final Collection<LineTracker<?>> lineTrackers;
|
|
|
|
|
2022-02-20 17:11:54 +01:00
|
|
|
public LineTrackerManager(
|
|
|
|
NMSManager nmsManager,
|
|
|
|
ActivePlaceholderTracker placeholderTracker,
|
|
|
|
LineClickListener lineClickListener,
|
|
|
|
TickClock tickClock) {
|
2021-07-24 12:51:14 +02:00
|
|
|
this.nmsManager = nmsManager;
|
|
|
|
this.placeholderTracker = placeholderTracker;
|
2021-07-31 09:06:36 +02:00
|
|
|
this.lineClickListener = lineClickListener;
|
2021-07-24 12:51:14 +02:00
|
|
|
this.lineTrackers = new LinkedList<>();
|
2022-02-20 17:11:54 +01:00
|
|
|
this.tickClock = tickClock;
|
2021-07-24 12:51:14 +02:00
|
|
|
}
|
|
|
|
|
2021-08-24 14:56:20 +02:00
|
|
|
public TextLineTracker startTracking(BaseTextHologramLine line) {
|
2022-06-04 10:28:44 +02:00
|
|
|
TextLineTracker tracker = new TextLineTracker(line, nmsManager, lineClickListener, placeholderTracker);
|
2021-07-24 12:51:14 +02:00
|
|
|
lineTrackers.add(tracker);
|
|
|
|
return tracker;
|
|
|
|
}
|
|
|
|
|
2021-08-24 14:56:20 +02:00
|
|
|
public ItemLineTracker startTracking(BaseItemHologramLine line) {
|
2022-06-04 10:28:44 +02:00
|
|
|
ItemLineTracker tracker = new ItemLineTracker(line, nmsManager, lineClickListener);
|
2021-07-24 12:51:14 +02:00
|
|
|
lineTrackers.add(tracker);
|
|
|
|
return tracker;
|
|
|
|
}
|
|
|
|
|
2022-06-04 10:28:44 +02:00
|
|
|
public void update(List<CachedPlayer> onlinePlayers, List<CachedPlayer> movedPlayers) {
|
2021-07-24 12:51:14 +02:00
|
|
|
Iterator<LineTracker<?>> iterator = lineTrackers.iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
|
|
LineTracker<?> lineTracker = iterator.next();
|
|
|
|
|
2021-07-31 09:56:00 +02:00
|
|
|
// Remove deleted trackers
|
2021-07-28 15:11:07 +02:00
|
|
|
if (lineTracker.shouldBeRemoved()) {
|
2021-07-24 12:51:14 +02:00
|
|
|
iterator.remove();
|
2021-07-28 15:11:07 +02:00
|
|
|
lineTracker.onRemoval();
|
2021-07-24 12:51:14 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2022-06-04 10:28:44 +02:00
|
|
|
lineTracker.update(onlinePlayers, movedPlayers);
|
2021-07-24 12:51:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-15 09:18:20 +02:00
|
|
|
public void resetViewersAndSendDestroyPackets() {
|
2021-07-24 12:51:14 +02:00
|
|
|
for (LineTracker<?> tracker : lineTrackers) {
|
2021-09-15 09:18:20 +02:00
|
|
|
tracker.resetViewersAndSendDestroyPackets();
|
2021-07-24 12:51:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-04 21:32:34 +01:00
|
|
|
public void removeViewer(Player player) {
|
2021-07-24 12:51:14 +02:00
|
|
|
for (LineTracker<?> tracker : lineTrackers) {
|
2021-09-15 09:18:20 +02:00
|
|
|
tracker.removeViewer(player);
|
2021-07-24 12:51:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|