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

CyclopsMC / IntegratedDynamics / 16552051255

27 Jul 2025 01:58PM UTC coverage: 53.206% (+8.0%) from 45.161%
16552051255

push

github

rubensworks
Resolve minor TODOs

2888 of 8740 branches covered (33.04%)

Branch coverage included in aggregate %.

17341 of 29280 relevant lines covered (59.22%)

3.08 hits per line

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

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

3
import net.minecraft.core.Direction;
4
import net.minecraft.resources.ResourceLocation;
5
import net.minecraft.world.item.ItemStack;
6
import net.minecraft.world.level.BlockGetter;
7
import net.minecraft.world.level.block.entity.BlockEntity;
8
import net.minecraft.world.level.block.state.BlockState;
9
import org.cyclops.cyclopscore.datastructure.DimPos;
10
import org.cyclops.integrateddynamics.api.PartStateException;
11
import org.cyclops.integrateddynamics.api.network.*;
12
import org.cyclops.integrateddynamics.api.part.*;
13
import org.cyclops.integrateddynamics.core.helper.NetworkHelpers;
14
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
15

16
import javax.annotation.Nullable;
17
import java.util.List;
18
import java.util.Objects;
19
import java.util.Optional;
20

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

28
    private final P part;
29
    private final PartPos center;
30

31
    private S tempState = null;
3✔
32

33
    public PartNetworkElement(P part, PartPos center) {
2✔
34
        this.part = part;
3✔
35
        this.center = center;
3✔
36
    }
1✔
37

38
    protected static DimPos getCenterPos(PartTarget target) {
39
        return target.getCenter().getPos();
×
40
    }
41

42
    protected static Direction getCenterSide(PartTarget target) {
43
        return target.getCenter().getSide();
×
44
    }
45

46
    protected static DimPos getTargetPos(PartTarget target) {
47
        return target.getTarget().getPos();
×
48
    }
49

50
    protected static Direction getTargetSide(PartTarget target) {
51
        return target.getTarget().getSide();
×
52
    }
53

54
    @Override
55
    public P getPart() {
56
        return part;
3✔
57
    }
58

59
    @Override
60
    public PartTarget getTarget() {
61
        return getPart().getTarget(this.center, getPartState());
8✔
62
    }
63

64
    public PartTarget getTarget(S partState) {
65
        return getPart().getTarget(this.center, partState);
7✔
66
    }
67

68
    public S getTempState() {
69
        return tempState;
×
70
    }
71

72
    public void setTempState(S tempState) {
73
        this.tempState = tempState;
×
74
    }
×
75

76
    @Override
77
    public IPartContainer getPartContainer() {
78
        return PartHelpers.getPartContainerChecked(this.center.getPos(), this.center.getSide());
8✔
79
    }
80

81
    public IPartContainer getPartContainer(BlockState blockState, BlockEntity blockEntity) {
82
        return PartHelpers.getPartContainerChecked(this.center.getPos(), this.center.getSide(), blockState, blockEntity);
10✔
83
    }
84

85
    public Optional<IPartContainer> getPartContainerOptional() {
86
        return PartHelpers.getPartContainer(this.center.getPos(), this.center.getSide());
8✔
87
    }
88

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

95
    @Override
96
    public int getPriority() {
97
        return hasPartState() ? part.getPriority(getPartState()) : 0;
11✔
98
    }
99

100
    @Override
101
    public int getChannel() {
102
        return hasPartState() ? part.getChannel(getPartState()) : IPositionedAddonsNetwork.DEFAULT_CHANNEL;
×
103
    }
104

105
    @Override
106
    public boolean canRevalidate(INetwork network) {
107
        return canRevalidatePositioned(network, this.center.getPos());
7✔
108
    }
109

110
    @Override
111
    public void revalidate(INetwork network) {
112
        super.revalidate(network);
×
113
        revalidatePositioned(network, this.center.getPos());
×
114
    }
×
115

116
    @Override
117
    public boolean isLoaded() {
118
        return this.center.getPos().isLoaded();
5✔
119
    }
120

121
    public boolean hasPartState() {
122
        if (isLoaded()) {
3!
123
            return getPartContainerOptional()
5✔
124
                    .map(partContainer -> partContainer.hasPart(this.center.getSide()))
9✔
125
                    .orElse(false);
4✔
126
        }
127
        return false;
×
128
    }
129

130
    @Override
131
    public S getPartState() throws PartStateException {
132
        IPartContainer partContainer = getPartContainer();
3✔
133
        if(partContainer != null) {
2!
134
            return (S) partContainer.getPartState(this.center.getSide());
6✔
135
        } else {
136
            throw new PartStateException(this.center.getPos(), this.center.getSide());
×
137
        }
138
    }
139

