Skip to content

Commit 0c9fc32

Browse files
committed
added a few more gametests
tweaked RouterTestHelper a bit
1 parent a5ef1f3 commit 0c9fc32

File tree

4 files changed

+222
-13
lines changed

4 files changed

+222
-13
lines changed

src/test/java/me/desht/modularrouters/test/RouterTestHelper.java

+36-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.desht.modularrouters.test;
22

3+
import me.desht.modularrouters.block.ModularRouterBlock;
34
import me.desht.modularrouters.block.tile.ModularRouterBlockEntity;
45
import me.desht.modularrouters.container.handler.AugmentHandler;
56
import me.desht.modularrouters.core.ModBlocks;
@@ -23,6 +24,7 @@
2324
import net.minecraft.world.level.block.entity.ChestBlockEntity;
2425
import net.minecraft.world.phys.Vec3;
2526
import net.neoforged.neoforge.items.IItemHandlerModifiable;
27+
import net.neoforged.neoforge.items.ItemHandlerHelper;
2628
import net.neoforged.testframework.gametest.ExtendedGameTestHelper;
2729

2830
import java.util.List;
@@ -37,7 +39,11 @@ public RouterTestHelper(GameTestInfo info) {
3739
}
3840

3941
public RouterWrapper placeRouter(int x, int y, int z) {
40-
setBlock(x, y, z, ModBlocks.MODULAR_ROUTER.get());
42+
return placeRouter(x, y, z, Direction.NORTH);
43+
}
44+
45+
public RouterWrapper placeRouter(int x, int y, int z, Direction routerFacing) {
46+
setBlock(x, y, z, ModBlocks.MODULAR_ROUTER.get().defaultBlockState().setValue(ModularRouterBlock.FACING, routerFacing));
4147
var router = getBlockEntity(x, y, z, ModularRouterBlockEntity.class);
4248
addEndListener(success -> {
4349
if (success) {
@@ -88,13 +94,7 @@ public RouterWrapper maxSpeed() {
8894

8995
public ItemStack addDirectionalModule(Supplier<? extends Item> module, RelativeDirection direction) {
9096
var stack = module.get().getDefaultInstance();
91-
stack.set(ModDataComponents.COMMON_MODULE_SETTINGS, new ModuleSettings(
92-
ModuleFlags.DEFAULT,
93-
direction,
94-
ModuleTermination.NONE,
95-
RedstoneBehaviour.ALWAYS,
96-
0
97-
));
97+
stack.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(direction).build());
9898
return addModule(stack);
9999
}
100100

@@ -107,13 +107,13 @@ public ItemStack addTargetedModule(Supplier<? extends Item> module, int x, int y
107107
}
108108

109109
public ItemStack addModule(ItemStack module) {
110-
router.getModules().insertItem(0, module, false);
110+
ItemHandlerHelper.insertItem(router.getModules(), module, false);
111111
return module;
112112
}
113113

114-
public ItemStack addUpgrade(ItemStack module) {
115-
router.getUpgrades().insertItem(0, module, false);
116-
return module;
114+
public ItemStack addUpgrade(ItemStack upgrade) {
115+
ItemHandlerHelper.insertItem(router.getUpgrades(), upgrade, false);
116+
return upgrade;
117117
}
118118

119119
public ItemStack insertBuffer(ItemStack stack) {
@@ -173,7 +173,10 @@ public static class ModuleSettingsBuilder {
173173
private RedstoneBehaviour redstoneBehaviour;
174174
private int regulatorAmount;
175175

176-
public ModuleSettingsBuilder() {}
176+
public static ModuleSettingsBuilder create() {
177+
return new ModuleSettingsBuilder(ModuleSettings.DEFAULT);
178+
}
179+
177180
public ModuleSettingsBuilder(ModuleSettings settings) {
178181
this.flags = settings.flags();
179182
this.facing = settings.facing();
@@ -187,6 +190,26 @@ public ModuleSettingsBuilder facing(RelativeDirection direction) {
187190
return this;
188191
}
189192

193+
public ModuleSettingsBuilder flags(ModuleFlags moduleFlags) {
194+
this.flags = moduleFlags;
195+
return this;
196+
}
197+
198+
public ModuleSettingsBuilder termination(ModuleTermination termination) {
199+
this.termination = termination;
200+
return this;
201+
}
202+
203+
public ModuleSettingsBuilder redstone(RedstoneBehaviour redstoneBehaviour) {
204+
this.redstoneBehaviour = redstoneBehaviour;
205+
return this;
206+
}
207+
208+
public ModuleSettingsBuilder regulated(int amount) {
209+
this.regulatorAmount = amount;
210+
return this;
211+
}
212+
190213
public ModuleSettings build() {
191214
return new ModuleSettings(flags, facing, termination, redstoneBehaviour, regulatorAmount);
192215
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package me.desht.modularrouters.test.module;
2+
3+
import me.desht.modularrouters.core.ModDataComponents;
4+
import me.desht.modularrouters.core.ModItems;
5+
import me.desht.modularrouters.logic.compiled.CompiledActivatorModule;
6+
import me.desht.modularrouters.logic.compiled.CompiledActivatorModule.ActionType;
7+
import me.desht.modularrouters.logic.compiled.CompiledActivatorModule.ActivatorSettings;
8+
import me.desht.modularrouters.logic.compiled.CompiledActivatorModule.EntityMode;
9+
import me.desht.modularrouters.logic.compiled.CompiledActivatorModule.LookDirection;
10+
import me.desht.modularrouters.logic.settings.RelativeDirection;
11+
import me.desht.modularrouters.test.RouterTestHelper;
12+
import me.desht.modularrouters.test.RouterTestHelper.ModuleSettingsBuilder;
13+
import net.minecraft.core.BlockPos;
14+
import net.minecraft.core.Direction;
15+
import net.minecraft.gametest.framework.GameTest;
16+
import net.minecraft.world.entity.EntityType;
17+
import net.minecraft.world.item.ItemStack;
18+
import net.minecraft.world.item.Items;
19+
import net.minecraft.world.level.block.Blocks;
20+
import net.minecraft.world.level.block.LeverBlock;
21+
import net.neoforged.testframework.annotation.TestHolder;
22+
import net.neoforged.testframework.gametest.EmptyTemplate;
23+
24+
public class ActivatorModuleTest {
25+
@GameTest
26+
@TestHolder
27+
@EmptyTemplate(floor = true)
28+
static void activatorTestBlock(final RouterTestHelper helper) {
29+
var router = helper.placeRouter(0, 2, 1, Direction.EAST);
30+
helper.setBlock(2, 2, 1, Blocks.LEVER);
31+
32+
ItemStack activator = ModItems.ACTIVATOR_MODULE.toStack();
33+
activator.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(RelativeDirection.FRONT).build());
34+
router.addModule(activator);
35+
36+
helper.startSequence()
37+
.thenIdle(router.routerTicks(1))
38+
.thenExecute(() -> helper.assertBlockProperty(new BlockPos(2, 2, 1), LeverBlock.POWERED, true))
39+
.thenSucceed();
40+
}
41+
42+
@GameTest
43+
@TestHolder
44+
@EmptyTemplate(floor = true)
45+
static void activatorTestItem(final RouterTestHelper helper) {
46+
var router = helper.placeRouter(1, 2, 1, Direction.EAST);
47+
helper.setBlock(2, 2, 1, Blocks.AIR);
48+
49+
ItemStack activator = ModItems.ACTIVATOR_MODULE.toStack();
50+
activator.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(RelativeDirection.FRONT).build());
51+
activator.set(ModDataComponents.ACTIVATOR_SETTINGS, new ActivatorSettings(
52+
ActionType.ITEM_OR_BLOCK, LookDirection.BELOW, EntityMode.NEAREST, false)
53+
);
54+
router.addModule(activator);
55+
router.insertBuffer(Items.FLINT_AND_STEEL.getDefaultInstance());
56+
57+
helper.startSequence()
58+
.thenIdle(router.routerTicks(1))
59+
.thenExecute(() -> helper.assertBlockPresent(Blocks.FIRE, 2,2 , 1))
60+
.thenSucceed();
61+
}
62+
63+
@GameTest
64+
@TestHolder
65+
@EmptyTemplate(floor = true)
66+
static void activatorTestEntity(final RouterTestHelper helper) {
67+
var router = helper.placeRouter(1, 2, 1, Direction.EAST);
68+
helper.spawn(EntityType.COW, 2, 2, 1);
69+
70+
ItemStack activator = ModItems.ACTIVATOR_MODULE.toStack();
71+
activator.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(RelativeDirection.FRONT).build());
72+
activator.set(ModDataComponents.ACTIVATOR_SETTINGS, new ActivatorSettings(
73+
ActionType.USE_ITEM_ON_ENTITY, LookDirection.LEVEL, EntityMode.NEAREST, false)
74+
);
75+
router.addModule(activator);
76+
router.insertBuffer(Items.BUCKET.getDefaultInstance());
77+
78+
helper.startSequence()
79+
.thenIdle(router.routerTicks(1))
80+
.thenExecute(() -> router.assertBuffer(Items.MILK_BUCKET, 1))
81+
// 4 buckets in router; 3 empty buckets should stay, 1 milk bucket dropped
82+
.thenExecute(() -> router.setBuffer(new ItemStack(Items.BUCKET, 4)))
83+
.thenIdle(router.routerTicks(1))
84+
.thenExecute(() -> router.assertBuffer(Items.BUCKET, 3))
85+
.thenExecute(() -> helper.assertItemEntityCountIs(Items.MILK_BUCKET, new BlockPos(2, 2, 1), 1.0, 1))
86+
.thenSucceed();
87+
88+
}
89+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package me.desht.modularrouters.test.module;
2+
3+
import me.desht.modularrouters.core.ModItems;
4+
import me.desht.modularrouters.logic.settings.RelativeDirection;
5+
import me.desht.modularrouters.test.RouterTestHelper;
6+
import net.minecraft.core.BlockPos;
7+
import net.minecraft.gametest.framework.GameTest;
8+
import net.minecraft.world.item.ItemStack;
9+
import net.minecraft.world.item.Items;
10+
import net.neoforged.testframework.annotation.TestHolder;
11+
import net.neoforged.testframework.gametest.EmptyTemplate;
12+
13+
public class DropperModuleTest {
14+
@GameTest
15+
@TestHolder
16+
@EmptyTemplate(floor = true)
17+
static void testDropperModule(final RouterTestHelper helper) {
18+
var router = helper.placeRouter(1, 1, 1);
19+
20+
router.addDirectionalModule(ModItems.DROPPER_MODULE, RelativeDirection.UP);
21+
22+
helper.startSequence()
23+
.thenExecute(() -> router.insertBuffer(new ItemStack(Items.DIAMOND)))
24+
.thenIdle(router.routerTicks(1))
25+
.thenExecute(router::assertBufferEmpty)
26+
.thenExecute(() -> helper.assertItemEntityPresent(Items.DIAMOND, new BlockPos(1, 2, 1), 0.0))
27+
.thenSucceed();
28+
}
29+
30+
@GameTest
31+
@TestHolder
32+
@EmptyTemplate(floor = true)
33+
static void testDropperModuleStacked(final RouterTestHelper helper) {
34+
var router = helper.placeRouter(1, 1, 1);
35+
36+
router.addDirectionalModule(ModItems.DROPPER_MODULE, RelativeDirection.FRONT); // effectively north
37+
router.addUpgrade(ModItems.STACK_UPGRADE.toStack(5)); // 32 items at a time
38+
39+
helper.startSequence()
40+
.thenExecute(() -> router.insertBuffer(new ItemStack(Items.DIAMOND, 64)))
41+
.thenIdle(router.routerTicks(1))
42+
.thenExecute(() -> router.assertBuffer(Items.DIAMOND, 32))
43+
.thenExecute(() -> helper.assertItemEntityCountIs(Items.DIAMOND, new BlockPos(1, 1, 0), 0.0, 32))
44+
.thenSucceed();
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package me.desht.modularrouters.test.module;
2+
3+
import me.desht.modularrouters.core.ModDataComponents;
4+
import me.desht.modularrouters.core.ModItems;
5+
import me.desht.modularrouters.logic.settings.*;
6+
import me.desht.modularrouters.test.RouterTestHelper;
7+
import me.desht.modularrouters.test.RouterTestHelper.ModuleSettingsBuilder;
8+
import net.minecraft.gametest.framework.GameTest;
9+
import net.minecraft.world.item.ItemStack;
10+
import net.minecraft.world.item.Items;
11+
import net.minecraft.world.item.component.ItemContainerContents;
12+
import net.neoforged.testframework.annotation.TestHolder;
13+
import net.neoforged.testframework.gametest.EmptyTemplate;
14+
15+
import java.util.List;
16+
17+
public class FilterTest {
18+
@GameTest
19+
@TestHolder
20+
@EmptyTemplate
21+
static void simpleFilterTest(final RouterTestHelper helper) {
22+
var router = helper.placeRouter(1, 1, 1);
23+
24+
var topChest = helper.placeChest(1, 2, 1); // above router
25+
var northChest = helper.placeChest(1, 1, 0); // north of router
26+
27+
// first module blacklists cobblestone
28+
ItemStack sender1 = ModItems.SENDER_MODULE_1.toStack();
29+
sender1.set(ModDataComponents.FILTER, ItemContainerContents.fromItems(List.of(Items.COBBLESTONE.getDefaultInstance())));
30+
sender1.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(RelativeDirection.UP).build());
31+
router.router().getModules().insertItem(0, sender1, false);
32+
33+
// second module has empty blacklist
34+
ItemStack sender2 = ModItems.SENDER_MODULE_1.toStack();
35+
sender2.set(ModDataComponents.COMMON_MODULE_SETTINGS, ModuleSettingsBuilder.create().facing(RelativeDirection.FRONT).build());
36+
router.router().getModules().insertItem(1, sender2, false);
37+
38+
router.insertBuffer(new ItemStack(Items.COBBLESTONE, 2));
39+
40+
helper.startSequence()
41+
.thenIdle(router.routerTicks(2))
42+
.thenExecute(router::assertBufferEmpty)
43+
.thenExecute(() -> helper.assertValueEqual(topChest.countItem(Items.COBBLESTONE), 0, "top chest cobblestone"))
44+
.thenExecute(() -> helper.assertValueEqual(northChest.countItem(Items.COBBLESTONE), 2, "north chest cobblestone"))
45+
.thenExecute(() -> router.insertBuffer(new ItemStack(Items.IRON_INGOT, 2)))
46+
.thenIdle(router.routerTicks(2))
47+
.thenExecute(() -> helper.assertValueEqual(topChest.countItem(Items.IRON_INGOT), 1, "top chest iron"))
48+
.thenExecute(() -> helper.assertValueEqual(topChest.countItem(Items.IRON_INGOT), 1, "north chest iron"))
49+
.thenSucceed();
50+
}
51+
}

0 commit comments

Comments
 (0)