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

CyclopsMC / IntegratedDynamics / 21094800655

17 Jan 2026 01:10PM UTC coverage: 45.184% (+0.1%) from 45.089%
21094800655

push

github

rubensworks
Bump mod version

2632 of 8600 branches covered (30.6%)

Branch coverage included in aggregate %.

11924 of 23615 relevant lines covered (50.49%)

2.4 hits per line

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

70.14
/src/main/java/org/cyclops/integrateddynamics/core/network/PartNetworkElement.java
1
package org.cyclops.integrateddynamics.core.network;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.core.Direction;
5
import net.minecraft.resources.ResourceLocation;
6
import net.minecraft.world.item.ItemStack;
7
import net.minecraft.world.level.BlockGetter;
8
import net.minecraft.world.level.block.Block;
9
import java.util.Optional;
10

11
import net.minecraft.world.level.block.state.BlockState;
12
import org.cyclops.cyclopscore.datastructure.DimPos;
13
import org.cyclops.integrateddynamics.api.PartStateException;
14
import org.cyclops.integrateddynamics.api.network.*;
15
import org.cyclops.integrateddynamics.api.part.*;
16
import org.cyclops.integrateddynamics.core.helper.NetworkHelpers;
17
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
18

19
import javax.annotation.Nullable;
20
import java.util.List;
21
import java.util.Objects;
22
import java.util.Optional;
23

24
/**
25
 * A network element for parts.
26
 * @author rubensworks
27
 */
