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

CyclopsMC / IntegratedDynamics / 20210191346

14 Dec 2025 03:32PM UTC coverage: 19.514% (-33.5%) from 53.061%
20210191346

push

github

rubensworks
Remove deprecations

663 of 8728 branches covered (7.6%)

Branch coverage included in aggregate %.

6786 of 29445 relevant lines covered (23.05%)

1.09 hits per line

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

0.0
/src/main/java/org/cyclops/integrateddynamics/gametest/GameTestsNetwork.java
1
package org.cyclops.integrateddynamics.gametest;
2

3
import com.google.common.collect.Sets;
4
import net.minecraft.core.BlockPos;
5
import net.minecraft.core.Direction;
6
import net.minecraft.gametest.framework.GameTestHelper;
7
import net.minecraft.network.chat.Component;
8
import net.minecraft.world.InteractionHand;
9
import net.minecraft.world.entity.player.Player;
10
import net.minecraft.world.item.ItemStack;
11
import net.minecraft.world.item.Items;
12
import net.minecraft.world.level.GameType;
13
import net.minecraft.world.level.block.Blocks;
14
import net.minecraft.world.phys.BlockHitResult;
15
import org.cyclops.cyclopscore.client.particle.ParticleBlurData;
16
import org.cyclops.cyclopscore.gametest.GameTest;
17
import org.cyclops.integrateddynamics.RegistryEntries;
18
import org.cyclops.integrateddynamics.api.network.INetwork;
19
import org.cyclops.integrateddynamics.core.helper.CableHelpers;
20
import org.cyclops.integrateddynamics.core.helper.NetworkHelpers;
21
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
22
import org.cyclops.integrateddynamics.core.part.PartTypes;
23

24
import java.util.Optional;
25

26
public class GameTestsNetwork {
×
27

28
    public static final String TEMPLATE_EMPTY = "integrateddynamics:empty10";
29
    public static final BlockPos POS = BlockPos.ZERO.offset(1, 1, 1);
×
30

31
    @GameTest(template = TEMPLATE_EMPTY)
32
    public void testNetworkSingle(GameTestHelper helper) {
33
        // Place cables directly
34
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
35
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
36
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
37
        helper.setBlock(POS.south().east(), RegistryEntries.BLOCK_CABLE.value());
×
38

39
        helper.succeedWhen(() -> {
×
40
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
41
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
42
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
43
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().east()), null);
×
44
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
45
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
46
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
47

48
            helper.assertValueEqual(
×
49
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
50
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
51
                    Component.literal("Connected cables are invalid")
×
52
            );
53
            helper.assertValueEqual(
×
54
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
55
                    Sets.newHashSet(Direction.EAST, Direction.NORTH),
×
56
                    Component.literal("Connected cables are invalid")
×
57
            );
58
            helper.assertValueEqual(
×
59
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
60
                    Sets.newHashSet(Direction.WEST, Direction.SOUTH),
×
61
                    Component.literal("Connected cables are invalid")
×
62
            );
63
            helper.assertValueEqual(
×
64
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().east())),
×
65
                    Sets.newHashSet(Direction.WEST, Direction.NORTH),
×
66
                    Component.literal("Connected cables are invalid")
×
67
            );
68
        });
×
69
    }
×
70

71
    @GameTest(template = TEMPLATE_EMPTY)
72
    public void testNetworkSingleByPlayer(GameTestHelper helper) {
73
        // Place cables as player
74
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
75
        ItemStack itemStack = new ItemStack(RegistryEntries.BLOCK_CABLE.value(), 4);
×
76
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
77

78
        helper.placeAt(player, itemStack, POS.south(), Direction.NORTH);
×
79
        helper.placeAt(player, itemStack, POS.south().south(), Direction.NORTH);
×
80
        helper.placeAt(player, itemStack, POS.south().east(), Direction.NORTH);
×
81
        helper.placeAt(player, itemStack, POS.south().south().east(), Direction.NORTH);
×
82

83
        helper.succeedWhen(() -> {
×
84
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
85
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
86
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
87
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().east()), null);
×
88
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
89
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
90
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
91

92
            helper.assertValueEqual(
×
93
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
94
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
95
                    Component.literal("Connected cables are invalid")
×
96
            );
97
            helper.assertValueEqual(
×
98
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
99
                    Sets.newHashSet(Direction.EAST, Direction.NORTH),
×
100
                    Component.literal("Connected cables are invalid")
×
101
            );
102
            helper.assertValueEqual(
×
103
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
104
                    Sets.newHashSet(Direction.WEST, Direction.SOUTH),
×
105
                    Component.literal("Connected cables are invalid")
×
106
            );
107
            helper.assertValueEqual(
×
108
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().east())),
×
109
                    Sets.newHashSet(Direction.WEST, Direction.NORTH),
×
110
                    Component.literal("Connected cables are invalid")
×
111
            );
112
        });
×
113
    }
×
114

115
    @GameTest(template = TEMPLATE_EMPTY)
116
    public void testNetworkTwo(GameTestHelper helper) {
117
        // Player two networks with empty space inbetween
118
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
119
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
120
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
121
        helper.setBlock(POS.offset(4, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
122

123
        helper.succeedWhen(() -> {
×
124
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
125
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
126
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
127
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(4, 0, 0)), null);
×
128
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
129
            helper.assertTrue(network2 != network3, Component.literal("Networks of disconnected cables are equal"));
×
130
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
131

132
            helper.assertValueEqual(
×
133
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
134
                    Sets.newHashSet(Direction.EAST),
×
135
                    Component.literal("Connected cables are invalid")
×
136
            );
137
            helper.assertValueEqual(
×
138
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
139
                    Sets.newHashSet(Direction.WEST),
×
140
                    Component.literal("Connected cables are invalid")
×
141
            );
142

143
            helper.assertValueEqual(
×
144
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
145
                    Sets.newHashSet(Direction.EAST),
×
146
                    Component.literal("Connected cables are invalid")
×
147
            );
148
            helper.assertValueEqual(
×
149
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(4, 0, 0))),
×
150
                    Sets.newHashSet(Direction.WEST),
×
151
                    Component.literal("Connected cables are invalid")
×
152
            );
153
        });
×
154
    }
×
155

156
    @GameTest(template = TEMPLATE_EMPTY)
157
    public void testNetworkTwoDisconnectedByWrench(GameTestHelper helper) {
158
        // Place two networks directly next to each other
159
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
160
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
161
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
162
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
163

164
        // And disconnect them using the wrench
165
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
166
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
167
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
168
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, -0.5));
×
169
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
170
                InteractionHand.MAIN_HAND,
171
                new BlockHitResult(
172
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
173
                        Direction.NORTH,
174
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
175
                        false)
176
        );
177

178
        helper.succeedWhen(() -> {
×
179
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
180
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
181
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
182
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
183
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
184
            helper.assertTrue(network2 != network3, Component.literal("Networks of wrench-disconnected cables are equal"));
×
185
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
186

187
            helper.assertValueEqual(
×
188
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
189
                    Sets.newHashSet(Direction.EAST),
×
190
                    Component.literal("Connected cables are invalid")
×
191
            );
192
            helper.assertValueEqual(
×
193
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
194
                    Sets.newHashSet(Direction.WEST),
×
195
                    Component.literal("Connected cables are invalid")
×
196
            );
197

198
            helper.assertValueEqual(
×
199
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
200
                    Sets.newHashSet(Direction.EAST),
×
201
                    Component.literal("Connected cables are invalid")
×
202
            );
203
            helper.assertValueEqual(
×
204
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
205
                    Sets.newHashSet(Direction.WEST),
×
206
                    Component.literal("Connected cables are invalid")
×
207
            );
208
        });
×
209
    }
×
210

211
    @GameTest(template = TEMPLATE_EMPTY)
212
    public void testNetworkTwoDisconnectedByWrenchOffhand(GameTestHelper helper) {
213
        // Place two networks directly next to each other
214
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
215
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
216
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
217
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
218

219
        // And disconnect them using the wrench
220
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
221
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
222
        player.setItemInHand(InteractionHand.OFF_HAND, itemStack);
×
223
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, -0.5));
×
224
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
225
                InteractionHand.OFF_HAND,
226
                new BlockHitResult(
227
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
228
                        Direction.NORTH,
229
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
230
                        false)
231
        );
232

