|
25 | 25 |
|
26 | 26 | package org.geysermc.geyser.item.enchantment; |
27 | 27 |
|
| 28 | +import it.unimi.dsi.fastutil.ints.IntArrays; |
28 | 29 | import net.kyori.adventure.key.Key; |
29 | 30 | import org.checkerframework.checker.nullness.qual.Nullable; |
30 | 31 | import org.cloudburstmc.nbt.NbtMap; |
|
33 | 34 | import org.geysermc.geyser.registry.Registries; |
34 | 35 | import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; |
35 | 36 | import org.geysermc.geyser.translator.text.MessageTranslator; |
| 37 | +import org.geysermc.geyser.util.MinecraftKey; |
36 | 38 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; |
37 | 39 |
|
38 | 40 | import java.util.HashSet; |
39 | 41 | import java.util.List; |
40 | 42 | import java.util.Map; |
41 | 43 | import java.util.Set; |
42 | | -import java.util.function.Function; |
| 44 | +import java.util.function.ToIntFunction; |
43 | 45 |
|
44 | 46 | /** |
45 | 47 | * @param description only populated if {@link #bedrockEnchantment()} is not null. |
@@ -86,21 +88,21 @@ private static Set<EnchantmentComponent> readEnchantmentComponents(NbtMap effect |
86 | 88 | } |
87 | 89 |
|
88 | 90 | // TODO holder set util? |
89 | | - private static HolderSet readHolderSet(@Nullable Object holderSet, Function<Key, Integer> keyIdMapping) { |
| 91 | + private static HolderSet readHolderSet(@Nullable Object holderSet, ToIntFunction<Key> keyIdMapping) { |
90 | 92 | if (holderSet == null) { |
91 | | - return new HolderSet(new int[]{}); |
| 93 | + return new HolderSet(IntArrays.EMPTY_ARRAY); |
92 | 94 | } |
93 | 95 |
|
94 | 96 | if (holderSet instanceof String stringTag) { |
95 | 97 | // Tag |
96 | 98 | if (stringTag.startsWith("#")) { |
97 | | - return new HolderSet(Key.key(stringTag.substring(1))); // Remove '#' at beginning that indicates tag |
| 99 | + return new HolderSet(MinecraftKey.key(stringTag.substring(1))); // Remove '#' at beginning that indicates tag |
98 | 100 | } else { |
99 | | - return new HolderSet(new int[]{keyIdMapping.apply(Key.key(stringTag))}); |
| 101 | + return new HolderSet(new int[]{keyIdMapping.applyAsInt(MinecraftKey.key(stringTag))}); |
100 | 102 | } |
101 | 103 | } else if (holderSet instanceof List<?> list) { |
102 | 104 | // Assume the list is a list of strings |
103 | | - return new HolderSet(list.stream().map(o -> (String) o).map(Key::key).map(keyIdMapping).mapToInt(Integer::intValue).toArray()); |
| 105 | + return new HolderSet(list.stream().map(o -> (String) o).map(Key::key).mapToInt(keyIdMapping).toArray()); |
104 | 106 | } |
105 | 107 | throw new IllegalArgumentException("Holder set must either be a tag, a string ID or a list of string IDs"); |
106 | 108 | } |
|
0 commit comments