• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CyclopsMC / CommonCapabilities / #479006809

07 Sep 2025 12:13PM UTC coverage: 39.619% (-0.2%) from 39.826%
#479006809

push

github

rubensworks
Clear recipe handler caches on server stop

0 of 6 new or added lines in 3 files covered. (0.0%)

50 existing lines in 2 files now uncovered.

914 of 2307 relevant lines covered (39.62%)

0.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/org/cyclops/commoncapabilities/modcompat/vanilla/VanillaModCompat.java
1
package org.cyclops.commoncapabilities.modcompat.vanilla;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.core.Direction;
5
import net.minecraft.world.entity.decoration.ItemFrame;
6
import net.minecraft.world.entity.item.ItemEntity;
7
import net.minecraft.world.item.BucketItem;
8
import net.minecraft.world.item.Item;
9
import net.minecraft.world.item.ItemStack;
10
import net.minecraft.world.item.crafting.RecipeType;
11
import net.minecraft.world.level.BlockGetter;
12
import net.minecraft.world.level.Level;
13
import net.minecraft.world.level.LevelAccessor;
14
import net.minecraft.world.level.block.Block;
15
import net.minecraft.world.level.block.Blocks;
16
import net.minecraft.world.level.block.CraftingTableBlock;
17
import net.minecraft.world.level.block.entity.*;
18
import net.minecraft.world.level.block.state.BlockState;
19
import net.minecraftforge.common.MinecraftForge;
20
import net.minecraftforge.common.capabilities.Capability;
21
import net.minecraftforge.common.capabilities.ForgeCapabilities;
22
import net.minecraftforge.common.capabilities.ICapabilityProvider;
23
import net.minecraftforge.common.util.LazyOptional;
24
import net.minecraftforge.energy.IEnergyStorage;
25
import net.minecraftforge.event.server.ServerStoppedEvent;
26
import net.minecraftforge.fluids.capability.IFluidHandler;
27
import net.minecraftforge.items.IItemHandler;
28
import org.cyclops.commoncapabilities.CommonCapabilities;
29
import org.cyclops.commoncapabilities.Reference;
30
import org.cyclops.commoncapabilities.RegistryEntries;
31
import org.cyclops.commoncapabilities.api.capability.block.BlockCapabilities;
32
import org.cyclops.commoncapabilities.api.capability.block.IBlockCapabilityConstructor;
33
import org.cyclops.commoncapabilities.api.capability.block.IBlockCapabilityProvider;
34
import org.cyclops.commoncapabilities.api.capability.recipehandler.IRecipeHandler;
35
import org.cyclops.commoncapabilities.api.capability.temperature.ITemperature;
36
import org.cyclops.commoncapabilities.api.capability.work.IWorker;
37
import org.cyclops.commoncapabilities.capability.recipehandler.RecipeHandlerConfig;
38
import org.cyclops.commoncapabilities.capability.recipehandler.TransformedRecipeHandlerAdapter;
39
import org.cyclops.commoncapabilities.capability.temperature.TemperatureConfig;
40
import org.cyclops.commoncapabilities.capability.worker.WorkerConfig;
41
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.energystorage.VanillaEntityItemEnergyStorage;
42
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.energystorage.VanillaEntityItemFrameEnergyStorage;
43
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.fluidhandler.VanillaEntityItemFluidHandler;
44
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.fluidhandler.VanillaEntityItemFrameFluidHandler;
45
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.itemhandler.*;
46
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.recipehandler.VanillaBrewingStandRecipeHandler;
47
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.recipehandler.VanillaRecipeTypeRecipeHandler;
48
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.temperature.VanillaAbstractFurnaceTemperature;
49
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.temperature.VanillaCampfireTemperature;
50
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.temperature.VanillaUniversalBucketTemperature;
51
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.work.VanillaAbstractFurnaceWorker;
52
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.work.VanillaBrewingStandWorker;
53
import org.cyclops.commoncapabilities.modcompat.vanilla.capability.work.VanillaCampfireWorker;
54
import org.cyclops.cyclopscore.modcompat.ICompatInitializer;
55
import org.cyclops.cyclopscore.modcompat.IModCompat;
56
import org.cyclops.cyclopscore.modcompat.capabilities.CapabilityConstructorRegistry;
57
import org.cyclops.cyclopscore.modcompat.capabilities.DefaultCapabilityProvider;
58
import org.cyclops.cyclopscore.modcompat.capabilities.ICapabilityConstructor;
59
import org.cyclops.cyclopscore.modcompat.capabilities.SimpleCapabilityConstructor;
60

