2
2
3
3
import java .util .Map ;
4
4
import java .util .function .Consumer ;
5
+ import java .util .function .Function ;
5
6
import java .util .function .Supplier ;
6
7
7
8
import javax .annotation .Nullable ;
@@ -289,7 +290,7 @@ public ItemBuilder<T, P> compostable(float chance) {
289
290
}
290
291
291
292
@ Nullable
292
- private NonNullSupplier <Supplier <IClientItemExtensions >> clientExtension ;
293
+ private Function < T , NonNullSupplier <Supplier <IClientItemExtensions >>> clientExtensionFunc ;
293
294
294
295
/**
295
296
* Register a client extension for this item. The {@link IClientItemExtensions} instance can be shared across many items.
@@ -299,17 +300,25 @@ public ItemBuilder<T, P> compostable(float chance) {
299
300
* @return this {@link ItemBuilder}
300
301
*/
301
302
public ItemBuilder <T , P > clientExtension (NonNullSupplier <Supplier <IClientItemExtensions >> clientExtension ) {
302
- if (this .clientExtension == null ) {
303
+ if (this .clientExtensionFunc == null ) {
303
304
RegistrateDistExecutor .unsafeRunWhenOn (Dist .CLIENT , () -> this ::registerClientExtension );
304
305
}
305
- this .clientExtension = clientExtension ;
306
+ this .clientExtensionFunc = item -> clientExtension ;
307
+ return this ;
308
+ }
309
+
310
+ public ItemBuilder <T , P > clientExtension (Function <T , NonNullSupplier <Supplier <IClientItemExtensions >>> clientExtension ) {
311
+ if (this .clientExtensionFunc == null ) {
312
+ RegistrateDistExecutor .unsafeRunWhenOn (Dist .CLIENT , () -> this ::registerClientExtension );
313
+ }
314
+ this .clientExtensionFunc = clientExtension ;
306
315
return this ;
307
316
}
308
317
309
318
protected void registerClientExtension () {
310
319
OneTimeEventReceiver .addModListener (getOwner (), RegisterClientExtensionsEvent .class , e -> {
311
- NonNullSupplier < Supplier < IClientItemExtensions >> clientExtension = this . clientExtension ;
312
- if ( clientExtension != null ) {
320
+ if ( this . clientExtensionFunc != null ) {
321
+ NonNullSupplier < Supplier < IClientItemExtensions >> clientExtension = this . clientExtensionFunc . apply ( getEntry ());
313
322
e .registerItem (clientExtension .get ().get (), getEntry ());
314
323
}
315
324
});
0 commit comments