28
public class PartNetworkElement<P extends IPartType<P, S>, S extends IPartState<P>> extends NetworkElementBase
29
        implements IPartNetworkElement<P, S>, IEnergyConsumingNetworkElement {
30

31
    private final P part;
32
    private final PartPos center;
33

34
    private S tempState = null;
3✔
35

36
    public PartNetworkElement(P part, PartPos center) {
2✔
37
        this.part = part;
3✔
38
        this.center = center;
3✔
39
    }
1✔
40

41
    protected static DimPos getCenterPos(PartTarget target) {
42
        return target.getCenter().getPos();
×
43
    }
44

45
    protected static Direction getCenterSide(PartTarget target) {
46
        return target.getCenter().getSide();
×
47
    }
48

49
    protected static DimPos getTargetPos(PartTarget target) {
50
        return target.getTarget().getPos();
×
51
    }
52

53
    protected static Direction getTargetSide(PartTarget target) {
54
        return target.getTarget().getSide();
×
55
    }
56

57
    @Override
58
    public P getPart() {
59
        return part;
3✔
60
    }
61

62
    @Override
63
    public PartTarget getTarget() {
64
        return getPart().getTarget(this.center, getPartState());
8✔
65
    }
66

67
    public PartTarget getTarget(S partState) {
68
        return getPart().getTarget(this.center, partState);
7✔
69
    }
70

71
    public S getTempState() {
72
        return tempState;
×
73
    }
74

75
    public void setTempState(S tempState) {
76
        this.tempState = tempState;
×
77
    }
×
78

79
    @Override
80
    public IPartContainer getPartContainer() {
81
        return PartHelpers.getPartContainerChecked(this.center.getPos(), this.center.getSide());
8✔
82
    }
83

84
    public IPartContainer getPartContainer(BlockState blockState) {
85
        return PartHelpers.getPartContainerChecked(this.center.getPos(), this.center.getSide(), blockState);
9✔
86
    }
87

88
    public Optional<IPartContainer> getPartContainerOptional() {
89
        return PartHelpers.getPartContainer(this.center.getPos(), this.center.getSide());
8✔
90
    }
91

92
    @Override
93
    public void setPriorityAndChannel(INetwork network, int priority, int channel) {
94
        //noinspection deprecation
95
        part.setPriorityAndChannel(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState(), priority, channel);
×
96
    }
×
97

98
    @Override
99
    public int getPriority() {
100
        return hasPartState() ? part.getPriority(getPartState()) : 0;
11✔
101
    }
102

103
    @Override
104
    public int getChannel() {
105
        return hasPartState() ? part.getChannel(getPartState()) : IPositionedAddonsNetwork.DEFAULT_CHANNEL;
×
106
    }
107

108
    @Override
109
    public boolean canRevalidate(INetwork network) {
110
        return canRevalidatePositioned(network, this.center.getPos());
7✔
111
    }
112

113
    @Override
114
    public void revalidate(INetwork network) {
115
        super.revalidate(network);
×
116
        if (revalidatePositioned(network, this.center.getPos())) {
×
117
            part.afterNetworkReAlive(network, NetworkHelpers.getPartNetworkChecked(network), PartTarget.fromCenter(this.center), getPartState());
×
118
        }
119
    }
×
120

121
    @Override
122
    public boolean isLoaded() {
123
        return INetworkElement.shouldTick(this.center.getPos());
5✔
124
    }
125

126
    public boolean hasPartState() {
127
        if (isLoaded()) {
3!
128
            return getPartContainerOptional()
5✔
129
                    .map(partContainer -> partContainer.hasPart(this.center.getSide()))
9✔
130
                    .orElse(false);
4✔
131
        }
132
        return false;
×
133
    }
134

135
    @Override
136
    public S getPartState() throws PartStateException {
137
        IPartContainer partContainer = getPartContainer();
3✔
138
        if(partContainer != null) {
2!
139
            return (S) partContainer.getPartState(this.center.getSide());
6✔
140
        } else {
141
            throw new PartStateException(this.center.getPos(), this.center.getSide());
×
142
        }
143
    }
144

145
    public S getPartState(BlockState blockState) throws PartStateException {
146
        IPartContainer partContainer = getPartContainer(blockState);
4✔
147
        if(partContainer != null) {
2!
148
            return (S) partContainer.getPartState(this.center.getSide());
6✔
149
        } else {
150
            throw new PartStateException(this.center.getPos(), this.center.getSide());
×
151
        }
152
    }
153

154
    @Override
155
    public int getConsumptionRate() {
156
        return getPart().getConsumptionRate(getPartState());
6✔
157
    }
158

159
    @Override
160
    public void postUpdate(INetwork network, boolean updated) {
161
        part.postUpdate(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState(), updated);
11✔
162
    }
1✔
163

164
    @Override
165
    public int getUpdateInterval() {
166
        return part.getUpdateInterval(getPartState());
6✔
167
    }
168

169
    @Override
170
    public boolean isUpdate() {
171
        return part.isUpdate(getPartState());
6✔
172
    }
173

174
    @Override
175
    public void update(INetwork network) {
176
        part.update(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
10✔
177
    }
1✔
178

179
    @Override
180
    public void beforeNetworkKill(INetwork network) {
181
        part.beforeNetworkKill(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
×
182
    }
×
183

184
    @Override
185
    public void beforeNetworkKill(INetwork network, BlockState blockState) {
186
        S partState = getPartState(blockState);
4✔
187
        part.beforeNetworkKill(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(partState), partState);
10✔
188
    }
1✔
189

190
    @Override
191
    public void afterNetworkAlive(INetwork network) {
192
        part.afterNetworkAlive(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
10✔
193
    }
1✔
194

195
    @Override
196
    public void afterNetworkReAlive(INetwork network) {
197
        part.afterNetworkReAlive(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
10✔
198
    }
1✔
199

200
    @Override
201
    public void addDrops(List<ItemStack> itemStacks, boolean dropMainElement, boolean saveState) {
202
        part.addDrops(getTarget(), getPartState(), itemStacks, dropMainElement, saveState);
10✔
203
    }
1✔
204

205
    @Override
206
    public void addDrops(BlockState blockState, List<ItemStack> itemStacks, boolean dropMainElement, boolean saveState) {
207
        S partState = getPartState(blockState);
4✔
208
        part.addDrops(getTarget(partState), partState, itemStacks, dropMainElement, saveState);
10✔
209
    }
1✔
210

211
    @Override
212
    public boolean onNetworkAddition(INetwork network) {
213
        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
3✔
214
        boolean res = partNetwork.addPart(getPartState().getId(), this.center);
8✔
215
        if(res) {
2!
216
            part.onNetworkAddition(network, partNetwork, getTarget(), getPartState());
9✔
217
        }
218
        return res;
2✔
219
    }
220

221
    @Override
222
    public void onNetworkRemoval(INetwork network) {
223
        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
×
224
        partNetwork.removePart(getPartState().getId());
×
225
        part.onNetworkRemoval(network, partNetwork, getTarget(), getPartState());
×
226
    }
×
227

228
    @Override
229
    public void onNetworkRemoval(INetwork network, BlockState blockState) {
230
        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
3✔
231
        S partState = getPartState(blockState);
4✔
232
        partNetwork.removePart(partState.getId());
4✔
233
        part.onNetworkRemoval(network, partNetwork, getTarget(partState), partState);
9✔
234
    }
1✔
235

236
    @Override
237
    public void onPreRemoved(INetwork network) {
238
        part.onPreRemoved(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), (tempState = getPartState()));
13✔
239
    }
1✔
240

241
    @Override
242
    public void onPostRemoved(INetwork network) {
243
        part.onPostRemoved(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(tempState), Objects.requireNonNull(tempState));
14✔
244
        tempState = null;
3✔
245
    }
1✔
246

247
    @Override
248
    public void onNeighborBlockChange(@Nullable INetwork network, BlockGetter world, Block neighbourBlock,
249
                                      BlockPos neighbourBlockPos) {
250
        part.onBlockNeighborChange(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState(), world,
13✔
251
                neighbourBlock, neighbourBlockPos);
252
    }
1✔
253

254
    @Override
255
    public Optional<P> getNetworkEventListener() {
256
        return Optional.of(getPart());
4✔
257
    }
258

259
    public boolean equals(Object o) {
260
        return o instanceof IPartNetworkElement && compareTo((INetworkElement) o) == 0;
11!
261
    }
262

263
    @Override
264
    public int hashCode() {
265
        int result = part.hashCode();
4✔
266
        result = 31 * result + this.center.hashCode();
8✔
267
        return result;
2✔
268
    }
269

270
    @Override
271
    public int compareTo(INetworkElement o) {
272
        if (o instanceof IPartNetworkElement) {
3✔
273
            IPartNetworkElement p = (IPartNetworkElement) o;
3✔
274
            int compClass = this.getPart().getUniqueName().compareTo(p.getPart().getUniqueName());
8✔
275
            if (compClass == 0) {
2✔
276
                // If this or the other part is not loaded, we IGNORE the priority,
277
                // because that depends on tile entity data, which requires loading the part/chunk.
278
                int compPriority = !isLoaded() || !p.isLoaded() ? 0 : -Integer.compare(this.getPriority(), p.getPriority());
15✔
279
                if (compPriority == 0) {
2!
280
                    int compPart = getPart().getTranslationKey().compareTo(p.getPart().getTranslationKey());
8✔
281
                    if (compPart == 0) {
2!
282
                        int compPos = this.center.getPos().compareTo(p.getPosition());
7✔
283
                        if (compPos == 0) {
2✔
284
                            return this.center.getSide().compareTo(p.getSide());
7✔
285
                        }
286
                        return compPos;
2✔
287
                    }
288
                    return compPart;
×
289
                } else {
290
                    return compPriority;
×
291
                }
292
            } else {
293
                return compClass;
2✔
294
            }
295
        }
296

297
        return this.getClass().getName().compareTo(o.getClass().getName());
8✔
298
    }
299

300
    @Override
301
    public DimPos getPosition() {
302
        return this.center.getPos();
4✔
303
    }
304

305
    @Override
306
    public Direction getSide() {
307
        return this.center.getSide();
4✔
308
    }
309

310
    @Override
311
    public int getId() {
312
        if (!hasPartState()) {
×
313
            return -1;
×
314
        }
315
        return getPartState().getId();
×
316
    }
317

318
    @Override
319
    public ResourceLocation getGroup() {
320
        return IPartNetworkElement.GROUP;
×
321
    }
322
}
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