61
import javax.annotation.Nonnull;
62
import javax.annotation.Nullable;
63

64
/**
65
 * Capabilities for Vanilla.
66
 * @author rubensworks
67
 */
68
public class VanillaModCompat implements IModCompat {
×
69

70
    @Override
71
    public String getId() {
72
        return Reference.MOD_VANILLA;
×
73
    }
74

75
    @Override
76
    public boolean isEnabledDefault() {
77
        return true;
×
78
    }
79

80
    @Override
81
    public String getComment() {
82
        return "Furnace and Brewing stand capabilities.";
×
83
    }
84

85
    @Override
86
    public ICompatInitializer createInitializer() {
87
        return () -> {
×
88
            CapabilityConstructorRegistry registry = CommonCapabilities._instance.getCapabilityConstructorRegistry();
×
89
            // Worker
90
            registry.registerTile(FurnaceBlockEntity.class,
×
91
                    new SimpleCapabilityConstructor<IWorker, FurnaceBlockEntity>() {
×
92
                        @Override
93
                        public Capability<IWorker> getCapability() {
94
                            return WorkerConfig.CAPABILITY;
×
95
                        }
96

97
                        @Nullable
98
                        @Override
99
                        public ICapabilityProvider createProvider(FurnaceBlockEntity host) {
100
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
101
                        }
102
                    });
103
            registry.registerTile(BlastFurnaceBlockEntity.class,
×
104
                    new SimpleCapabilityConstructor<IWorker, BlastFurnaceBlockEntity>() {
×
105
                        @Override
106
                        public Capability<IWorker> getCapability() {
107
                            return WorkerConfig.CAPABILITY;
×
108
                        }
109

110
                        @Nullable
111
                        @Override
112
                        public ICapabilityProvider createProvider(BlastFurnaceBlockEntity host) {
113
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
114
                        }
115
                    });
116
            registry.registerTile(SmokerBlockEntity.class,
×
117
                    new SimpleCapabilityConstructor<IWorker, SmokerBlockEntity>() {
×
118
                        @Override
119
                        public Capability<IWorker> getCapability() {
120
                            return WorkerConfig.CAPABILITY;
×
121
                        }
122

123
                        @Nullable
124
                        @Override
125
                        public ICapabilityProvider createProvider(SmokerBlockEntity host) {
126
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
127
                        }
128
                    });
129
            registry.registerTile(BrewingStandBlockEntity.class,
×
130
                    new SimpleCapabilityConstructor<IWorker, BrewingStandBlockEntity>() {
×
131
                        @Override
132
                        public Capability<IWorker> getCapability() {
133
                            return WorkerConfig.CAPABILITY;
×
134
                        }
135

136
                        @Override
137
                        public ICapabilityProvider createProvider(BrewingStandBlockEntity host) {
138
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaBrewingStandWorker(host));
×
139
                        }
140
                    });
141
            registry.registerTile(CampfireBlockEntity.class,
×
142
                    new SimpleCapabilityConstructor<IWorker, CampfireBlockEntity>() {
×
143
                        @Override
144
                        public Capability<IWorker> getCapability() {
145
                            return WorkerConfig.CAPABILITY;
×
146
                        }
147

148
                        @Override
149
                        public ICapabilityProvider createProvider(CampfireBlockEntity host) {
150
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaCampfireWorker(host));
×
151
                        }
152
                    });
153

154
            // Temperature
155
            registry.registerTile(FurnaceBlockEntity.class,
×
156
                    new SimpleCapabilityConstructor<ITemperature, FurnaceBlockEntity>() {
×
157
                        @Override
158
                        public Capability<ITemperature> getCapability() {
159
                            return TemperatureConfig.CAPABILITY;
×
160
                        }
161

162
                        @Nullable
163
                        @Override
164
                        public ICapabilityProvider createProvider(FurnaceBlockEntity host) {
165
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
166
                        }
167
                    });
168
            registry.registerTile(BlastFurnaceBlockEntity.class,
×
169
                    new SimpleCapabilityConstructor<ITemperature, BlastFurnaceBlockEntity>() {
×
170
                        @Override
171
                        public Capability<ITemperature> getCapability() {
172
                            return TemperatureConfig.CAPABILITY;
×
173
                        }
174

175
                        @Nullable
176
                        @Override
177
                        public ICapabilityProvider createProvider(BlastFurnaceBlockEntity host) {
178
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
179
                        }
180
                    });
181
            registry.registerTile(SmokerBlockEntity.class,
×
182
                    new SimpleCapabilityConstructor<ITemperature, SmokerBlockEntity>() {
×
183
                        @Override
184
                        public Capability<ITemperature> getCapability() {
185
                            return TemperatureConfig.CAPABILITY;
×
186
                        }
187

188
                        @Nullable
189
                        @Override
190
                        public ICapabilityProvider createProvider(SmokerBlockEntity host) {
191
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
192
                        }
193
                    });
194
            registry.registerTile(CampfireBlockEntity.class,
×
195
                    new SimpleCapabilityConstructor<ITemperature, CampfireBlockEntity>() {
×
196
                        @Override
197
                        public Capability<ITemperature> getCapability() {
198
                            return TemperatureConfig.CAPABILITY;
×
199
                        }
200

201
                        @Nullable
202
                        @Override
203
                        public ICapabilityProvider createProvider(CampfireBlockEntity host) {
204
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaCampfireTemperature(host));
×
205
                        }
206
                    });