233
        helper.succeedWhen(() -> {
×
234
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
235
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
236
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
237
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
238
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
239
            helper.assertTrue(network2 != network3, Component.literal("Networks of wrench-disconnected cables are equal"));
×
240
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
241

242
            helper.assertValueEqual(
×
243
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
244
                    Sets.newHashSet(Direction.EAST),
×
245
                    Component.literal("Connected cables are invalid")
×
246
            );
247
            helper.assertValueEqual(
×
248
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
249
                    Sets.newHashSet(Direction.WEST),
×
250
                    Component.literal("Connected cables are invalid")
×
251
            );
252

253
            helper.assertValueEqual(
×
254
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
255
                    Sets.newHashSet(Direction.EAST),
×
256
                    Component.literal("Connected cables are invalid")
×
257
            );
258
            helper.assertValueEqual(
×
259
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
260
                    Sets.newHashSet(Direction.WEST),
×
261
                    Component.literal("Connected cables are invalid")
×
262
            );
263
        });
×
264
    }
×
265

266
    @GameTest(template = TEMPLATE_EMPTY)
267
    public void testNetworkTwoDisconnectedAndReconnectedByWrench(GameTestHelper helper) {
268
        // Place two networks directly next to each other
269
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
270
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
271
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
272
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
273

274
        // And disconnect them using the wrench
275
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
276
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
277
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
278
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, -0.5));
×
279
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
280
                InteractionHand.MAIN_HAND,
281
                new BlockHitResult(
282
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
283
                        Direction.NORTH,
284
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
285
                        false)
286
        );
287

288
        // And reconnect them using the wrench
289
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, 0));
×
290
        player.setYRot(90);
×
291
        helper.getLevel().sendParticles(new ParticleBlurData(1, 1, 1, 1, 100), player.position().x, player.position().y + player.getEyeHeight(), player.position().z, 10, 0, 0, 0, 0); // TODO: for debugging
×
292
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
293
                InteractionHand.MAIN_HAND,
294
                new BlockHitResult(
295
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
296
                        Direction.EAST,
297
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
298
                        false)
299
        );
300

301
        helper.succeedWhen(() -> {
×
302
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
303
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
304
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
305
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
306
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
307
            helper.assertTrue(network2 == network3, Component.literal("Networks of wrench-reconnected cables are equal"));
×
308
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
309

310
            helper.assertValueEqual(
×
311
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
312
                    Sets.newHashSet(Direction.EAST),
×
313
                    Component.literal("Connected cables are invalid")
×
314
            );
315
            helper.assertValueEqual(
×
316
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
317
                    Sets.newHashSet(Direction.WEST, Direction.EAST),
×
318
                    Component.literal("Connected cables are invalid")
×
319
            );
320
            helper.assertValueEqual(
×
321
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
322
                    Sets.newHashSet(Direction.WEST, Direction.EAST),
×
323
                    Component.literal("Connected cables are invalid")
×
324
            );
325
            helper.assertValueEqual(
×
326
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
327
                    Sets.newHashSet(Direction.WEST),
×
328
                    Component.literal("Connected cables are invalid")
×
329
            );
330
        });
×
331
    }
×
332

333
    @GameTest(template = TEMPLATE_EMPTY)
334
    public void testNetworkTwoRemoved(GameTestHelper helper) {
335
        // Place two networks directly next to each other
336
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
337
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
338
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
339
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
340

341
        // And remove one cable
342
        helper.destroyBlock(POS.offset(1, 0, 0));
×
343

344
        helper.succeedWhen(() -> {
×
345
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
346
            Optional<INetwork> network2 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
347
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
348
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
349
            helper.assertTrue(network1 != network3, Component.literal("Networks of connected cables are not equal"));
×
350
            helper.assertTrue(network2.isEmpty(), Component.literal("Network of removed cable is not empty"));
×
351
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
352

353
            helper.assertValueEqual(
×
354
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
355
                    Sets.newHashSet(),
×
356
                    Component.literal("Connected cables are invalid")
×
357
            );
358
            helper.assertValueEqual(
×
359
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
360
                    Sets.newHashSet(),
×
361
                    Component.literal("Connected cables are invalid")
×
362
            );
363

364
            helper.assertValueEqual(
×
365
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
366
                    Sets.newHashSet(Direction.EAST),
×
367
                    Component.literal("Connected cables are invalid")
×
368
            );
369
            helper.assertValueEqual(
×
370
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
371
                    Sets.newHashSet(Direction.WEST),
×
372
                    Component.literal("Connected cables are invalid")
×
373
            );
374

375
            helper.assertItemEntityNotPresent(RegistryEntries.ITEM_CABLE.get());
×
376
        });
×
377
    }
×
378

379
    @GameTest(template = TEMPLATE_EMPTY)
380
    public void testNetworkTwoRemovedByWrench(GameTestHelper helper) {
381
        // Place two networks directly next to each other
382
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
383
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
384
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
385
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
386

387
        // And remove one cable using the wrench
388
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
389
        player.setShiftKeyDown(true); // To remove cable!
×
390
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
391
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
392
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, -0.5));
×
393
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
394
                InteractionHand.MAIN_HAND,
395
                new BlockHitResult(
396
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
397
                        Direction.NORTH,
398
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
399
                        false)
400
        );
401

402
        helper.succeedWhen(() -> {
×
403
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
404
            Optional<INetwork> network2 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
405
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
406
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
407
            helper.assertTrue(network1 != network3, Component.literal("Networks of connected cables are not equal"));
×
408
            helper.assertTrue(network2.isEmpty(), Component.literal("Network of removed cable is not empty"));
×
409
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
410

411
            helper.assertValueEqual(
×
412
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
413
                    Sets.newHashSet(),
×
414
                    Component.literal("Connected cables are invalid")
×
415
            );
416
            helper.assertValueEqual(
×
417
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
418
                    Sets.newHashSet(),
×
419
                    Component.literal("Connected cables are invalid")
×
420
            );
421

422
            helper.assertValueEqual(
×
423
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
424
                    Sets.newHashSet(Direction.EAST),
×
425
                    Component.literal("Connected cables are invalid")
×
426
            );
427
            helper.assertValueEqual(
×
428
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
429
                    Sets.newHashSet(Direction.WEST),
×
430
                    Component.literal("Connected cables are invalid")
×
431
            );
432

433
            helper.assertItemEntityPresent(RegistryEntries.ITEM_CABLE.get());
×
434
        });
×
435
    }
×
436

437
    @GameTest(template = TEMPLATE_EMPTY)
438
    public void testNetworkTwoRemovedByWrenchOffand(GameTestHelper helper) {
439
        // Place two networks directly next to each other
440
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
441
        helper.setBlock(POS.offset(1, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
442
        helper.setBlock(POS.offset(2, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
443
        helper.setBlock(POS.offset(3, 0, 0), RegistryEntries.BLOCK_CABLE.value());
×
444

445
        // And remove one cable using the wrench
446
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
447
        player.setShiftKeyDown(true); // To remove cable!
×
448
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
449
        player.setItemInHand(InteractionHand.OFF_HAND, itemStack);
×
450
        player.setPos(helper.absolutePos(POS.offset(1, 0, 0)).getCenter().add(0.25, -1.5, -0.5));
×
451
        helper.getBlockState(POS.offset(1, 0, 0)).useItemOn(itemStack, helper.getLevel(), player,
×
452
                InteractionHand.OFF_HAND,
453
                new BlockHitResult(
454
                        helper.absolutePos(POS.offset(1, 0, 0)).getCenter(),
×
455
                        Direction.NORTH,
456
                        helper.absolutePos(POS.offset(1, 0, 0)),
×
457
                        false)
458
        );
459

460
        helper.succeedWhen(() -> {
×
461
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
462
            Optional<INetwork> network2 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0)), null);
×
463
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0)), null);
×
464
            INetwork network4 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0)), null);
×
465
            helper.assertTrue(network1 != network3, Component.literal("Networks of connected cables are not equal"));
×
466
            helper.assertTrue(network2.isEmpty(), Component.literal("Network of removed cable is not empty"));
×
467
            helper.assertTrue(network3 == network4, Component.literal("Networks of connected cables are not equal"));
×
468

469
            helper.assertValueEqual(
×
470
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
471
                    Sets.newHashSet(),
×
472
                    Component.literal("Connected cables are invalid")
×
473
            );
474
            helper.assertValueEqual(
×
475
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(1, 0, 0))),
×
476
                    Sets.newHashSet(),
×
477
                    Component.literal("Connected cables are invalid")
