@@ -45,7 +45,7 @@ private void init() {
4545 this .objective .setDisplayName (this .adapter .getTitle (player ));
4646 }
4747
48- // Pre-computed key pool for performance
48+ // Pre-computed key pool for performance with proper recycling
4949 private static final String [] AVAILABLE_KEYS ;
5050 static {
5151 ChatColor [] colors = ChatColor .values ();
@@ -55,23 +55,23 @@ private void init() {
5555 }
5656 }
5757
58- private int keyIndex = 0 ;
59-
6058 public String getNewKey (BoardEntry entry ) {
61- // Use pre-computed keys for much better performance
62- if (keyIndex >= AVAILABLE_KEYS .length ) {
63- throw new IndexOutOfBoundsException ("No more keys available!" );
64- }
65-
66- String colorText = AVAILABLE_KEYS [keyIndex ++];
67-
68- if (entry .getText ().length () > 16 ) {
69- String sub = entry .getText ().substring (0 , 16 );
70- colorText = colorText + ChatColor .getLastColors (sub );
59+ // Find first unused key from pre-computed pool
60+ for (String baseKey : AVAILABLE_KEYS ) {
61+ String colorText = baseKey ;
62+
63+ if (entry .getText ().length () > 16 ) {
64+ String sub = entry .getText ().substring (0 , 16 );
65+ colorText = colorText + ChatColor .getLastColors (sub );
66+ }
67+
68+ if (!keys .contains (colorText )) {
69+ keys .add (colorText );
70+ return colorText ;
71+ }
7172 }
7273
73- keys .add (colorText );
74- return colorText ;
74+ throw new IndexOutOfBoundsException ("No more keys available!" );
7575 }
7676
7777 public List <String > getBoardEntriesFormatted () {
@@ -166,7 +166,6 @@ public void clearAllEntries() {
166166 entry .remove ();
167167 }
168168 entries .clear ();
169- keys .clear ();
170- keyIndex = 0 ; // Reset key index for reuse
169+ keys .clear (); // Keys will be recycled automatically
171170 }
172171}
0 commit comments