207
            registry.registerItem(BucketItem.class,
×
208
                    new ICapabilityConstructor<ITemperature, BucketItem, ItemStack>() {
×
209
                        @Override
210
                        public Capability<ITemperature> getCapability() {
211
                            return TemperatureConfig.CAPABILITY;
×
212
                        }
213

214
                        @Override
215
                        public ICapabilityProvider createProvider(BucketItem hostType, ItemStack host) {
216
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaUniversalBucketTemperature(host));
×
217
                        }
218
                    });
219

220
            // ItemHandler
221
            ICapabilityConstructor<IItemHandler, Item, ItemStack> shulkerboxConstructor = new ICapabilityConstructor<IItemHandler, Item, ItemStack>() {
×
222
                @Override
223
                public Capability<IItemHandler> getCapability() {
224
                    return ForgeCapabilities.ITEM_HANDLER;
×
225
                }
226

227
                @Nullable
228
                @Override
229
                public ICapabilityProvider createProvider(Item hostType, ItemStack host) {
230
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaItemShulkerBoxItemHandler(host));
×
231
                }
232
            };
233
            registry.registerItem(() -> RegistryEntries.ITEM_SHULKER_BOX, shulkerboxConstructor);
×
234
            registry.registerItem(() -> RegistryEntries.ITEM_WHITE_SHULKER_BOX, shulkerboxConstructor);
×
235
            registry.registerItem(() -> RegistryEntries.ITEM_ORANGE_SHULKER_BOX, shulkerboxConstructor);
×
236
            registry.registerItem(() -> RegistryEntries.ITEM_MAGENTA_SHULKER_BOX, shulkerboxConstructor);
×
237
            registry.registerItem(() -> RegistryEntries.ITEM_LIGHT_BLUE_SHULKER_BOX, shulkerboxConstructor);
×
238
            registry.registerItem(() -> RegistryEntries.ITEM_YELLOW_SHULKER_BOX, shulkerboxConstructor);
×
239
            registry.registerItem(() -> RegistryEntries.ITEM_LIME_SHULKER_BOX, shulkerboxConstructor);
×
240
            registry.registerItem(() -> RegistryEntries.ITEM_PINK_SHULKER_BOX, shulkerboxConstructor);
×
241
            registry.registerItem(() -> RegistryEntries.ITEM_GRAY_SHULKER_BOX, shulkerboxConstructor);
×
242
            registry.registerItem(() -> RegistryEntries.ITEM_LIGHT_GRAY_SHULKER_BOX, shulkerboxConstructor);
×
243
            registry.registerItem(() -> RegistryEntries.ITEM_CYAN_SHULKER_BOX, shulkerboxConstructor);