×
478
            );
479

480
            helper.assertValueEqual(
×
481
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(2, 0, 0))),
×
482
                    Sets.newHashSet(Direction.EAST),
×
483
                    Component.literal("Connected cables are invalid")
×
484
            );
485
            helper.assertValueEqual(
×
486
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.offset(3, 0, 0))),
×
487
                    Sets.newHashSet(Direction.WEST),
×
488
                    Component.literal("Connected cables are invalid")
×
489
            );
490

491
            helper.assertItemEntityPresent(RegistryEntries.ITEM_CABLE.get());
×
492
        });
×
493
    }
×
494

495
    @GameTest(template = TEMPLATE_EMPTY)
496
    public void testNetworkCableWithLever(GameTestHelper helper) {
497
        // Place cable
498
        helper.setBlock(POS.offset(1, 0, 1), RegistryEntries.BLOCK_CABLE.value());
×
499

500
        // Attempt to place lever as player
501
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
502
        ItemStack itemStack = new ItemStack(Items.LEVER);
×
503
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
504
        helper.placeAt(player, itemStack, POS.offset(1, 0, 1).south(), Direction.NORTH);
×
505

506
        helper.succeedWhen(() -> {
×
507
            helper.assertValueEqual(player.getItemInHand(InteractionHand.MAIN_HAND).getItem(), Items.LEVER, Component.literal("Item hand is incorrect"));
×
508
            helper.assertBlockNotPresent(Blocks.LEVER, POS.offset(1, 0, 1).north());
×
509
        });
×
510
    }
×
511

512
    /* ----- Variable store ----- */
513

514
    @GameTest(template = TEMPLATE_EMPTY)
515
    public void testNetworkVariableStoreSingle(GameTestHelper helper) {
516
        // Place variable store and cables directly
517
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
518
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
519
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
520

521
        helper.succeedWhen(() -> {
×
522
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
523
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
524
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
525
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
526
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
527

528
            helper.assertValueEqual(
×
529
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
530
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
531
                    Component.literal("Connected cables are invalid")
×
532
            );
533
            helper.assertValueEqual(
×
534
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
535
                    Sets.newHashSet(Direction.NORTH),
×
536
                    Component.literal("Connected cables are invalid")
×
537
            );
538
            helper.assertValueEqual(
×
539
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
540
                    Sets.newHashSet(Direction.WEST),
×
541
                    Component.literal("Connected cables are invalid")
×
542
            );
543
        });
×
544
    }
×
545

546
    @GameTest(template = TEMPLATE_EMPTY)
547
    public void testNetworkVariableStoreSingleAfterwards(GameTestHelper helper) {
548
        // Place cables directly
549
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
550
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
551

552
        // Place variable store afterwards
553
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
554

555
        helper.succeedWhen(() -> {
×
556
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
557
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
558
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
559
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
560
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
561

562
            helper.assertValueEqual(
×
563
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
564
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
565
                    Component.literal("Connected cables are invalid")
×
566
            );
567
            helper.assertValueEqual(
×
568
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
569
                    Sets.newHashSet(Direction.NORTH),
×
570
                    Component.literal("Connected cables are invalid")
×
571
            );
572
            helper.assertValueEqual(
×
573
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
574
                    Sets.newHashSet(Direction.WEST),
×
575
                    Component.literal("Connected cables are invalid")
×
576
            );
577
        });
×
578
    }
×
579

580
    @GameTest(template = TEMPLATE_EMPTY)
581
    public void testNetworkVariableStoreDisconnectByWrench(GameTestHelper helper) {
582
        // Place variable store and cables directly
583
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
584
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
585
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
586

587
        // And disconnect them using the wrench
588
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
589
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
590
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
591
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
592
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
593
                InteractionHand.MAIN_HAND,
594
                new BlockHitResult(
595
                        helper.absolutePos(POS.east()).getCenter(),
×
596
                        Direction.NORTH,
597
                        helper.absolutePos(POS.east()),
×
598
                        false)
599
        );
600

601
        helper.succeedWhen(() -> {
×
602
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
603
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
604
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
605
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
606
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
607

608
            helper.assertValueEqual(
×
609
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
610
                    Sets.newHashSet(Direction.SOUTH),
×
611
                    Component.literal("Connected cables are invalid")
×
612
            );
613
            helper.assertValueEqual(
×
614
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
615
                    Sets.newHashSet(Direction.NORTH),
×
616
                    Component.literal("Connected cables are invalid")
×
617
            );
618
            helper.assertValueEqual(
×
619
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
620
                    Sets.newHashSet(),
×
621
                    Component.literal("Connected cables are invalid")
×
622
            );
623
        });
×
624
    }
×
625

626
    @GameTest(template = TEMPLATE_EMPTY)
627
    public void testNetworkVariableStoreBreakByWrench(GameTestHelper helper) {
628
        // Place variable store and cables directly
629
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
630
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
631
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
632

633
        // Break variable store with wrench
634
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
635
        player.setShiftKeyDown(true); // To remove store!
×
636
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
637
        player.setPos(helper.absolutePos(POS).getCenter());
×
638
        helper.getBlockState(POS).useItemOn(player.getItemInHand(InteractionHand.MAIN_HAND), helper.getLevel(), player,
×
639
                InteractionHand.MAIN_HAND,
640
                new BlockHitResult(
641
                        helper.absolutePos(POS).getCenter(),
×
642
                        Direction.SOUTH,
643
                        helper.absolutePos(POS),
×
644
                        false)
645
        );
646

647
        helper.succeedWhen(() -> {
×
648
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
649

650
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
651
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
652
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
653
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
654
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
655

656
            helper.assertValueEqual(
×
657
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
658
                    Sets.newHashSet(),
×
659
                    Component.literal("Connected cables are invalid")
×
660
            );
661
            helper.assertValueEqual(
×
662
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
663
                    Sets.newHashSet(),
×
664
                    Component.literal("Connected cables are invalid")
×
665
            );
666
            helper.assertValueEqual(
×
667
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
668
                    Sets.newHashSet(),
×
669
                    Component.literal("Connected cables are invalid")
×
670
            );
671

672
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_VARIABLE_STORE.get().asItem());
×
673
        });
×
674
    }
×
675

676
    @GameTest(template = TEMPLATE_EMPTY)
677
    public void testNetworkVariableStoreBreakByPickaxe(GameTestHelper helper) {
678
        // Place variable store and cables directly
679
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
680
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
681
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
682

683
        // Break variable store with wrench
684
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
685
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
686
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
687
        player.setPos(helper.absolutePos(POS).getCenter());
×
688
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
689

690
        helper.succeedWhen(() -> {
×
691
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
692

693
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
694
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
695
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
696
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
697
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
698

699
            helper.assertValueEqual(
×
700
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
701
                    Sets.newHashSet(),
×
702
                    Component.literal("Connected cables are invalid")
×
703
            );
704
            helper.assertValueEqual(
×
705
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
706
                    Sets.newHashSet(),
×
707
                    Component.literal("Connected cables are invalid")
×
708
            );
709
            helper.assertValueEqual(
×
710
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
711
                    Sets.newHashSet(),
×
712
                    Component.literal("Connected cables are invalid")
×
713
            );
714
        });
×
715
    }
×
716

717
    @GameTest(template = TEMPLATE_EMPTY)
718
    public void testNetworkVariableStoreBreakByTnt(GameTestHelper helper) {
719
        // Place variable store and cables directly
720
        helper.setBlock(POS, RegistryEntries.BLOCK_VARIABLE_STORE.value());
×
721
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
722
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
723

724
        // Destroy with TNT
725
        helper.setBlock(POS.above(), Blocks.TNT);
×
726
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
727

728
        helper.succeedWhen(() -> {
×
729
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
730

731
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
732
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
733

734
            helper.assertValueEqual(
×
735
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
736
                    Sets.newHashSet(),
×
737
                    Component.literal("Connected cables are invalid")
×
738
            );
739

740
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_VARIABLE_STORE.get().asItem());
×
741
        });
×
742
    }
×
743

744
    /* ----- Coal Generator ----- */
745

746
    @GameTest(template = TEMPLATE_EMPTY)
