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

CyclopsMC / CommonCapabilities / #479006760

09 Dec 2024 09:18AM UTC coverage: 40.479% (-0.05%) from 40.533%
#479006760

push

github

rubensworks
Fix Vanilla Furnace not accepting recipes with some empty inputs

Closes CyclopsMC/IntegratedDynamics#1432

0 of 11 new or added lines in 2 files covered. (0.0%)

2 existing lines in 1 file now uncovered.

912 of 2253 relevant lines covered (40.48%)

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

68
import javax.annotation.Nonnull;
69
import javax.annotation.Nullable;
70

71
/**
72
 * Capabilities for Vanilla.
73
 * @author rubensworks
74
 */
75
public class VanillaModCompat implements IModCompat {
×
76

77
    @Override
78
    public String getId() {
79
        return Reference.MOD_VANILLA;
×
80
    }
81

82
    @Override
83
    public boolean isEnabledDefault() {
84
        return true;
×
85
    }
86

87
    @Override
88
    public String getComment() {
89
        return "Furnace and Brewing stand capabilities.";
×
90
    }
91

92
    @Override
93
    public ICompatInitializer createInitializer() {
94
        return () -> {
×
95
            CapabilityConstructorRegistry registry = CommonCapabilities._instance.getCapabilityConstructorRegistry();
×
96
            // Worker
97
            registry.registerTile(FurnaceBlockEntity.class,
×
98
                    new SimpleCapabilityConstructor<IWorker, FurnaceBlockEntity>() {
×
99
                        @Override
100
                        public Capability<IWorker> getCapability() {
101
                            return WorkerConfig.CAPABILITY;
×
102
                        }
103

104
                        @Nullable
105
                        @Override
106
                        public ICapabilityProvider createProvider(FurnaceBlockEntity host) {
107
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
108
                        }
109
                    });
110
            registry.registerTile(BlastFurnaceBlockEntity.class,
×
111
                    new SimpleCapabilityConstructor<IWorker, BlastFurnaceBlockEntity>() {
×
112
                        @Override
113
                        public Capability<IWorker> getCapability() {
114
                            return WorkerConfig.CAPABILITY;
×
115
                        }
116

117
                        @Nullable
118
                        @Override
119
                        public ICapabilityProvider createProvider(BlastFurnaceBlockEntity host) {
120
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
121
                        }
122
                    });
123
            registry.registerTile(SmokerBlockEntity.class,
×
124
                    new SimpleCapabilityConstructor<IWorker, SmokerBlockEntity>() {
×
125
                        @Override
126
                        public Capability<IWorker> getCapability() {
127
                            return WorkerConfig.CAPABILITY;
×
128
                        }
129

130
                        @Nullable
131
                        @Override
132
                        public ICapabilityProvider createProvider(SmokerBlockEntity host) {
133
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceWorker(host));
×
134
                        }
135
                    });
136
            registry.registerTile(BrewingStandBlockEntity.class,
×
137
                    new SimpleCapabilityConstructor<IWorker, BrewingStandBlockEntity>() {
×
138
                        @Override
139
                        public Capability<IWorker> getCapability() {
140
                            return WorkerConfig.CAPABILITY;
×
141
                        }
142

143
                        @Override
144
                        public ICapabilityProvider createProvider(BrewingStandBlockEntity host) {
145
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaBrewingStandWorker(host));
×
146
                        }
147
                    });
148
            registry.registerTile(CampfireBlockEntity.class,
×
149
                    new SimpleCapabilityConstructor<IWorker, CampfireBlockEntity>() {
×
150
                        @Override
151
                        public Capability<IWorker> getCapability() {
152
                            return WorkerConfig.CAPABILITY;
×
153
                        }
154

155
                        @Override
156
                        public ICapabilityProvider createProvider(CampfireBlockEntity host) {
157
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaCampfireWorker(host));
×
158
                        }
159
                    });
160

161
            // Temperature
162
            registry.registerTile(FurnaceBlockEntity.class,
×
163
                    new SimpleCapabilityConstructor<ITemperature, FurnaceBlockEntity>() {
×
164
                        @Override
165
                        public Capability<ITemperature> getCapability() {
166
                            return TemperatureConfig.CAPABILITY;
×
167
                        }
168

169
                        @Nullable
170
                        @Override
171
                        public ICapabilityProvider createProvider(FurnaceBlockEntity host) {
172
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
173
                        }
174
                    });
175
            registry.registerTile(BlastFurnaceBlockEntity.class,
×
176
                    new SimpleCapabilityConstructor<ITemperature, BlastFurnaceBlockEntity>() {
×
177
                        @Override
178
                        public Capability<ITemperature> getCapability() {
179
                            return TemperatureConfig.CAPABILITY;
×
180
                        }
181

182
                        @Nullable
183
                        @Override
184
                        public ICapabilityProvider createProvider(BlastFurnaceBlockEntity host) {
185
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
186
                        }
187
                    });