×
244
            registry.registerItem(() -> RegistryEntries.ITEM_PURPLE_SHULKER_BOX, shulkerboxConstructor);
×
245
            registry.registerItem(() -> RegistryEntries.ITEM_BLUE_SHULKER_BOX, shulkerboxConstructor);
×
246
            registry.registerItem(() -> RegistryEntries.ITEM_BROWN_SHULKER_BOX, shulkerboxConstructor);
×
247
            registry.registerItem(() -> RegistryEntries.ITEM_GREEN_SHULKER_BOX, shulkerboxConstructor);
×
248
            registry.registerItem(() -> RegistryEntries.ITEM_RED_SHULKER_BOX, shulkerboxConstructor);
×
249
            registry.registerItem(() -> RegistryEntries.ITEM_BLACK_SHULKER_BOX, shulkerboxConstructor);
×
250
            registry.registerItem(() -> RegistryEntries.ITEM_BUNDLE, new ICapabilityConstructor<IItemHandler, Item, ItemStack>() {
×
251
                @Override
252
                public Capability<IItemHandler> getCapability() {
253
                    return ForgeCapabilities.ITEM_HANDLER;
×
254
                }
255

256
                @Nullable
257
                @Override
258
                public ICapabilityProvider createProvider(Item hostType, ItemStack host) {
259
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaItemBundleItemHandler(host));
×
260
                }
261
            });
262
            registry.registerEntity(ItemEntity.class,
×
263
                    new ICapabilityConstructor<IItemHandler, ItemEntity, ItemEntity>() {
×
264
                        @Override
265
                        public Capability<IItemHandler> getCapability() {
266
                            return ForgeCapabilities.ITEM_HANDLER;
×
267
                        }
268

269
                        @Nullable
270
                        @Override
271
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
272
                            return new ICapabilityProvider() {
×
273
                                @Override
274
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
275
                                    return capability == ForgeCapabilities.ITEM_HANDLER
×
276
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
277
                                            ? LazyOptional.of(() -> new VanillaEntityItemItemHandler(host, facing)).cast()
×
278
                                            : LazyOptional.empty();
×
279
                                }
280
                            };
281
                        }
282
                    });
283
            registry.registerEntity(ItemFrame.class,
×
284
                    new ICapabilityConstructor<IItemHandler, ItemFrame, ItemFrame>() {
×
285
                        @Override
286
                        public Capability<IItemHandler> getCapability() {
287
                            return ForgeCapabilities.ITEM_HANDLER;
×
288
                        }
289

290
                        @Nullable
291
                        @Override
292
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
293
                            return new ICapabilityProvider() {
×
294
                                @Override
295
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
296
                                    return capability == ForgeCapabilities.ITEM_HANDLER
×
297
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
298
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameItemHandler(host, facing)).cast()
×
299
                                            : LazyOptional.empty();
×
300
                                }
301
                            };
302
                        }
303
                    });
304
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
305
                @Nullable
306
                @Override
307
                public Block getBlock() {
308
                    return Blocks.COMPOSTER;
×
309
                }
310

311
                @Override
312
                public IBlockCapabilityProvider createProvider() {
313
                    return new IBlockCapabilityProvider() {
×
314
                        @Override
315
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
316
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
317
                            if (capability == ForgeCapabilities.ITEM_HANDLER) {
×
318
                                return LazyOptional.of(() -> new VanillaBlockComposterItemHandler(blockState, (LevelAccessor) world, pos, facing)).cast();
×
319
                            }
320
                            return LazyOptional.empty();
×
321
                        }
322
                    };
323
                }
324
            });
325

326
            // FluidHandler
327
            registry.registerEntity(ItemEntity.class,
×
328
                    new ICapabilityConstructor<IFluidHandler, ItemEntity, ItemEntity>() {
×
329
                        @Override
330
                        public Capability<IFluidHandler> getCapability() {
331
                            return ForgeCapabilities.FLUID_HANDLER;
×
332
                        }
333

334
                        @Nullable
335
                        @Override
336
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
337
                            return new ICapabilityProvider() {
×
338
                                @Override
339
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
340
                                    return capability == ForgeCapabilities.FLUID_HANDLER
×
341
                                            && host.getItem().getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM, facing).isPresent()
×
342
                                            ? LazyOptional.of(() -> new VanillaEntityItemFluidHandler(host, facing)).cast()
×
343
                                            : LazyOptional.empty();
×
344
                                }
345
                            };