747
    public void testNetworkCoalGeneratorSingle(GameTestHelper helper) {
748
        // Place variable store and cables directly
749
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
750
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
751
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
752

753
        helper.succeedWhen(() -> {
×
754
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
755
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
756
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
757
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
758
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
759

760
            helper.assertValueEqual(
×
761
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
762
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
763
                    Component.literal("Connected cables are invalid")
×
764
            );
765
            helper.assertValueEqual(
×
766
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
767
                    Sets.newHashSet(Direction.NORTH),
×
768
                    Component.literal("Connected cables are invalid")
×
769
            );
770
            helper.assertValueEqual(
×
771
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
772
                    Sets.newHashSet(Direction.WEST),
×
773
                    Component.literal("Connected cables are invalid")
×
774
            );
775
        });
×
776
    }
×
777

778
    @GameTest(template = TEMPLATE_EMPTY)
779
    public void testNetworkCoalGeneratorSingleAfterwards(GameTestHelper helper) {
780
        // Place cables directly
781
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
782
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
783

784
        // Place variable store afterwards
785
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
786

787
        helper.succeedWhen(() -> {
×
788
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
789
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
790
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
791
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
792
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
793

794
            helper.assertValueEqual(
×
795
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
796
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
797
                    Component.literal("Connected cables are invalid")
×
798
            );
799
            helper.assertValueEqual(
×
800
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
801
                    Sets.newHashSet(Direction.NORTH),
×
802
                    Component.literal("Connected cables are invalid")
×
803
            );
804
            helper.assertValueEqual(
×
805
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
806
                    Sets.newHashSet(Direction.WEST),
×
807
                    Component.literal("Connected cables are invalid")
×
808
            );
809
        });
×
810
    }
×
811

812
    @GameTest(template = TEMPLATE_EMPTY)
813
    public void testNetworkCoalGeneratorDisconnectByWrench(GameTestHelper helper) {
814
        // Place variable store and cables directly
815
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
816
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
817
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
818

819
        // And disconnect them using the wrench
820
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
821
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
822
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
823
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
824
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
825
                InteractionHand.MAIN_HAND,
826
                new BlockHitResult(
827
                        helper.absolutePos(POS.east()).getCenter(),
×
828
                        Direction.NORTH,
829
                        helper.absolutePos(POS.east()),
×
830
                        false)
831
        );
832

833
        helper.succeedWhen(() -> {
×
834
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
835
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
836
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
837
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
838
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
839

840
            helper.assertValueEqual(
×
841
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
842
                    Sets.newHashSet(Direction.SOUTH),
×
843
                    Component.literal("Connected cables are invalid")
×
844
            );
845
            helper.assertValueEqual(
×
846
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
847
                    Sets.newHashSet(Direction.NORTH),
×
848
                    Component.literal("Connected cables are invalid")
×
849
            );
850
            helper.assertValueEqual(
×
851
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
852
                    Sets.newHashSet(),
×
853
                    Component.literal("Connected cables are invalid")
×
854
            );
855
        });
×
856
    }
×
857

858
    @GameTest(template = TEMPLATE_EMPTY)
859
    public void testNetworkCoalGeneratorBreakByWrench(GameTestHelper helper) {
860
        // Place variable store and cables directly
861
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
862
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
863
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
864

865
        // Break variable store with wrench
866
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
867
        player.setShiftKeyDown(true); // To remove store!
×
868
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
869
        player.setPos(helper.absolutePos(POS).getCenter());
×
870
        helper.getBlockState(POS).useItemOn(player.getItemInHand(InteractionHand.MAIN_HAND), helper.getLevel(), player,
×
871
                InteractionHand.MAIN_HAND,
872
                new BlockHitResult(
873
                        helper.absolutePos(POS).getCenter(),
×
874
                        Direction.SOUTH,
875
                        helper.absolutePos(POS),
×
876
                        false)
877
        );
878

879
        helper.succeedWhen(() -> {
×
880
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
881

882
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
883
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
884
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
885
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
886
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
887

888
            helper.assertValueEqual(
×
889
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
890
                    Sets.newHashSet(),
×
891
                    Component.literal("Connected cables are invalid")
×
892
            );
893
            helper.assertValueEqual(
×
894
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
895
                    Sets.newHashSet(),
×
896
                    Component.literal("Connected cables are invalid")
×
897
            );
898
            helper.assertValueEqual(
×
899
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
900
                    Sets.newHashSet(),
×
901
                    Component.literal("Connected cables are invalid")
×
902
            );
903

904
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_COAL_GENERATOR.get().asItem());
×
905
        });
×
906
    }
×
907

908
    @GameTest(template = TEMPLATE_EMPTY)
909
    public void testNetworkCoalGeneratorBreakByPickaxe(GameTestHelper helper) {
910
        // Place variable store and cables directly
911
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
912
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
913
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
914

915
        // Break variable store with wrench
916
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
917
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
918
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
919
        player.setPos(helper.absolutePos(POS).getCenter());
×
920
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
921

922
        helper.succeedWhen(() -> {
×
923
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
924

925
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
926
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
927
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
928
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
929
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
930

931
            helper.assertValueEqual(
×
932
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
933
                    Sets.newHashSet(),
×
934
                    Component.literal("Connected cables are invalid")
×
935
            );
936
            helper.assertValueEqual(
×
937
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
938
                    Sets.newHashSet(),
×
939
                    Component.literal("Connected cables are invalid")
×
940
            );
941
            helper.assertValueEqual(
×
942
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
943
                    Sets.newHashSet(),
×
944
                    Component.literal("Connected cables are invalid")
×
945
            );
946
        });
×
947
    }
×
948

949
    @GameTest(template = TEMPLATE_EMPTY)
950
    public void testNetworkCoalGeneratorBreakByTnt(GameTestHelper helper) {
951
        // Place variable store and cables directly
952
        helper.setBlock(POS, RegistryEntries.BLOCK_COAL_GENERATOR.value());
×
953
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
954
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
955

956
        // Destroy with TNT
957
        helper.setBlock(POS.above(), Blocks.TNT);
×
958
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
959

960
        helper.succeedWhen(() -> {
×
961
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_COAL_GENERATOR.value(), POS);
×
962

963
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
964
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
965

966
            helper.assertValueEqual(
×
967
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
968
                    Sets.newHashSet(),
×
969
                    Component.literal("Connected cables are invalid")
×
970
            );
971

972
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_COAL_GENERATOR.get().asItem());
×
973
        });
×
974
    }
×
975

976
    /* ----- Energy Battery ----- */
977

978
    @GameTest(template = TEMPLATE_EMPTY)
979
    public void testNetworkEnergyBatterySingle(GameTestHelper helper) {
980
        // Place variable store and cables directly
981
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
982
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
983
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
984

985
        helper.succeedWhen(() -> {
×
986
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
987
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
988
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
989
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
990
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
991

992
            helper.assertValueEqual(
×
993
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
994
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
995
                    Component.literal("Connected cables are invalid")
×
996
            );
997
            helper.assertValueEqual(
×
998
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
999
                    Sets.newHashSet(Direction.NORTH),
×
1000
                    Component.literal("Connected cables are invalid")
×
1001
            );
1002
            helper.assertValueEqual(
×
1003
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1004
                    Sets.newHashSet(Direction.WEST),
×
1005
                    Component.literal("Connected cables are invalid")
×
1006
            );
1007
        });
×
1008
    }
×
1009

1010
    @GameTest(template = TEMPLATE_EMPTY)
1011
    public void testNetworkEnergyBatterySingleAfterwards(GameTestHelper helper) {
1012
        // Place cables directly
1013
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1014
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1015

1016
        // Place variable store afterwards
1017
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
1018

1019
        helper.succeedWhen(() -> {
×
1020
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1021
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1022
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1023
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1024
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1025

1026
            helper.assertValueEqual(
×
1027
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1028
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1029
                    Component.literal("Connected cables are invalid")
×
1030
            );
1031
            helper.assertValueEqual(
×
1032
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1033
                    Sets.newHashSet(Direction.NORTH),
×
1034
                    Component.literal("Connected cables are invalid")
×
1035
            );
1036
            helper.assertValueEqual(
×
1037
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1038
                    Sets.newHashSet(Direction.WEST),
×
1039
                    Component.literal("Connected cables are invalid")
×
1040
            );
1041
        });
×
1042
    }
×
1043

1044
    @GameTest(template = TEMPLATE_EMPTY)
1045
    public void testNetworkEnergyBatteryDisconnectByWrench(GameTestHelper helper) {
1046
        // Place variable store and cables directly
1047
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
1048
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1049
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1050

1051
        // And disconnect them using the wrench
1052
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1053
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
1054
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
1055
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
1056
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
1057
                InteractionHand.MAIN_HAND,
1058
                new BlockHitResult(
1059
                        helper.absolutePos(POS.east()).getCenter(),
×
1060
                        Direction.NORTH,
1061
                        helper.absolutePos(POS.east()),
×
1062
                        false)
1063
        );