188
            registry.registerTile(SmokerBlockEntity.class,
×
189
                    new SimpleCapabilityConstructor<ITemperature, SmokerBlockEntity>() {
×
190
                        @Override
191
                        public Capability<ITemperature> getCapability() {
192
                            return TemperatureConfig.CAPABILITY;
×
193
                        }
194

195
                        @Nullable
196
                        @Override
197
                        public ICapabilityProvider createProvider(SmokerBlockEntity host) {
198
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaAbstractFurnaceTemperature(host));
×
199
                        }
200
                    });
201
            registry.registerTile(CampfireBlockEntity.class,
×
202
                    new SimpleCapabilityConstructor<ITemperature, CampfireBlockEntity>() {
×
203
                        @Override
204
                        public Capability<ITemperature> getCapability() {
205
                            return TemperatureConfig.CAPABILITY;
×
206
                        }
207

208
                        @Nullable
209
                        @Override
210
                        public ICapabilityProvider createProvider(CampfireBlockEntity host) {
211
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaCampfireTemperature(host));
×
212
                        }
213
                    });
214
            registry.registerItem(BucketItem.class,
×
215
                    new ICapabilityConstructor<ITemperature, BucketItem, ItemStack>() {
×
216
                        @Override
217
                        public Capability<ITemperature> getCapability() {
218
                            return TemperatureConfig.CAPABILITY;
×
219
                        }
220

221
                        @Override
222
                        public ICapabilityProvider createProvider(BucketItem hostType, ItemStack host) {
223
                            return new DefaultCapabilityProvider<>(this::getCapability, new VanillaUniversalBucketTemperature(host));
×
224
                        }
225
                    });
226

227
            // ItemHandler
228
            ICapabilityConstructor<IItemHandler, Item, ItemStack> shulkerboxConstructor = new ICapabilityConstructor<IItemHandler, Item, ItemStack>() {
×
229
                @Override
230
                public Capability<IItemHandler> getCapability() {
231
                    return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY;
×
232
                }
233

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

263
                @Nullable
264
                @Override
265
                public ICapabilityProvider createProvider(Item hostType, ItemStack host) {
266
                    return new DefaultCapabilityProvider<>(this::getCapability, new VanillaItemBundleItemHandler(host));
×
267
                }
268
            });
269
            registry.registerEntity(ItemEntity.class,
×
270
                    new ICapabilityConstructor<IItemHandler, ItemEntity, ItemEntity>() {
×
271
                        @Override
272
                        public Capability<IItemHandler> getCapability() {
273
                            return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY;
×
274
                        }
275

276
                        @Nullable
277
                        @Override
278
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
279
                            return new ICapabilityProvider() {
×
280
                                @Override
281
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
282
                                    return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY
×
283
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
284
                                            ? LazyOptional.of(() -> new VanillaEntityItemItemHandler(host, facing)).cast()
×
285
                                            : LazyOptional.empty();
×
286
                                }
287
                            };
288
                        }
289
                    });
290
            registry.registerEntity(ItemFrame.class,
×
291
                    new ICapabilityConstructor<IItemHandler, ItemFrame, ItemFrame>() {
×
292
                        @Override
293
                        public Capability<IItemHandler> getCapability() {
294
                            return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY;
×
295
                        }
296

297
                        @Nullable
298
                        @Override
299
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
300
                            return new ICapabilityProvider() {
×
301
                                @Override
302
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
303
                                    return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY
×
304
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
305
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameItemHandler(host, facing)).cast()
×
306
                                            : LazyOptional.empty();
×
307
                                }
308
                            };
309
                        }
310
                    });
311
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
312
                @Nullable
313
                @Override
314
                public Block getBlock() {
315
                    return Blocks.COMPOSTER;
×
316
                }
317

318
                @Override
319
                public IBlockCapabilityProvider createProvider() {
320
                    return new IBlockCapabilityProvider() {
×
321
                        @Override
322
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
323
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
324
                            if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
×
325
                                return LazyOptional.of(() -> new VanillaBlockComposterItemHandler(blockState, (LevelAccessor) world, pos, facing)).cast();
×
326
                            }
327
                            return LazyOptional.empty();
×
328
                        }
329
                    };
330
                }
331
            });
332

333
            // FluidHandler