346
                        }
347
                    });
348
            registry.registerEntity(ItemFrame.class,
×
349
                    new ICapabilityConstructor<IFluidHandler, ItemFrame, ItemFrame>() {
×
350
                        @Override
351
                        public Capability<IFluidHandler> getCapability() {
352
                            return ForgeCapabilities.FLUID_HANDLER;
×
353
                        }
354

355
                        @Nullable
356
                        @Override
357
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
358
                            return new ICapabilityProvider() {
×
359
                                @Override
360
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
361
                                    return capability == ForgeCapabilities.FLUID_HANDLER
×
362
                                            && host.getItem().getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM, facing).isPresent()
×
363
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameFluidHandler(host, facing)).cast()
×
364
                                            : LazyOptional.empty();
×
365
                                }
366
                            };
367
                        }
368
                    });
369

370
            // EnergyStorage
371
            registry.registerEntity(ItemEntity.class,
×
372
                    new ICapabilityConstructor<IEnergyStorage, ItemEntity, ItemEntity>() {
×
373
                        @Override
374
                        public Capability<IEnergyStorage> getCapability() {
375
                            return ForgeCapabilities.ENERGY;
×
376
                        }
377

378
                        @Nullable
379
                        @Override
380
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
381
                            return new ICapabilityProvider() {
×
382
                                @Override
383
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
384
                                    return capability == ForgeCapabilities.ENERGY
×
385
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
386
                                            ? LazyOptional.of(() -> new VanillaEntityItemEnergyStorage(host, facing)).cast()
×
387
                                            : LazyOptional.empty();
×
388
                                }
389
                            };
390
                        }
391
                    });
392
            registry.registerEntity(ItemFrame.class,
×
393
                    new ICapabilityConstructor<IEnergyStorage, ItemFrame, ItemFrame>() {
×
394
                        @Override
395
                        public Capability<IEnergyStorage> getCapability() {
396
                            return ForgeCapabilities.ENERGY;
×
397
                        }
398

399
                        @Nullable
400
                        @Override
401
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
402
                            return new ICapabilityProvider() {
×
403
                                @Override
404
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
405
                                    return capability == ForgeCapabilities.ENERGY
×
406
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
407
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameEnergyStorage(host, facing)).cast()
×
408
                                            : LazyOptional.empty();
×
409
                                }
410
                            };
411
                        }
412
                    });
413

414
            // RecipeHandler
NEW
415
            MinecraftForge.EVENT_BUS.addListener((ServerStoppedEvent event) -> {
×
NEW
416
                VanillaRecipeTypeRecipeHandler.CACHED_RECIPES.clear();
×
NEW
417
                TransformedRecipeHandlerAdapter.CACHED_RECIPES.clear();
×
NEW
418
            });
×
UNCOV
419
            registry.registerTile(BrewingStandBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, BrewingStandBlockEntity, BrewingStandBlockEntity>() {
×
420
                @Override
421
                public Capability<IRecipeHandler> getCapability() {
422
                    return RecipeHandlerConfig.CAPABILITY;
×
423
                }
424

425
                @Nullable
426
                @Override
427
                public ICapabilityProvider createProvider(BrewingStandBlockEntity hostType, BrewingStandBlockEntity host) {
428
                    return new DefaultCapabilityProvider<>(this::getCapability, VanillaBrewingStandRecipeHandler.getInstance());
×
429
                }
430
            });
431
            registry.registerTile(FurnaceBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, FurnaceBlockEntity, FurnaceBlockEntity>() {
×
432
                @Override
433
                public Capability<IRecipeHandler> getCapability() {
434
                    return RecipeHandlerConfig.CAPABILITY;
×
435
                }
436

437
                @Nullable
438
                @Override
439
                public ICapabilityProvider createProvider(FurnaceBlockEntity hostType, FurnaceBlockEntity host) {
440
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaRecipeTypeRecipeHandler<>(host::getLevel,
×
441
                            RecipeType.SMELTING, (size) -> size == 1, true, false));
×
442
                }
443
            });