1064

1065
        helper.succeedWhen(() -> {
×
1066
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1067
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1068
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1069
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1070
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
1071

1072
            helper.assertValueEqual(
×
1073
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1074
                    Sets.newHashSet(Direction.SOUTH),
×
1075
                    Component.literal("Connected cables are invalid")
×
1076
            );
1077
            helper.assertValueEqual(
×
1078
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1079
                    Sets.newHashSet(Direction.NORTH),
×
1080
                    Component.literal("Connected cables are invalid")
×
1081
            );
1082
            helper.assertValueEqual(
×
1083
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1084
                    Sets.newHashSet(),
×
1085
                    Component.literal("Connected cables are invalid")
×
1086
            );
1087
        });
×
1088
    }
×
1089

1090
    @GameTest(template = TEMPLATE_EMPTY)
1091
    public void testNetworkEnergyBatteryBreakByWrench(GameTestHelper helper) {
1092
        // Place variable store and cables directly
1093
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
1094
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1095
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1096

1097
        // Break variable store with wrench
1098
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1099
        player.setShiftKeyDown(true); // To remove store!
×
1100
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
1101
        player.setPos(helper.absolutePos(POS).getCenter());
×
1102
        helper.getBlockState(POS).useItemOn(new ItemStack(RegistryEntries.ITEM_WRENCH.value()), helper.getLevel(), player, InteractionHand.MAIN_HAND,
×
1103
                new BlockHitResult(
1104
                        helper.absolutePos(POS).getCenter(),
×
1105
                        Direction.SOUTH,
1106
                        helper.absolutePos(POS),
×
1107
                        false)
1108
        );
1109

1110
        helper.succeedWhen(() -> {
×
1111
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_ENERGY_BATTERY.value(), POS);
×
1112

1113
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1114
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1115
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1116
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1117
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1118

1119
            helper.assertValueEqual(
×
1120
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1121
                    Sets.newHashSet(),
×
1122
                    Component.literal("Connected cables are invalid")
×
1123
            );
1124
            helper.assertValueEqual(
×
1125
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1126
                    Sets.newHashSet(),
×
1127
                    Component.literal("Connected cables are invalid")
×
1128
            );
1129
            helper.assertValueEqual(
×
1130
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1131
                    Sets.newHashSet(),
×
1132
                    Component.literal("Connected cables are invalid")
×
1133
            );
1134

1135
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_ENERGY_BATTERY.get().asItem());
×
1136
        });
×
1137
    }
×
1138

1139
    @GameTest(template = TEMPLATE_EMPTY)
1140
    public void testNetworkEnergyBatteryBreakByPickaxe(GameTestHelper helper) {
1141
        // Place variable store and cables directly
1142
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
1143
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1144
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1145

1146
        // Break variable store with wrench
1147
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1148
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
1149
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
1150
        player.setPos(helper.absolutePos(POS).getCenter());
×
1151
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
1152

1153
        helper.succeedWhen(() -> {
×
1154
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
1155

1156
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1157
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1158
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1159
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1160
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1161

1162
            helper.assertValueEqual(
×
1163
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1164
                    Sets.newHashSet(),
×
1165
                    Component.literal("Connected cables are invalid")
×
1166
            );
1167
            helper.assertValueEqual(
×
1168
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1169
                    Sets.newHashSet(),
×
1170
                    Component.literal("Connected cables are invalid")
×
1171
            );
1172
            helper.assertValueEqual(
×
1173
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1174
                    Sets.newHashSet(),
×
1175
                    Component.literal("Connected cables are invalid")
×
1176
            );
1177
        });
×
1178
    }
×
1179

1180
    @GameTest(template = TEMPLATE_EMPTY)
1181
    public void testNetworkEnergyBatteryBreakByTnt(GameTestHelper helper) {
1182
        // Place variable store and cables directly
1183
        helper.setBlock(POS, RegistryEntries.BLOCK_ENERGY_BATTERY.value());
×
1184
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1185
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1186

1187
        // Destroy with TNT
1188
        helper.setBlock(POS.above(), Blocks.TNT);
×
1189
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
1190

1191
        helper.succeedWhen(() -> {
×
1192
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
1193

1194
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1195
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1196

1197
            helper.assertValueEqual(
×
1198
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1199
                    Sets.newHashSet(),
×
1200
                    Component.literal("Connected cables are invalid")
×
1201
            );
1202

1203
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_ENERGY_BATTERY.get().asItem());
×
1204
        });
×
1205
    }
×
1206

1207
    /* ----- Delayer ----- */
1208

1209
    @GameTest(template = TEMPLATE_EMPTY)
1210
    public void testNetworkDelayerSingle(GameTestHelper helper) {
1211
        // Place variable store and cables directly
1212
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1213
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1214
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1215

1216
        helper.succeedWhen(() -> {
×
1217
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1218
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1219
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1220
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1221
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1222

1223
            helper.assertValueEqual(
×
1224
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1225
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1226
                    Component.literal("Connected cables are invalid")
×
1227
            );
1228
            helper.assertValueEqual(
×
1229
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1230
                    Sets.newHashSet(Direction.NORTH),
×
1231
                    Component.literal("Connected cables are invalid")
×
1232
            );
1233
            helper.assertValueEqual(
×
1234
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1235
                    Sets.newHashSet(Direction.WEST),
×
1236
                    Component.literal("Connected cables are invalid")
×
1237
            );
1238
        });
×
1239
    }
×
1240

1241
    @GameTest(template = TEMPLATE_EMPTY)
1242
    public void testNetworkDelayerSingleAfterwards(GameTestHelper helper) {
1243
        // Place cables directly
1244
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1245
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1246

1247
        // Place variable store afterwards
1248
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1249

1250
        helper.succeedWhen(() -> {
×
1251
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1252
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1253
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1254
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1255
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1256

1257
            helper.assertValueEqual(
×
1258
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1259
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1260
                    Component.literal("Connected cables are invalid")
×
1261
            );
1262
            helper.assertValueEqual(
×
1263
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1264
                    Sets.newHashSet(Direction.NORTH),
×
1265
                    Component.literal("Connected cables are invalid")
×
1266
            );
1267
            helper.assertValueEqual(
×
1268
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1269
                    Sets.newHashSet(Direction.WEST),
×
1270
                    Component.literal("Connected cables are invalid")
×
1271
            );
1272
        });
×
1273
    }
×
1274

1275
    @GameTest(template = TEMPLATE_EMPTY)
1276
    public void testNetworkDelayerDisconnectByWrench(GameTestHelper helper) {
1277
        // Place variable store and cables directly
1278
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1279
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1280
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1281

1282
        // And disconnect them using the wrench
1283
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1284
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
1285
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
1286
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
1287
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
1288
                InteractionHand.MAIN_HAND,
1289
                new BlockHitResult(
1290
                        helper.absolutePos(POS.east()).getCenter(),
×
1291
                        Direction.NORTH,
1292
                        helper.absolutePos(POS.east()),
×
1293
                        false)
1294
        );
1295

1296
        helper.succeedWhen(() -> {
×
1297
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1298
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1299
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1300
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1301
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
1302

1303
            helper.assertValueEqual(
×
1304
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1305
                    Sets.newHashSet(Direction.SOUTH),
×
1306
                    Component.literal("Connected cables are invalid")
×
1307
            );
1308
            helper.assertValueEqual(
×
1309
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1310
                    Sets.newHashSet(Direction.NORTH),
×
1311
                    Component.literal("Connected cables are invalid")
×
1312
            );
1313
            helper.assertValueEqual(
×
1314
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1315
                    Sets.newHashSet(),
×
1316
                    Component.literal("Connected cables are invalid")
×
1317
            );
1318
        });
×
1319
    }
×
1320

1321
    @GameTest(template = TEMPLATE_EMPTY)
