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

CyclopsMC / IntegratedDynamics / 20620100972

31 Dec 2025 01:35PM UTC coverage: 53.056% (-0.02%) from 53.079%
20620100972

push

github

rubensworks
Merge remote-tracking branch 'origin/master-1.21-lts' into master-1.21

2859 of 8756 branches covered (32.65%)

Branch coverage included in aggregate %.

17427 of 29479 relevant lines covered (59.12%)

3.07 hits per line

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

83.93
/src/main/java/org/cyclops/integrateddynamics/blockentity/BlockEntityEnergyBattery.java
1
package org.cyclops.integrateddynamics.blockentity;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.world.level.Level;
5
import net.minecraft.world.level.block.Block;
6
import net.minecraft.world.level.block.entity.BlockEntityType;
7
import net.minecraft.world.level.block.state.BlockState;
8
import net.minecraft.world.level.storage.ValueInput;
9
import net.minecraft.world.level.storage.ValueOutput;
10
import net.neoforged.neoforge.transfer.transaction.Transaction;
11
import org.cyclops.cyclopscore.datastructure.DimPos;
12
import org.cyclops.cyclopscore.helper.IModHelpers;
13
import org.cyclops.integrateddynamics.Capabilities;
14
import org.cyclops.integrateddynamics.RegistryEntries;
15
import org.cyclops.integrateddynamics.api.network.INetworkElement;
16
import org.cyclops.integrateddynamics.api.network.INetworkElementProvider;
17
import org.cyclops.integrateddynamics.block.BlockEnergyBatteryBase;
18
import org.cyclops.integrateddynamics.block.BlockEnergyBatteryConfig;
19
import org.cyclops.integrateddynamics.capability.energystorage.SimpleEnergyHandlerCapacity;
20
import org.cyclops.integrateddynamics.capability.networkelementprovider.NetworkElementProviderSingleton;
21
import org.cyclops.integrateddynamics.core.blockentity.BlockEntityCableConnectable;
22
import org.cyclops.integrateddynamics.core.helper.EnergyHelpers;
23
import org.cyclops.integrateddynamics.network.EnergyBatteryNetworkElement;
24

25
import java.util.function.Supplier;
26

27
/**
28
 * A part entity used to store variables.
29
 * Internally, this also acts as an expression cache
30
 * @author rubensworks
31
 */
