13
13
import java .util .ArrayList ;
14
14
import java .util .Iterator ;
15
15
import java .util .List ;
16
- import java .util .function . Consumer ;
16
+ import java .util .NoSuchElementException ;
17
17
18
18
@ SuppressWarnings ({ "deprecation" , "ForLoopReplaceableByForEach" })
19
19
public class Lore implements Iterable <TextHolder > {
20
20
private final ItemMeta meta ;
21
- private final List < TextHolder > lore ;
21
+ private TextHolder [] lore ;
22
22
23
23
private static final Lore EMPTY = new Lore ((ItemMeta ) null );
24
- private static final List < TextHolder > EMPTY_LORE = new ArrayList <>( 0 ) ;
24
+ private static final TextHolder [] EMPTY_LORE = new TextHolder [ 0 ] ;
25
25
26
26
public Lore (ItemMeta meta ) {
27
27
this .meta = meta ;
@@ -33,7 +33,7 @@ public Lore(@NotNull Lore lore) {
33
33
this .lore = lore .lore ;
34
34
}
35
35
36
- private static @ NotNull List < TextHolder > lore (ItemMeta meta ) {
36
+ private static @ NotNull TextHolder [] lore (ItemMeta meta ) {
37
37
if (meta == null || !meta .hasLore ()) return EMPTY_LORE ;
38
38
List <Component > components = meta .lore ();
39
39
Validate .notNull (components );
@@ -43,10 +43,10 @@ public Lore(@NotNull Lore lore) {
43
43
for (int componentIndex = 0 ; componentIndex < size ; componentIndex ++) {
44
44
lore .add (CompHolder .of (components .get (componentIndex )));
45
45
}
46
- return lore ;
46
+ return lore . toArray ( TextHolder []:: new ) ;
47
47
}
48
48
49
- private static @ NotNull List < TextHolder > getLore (ItemMeta meta ) {
49
+ private static @ NotNull TextHolder [] getLore (ItemMeta meta ) {
50
50
if (meta == null || !meta .hasLore ()) return EMPTY_LORE ;
51
51
List <String > components = meta .getLore ();
52
52
Validate .notNull (components );
@@ -56,38 +56,65 @@ public Lore(@NotNull Lore lore) {
56
56
for (int componentIndex = 0 ; componentIndex < size ; componentIndex ++) {
57
57
lore .add (CompHolder .of (components .get (componentIndex )));
58
58
}
59
- return lore ;
59
+ return lore . toArray ( TextHolder []:: new ) ;
60
60
}
61
61
62
62
public static Lore empty () {
63
63
return EMPTY ;
64
64
}
65
65
66
66
public int size () {
67
- return lore .size () ;
67
+ return lore .length ;
68
68
}
69
69
70
70
public TextHolder get (int stringIndex ) {
71
- return lore .get (stringIndex );
71
+ if (stringIndex >= lore .length ) return null ;
72
+ return lore [stringIndex ];
72
73
}
73
74
74
75
@ NotNull
75
76
@ Override
76
77
public Iterator <TextHolder > iterator () {
77
- return lore .listIterator ();
78
- }
79
-
80
- @ Override
81
- public void forEach (Consumer <? super TextHolder > action ) {
82
- lore .forEach (action );
78
+ return new TextHolderIterator (this );
83
79
}
84
80
85
81
public void set (int stringIndex , TextHolder of ) {
86
- lore .set (stringIndex , of );
82
+ if (stringIndex >= lore .length ) return ;
83
+ lore [stringIndex ] = of ;
87
84
}
88
85
89
- public void toItemLore (ItemStack itemStack ) {
86
+ public void toItemLore (ItemStack itemStack , boolean setMeta ) {
90
87
for (TextHolder textHolder : lore ) textHolder .asItemLoreAtEnd (meta );
91
- itemStack .setItemMeta (meta );
88
+ if (setMeta ) itemStack .setItemMeta (meta );
89
+ }
90
+
91
+ public void copyFrom (TextHolder [] newLore ) {
92
+ this .lore = newLore ;
93
+ }
94
+
95
+ public static class TextHolderIterator implements Iterator <TextHolder > {
96
+ private final Lore lore ;
97
+ private int index ;
98
+ private final int length ;
99
+
100
+ @ Contract (pure = true )
101
+ public TextHolderIterator (@ NotNull Lore lore ) {
102
+ this .lore = lore ;
103
+ this .length = lore .lore .length ;
104
+ }
105
+
106
+
107
+ @ Override
108
+ public boolean hasNext () {
109
+ return index < length ;
110
+ }
111
+
112
+ @ Override
113
+ public TextHolder next () {
114
+ if (index >= length ) throw new NoSuchElementException ();
115
+ TextHolder holder = lore .get (index );
116
+ index ++;
117
+ return holder ;
118
+ }
92
119
}
93
120
}
0 commit comments