Cache the unmodifiable viewers set to mitigate object allocation

This commit is contained in:
themode 2020-12-14 06:27:39 +01:00
parent 0645c4c764
commit f2c586177f
7 changed files with 19 additions and 12 deletions

View File

@ -27,6 +27,7 @@ public class BossBar implements Viewable {
private final UUID uuid = UUID.randomUUID();
private final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
private ColoredText title;
private float progress;
@ -89,7 +90,7 @@ public class BossBar implements Viewable {
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
return unmodifiableViewers;
}
/**

View File

@ -93,6 +93,7 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P
private boolean autoViewable;
private final int id;
protected final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
private Data data;
private final Set<Permission> permissions = new CopyOnWriteArraySet<>();
@ -325,7 +326,7 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
return unmodifiableViewers;
}
@Override

View File

@ -76,6 +76,7 @@ public abstract class Chunk implements Viewable, DataContainer {
protected volatile boolean loaded = true;
protected final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
// Path finding
protected PFColumnarSpace columnarSpace;
@ -489,7 +490,7 @@ public abstract class Chunk implements Viewable, DataContainer {
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
return unmodifiableViewers;
}
@Nullable

View File

@ -58,6 +58,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
private final ItemStack[] itemStacks;
// the players currently viewing this inventory
private final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
// (player -> cursor item) map, used by the click listeners
private final ConcurrentHashMap<Player, ItemStack> cursorPlayersItem = new ConcurrentHashMap<>();
@ -251,7 +252,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
return unmodifiableViewers;
}
/**

View File

@ -10,7 +10,7 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Represents a scoreboard which rendered a tag below the name
* Represents a scoreboard which rendered a tag below the name.
*/
public class BelowNameTag implements Scoreboard {
@ -20,12 +20,13 @@ public class BelowNameTag implements Scoreboard {
public static final String BELOW_NAME_TAG_PREFIX = "bnt-";
private final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
private final String objectiveName;
private final ScoreboardObjectivePacket scoreboardObjectivePacket;
/**
* Creates a new below name scoreboard
* Creates a new below name scoreboard.
*
* @param name The objective name of the scoreboard
* @param value The value of the scoreboard
@ -72,6 +73,6 @@ public class BelowNameTag implements Scoreboard {
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
return unmodifiableViewers;
}
}

View File

@ -14,6 +14,7 @@ import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.Iterator;
import java.util.Queue;
import java.util.Set;
@ -46,6 +47,7 @@ public class Sidebar implements Scoreboard {
private static final int MAX_LINES_COUNT = 15;
private final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
private final Queue<ScoreboardLine> lines = Queues.newConcurrentLinkedQueue();
private final IntLinkedOpenHashSet availableColors = new IntLinkedOpenHashSet();
@ -218,7 +220,7 @@ public class Sidebar implements Scoreboard {
@NotNull
@Override
public Set<Player> getViewers() {
return viewers;
return unmodifiableViewers;
}
@Override

View File

@ -10,7 +10,7 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Represents the {@link Player} tab list as a {@link Scoreboard}
* Represents the {@link Player} tab list as a {@link Scoreboard}.
*/
public class TabList implements Scoreboard {
@ -19,13 +19,13 @@ public class TabList implements Scoreboard {
*/
private static final String TAB_LIST_PREFIX = "tl-";
private final Set<Player> viewers;
private final Set<Player> viewers = new CopyOnWriteArraySet<>();
private final Set<Player> unmodifiableViewers = Collections.unmodifiableSet(viewers);
private final String objectiveName;
private ScoreboardObjectivePacket.Type type;
public TabList(String name, ScoreboardObjectivePacket.Type type) {
this.viewers = new CopyOnWriteArraySet<>();
this.objectiveName = TAB_LIST_PREFIX + name;
this.type = type;
@ -77,7 +77,7 @@ public class TabList implements Scoreboard {
@NotNull
@Override
public Set<Player> getViewers() {
return Collections.unmodifiableSet(this.viewers);
return unmodifiableViewers;
}
@Override