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

CyclopsMC / IntegratedDynamics / 19594291637

22 Nov 2025 10:30AM UTC coverage: 53.061% (+0.006%) from 53.055%
19594291637

push

github

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

2886 of 8780 branches covered (32.87%)

Branch coverage included in aggregate %.

17360 of 29376 relevant lines covered (59.1%)

3.07 hits per line

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

82.86
/src/main/java/org/cyclops/integrateddynamics/core/blockentity/BlockEntityCableConnectableInventory.java
1
package org.cyclops.integrateddynamics.core.blockentity;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.world.Containers;
5
import net.minecraft.world.entity.player.Player;
6
import net.minecraft.world.level.Level;
7
import net.minecraft.world.level.block.entity.BlockEntityType;
8
import net.minecraft.world.level.block.state.BlockState;
9
import net.minecraft.world.level.storage.ValueInput;
10
import net.minecraft.world.level.storage.ValueOutput;
11
import net.neoforged.neoforge.items.wrapper.InvWrapper;
12
import org.cyclops.cyclopscore.blockentity.BlockEntityTickerDelayed;
13
import org.cyclops.cyclopscore.blockentity.CyclopsBlockEntity;
14
import org.cyclops.cyclopscore.capability.registrar.BlockEntityCapabilityRegistrar;
15
import org.cyclops.cyclopscore.datastructure.EnumFacingMap;
16
import org.cyclops.cyclopscore.inventory.SimpleInventory;
17
import org.cyclops.cyclopscore.inventory.SimpleInventoryState;
18
import org.cyclops.cyclopscore.persist.nbt.NBTPersist;
19
import org.cyclops.integrateddynamics.Capabilities;
20
import org.cyclops.integrateddynamics.api.block.cable.ICable;
21
import org.cyclops.integrateddynamics.api.network.INetwork;
22
import org.cyclops.integrateddynamics.api.network.INetworkCarrier;
23
import org.cyclops.integrateddynamics.api.network.INetworkElementProvider;
24
import org.cyclops.integrateddynamics.capability.cable.CableTile;
25
import org.cyclops.integrateddynamics.capability.network.NetworkCarrierDefault;
26
import org.cyclops.integrateddynamics.capability.path.PathElementTile;
27
import org.cyclops.integrateddynamics.core.helper.CableHelpers;
28
import org.cyclops.integrateddynamics.core.helper.NetworkHelpers;
29

30
import javax.annotation.Nullable;
31
import java.util.function.Supplier;
32

33
/**
34
 * A part entity with inventory whose block can connect with cables.
35
 * @author rubensworks
36
 */
