Tiny optimization

This commit is contained in:
filoghost 2022-02-12 21:39:35 +01:00
parent fda3f4b933
commit 38a99b95e1
3 changed files with 14 additions and 9 deletions

View File

@ -13,7 +13,7 @@ import me.filoghost.holographicdisplays.plugin.tick.CachedPlayer;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.MustBeInvokedByOverriders;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
public class ItemLineTracker extends ClickableLineTracker<Viewer> {
@ -40,7 +40,7 @@ public class ItemLineTracker extends ClickableLineTracker<Viewer> {
@MustBeInvokedByOverriders
@Override
protected void update(Collection<CachedPlayer> onlinePlayers) {
protected void update(List<CachedPlayer> onlinePlayers) {
super.update(onlinePlayers);
if (spawnItemEntity && hasViewers() && line.hasPickupCallback()) {

View File

@ -12,6 +12,7 @@ import org.jetbrains.annotations.MustBeInvokedByOverriders;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class LineTracker<T extends Viewer> {
@ -45,7 +46,7 @@ public abstract class LineTracker<T extends Viewer> {
}
@MustBeInvokedByOverriders
protected void update(Collection<CachedPlayer> onlinePlayers) {
protected void update(List<CachedPlayer> onlinePlayers) {
boolean sendChangesPackets = false;
// First, detect the changes if the flag is on and set it off
@ -77,7 +78,7 @@ public abstract class LineTracker<T extends Viewer> {
protected abstract boolean updatePlaceholders();
private void modifyViewersAndSendPackets(Collection<CachedPlayer> onlinePlayers) {
private void modifyViewersAndSendPackets(List<CachedPlayer> onlinePlayers) {
if (!getLine().isInLoadedChunk()) {
resetViewersAndSendDestroyPackets();
return;
@ -87,11 +88,14 @@ public abstract class LineTracker<T extends Viewer> {
MutableViewers<T> addedPlayers = null;
MutableViewers<T> removedPlayers = null;
for (CachedPlayer cachedPlayer : onlinePlayers) {
Player bukkitPlayer = cachedPlayer.getBukkitPlayer();
if (shouldTrackPlayer(cachedPlayer)) {
// Micro-optimization, don't use for-each loop to avoid creating a new Iterator (method called frequently)
int size = onlinePlayers.size();
for (int i = 0; i < size; i++) {
CachedPlayer player = onlinePlayers.get(i);
Player bukkitPlayer = player.getBukkitPlayer();
if (shouldTrackPlayer(player)) {
if (!viewers.containsKey(bukkitPlayer)) {
T viewer = createViewer(cachedPlayer);
T viewer = createViewer(player);
viewers.put(bukkitPlayer, viewer);
if (addedPlayers == null) {
addedPlayers = new MutableViewers<>();

View File

@ -16,6 +16,7 @@ import org.bukkit.entity.Player;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class LineTrackerManager {
@ -43,7 +44,7 @@ public class LineTrackerManager {
return tracker;
}
public void update(Collection<CachedPlayer> onlinePlayers) {
public void update(List<CachedPlayer> onlinePlayers) {
Iterator<LineTracker<?>> iterator = lineTrackers.iterator();
while (iterator.hasNext()) {
LineTracker<?> lineTracker = iterator.next();