444
            registry.registerTile(BlastFurnaceBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, BlastFurnaceBlockEntity, BlastFurnaceBlockEntity>() {
×
445
                @Override
446
                public Capability<IRecipeHandler> getCapability() {
447
                    return RecipeHandlerConfig.CAPABILITY;
×
448
                }
449

450
                @Nullable
451
                @Override
452
                public ICapabilityProvider createProvider(BlastFurnaceBlockEntity hostType, BlastFurnaceBlockEntity host) {
453
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaRecipeTypeRecipeHandler<>(host::getLevel,
×
454
                            RecipeType.BLASTING, (size) -> size == 1, true, false));
×
455
                }
456
            });
457
            registry.registerTile(SmokerBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, SmokerBlockEntity, SmokerBlockEntity>() {
×
458
                @Override
459
                public Capability<IRecipeHandler> getCapability() {
460
                    return RecipeHandlerConfig.CAPABILITY;
×
461
                }
462

463
                @Nullable
464
                @Override
465
                public ICapabilityProvider createProvider(SmokerBlockEntity hostType, SmokerBlockEntity host) {
466
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaRecipeTypeRecipeHandler<>(host::getLevel,
×
467
                            RecipeType.SMOKING, (size) -> size == 1, true, false));
×
468
                }
469
            });
470
            registry.registerTile(CampfireBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, CampfireBlockEntity, CampfireBlockEntity>() {
×
471
                @Override
472
                public Capability<IRecipeHandler> getCapability() {
473
                    return RecipeHandlerConfig.CAPABILITY;
×
474
                }
475

476
                @Nullable
477
                @Override
478
                public ICapabilityProvider createProvider(CampfireBlockEntity hostType, CampfireBlockEntity host) {
479
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaRecipeTypeRecipeHandler<>(host::getLevel,
×
480
                            RecipeType.CAMPFIRE_COOKING, (size) -> size == 1, true, false));
×
481
                }
482
            });
483
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
484
                @Nullable
485
                @Override
486
                public Block getBlock() {
487
                    return Blocks.STONECUTTER;
×
488
                }
489

490
                @Override
491
                public IBlockCapabilityProvider createProvider() {
492
                    return new IBlockCapabilityProvider() {
×
493
                        @Override
494
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
495
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
496
                            if (capability == RecipeHandlerConfig.CAPABILITY) {
×
497
                                return LazyOptional.of(() -> new VanillaRecipeTypeRecipeHandler<>(() -> (Level) world,
×
498
                                        RecipeType.STONECUTTING, (size) -> size == 1, true, true)).cast();
×
499
                            }
500
                            return LazyOptional.empty();
×
501
                        }
502
                    };
503
                }
504
            });
505
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
506
                @Nullable
507
                @Override
508
                public Block getBlock() {
509
                    return Blocks.SMITHING_TABLE;
×
510
                }
511

512
                @Override
513
                public IBlockCapabilityProvider createProvider() {
514
                    return new IBlockCapabilityProvider() {
×
515
                        @Override
516
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
517
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
518
                            if (capability == RecipeHandlerConfig.CAPABILITY) {
×
519
                                return LazyOptional.of(() -> new VanillaRecipeTypeRecipeHandler<>(() -> (Level) world,
×
520
                                        RecipeType.SMITHING, (size) -> size == 1, true, false)).cast();
×
521
                            }
522
                            return LazyOptional.empty();
×
523
                        }
524
                    };
525
                }
526
            });
527
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
528
                @Nullable
529
                @Override
530
                public Block getBlock() {
531
                    return null;
×
532
                }
533

534
                @Override
535
                public IBlockCapabilityProvider createProvider() {
536
                    return new IBlockCapabilityProvider() {
×
537
                        @Override
538
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
539
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
540
                            if (blockState.getBlock() instanceof CraftingTableBlock && capability == RecipeHandlerConfig.CAPABILITY) {
×
541
                                return LazyOptional.of(() -> new VanillaRecipeTypeRecipeHandler<>(() -> (Level) world,
×
542
                                        RecipeType.CRAFTING, (size) -> size > 0, false, false)).cast();
×
543
                            }
544
                            return LazyOptional.empty();
×
545
                        }
546
                    };
547
                }
548
            });
549
        };
×
550
    }
551

552
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc