Skip to content

Commit ae5c2b3

Browse files
committed
Improve our game test helpers for how we interact with a block from a specific side, and add a test to validate it functions properly
1 parent 2db6de1 commit ae5c2b3

File tree

3 files changed

+42
-11
lines changed

3 files changed

+42
-11
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ forge_version=20.6.72-beta
1212
mod_version=10.5.20
1313
#This determines the minimum version of forge required to use Mekanism
1414
# Only bump it whenever we need access to a feature in forge that is not available in earlier versions
15-
forge_version_range=[20.6.50-beta,)
15+
forge_version_range=[20.6.72-beta,)
1616
minecraft_version_range=[1.20.6]
1717
#This specifies what type of release it will be uploaded to CurseForge and Modrinth as
1818
# options are: alpha, beta, release

src/gameTest/java/mekanism/common/tests/helpers/MekGameTestHelper.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import mekanism.api.annotations.NothingNullByDefault;
44
import mekanism.common.capabilities.Capabilities;
55
import mekanism.common.util.WorldUtils;
6+
import net.minecraft.commands.arguments.EntityAnchorArgument;
67
import net.minecraft.core.BlockPos;
78
import net.minecraft.core.Direction;
89
import net.minecraft.core.registries.BuiltInRegistries;
@@ -13,7 +14,6 @@
1314
import net.minecraft.server.level.ChunkMap;
1415
import net.minecraft.server.level.DistanceManager;
1516
import net.minecraft.world.InteractionHand;
16-
import net.minecraft.world.InteractionResult;
1717
import net.minecraft.world.ItemInteractionResult;
1818
import net.minecraft.world.entity.player.Player;
1919
import net.minecraft.world.item.Item;
@@ -24,6 +24,7 @@
2424
import net.minecraft.world.level.block.entity.BlockEntity;
2525
import net.minecraft.world.level.block.state.BlockState;
2626
import net.minecraft.world.phys.BlockHitResult;
27+
import net.minecraft.world.phys.Vec3;
2728
import net.neoforged.neoforge.items.IItemHandler;
2829
import net.neoforged.testframework.gametest.ExtendedGameTestHelper;
2930

@@ -142,15 +143,9 @@ public Player makeMockPlayerLookingAt(int x, int y, int z, Direction direction)
142143

143144
public Player makeMockPlayerLookingAt(BlockPos relativePos, Direction direction) {
144145
Player player = makeMockPlayer();
145-
player.setXRot(direction == Direction.DOWN ? 90 : direction == Direction.UP ? -90 : 0);
146-
float yRot = direction.toYRot();
147-
player.setYRot(yRot);
148-
player.setYHeadRot(yRot);
149-
player.setPos(absolutePos(relativePos).getCenter().subtract(
150-
0.45 * direction.getStepX(),
151-
0.45 * direction.getStepY() + player.getEyeHeight(),
152-
0.45 * direction.getStepZ()
153-
));
146+
BlockPos targetPos = absolutePos(relativePos);
147+
player.setPos(Vec3.upFromBottomCenterOf(targetPos.relative(direction.getOpposite()), -player.getEyeHeight()));
148+
player.lookAt(EntityAnchorArgument.Anchor.EYES, targetPos.getCenter());
154149
return player;
155150
}
156151

src/gameTest/java/mekanism/common/tests/network/TransmitterNetworkTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,18 @@
55
import mekanism.api.functions.ConstantPredicates;
66
import mekanism.common.Mekanism;
77
import mekanism.common.content.network.transmitter.Transmitter;
8+
import mekanism.common.lib.transmitter.ConnectionType;
89
import mekanism.common.lib.transmitter.DynamicNetwork;
910
import mekanism.common.registries.MekanismBlocks;
1011
import mekanism.common.tests.MekanismTests;
1112
import mekanism.common.tests.helpers.MekGameTestHelper;
13+
import mekanism.common.tests.helpers.TransmitterTestHelper;
14+
import mekanism.common.tile.transmitter.TileEntityLogisticalTransporter;
1215
import mekanism.common.tile.transmitter.TileEntityTransmitter;
16+
import mekanism.common.util.EnumUtils;
17+
import net.minecraft.SharedConstants;
18+
import net.minecraft.core.Direction;
19+
import net.minecraft.core.Direction.AxisDirection;
1320
import net.minecraft.gametest.framework.GameTest;
1421
import net.minecraft.server.level.ChunkHolder;
1522
import net.minecraft.server.level.ChunkLevel;
@@ -36,6 +43,35 @@ public class TransmitterNetworkTest {
3643
builder -> builder.fill(0, 0, 0, 3 * 16 - 1, 0, 0, MekanismBlocks.BASIC_UNIVERSAL_CABLE.getBlock())
3744
);
3845

46+
@GameTest(setupTicks = SharedConstants.TICKS_PER_SECOND)
47+
@TestHolder(description = "Tests the GameTest helpers that use a configurator on a position, to ensure it properly interacts with each side.")
48+
public static void testConfiguratorSideTargeting(final DynamicTest test) {
49+
test.registerGameTestTemplate(() -> StructureTemplateBuilder.withSize(3, 3, 3)
50+
.fill(1, 0, 1, 1, 2, 1, MekanismBlocks.BASIC_LOGISTICAL_TRANSPORTER.defaultState())
51+
.fill(1, 1, 0, 1, 1, 2, MekanismBlocks.BASIC_LOGISTICAL_TRANSPORTER.defaultState())
52+
.fill(0, 1, 1, 2, 1, 1, MekanismBlocks.BASIC_LOGISTICAL_TRANSPORTER.defaultState())
53+
);
54+
55+
//Note: We make negative axis directions get changed twice so that we have a better estimate of if we properly clicked on the correct side of the block
56+
test.onGameTest(TransmitterTestHelper.class, helper -> helper.startSequence()
57+
.thenExecute(() -> {
58+
//Use the configurator on all sides
59+
for (Direction direction : EnumUtils.DIRECTIONS) {
60+
helper.useConfigurator(1, 2, 1, direction, direction.getAxisDirection() == AxisDirection.POSITIVE ? 1 : 2);
61+
}
62+
})
63+
.thenMap(() -> helper.requireBlockEntity(1, 2, 1, TileEntityLogisticalTransporter.class).getTransmitter())
64+
.thenExecute(transporter -> {
65+
//Validate all sides got properly changed
66+
for (Direction direction : EnumUtils.DIRECTIONS) {
67+
ConnectionType expected = direction.getAxisDirection() == AxisDirection.POSITIVE ? ConnectionType.PUSH : ConnectionType.PULL;
68+
helper.assertValueEqual(transporter.getConnectionTypeRaw(direction), expected, "Connection Type " + direction.getName());
69+
}
70+
})
71+
.thenSucceed()
72+
);
73+
}
74+
3975
@GameTest(template = STRAIGHT_CABLE, batch = "1")
4076
@TestHolder(description = "Tests that reloading intermediary chunks does not cause a network to break.")
4177
public static void reloadIntermediary(final DynamicTest test) {

0 commit comments

Comments
 (0)