334
            registry.registerEntity(ItemEntity.class,
×
335
                    new ICapabilityConstructor<IFluidHandler, ItemEntity, ItemEntity>() {
×
336
                        @Override
337
                        public Capability<IFluidHandler> getCapability() {
338
                            return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
×
339
                        }
340

341
                        @Nullable
342
                        @Override
343
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
344
                            return new ICapabilityProvider() {
×
345
                                @Override
346
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
347
                                    return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY
×
348
                                            && host.getItem().getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, facing).isPresent()
×
349
                                            ? LazyOptional.of(() -> new VanillaEntityItemFluidHandler(host, facing)).cast()
×
350
                                            : LazyOptional.empty();
×
351
                                }
352
                            };
353
                        }
354
                    });
355
            registry.registerEntity(ItemFrame.class,
×
356
                    new ICapabilityConstructor<IFluidHandler, ItemFrame, ItemFrame>() {
×
357
                        @Override
358
                        public Capability<IFluidHandler> getCapability() {
359
                            return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
×
360
                        }
361

362
                        @Nullable
363
                        @Override
364
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
365
                            return new ICapabilityProvider() {
×
366
                                @Override
367
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
368
                                    return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY
×
369
                                            && host.getItem().getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, facing).isPresent()
×
370
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameFluidHandler(host, facing)).cast()
×
371
                                            : LazyOptional.empty();
×
372
                                }
373
                            };
374
                        }
375
                    });
376

377
            // EnergyStorage
378
            registry.registerEntity(ItemEntity.class,
×
379
                    new ICapabilityConstructor<IEnergyStorage, ItemEntity, ItemEntity>() {
×
380
                        @Override
381
                        public Capability<IEnergyStorage> getCapability() {
382
                            return CapabilityEnergy.ENERGY;
×
383
                        }
384

385
                        @Nullable
386
                        @Override
387
                        public ICapabilityProvider createProvider(ItemEntity hostType, final ItemEntity host) {
388
                            return new ICapabilityProvider() {
×
389
                                @Override
390
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
391
                                    return capability == CapabilityEnergy.ENERGY
×
392
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
393
                                            ? LazyOptional.of(() -> new VanillaEntityItemEnergyStorage(host, facing)).cast()
×
394
                                            : LazyOptional.empty();
×
395
                                }
396
                            };
397
                        }
398
                    });
399
            registry.registerEntity(ItemFrame.class,
×
400
                    new ICapabilityConstructor<IEnergyStorage, ItemFrame, ItemFrame>() {
×
401
                        @Override
402
                        public Capability<IEnergyStorage> getCapability() {
403
                            return CapabilityEnergy.ENERGY;
×
404
                        }
405

406
                        @Nullable
407
                        @Override
408
                        public ICapabilityProvider createProvider(ItemFrame hostType, final ItemFrame host) {
409
                            return new ICapabilityProvider() {
×
410
                                @Override
411
                                public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
412
                                    return capability == CapabilityEnergy.ENERGY
×
413
                                            && host.getItem().getCapability(capability, facing).isPresent()
×
414
                                            ? LazyOptional.of(() -> new VanillaEntityItemFrameEnergyStorage(host, facing)).cast()
×
415
                                            : LazyOptional.empty();
×
416
                                }
417
                            };
418
                        }
419
                    });
420

421
            // RecipeHandler
422
            registry.registerTile(BrewingStandBlockEntity.class, new ICapabilityConstructor<IRecipeHandler, BrewingStandBlockEntity, BrewingStandBlockEntity>() {
×
423
                @Override
424
                public Capability<IRecipeHandler> getCapability() {
425
                    return RecipeHandlerConfig.CAPABILITY;
×
426
                }
427

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

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

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

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

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

493
                @Override
494
                public IBlockCapabilityProvider createProvider() {
495
                    return new IBlockCapabilityProvider() {
×
496
                        @Override
497
                        public <T> LazyOptional<T> getCapability(@Nonnull BlockState blockState, @Nonnull Capability<T> capability,
498
                                                                 @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nullable Direction facing) {
499
                            if (blockState.getBlock() instanceof CraftingTableBlock && capability == RecipeHandlerConfig.CAPABILITY) {
×
500
                                return LazyOptional.of(() -> new VanillaRecipeTypeRecipeHandler<>(() -> (Level) world,
×
NEW
501
                                        RecipeType.CRAFTING, (size) -> size > 0, false)).cast();
×
502
                            }
503
                            return LazyOptional.empty();
×
504
                        }
505
                    };
506
                }
507
            });
508
            BlockCapabilities.getInstance().register(new IBlockCapabilityConstructor() {
×
509
                @Nullable
510
                @Override
511
                public Block getBlock() {
512
                    return Blocks.STONECUTTER;
×
513
                }
514

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

533
}
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

© 2026 Coveralls, Inc