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

CyclopsMC / IntegratedDynamics / 24551201963

17 Apr 2026 06:26AM UTC coverage: 53.962% (-0.02%) from 53.983%
24551201963

push

github

web-flow
Fix crash when rendering empty battery item stack

Agent-Logs-Url: https://github.com/CyclopsMC/IntegratedDynamics/sessions/f3afe300-2af4-49a3-b384-771708f1a759

Co-authored-by: rubensworks <440384+rubensworks@users.noreply.github.com>

3096 of 8979 branches covered (34.48%)

Branch coverage included in aggregate %.

18905 of 31792 relevant lines covered (59.46%)

3.08 hits per line

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

27.66
/src/main/java/org/cyclops/integrateddynamics/block/BlockEnergyBatteryBase.java
1
package org.cyclops.integrateddynamics.block;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.world.InteractionResult;
5
import net.minecraft.world.entity.LivingEntity;
6
import net.minecraft.world.entity.player.Player;
7
import net.minecraft.world.item.ItemStack;
8
import net.minecraft.world.level.Level;
9
import net.minecraft.world.level.block.Block;
10
import net.minecraft.world.level.block.entity.BlockEntity;
11
import net.minecraft.world.level.block.entity.BlockEntityTicker;
12
import net.minecraft.world.level.block.entity.BlockEntityType;
13
import net.minecraft.world.level.block.state.BlockState;
14
import net.minecraft.world.phys.BlockHitResult;
15
import net.neoforged.neoforge.capabilities.Capabilities;
16
import net.neoforged.neoforge.transfer.access.ItemAccess;
17
import net.neoforged.neoforge.transfer.energy.EnergyHandler;
18
import net.neoforged.neoforge.transfer.transaction.Transaction;
19
import org.cyclops.cyclopscore.helper.IModHelpers;
20
import org.cyclops.integrateddynamics.RegistryEntries;
21
import org.cyclops.integrateddynamics.blockentity.BlockEntityEnergyBattery;
22
import org.cyclops.integrateddynamics.core.block.BlockContainerCabled;
23
import org.cyclops.integrateddynamics.core.helper.Helpers;
24

25
import javax.annotation.Nullable;
26
import java.util.Optional;
27

28
/**
29
 * A block that holds energy.
30
 *
31
 * @author rubensworks
32
 */
33
public abstract class BlockEnergyBatteryBase extends BlockContainerCabled {
34

35
    public BlockEnergyBatteryBase(Block.Properties properties) {
36
        super(properties, BlockEntityEnergyBattery::new);
4✔
37
    }
1✔
38

39
    @Override
40
    @Nullable
41
    public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState blockState, BlockEntityType<T> blockEntityType) {
42
        return level.isClientSide() ? null : createTickerHelper(blockEntityType, RegistryEntries.BLOCK_ENTITY_ENERGY_BATTERY.get(), new BlockEntityEnergyBattery.Ticker());
12!
43
    }
44

45
    public abstract boolean isCreative();
46

47
    @Override
48
    public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player,
49
                                             BlockHitResult blockRayTraceResult) {
50
        InteractionResult superActionResult = super.useWithoutItem(state, world, pos, player, blockRayTraceResult);
×
51
        if (superActionResult.consumesAction()) {
×
52
            return superActionResult;
×
53
        }
54

55
        if (player.getItemInHand(player.getUsedItemHand()).isEmpty()) {
×
56
            return IModHelpers.get().getBlockEntityHelpers().get(world, pos, BlockEntityEnergyBattery.class)
×
57
                    .<InteractionResult>map(tile -> {
×
58
                        player.sendOverlayMessage(Helpers.getLocalizedEnergyLevel(
×
59
                                tile.getEnergyStored(), tile.getMaxEnergyStored()));
×
60
                        return InteractionResult.SUCCESS;
×
61
                    })
62
                    .orElse(InteractionResult.PASS);
×
63
        }
64

65
        return InteractionResult.PASS;
×
66
    }
67

68
    /**
69
     * Fill an EnergyHandler with all the energy it can hold
70
     * @param energyStorage EnergyHandler that is to be filled
71
     */
72
    public static void fill(EnergyHandler energyStorage){
73
        int max = energyStorage.getCapacityAsInt();
3✔
74
        int stored = 1;
2✔
75
        while (stored > 0) {
2✔
76
            try (var tx = Transaction.openRoot()) {
3✔
77
                stored = energyStorage.insert(max, tx);
5✔
78
                tx.commit();
2✔
79
            }
80
        }
81
    }
1✔
82

83
    @Override
84
    public void setPlacedBy(Level world, BlockPos blockPos, BlockState state, LivingEntity placer, ItemStack itemStack) {
85
        if (!world.isClientSide()) {
×
86
            IModHelpers.get().getBlockEntityHelpers().get(world, blockPos, BlockEntityEnergyBattery.class)
×
87
                    .ifPresent(tile -> itemStackToTile(itemStack.copy().split(1), tile));
×
88
        }
89
        super.setPlacedBy(world, blockPos, state, placer, itemStack);
×
90
    }
×
91

92
    public static void itemStackToTile(ItemStack itemStack, BlockEntityEnergyBattery tile) {
93
        if (itemStack == null || itemStack.isEmpty()) return;
×
94
        Optional.ofNullable(itemStack.getCapability(Capabilities.Energy.ITEM, ItemAccess.forStack(itemStack)))
×
95
                .ifPresent(energyStorage -> {
×
96
                    tile.setEnergyStored(energyStorage.getAmountAsInt());
×
97
                    tile.getEnergyHandler().setCapacity(energyStorage.getCapacityAsInt());
×
98
                });
×
99
    }
×
100

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

© 2026 Coveralls, Inc