1322
    public void testNetworkDelayerBreakByWrench(GameTestHelper helper) {
1323
        // Place variable store and cables directly
1324
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1325
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1326
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1327

1328
        // Break variable store with wrench
1329
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1330
        player.setShiftKeyDown(true); // To remove store!
×
1331
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
1332
        player.setPos(helper.absolutePos(POS).getCenter());
×
1333
        helper.getBlockState(POS).useItemOn(player.getItemInHand(InteractionHand.MAIN_HAND), helper.getLevel(), player,
×
1334
                InteractionHand.MAIN_HAND,
1335
                new BlockHitResult(
1336
                        helper.absolutePos(POS).getCenter(),
×
1337
                        Direction.SOUTH,
1338
                        helper.absolutePos(POS),
×
1339
                        false)
1340
        );
1341

1342
        helper.succeedWhen(() -> {
×
1343
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_DELAY.value(), POS);
×
1344

1345
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1346
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1347
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1348
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1349
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1350

1351
            helper.assertValueEqual(
×
1352
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1353
                    Sets.newHashSet(),
×
1354
                    Component.literal("Connected cables are invalid")
×
1355
            );
1356
            helper.assertValueEqual(
×
1357
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1358
                    Sets.newHashSet(),
×
1359
                    Component.literal("Connected cables are invalid")
×
1360
            );
1361
            helper.assertValueEqual(
×
1362
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1363
                    Sets.newHashSet(),
×
1364
                    Component.literal("Connected cables are invalid")
×
1365
            );
1366

1367
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_DELAY.get().asItem());
×
1368
        });
×
1369
    }
×
1370

1371
    @GameTest(template = TEMPLATE_EMPTY)
1372
    public void testNetworkDelayerBreakByPickaxe(GameTestHelper helper) {
1373
        // Place variable store and cables directly
1374
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1375
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1376
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1377

1378
        // Break variable store with wrench
1379
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1380
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
1381
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
1382
        player.setPos(helper.absolutePos(POS).getCenter());
×
1383
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
1384

1385
        helper.succeedWhen(() -> {
×
1386
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_DELAY.value(), POS);
×
1387

1388
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1389
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1390
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1391
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1392
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1393

1394
            helper.assertValueEqual(
×
1395
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1396
                    Sets.newHashSet(),
×
1397
                    Component.literal("Connected cables are invalid")
×
1398
            );
1399
            helper.assertValueEqual(
×
1400
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1401
                    Sets.newHashSet(),
×
1402
                    Component.literal("Connected cables are invalid")
×
1403
            );
1404
            helper.assertValueEqual(
×
1405
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1406
                    Sets.newHashSet(),
×
1407
                    Component.literal("Connected cables are invalid")
×
1408
            );
1409
        });
×
1410
    }
×
1411

1412
    @GameTest(template = TEMPLATE_EMPTY)
1413
    public void testNetworkDelayerBreakByTnt(GameTestHelper helper) {
1414
        // Place variable store and cables directly
1415
        helper.setBlock(POS, RegistryEntries.BLOCK_DELAY.value());
×
1416
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1417
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1418

1419
        // Destroy with TNT
1420
        helper.setBlock(POS.above(), Blocks.TNT);
×
1421
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
1422

1423
        helper.succeedWhen(() -> {
×
1424
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_VARIABLE_STORE.value(), POS);
×
1425

1426
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1427
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1428

1429
            helper.assertValueEqual(
×
1430
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1431
                    Sets.newHashSet(),
×
1432
                    Component.literal("Connected cables are invalid")
×
1433
            );
1434

1435
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_DELAY.get().asItem());
×
1436
        });
×
1437
    }
×
1438

1439
    /* ----- Materializer ----- */
1440

1441
    @GameTest(template = TEMPLATE_EMPTY)
1442
    public void testNetworkMaterializerSingle(GameTestHelper helper) {
1443
        // Place variable store and cables directly
1444
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1445
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1446
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1447

1448
        helper.succeedWhen(() -> {
×
1449
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1450
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1451
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1452
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1453
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1454

1455
            helper.assertValueEqual(
×
1456
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1457
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1458
                    Component.literal("Connected cables are invalid")
×
1459
            );
1460
            helper.assertValueEqual(
×
1461
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1462
                    Sets.newHashSet(Direction.NORTH),
×
1463
                    Component.literal("Connected cables are invalid")
×
1464
            );
1465
            helper.assertValueEqual(
×
1466
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1467
                    Sets.newHashSet(Direction.WEST),
×
1468
                    Component.literal("Connected cables are invalid")
×
1469
            );
1470
        });
×
1471
    }
×
1472

1473
    @GameTest(template = TEMPLATE_EMPTY)
1474
    public void testNetworkMaterializerSingleAfterwards(GameTestHelper helper) {
1475
        // Place cables directly
1476
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1477
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1478

1479
        // Place variable store afterwards
1480
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1481

1482
        helper.succeedWhen(() -> {
×
1483
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1484
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1485
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1486
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1487
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1488

1489
            helper.assertValueEqual(
×
1490
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1491
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1492
                    Component.literal("Connected cables are invalid")
×
1493
            );
1494
            helper.assertValueEqual(
×
1495
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1496
                    Sets.newHashSet(Direction.NORTH),
×
1497
                    Component.literal("Connected cables are invalid")
×
1498
            );
1499
            helper.assertValueEqual(
×
1500
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1501
                    Sets.newHashSet(Direction.WEST),
×
1502
                    Component.literal("Connected cables are invalid")
×
1503
            );
1504
        });
×
1505
    }
×
1506

1507
    @GameTest(template = TEMPLATE_EMPTY)
1508
    public void testNetworkMaterializerDisconnectByWrench(GameTestHelper helper) {
1509
        // Place variable store and cables directly
1510
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1511
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1512
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1513

1514
        // And disconnect them using the wrench
1515
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1516
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
1517
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
1518
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
1519
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
1520
                InteractionHand.MAIN_HAND,
1521
                new BlockHitResult(
1522
                        helper.absolutePos(POS.east()).getCenter(),
×
1523
                        Direction.NORTH,
1524
                        helper.absolutePos(POS.east()),
×
1525
                        false)
1526
        );
1527

1528
        helper.succeedWhen(() -> {
×
1529
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1530
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1531
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1532
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1533
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
1534

1535
            helper.assertValueEqual(
×
1536
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1537
                    Sets.newHashSet(Direction.SOUTH),
×
1538
                    Component.literal("Connected cables are invalid")
×
1539
            );
1540
            helper.assertValueEqual(
×
1541
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1542
                    Sets.newHashSet(Direction.NORTH),
×
1543
                    Component.literal("Connected cables are invalid")
×
1544
            );
1545
            helper.assertValueEqual(
×
1546
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1547
                    Sets.newHashSet(),
×
1548
                    Component.literal("Connected cables are invalid")
×
1549
            );
1550
        });
×
1551
    }
×
1552

1553
    @GameTest(template = TEMPLATE_EMPTY)
1554
    public void testNetworkMaterializerBreakByWrench(GameTestHelper helper) {
1555
        // Place variable store and cables directly
1556
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1557
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1558
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1559

1560
        // Break variable store with wrench
1561
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1562
        player.setShiftKeyDown(true); // To remove store!
×
1563
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
1564
        player.setPos(helper.absolutePos(POS).getCenter());
×
1565
        helper.getBlockState(POS).useItemOn(player.getItemInHand(InteractionHand.MAIN_HAND), helper.getLevel(), player,
×
1566
                InteractionHand.MAIN_HAND,
1567
                new BlockHitResult(
1568
                        helper.absolutePos(POS).getCenter(),
×
1569
                        Direction.SOUTH,
1570
                        helper.absolutePos(POS),
×
1571
                        false)
1572
        );
1573

1574
        helper.succeedWhen(() -> {
×
1575
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_MATERIALIZER.value(), POS);
×
1576

1577
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1578
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1579
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1580
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1581
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1582

1583
            helper.assertValueEqual(
×
1584
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1585
                    Sets.newHashSet(),
×
1586
                    Component.literal("Connected cables are invalid")
×
1587
            );
1588
            helper.assertValueEqual(
×
1589
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1590
                    Sets.newHashSet(),
×
1591
                    Component.literal("Connected cables are invalid")
×
1592
            );
1593
            helper.assertValueEqual(
×
1594
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1595
                    Sets.newHashSet(),
×
1596
                    Component.literal("Connected cables are invalid")
×
1597
            );
1598

1599
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_MATERIALIZER.get().asItem());
×
1600
        });
×
1601
    }
×
1602

1603
    @GameTest(template = TEMPLATE_EMPTY)