32
public class BlockEntityEnergyBattery extends BlockEntityCableConnectable {
33

34
    private SimpleEnergyHandlerCapacity energyHandler;
35

36
    public BlockEntityEnergyBattery(BlockPos blockPos, BlockState blockState) {
37
        super(RegistryEntries.BLOCK_ENTITY_ENERGY_BATTERY.get(), blockPos, blockState);
7✔
38
        this.energyHandler = new SimpleEnergyHandlerCapacity(BlockEnergyBatteryConfig.capacity) {
14✔
39
            @Override
40
            protected void onEnergyChanged(int previousAmount) {
41
                super.onEnergyChanged(previousAmount);
3✔
42
                setChanged();
3✔
43
                sendUpdate();
3✔
44
            }
1✔
45
        };
46
    }
1✔
47

48
    public static class CapabilityRegistrar extends BlockEntityCableConnectable.CapabilityRegistrar<BlockEntityEnergyBattery> {
49
        public CapabilityRegistrar(Supplier<BlockEntityType<? extends BlockEntityEnergyBattery>> blockEntityType) {
50
            super(blockEntityType);
3✔
51
        }
1✔
52

53
        @Override
54
        public void populate() {
55
            super.populate();
2✔
56

57
            add(
4✔
58
                    Capabilities.NetworkElementProvider.BLOCK,
59
                    (blockEntity, context) -> blockEntity.getNetworkElementProvider()
3✔
60
            );
61
            add(
4✔
62
                    net.neoforged.neoforge.capabilities.Capabilities.Energy.BLOCK,
63
                    (blockEntity, context) -> blockEntity.getEnergyHandler()
3✔
64
            );
65
        }
1✔
66
    }
67

68
    @Override
69
    public INetworkElementProvider getNetworkElementProvider() {
70
        return new NetworkElementProviderSingleton() {
8✔
71
            @Override
72
            public INetworkElement createNetworkElement(Level world, BlockPos blockPos) {
73
                return new EnergyBatteryNetworkElement(DimPos.of(world, blockPos));
7✔
74
            }
75
        };
76
    }
77

78
    @Override
79
    public void read(ValueInput input) {
80
        super.read(input);
×
81
        energyHandler.deserialize(input);
×
82
    }
×
83

84
    @Override
85
    public void saveAdditional(ValueOutput output) {
86
        super.saveAdditional(output);
3✔
87
        energyHandler.serialize(output);
4✔
88
    }
1✔
89

90
    public SimpleEnergyHandlerCapacity getEnergyHandler() {
91
        return energyHandler;
3✔
92
    }
93

94
    public boolean isCreative() {
95
        Block block = getBlockState().getBlock();
×
96
        return block instanceof BlockEnergyBatteryBase && ((BlockEnergyBatteryBase) block).isCreative();
×
97
    }
98

99
    public void setEnergyStored(int energy) {
100
        this.energyHandler.set(energy);
4✔
101
    }
1✔
102

103
    public int getEnergyStored() {
104
        return this.energyHandler.getAmountAsInt();
4✔
105
    }
106

107
    public int getMaxEnergyStored() {
108
        return this.energyHandler.getCapacityAsInt();
4✔
109
    }
110

111
    @Override
112
    public int getUpdateBackoffTicks() {
113
        return 20;
2✔
114
    }
115

116
    public static int getEnergyPerTick(long capacity) {
117
        return Math.max(IModHelpers.get().getBaseHelpers().castSafe(capacity) / BlockEnergyBatteryConfig.energyRateCapacityFraction, BlockEnergyBatteryConfig.minEnergyRate);
9✔
118
    }
119

120
    protected long getEnergyPerTick() {
121
        return getEnergyPerTick(getMaxEnergyStored());
6✔
122
    }
123

124
    protected int addEnergy(int energy) {
125
        int filled = addEnergyFe(energy, false);
5✔
126
        try (var tx = Transaction.openRoot()) {
2✔
127
            this.energyHandler.extract(filled, tx);
6✔
128
            tx.commit();
2✔
129
        }
130
        return filled;
2✔
131
    }
132

133
    protected int addEnergyFe(int energy, boolean simulate) {
134
        return EnergyHelpers.fillNeigbours(getLevel(), getBlockPos(), energy, simulate);
8✔
135
    }
136

137
    public static class Ticker extends BlockEntityCableConnectable.Ticker<BlockEntityEnergyBattery> {
3✔
138
        @Override
139
        protected void update(Level level, BlockPos pos, BlockState blockState, BlockEntityEnergyBattery blockEntity) {
140
            super.update(level, pos, blockState, blockEntity);
6✔
141

142
            if (blockEntity.getEnergyStored() > 0 && level.hasNeighborSignal(pos)) {
7✔
143
                blockEntity.addEnergy(Math.min((int) blockEntity.getEnergyPerTick(), blockEntity.getEnergyStored()));
9✔
144
            }
145
        }
1✔
146

147
        @Override
148
        protected void onSendUpdate(Level level, BlockPos pos) {
149
            BlockState blockState = level.getBlockState(pos);
4✔
150
            level.sendBlockUpdated(pos, blockState, blockState,
5✔
151
                    IModHelpers.get().getMinecraftHelpers().getBlockNotify() | IModHelpers.get().getMinecraftHelpers().getBlockNotifyClient() | IModHelpers.get().getMinecraftHelpers().getBlockNotifyNoRerender());
11✔
152
        }
1✔
153
    }
154
}
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