140
    public S getPartState(BlockState blockState, BlockEntity blockEntity) throws PartStateException {
141
        IPartContainer partContainer = getPartContainer(blockState, blockEntity);
5✔
142
        if(partContainer != null) {
2!
143
            return (S) partContainer.getPartState(this.center.getSide());
6✔
144
        } else {
145
            throw new PartStateException(this.center.getPos(), this.center.getSide());
×
146
        }
147
    }
148

149
    @Override
150
    public int getConsumptionRate() {
151
        return getPart().getConsumptionRate(getPartState());
6✔
152
    }
153

154
    @Override
155
    public void postUpdate(INetwork network, boolean updated) {
156
        part.postUpdate(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState(), updated);
11✔
157
    }
1✔
158

159
    @Override
160
    public int getUpdateInterval() {
161
        return part.getUpdateInterval(getPartState());
6✔
162
    }
163

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

169
    @Override
170
    public void update(INetwork network) {
171
        part.update(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
10✔
172
    }
1✔
173

174
    @Override
175
    public void beforeNetworkKill(INetwork network) {
176
        part.beforeNetworkKill(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
×
177
    }
×
178

179
    @Override
180
    public void beforeNetworkKill(INetwork network, BlockState blockState, BlockEntity blockEntity) {
181
        S partState = getPartState(blockState, blockEntity);
5✔
182
        part.beforeNetworkKill(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(partState), partState);
10✔
183
    }
1✔
184

185
    @Override
186
    public void afterNetworkAlive(INetwork network) {
187
        part.afterNetworkAlive(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState());
10✔
188
    }
1✔
189

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

195
    @Override
196
    public void addDrops(List<ItemStack> itemStacks, boolean dropMainElement, boolean saveState) {
197
        part.addDrops(getTarget(), getPartState(), itemStacks, dropMainElement, saveState);
10✔
198
    }
1✔
199

200
    @Override
201
    public void addDrops(BlockState blockState, BlockEntity blockEntity, List<ItemStack> itemStacks, boolean dropMainElement, boolean saveState) {
202
        S partState = getPartState(blockState, blockEntity);
5✔
203
        part.addDrops(getTarget(partState), partState, itemStacks, dropMainElement, saveState);
10✔
204
    }
1✔
205

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

216
    @Override
217
    public void onNetworkRemoval(INetwork network) {
218
        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
×
219
        partNetwork.removePart(getPartState().getId());
×
220
        part.onNetworkRemoval(network, partNetwork, getTarget(), getPartState());
×
221
    }
×
222

223
    @Override
224
    public void onNetworkRemoval(INetwork network, BlockState blockState, BlockEntity blockEntity) {
225
        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
3✔
226
        S partState = getPartState(blockState, blockEntity);
5✔
227
        partNetwork.removePart(partState.getId());
4✔
228
        part.onNetworkRemoval(network, partNetwork, getTarget(partState), partState);
9✔
229
    }
1✔
230

231
    @Override
232
    public void onPreRemoved(INetwork network) {
233
        part.onPreRemoved(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), (tempState = getPartState()));
13✔
234
    }
1✔
235

236
    @Override
237
    public void onPostRemoved(INetwork network) {
238
        part.onPostRemoved(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(tempState), Objects.requireNonNull(tempState));
14✔
239
        tempState = null;
3✔
240
    }
1✔
241

242
    @Override
243
    public void onNeighborBlockChange(@Nullable INetwork network, BlockGetter world) {
244
        part.onBlockNeighborChange(network, NetworkHelpers.getPartNetworkChecked(network), getTarget(), getPartState(), world);
11✔
245
    }
1✔
246

247
    @Override
248
    public Optional<P> getNetworkEventListener() {
249
        return Optional.of(getPart());
4✔
250
    }
251

252
    public boolean equals(Object o) {
253
        return o instanceof IPartNetworkElement && compareTo((INetworkElement) o) == 0;
11!
254
    }
255

256
    @Override
257
    public int hashCode() {
258
        int result = part.hashCode();
4✔
259
        result = 31 * result + this.center.hashCode();
8✔
260
        return result;
2✔
261
    }
262

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

290
        return this.getClass().getName().compareTo(o.getClass().getName());
8✔
291
    }
292

293
    @Override
294
    public DimPos getPosition() {
295
        return this.center.getPos();
4✔
296
    }
297

298
    @Override
299
    public Direction getSide() {
300
        return this.center.getSide();
4✔
301
    }
302

303
    @Override
304
    public int getId() {
305
        if (!hasPartState()) {
×
306
            return -1;
×
307
        }
308
        return getPartState().getId();
×
309
    }
310

311
    @Override
312
    public ResourceLocation getGroup() {
313
        return IPartNetworkElement.GROUP;
×
314
    }
315
}
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