1604
    public void testNetworkMaterializerBreakByPickaxe(GameTestHelper helper) {
1605
        // Place variable store and cables directly
1606
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1607
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1608
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1609

1610
        // Break variable store with wrench
1611
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1612
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
1613
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
1614
        player.setPos(helper.absolutePos(POS).getCenter());
×
1615
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
1616

1617
        helper.succeedWhen(() -> {
×
1618
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_MATERIALIZER.value(), POS);
×
1619

1620
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1621
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1622
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1623
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1624
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1625

1626
            helper.assertValueEqual(
×
1627
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1628
                    Sets.newHashSet(),
×
1629
                    Component.literal("Connected cables are invalid")
×
1630
            );
1631
            helper.assertValueEqual(
×
1632
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1633
                    Sets.newHashSet(),
×
1634
                    Component.literal("Connected cables are invalid")
×
1635
            );
1636
            helper.assertValueEqual(
×
1637
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1638
                    Sets.newHashSet(),
×
1639
                    Component.literal("Connected cables are invalid")
×
1640
            );
1641
        });
×
1642
    }
×
1643

1644
    @GameTest(template = TEMPLATE_EMPTY)
1645
    public void testNetworkMaterializerBreakByTnt(GameTestHelper helper) {
1646
        // Place variable store and cables directly
1647
        helper.setBlock(POS, RegistryEntries.BLOCK_MATERIALIZER.value());
×
1648
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1649
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1650

1651
        // Destroy with TNT
1652
        helper.setBlock(POS.above(), Blocks.TNT);
×
1653
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
1654

1655
        helper.succeedWhen(() -> {
×
1656
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_MATERIALIZER.value(), POS);
×
1657

1658
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1659
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1660

1661
            helper.assertValueEqual(
×
1662
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1663
                    Sets.newHashSet(),
×
1664
                    Component.literal("Connected cables are invalid")
×
1665
            );
1666

1667
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_MATERIALIZER.get().asItem());
×
1668
        });
×
1669
    }
×
1670

1671
    /* ----- Proxy ----- */
1672

1673
    @GameTest(template = TEMPLATE_EMPTY)
1674
    public void testNetworkProxySingle(GameTestHelper helper) {
1675
        // Place variable store and cables directly
1676
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1677
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1678
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1679

1680
        helper.succeedWhen(() -> {
×
1681
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1682
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1683
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1684
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1685
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1686

1687
            helper.assertValueEqual(
×
1688
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1689
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1690
                    Component.literal("Connected cables are invalid")
×
1691
            );
1692
            helper.assertValueEqual(
×
1693
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1694
                    Sets.newHashSet(Direction.NORTH),
×
1695
                    Component.literal("Connected cables are invalid")
×
1696
            );
1697
            helper.assertValueEqual(
×
1698
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1699
                    Sets.newHashSet(Direction.WEST),
×
1700
                    Component.literal("Connected cables are invalid")
×
1701
            );
1702
        });
×
1703
    }
×
1704

1705
    @GameTest(template = TEMPLATE_EMPTY)
1706
    public void testNetworkProxySingleAfterwards(GameTestHelper helper) {
1707
        // Place cables directly
1708
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1709
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1710

1711
        // Place variable store afterwards
1712
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1713

1714
        helper.succeedWhen(() -> {
×
1715
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1716
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1717
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1718
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1719
            helper.assertTrue(network2 == network3, Component.literal("Networks of connected cables are not equal"));
×
1720

1721
            helper.assertValueEqual(
×
1722
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1723
                    Sets.newHashSet(Direction.EAST, Direction.SOUTH),
×
1724
                    Component.literal("Connected cables are invalid")
×
1725
            );
1726
            helper.assertValueEqual(
×
1727
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1728
                    Sets.newHashSet(Direction.NORTH),
×
1729
                    Component.literal("Connected cables are invalid")
×
1730
            );
1731
            helper.assertValueEqual(
×
1732
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1733
                    Sets.newHashSet(Direction.WEST),
×
1734
                    Component.literal("Connected cables are invalid")
×
1735
            );
1736
        });
×
1737
    }
×
1738

1739
    @GameTest(template = TEMPLATE_EMPTY)
1740
    public void testNetworkProxyDisconnectByWrench(GameTestHelper helper) {
1741
        // Place variable store and cables directly
1742
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1743
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1744
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1745

1746
        // And disconnect them using the wrench
1747
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1748
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_WRENCH.value());
×
1749
        player.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
×
1750
        player.setPos(helper.absolutePos(POS.east()).getCenter().add(-0.25, -1.5, -0.5));
×
1751
        helper.getBlockState(POS.east()).useItemOn(itemStack, helper.getLevel(), player,
×
1752
                InteractionHand.MAIN_HAND,
1753
                new BlockHitResult(
1754
                        helper.absolutePos(POS.east()).getCenter(),
×
1755
                        Direction.NORTH,
1756
                        helper.absolutePos(POS.east()),
×
1757
                        false)
1758
        );
1759

1760
        helper.succeedWhen(() -> {
×
1761
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1762
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1763
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1764
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1765
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are equal"));
×
1766

1767
            helper.assertValueEqual(
×
1768
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1769
                    Sets.newHashSet(Direction.SOUTH),
×
1770
                    Component.literal("Connected cables are invalid")
×
1771
            );
1772
            helper.assertValueEqual(
×
1773
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1774
                    Sets.newHashSet(Direction.NORTH),
×
1775
                    Component.literal("Connected cables are invalid")
×
1776
            );
1777
            helper.assertValueEqual(
×
1778
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1779
                    Sets.newHashSet(),
×
1780
                    Component.literal("Connected cables are invalid")
×
1781
            );
1782
        });
×
1783
    }
×
1784

1785
    @GameTest(template = TEMPLATE_EMPTY)
1786
    public void testNetworkProxyBreakByWrench(GameTestHelper helper) {
1787
        // Place variable store and cables directly
1788
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1789
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1790
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1791

1792
        // Break variable store with wrench
1793
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1794
        player.setShiftKeyDown(true); // To remove store!
×
1795
        player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(RegistryEntries.ITEM_WRENCH.value()));
×
1796
        player.setPos(helper.absolutePos(POS).getCenter());
×
1797
        helper.getBlockState(POS).useItemOn(player.getItemInHand(InteractionHand.MAIN_HAND), helper.getLevel(), player,
×
1798
                InteractionHand.MAIN_HAND,
1799
                new BlockHitResult(
1800
                        helper.absolutePos(POS).getCenter(),
×
1801
                        Direction.SOUTH,
1802
                        helper.absolutePos(POS),
×
1803
                        false)
1804
        );
1805

1806
        helper.succeedWhen(() -> {
×
1807
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_PROXY.value(), POS);
×
1808

1809
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1810
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1811
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1812
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1813
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1814

1815
            helper.assertValueEqual(
×
1816
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1817
                    Sets.newHashSet(),
×
1818
                    Component.literal("Connected cables are invalid")
×
1819
            );
1820
            helper.assertValueEqual(
×
1821
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1822
                    Sets.newHashSet(),
×
1823
                    Component.literal("Connected cables are invalid")
×
1824
            );
1825
            helper.assertValueEqual(
×
1826
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1827
                    Sets.newHashSet(),
×
1828
                    Component.literal("Connected cables are invalid")
×
1829
            );
1830

1831
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_PROXY.get().asItem());
×
1832
        });
×
1833
    }
×
1834

1835
    @GameTest(template = TEMPLATE_EMPTY)
1836
    public void testNetworkProxyBreakByPickaxe(GameTestHelper helper) {
1837
        // Place variable store and cables directly
1838
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1839
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1840
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1841

1842
        // Break variable store with wrench
1843
        Player player = helper.makeMockPlayer(GameType.SURVIVAL);
×
1844
        ItemStack toolStack = new ItemStack(Items.DIAMOND_PICKAXE);
×
1845
        player.setItemInHand(InteractionHand.MAIN_HAND, toolStack);
×
1846
        player.setPos(helper.absolutePos(POS).getCenter());
×
1847
        helper.getBlockState(POS).onDestroyedByPlayer(helper.getLevel(), helper.absolutePos(POS), player, toolStack, true, helper.getLevel().getFluidState(helper.absolutePos(POS)));
×
1848

1849
        helper.succeedWhen(() -> {
×
1850
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_PROXY.value(), POS);
×
1851

1852
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1853
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south()), null);
×
1854
            INetwork network3 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.east()), null);
×
1855
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1856
            helper.assertTrue(network2 != network3, Component.literal("Networks of connected cables are not equal"));
