|
25 | 25 | import java.lang.invoke.MethodHandles; |
26 | 26 | import java.lang.invoke.MethodType; |
27 | 27 | import java.lang.reflect.Field; |
| 28 | +import java.util.function.IntFunction; |
28 | 29 | import java.util.function.Predicate; |
29 | 30 |
|
30 | 31 | import com.google.common.collect.ImmutableList; |
@@ -134,71 +135,51 @@ private static void clearCachedValues(Class<? extends Enum<?>> clazz) { |
134 | 135 | } |
135 | 136 | } |
136 | 137 |
|
137 | | - public static Rarity createRarity(String name, Formatting formatting) { |
138 | | - Rarity[] values = Rarity.values(); //each values call creates a copy of the array. avoid them. |
139 | | - Rarity instance = RarityAccessor.invokeConstructor(name, values.length, formatting); |
| 138 | + private static <T extends Enum<T>> T constructAndAdd(Class<T> clazz, IntFunction<? extends T> constructor) { |
| 139 | + T[] values = clazz.getEnumConstants(); |
| 140 | + T instance = constructor.apply(values.length); |
140 | 141 | addToValues(values, instance); |
141 | | - clearCachedValues(Rarity.class); |
| 142 | + clearCachedValues(clazz); |
142 | 143 | return instance; |
143 | 144 | } |
144 | 145 |
|
| 146 | + public static Rarity createRarity(String name, Formatting formatting) { |
| 147 | + return constructAndAdd(Rarity.class, ordinal -> RarityAccessor.invokeConstructor(name, ordinal, formatting)); |
| 148 | + } |
| 149 | + |
145 | 150 | public static EntityCategory createEntityCategory(String constantName, String name, int spawnCap, boolean peaceful, boolean animal) { |
146 | | - EntityCategory[] values = EntityCategory.values(); |
147 | | - EntityCategory instance = EntityCategoryAccessor.invokeConstructor(constantName, values.length, name, spawnCap, peaceful, animal); |
148 | | - addToValues(values, instance); |
149 | | - clearCachedValues(EntityCategory.class); |
150 | | - return instance; |
| 151 | + return constructAndAdd(EntityCategory.class, ordinal -> EntityCategoryAccessor.invokeConstructor(constantName, ordinal, name, spawnCap, peaceful, animal)); |
151 | 152 | } |
152 | 153 |
|
153 | 154 | public static StructurePool.Projection createStructurePoolProjection(String name, String id, ImmutableList<StructureProcessor> processors) { |
154 | | - StructurePool.Projection[] values = StructurePool.Projection.values(); |
155 | | - StructurePool.Projection instance = StructurePoolProjectionAccessor.invokeConstructor(name, values.length, id, processors); |
156 | | - addToValues(values, instance); |
157 | | - clearCachedValues(StructurePool.Projection.class); |
| 155 | + StructurePool.Projection instance = constructAndAdd(StructurePool.Projection.class, ordinal -> StructurePoolProjectionAccessor.invokeConstructor(name, ordinal, id, processors)); |
158 | 156 | StructurePoolProjectionAccessor.getIdProjectionMap().put(id, instance); |
159 | 157 | return instance; |
160 | 158 | } |
161 | 159 |
|
162 | 160 | public static OreFeatureConfig.Target createOreFeatureConfigTarget(String constantName, String name, Predicate<BlockState> predicate) { |
163 | | - OreFeatureConfig.Target[] values = OreFeatureConfig.Target.values(); |
164 | | - OreFeatureConfig.Target instance = OreFeatureConfigTargetAccessor.invokeConstructor(constantName, values.length, name, predicate); |
165 | | - addToValues(values, instance); |
166 | | - clearCachedValues(OreFeatureConfig.Target.class); |
| 161 | + OreFeatureConfig.Target instance = constructAndAdd(OreFeatureConfig.Target.class, ordinal -> OreFeatureConfigTargetAccessor.invokeConstructor(constantName, ordinal, name, predicate)); |
167 | 162 | OreFeatureConfigTargetAccessor.getNameMap().put(name, instance); |
168 | 163 | return instance; |
169 | 164 | } |
170 | 165 |
|
171 | 166 | public static BannerPattern createBannerPattern(String constantName, String name, String id, ItemStack baseStack) { |
172 | | - BannerPattern[] values = BannerPattern.values(); |
173 | | - BannerPattern instance = BannerPatternAccessor.invokeConstructor(constantName, values.length, name, id, baseStack); |
174 | | - addToValues(values, instance); |
175 | | - clearCachedValues(BannerPattern.class); |
176 | | - return instance; |
| 167 | + return constructAndAdd(BannerPattern.class, ordinal -> BannerPatternAccessor.invokeConstructor(constantName, ordinal, name, id, baseStack)); |
177 | 168 | } |
178 | 169 |
|
179 | 170 | public static BannerPattern createBannerPattern(String constantName, String name, String id, String recipePattern0, String recipePattern1, String recipePattern2) { |
180 | | - BannerPattern[] values = BannerPattern.values(); |
181 | | - BannerPattern instance = BannerPatternAccessor.invokeConstructor(constantName, values.length, name, id, recipePattern0, recipePattern1, recipePattern2); |
182 | | - addToValues(values, instance); |
183 | | - clearCachedValues(BannerPattern.class); |
184 | | - return instance; |
| 171 | + return constructAndAdd(BannerPattern.class, ordinal -> BannerPatternAccessor.invokeConstructor(constantName, ordinal, name, id, recipePattern0, recipePattern1, recipePattern2)); |
185 | 172 | } |
186 | 173 |
|
187 | 174 | public static SpawnRestriction.Location createSpawnRestrictionLocation(String name, TriPredicate<ViewableWorld, BlockPos, EntityType<?>> predicate) { |
188 | | - SpawnRestriction.Location[] values = SpawnRestriction.Location.values(); |
189 | | - SpawnRestriction.Location instance = SpawnRestrictionLocationAccessor.invokeConstructor(name, values.length); |
| 175 | + SpawnRestriction.Location instance = constructAndAdd(SpawnRestriction.Location.class, ordinal -> SpawnRestrictionLocationAccessor.invokeConstructor(name, ordinal)); |
190 | 176 | ((PatchworkSpawnRestrictionLocation) (Object) instance).patchwork_setPredicate(predicate); |
191 | | - addToValues(values, instance); |
192 | | - clearCachedValues(SpawnRestriction.Location.class); |
193 | 177 | return instance; |
194 | 178 | } |
195 | 179 |
|
196 | 180 | public static EnchantmentTarget createEnchantmentTarget(String name, Predicate<Item> predicate) { |
197 | | - EnchantmentTarget[] values = EnchantmentTarget.values(); |
198 | | - EnchantmentTarget instance = ENCHANTMENT_TARGET_FACTORY.create(name, values.length); |
| 181 | + EnchantmentTarget instance = constructAndAdd(EnchantmentTarget.class, ordinal -> ENCHANTMENT_TARGET_FACTORY.create(name, ordinal)); |
199 | 182 | ((PatchworkEnchantmentTarget) instance).patchwork_setPredicate(predicate); |
200 | | - addToValues(values, instance); |
201 | | - clearCachedValues(EnchantmentTarget.class); |
202 | 183 | return instance; |
203 | 184 | } |
204 | 185 |
|
|
0 commit comments