37
public abstract class BlockEntityCableConnectableInventory extends CyclopsBlockEntity {
38

39
    @NBTPersist
1✔
40
    private EnumFacingMap<Boolean> connected = EnumFacingMap.newMap();
2✔
41

42
    private final ICable cable;
43
    private final INetworkCarrier networkCarrier;
44
    private final SimpleInventory inventory;
45

46
    public BlockEntityCableConnectableInventory(BlockEntityType<?> type, BlockPos blockPos, BlockState blockState, int inventorySize, int stackSize) {
47
        super(type, blockPos, blockState);
5✔
48
        inventory = createInventory(inventorySize, stackSize);
6✔
49
        cable = new CableTile<BlockEntityCableConnectableInventory>(this) {
11✔
50

51
            @Override
52
            protected boolean isForceDisconnectable() {
53
                return false;
2✔
54
            }
55

56
            @Override
57
            protected EnumFacingMap<Boolean> getForceDisconnected() {
58
                return null;
×
59
            }
60

61
            @Override
62
            protected EnumFacingMap<Boolean> getConnected() {
63
                return tile.connected;
5✔
64
            }
65
        };
66
        networkCarrier = new NetworkCarrierDefault();
5✔
67
    }
1✔
68

69
    public static class CapabilityRegistrar<T extends BlockEntityCableConnectableInventory> extends BlockEntityCapabilityRegistrar<T> {
70
        public CapabilityRegistrar(Supplier<BlockEntityType<? extends T>> blockEntityType) {
71
            super(blockEntityType);
3✔
72
        }
1✔
73

74
        @Override
75
        public void populate() {
76
            add(
4✔
77
                    Capabilities.Cable.BLOCK,
78
                    (blockEntity, context) -> blockEntity.getCable()
3✔
79
            );
80
            add(
4✔
81
                    Capabilities.NetworkCarrier.BLOCK,
82
                    (blockEntity, context) -> blockEntity.getNetworkCarrier()
3✔
83
            );
84
            add(
4✔
85
                    Capabilities.PathElement.BLOCK,
86
                    (blockEntity, context) -> new PathElementTile<>(blockEntity, blockEntity.getCable())
7✔
87
            );
88
            add(
4✔
89
                    net.neoforged.neoforge.capabilities.Capabilities.ItemHandler.BLOCK,
90
                    (blockEntity, context) -> new InvWrapper(blockEntity.getInventory())
×
91
            );
92
            add(
4✔
93
                    org.cyclops.commoncapabilities.api.capability.Capabilities.InventoryState.BLOCK,
94
                    (blockEntity, context) -> new SimpleInventoryState(blockEntity.getInventory())
×
95
            );
96
        }
1✔
97
    }
98

99
    public EnumFacingMap<Boolean> getConnected() {
100
        return connected;
3✔
101
    }
102

103
    public ICable getCable() {
104
        return cable;
3✔
105
    }
106

107
    public INetworkCarrier getNetworkCarrier() {
108
        return networkCarrier;
3✔
109
    }
110

111
    public abstract INetworkElementProvider getNetworkElementProvider();
112

113
    protected SimpleInventory createInventory(int inventorySize, int stackSize) {
114
        return new SimpleInventory(inventorySize, stackSize) {
15✔
115
            @Override
116
            public boolean stillValid(Player entityplayer) {
117
                return level.getBlockEntity(worldPosition) == BlockEntityCableConnectableInventory.this;
×
118
            }
119
        };
120
    }
121

122

123
    @Override
124
    public void read(ValueInput input) {
125
        super.read(input);
3✔
126
        connected.clear();
3✔
127
        inventory.readFromNBT(input, "inventory");
5✔
128
    }
1✔
129

130
    @Override
131
    public void saveAdditional(ValueOutput output) {
132
        inventory.writeToNBT(output, "inventory");
5✔
133
        super.saveAdditional(output);
3✔
134
    }
1✔
135

136
    /**
137
     * Called after the network has been fully initialized
138
     */
139
    public void afterNetworkReAlive() {
140

141
    }
1✔
142

143
    @Nullable
144
    public INetwork getNetwork() {
145
        return this.networkCarrier.getNetwork();
4✔
146
    }
147

148
    public SimpleInventory getInventory() {
149
        return inventory;
3✔
150
    }
151

152
    @Override
153
    public void onChunkUnloaded() {
154
        super.onChunkUnloaded();
2✔
155
        if (getLevel() != null && !getLevel().isClientSide) {
7!
156
            INetwork network = getNetworkCarrier().getNetwork();
4✔
157
            if (network != null) {
2✔
158
                NetworkHelpers.invalidateNetworkElements(getLevel(), getBlockPos(), network, getNetworkElementProvider());
8✔
159
            }
160
        }
161
    }
1✔
162

163
    @Override
164
    public void preRemoveSideEffects(BlockPos pos, BlockState state) {
165
        super.preRemoveSideEffects(pos, state);
4✔
166

167
        Containers.dropContents(level, pos, this.getInventory());
6✔
168
        if (!CableHelpers.isRemovingCable()) {
2✔
169
            CableHelpers.onCableRemoving(level, pos, false, false, state, this);
9✔
170
        }
171
    }
1✔
172

173
    public static class Ticker<T extends BlockEntityCableConnectableInventory> extends BlockEntityTickerDelayed<T> {
3✔
174
        @Override
175
        protected void update(Level level, BlockPos pos, BlockState blockState, T blockEntity) {
176
            super.update(level, pos, blockState, blockEntity);
6✔
177

178
            if (blockEntity.getConnected().isEmpty()) {
4!
179
                blockEntity.getCable().updateConnections();
×
180
            }
181
            if (NetworkHelpers.revalidateNetworkElements(level, pos)) {
4!
182
                blockEntity.afterNetworkReAlive();
×
183
            }
184
        }
1✔
185
    }
186

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