×
1857

1858
            helper.assertValueEqual(
×
1859
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1860
                    Sets.newHashSet(),
×
1861
                    Component.literal("Connected cables are invalid")
×
1862
            );
1863
            helper.assertValueEqual(
×
1864
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south())),
×
1865
                    Sets.newHashSet(),
×
1866
                    Component.literal("Connected cables are invalid")
×
1867
            );
1868
            helper.assertValueEqual(
×
1869
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.east())),
×
1870
                    Sets.newHashSet(),
×
1871
                    Component.literal("Connected cables are invalid")
×
1872
            );
1873
        });
×
1874
    }
×
1875

1876
    @GameTest(template = TEMPLATE_EMPTY)
1877
    public void testNetworkProxyBreakByTnt(GameTestHelper helper) {
1878
        // Place variable store and cables directly
1879
        helper.setBlock(POS, RegistryEntries.BLOCK_PROXY.value());
×
1880
        helper.setBlock(POS.south(), RegistryEntries.BLOCK_CABLE.value());
×
1881
        helper.setBlock(POS.east(), RegistryEntries.BLOCK_CABLE.value());
×
1882

1883
        // Destroy with TNT
1884
        helper.setBlock(POS.above(), Blocks.TNT);
×
1885
        helper.setBlock(POS.above().above(), Blocks.REDSTONE_BLOCK);
×
1886

1887
        helper.succeedWhen(() -> {
×
1888
            helper.assertBlockNotPresent(RegistryEntries.BLOCK_PROXY.value(), POS);
×
1889

1890
            Optional<INetwork> network1 = NetworkHelpers.getNetwork(helper.getLevel(), helper.absolutePos(POS), null);
×
1891
            helper.assertTrue(network1.isEmpty(), Component.literal("Networks of connected cables are not equal"));
×
1892

1893
            helper.assertValueEqual(
×
1894
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1895
                    Sets.newHashSet(),
×
1896
                    Component.literal("Connected cables are invalid")
×
1897
            );
1898

1899
            helper.assertItemEntityPresent(RegistryEntries.BLOCK_PROXY.get().asItem());
×
1900
        });
×
1901
    }
×
1902

1903
    @GameTest(template = TEMPLATE_EMPTY)
1904
    public void testNetworkMonodirectional(GameTestHelper helper) {
1905
        // Place cables directly
1906
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
1907
        helper.setBlock(POS.south().south().south(), RegistryEntries.BLOCK_CABLE.value());
×
1908

1909
        // Place monodirectional connectors
1910
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS), Direction.SOUTH, PartTypes.CONNECTOR_MONO, new ItemStack(PartTypes.CONNECTOR_MONO.getItem()));
×
1911
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS.south().south().south()), Direction.NORTH, PartTypes.CONNECTOR_MONO, new ItemStack(PartTypes.CONNECTOR_MONO.getItem()));
×
1912

1913
        helper.succeedWhen(() -> {
×
1914
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1915
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().south().south()), null);
×
1916
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1917

1918
            helper.assertValueEqual(
×
1919
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1920
                    Sets.newHashSet(),
×
1921
                    Component.literal("Connected cables are invalid")
×
1922
            );
1923
            helper.assertValueEqual(
×
1924
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().south().south())),
×
1925
                    Sets.newHashSet(),
×
1926
                    Component.literal("Connected cables are invalid")
×
1927
            );
1928
        });
×
1929
    }
×
1930

1931
    @GameTest(template = TEMPLATE_EMPTY)
1932
    public void testNetworkMonodirectionalUnconnected(GameTestHelper helper) {
1933
        // Place cables directly
1934
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
1935
        helper.setBlock(POS.south().south().south().east(), RegistryEntries.BLOCK_CABLE.value());
×
1936

1937
        // Place monodirectional connectors
1938
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS), Direction.SOUTH, PartTypes.CONNECTOR_MONO, new ItemStack(PartTypes.CONNECTOR_MONO.getItem()));
×
1939
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), Direction.NORTH, PartTypes.CONNECTOR_MONO, new ItemStack(PartTypes.CONNECTOR_MONO.getItem()));
×
1940

1941
        helper.succeedWhen(() -> {
×
1942
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1943
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), null);
×
1944
            helper.assertFalse(network1 == network2, Component.literal("Networks of connected cables are equal"));
×
1945

1946
            helper.assertValueEqual(
×
1947
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1948
                    Sets.newHashSet(),
×
1949
                    Component.literal("Connected cables are invalid")
×
1950
            );
1951
            helper.assertValueEqual(
×
1952
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().south().south())),
×
1953
                    Sets.newHashSet(),
×
1954
                    Component.literal("Connected cables are invalid")
×
1955
            );
1956
        });
×
1957
    }
×
1958

1959
    @GameTest(template = TEMPLATE_EMPTY)
1960
    public void testNetworkOmnidirectional(GameTestHelper helper) {
1961
        // Place cables directly
1962
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
1963
        helper.setBlock(POS.south().south().south().east(), RegistryEntries.BLOCK_CABLE.value());
×
1964

1965
        // Place omnidirectional connectors
1966
        ItemStack omniDirectionalConnector = new ItemStack(PartTypes.CONNECTOR_OMNI.getItem());
×
1967
        omniDirectionalConnector.set(RegistryEntries.DATACOMPONENT_OMNIDIRECTIONAL_GROUP, 1);
×
1968
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS), Direction.SOUTH, PartTypes.CONNECTOR_OMNI, omniDirectionalConnector.copy());
×
1969
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), Direction.NORTH, PartTypes.CONNECTOR_OMNI, omniDirectionalConnector.copy());
×
1970

1971
        helper.succeedWhen(() -> {
×
1972
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
1973
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), null);
×
1974
            helper.assertTrue(network1 == network2, Component.literal("Networks of connected cables are not equal"));
×
1975

1976
            helper.assertValueEqual(
×
1977
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
1978
                    Sets.newHashSet(),
×
1979
                    Component.literal("Connected cables are invalid")
×
1980
            );
1981
            helper.assertValueEqual(
×
1982
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().south().south())),
×
1983
                    Sets.newHashSet(),
×
1984
                    Component.literal("Connected cables are invalid")
×
1985
            );
1986
        });
×
1987
    }
×
1988

1989
    @GameTest(template = TEMPLATE_EMPTY)
1990
    public void testNetworkOmnidirectionalUnconnected(GameTestHelper helper) {
1991
        // Place cables directly
1992
        helper.setBlock(POS, RegistryEntries.BLOCK_CABLE.value());
×
1993
        helper.setBlock(POS.south().south().south().east(), RegistryEntries.BLOCK_CABLE.value());
×
1994

1995
        // Place omnidirectional connectors
1996
        ItemStack omniDirectionalConnector1 = new ItemStack(PartTypes.CONNECTOR_OMNI.getItem());
×
1997
        omniDirectionalConnector1.set(RegistryEntries.DATACOMPONENT_OMNIDIRECTIONAL_GROUP, 1);
×
1998
        ItemStack omniDirectionalConnector2 = new ItemStack(PartTypes.CONNECTOR_OMNI.getItem());
×
1999
        omniDirectionalConnector2.set(RegistryEntries.DATACOMPONENT_OMNIDIRECTIONAL_GROUP, 2);
×
2000
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS), Direction.SOUTH, PartTypes.CONNECTOR_OMNI, omniDirectionalConnector1.copy());
×
2001
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), Direction.NORTH, PartTypes.CONNECTOR_OMNI, omniDirectionalConnector2.copy());
×
2002

2003
        helper.succeedWhen(() -> {
×
2004
            INetwork network1 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS), null);
×
2005
            INetwork network2 = NetworkHelpers.getNetworkChecked(helper.getLevel(), helper.absolutePos(POS.south().south().south().east()), null);
×
2006
            helper.assertFalse(network1 == network2, Component.literal("Networks of connected cables are equal"));
×
2007

2008
            helper.assertValueEqual(
×
2009
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS)),
×
2010
                    Sets.newHashSet(),
×
2011
                    Component.literal("Connected cables are invalid")
×
2012
            );
2013
            helper.assertValueEqual(
×
2014
                    CableHelpers.getExternallyConnectedCables(helper.getLevel(), helper.absolutePos(POS.south().south().south())),
×
2015
                    Sets.newHashSet(),
×
2016
                    Component.literal("Connected cables are invalid")
×
2017
            );
2018
        });
×
2019
    }
×
2020

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