Skip to content

Commit ca7a6da

Browse files
committed
Test structures, room gen test, move client code into client pkg
1 parent 20a567d commit ca7a6da

File tree

19 files changed

+188
-28
lines changed

19 files changed

+188
-28
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ org.gradle.jvmargs=-Xmx3G
44
org.gradle.daemon=false
55

66
minecraft_version=1.18.1
7-
forge_version=39.0.97-gametest-1.18.x
7+
forge_version=39.0.88
88

99
mod_id=compactmachines
1010
mod_version=4.0.0-beta.7
1111

1212
# Dependencies and Libs
1313
jei_mc_version=1.18.1
14-
jei_version=9.1.0.41
14+
jei_version=9.4.1.106
1515
#top_version=1.16-3.1.4-22
1616

1717
# Curseforge

src/main/java/dev/compactmods/machines/reference/Resources.java renamed to src/main/java/dev/compactmods/machines/client/Resources.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.compactmods.machines.reference;
1+
package dev.compactmods.machines.client;
22

33
import net.minecraft.resources.ResourceLocation;
44
import dev.compactmods.machines.CompactMachines;

src/main/java/dev/compactmods/machines/reference/GuiIds.java renamed to src/main/java/dev/compactmods/machines/client/gui/GuiIds.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.compactmods.machines.reference;
1+
package dev.compactmods.machines.client.gui;
22

33
public enum GuiIds {
44
PSD_GUIDE,

src/test/java/dev/compactmods/machines/test/GameTestsMain.java

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.compactmods.machines.test;
2+
3+
import dev.compactmods.machines.CompactMachines;
4+
import dev.compactmods.machines.core.Registration;
5+
import dev.compactmods.machines.util.DimensionUtil;
6+
import net.minecraft.server.MinecraftServer;
7+
import net.minecraftforge.event.server.ServerStartedEvent;
8+
import net.minecraftforge.eventbus.api.SubscribeEvent;
9+
import net.minecraftforge.fml.common.Mod;
10+
11+
@Mod.EventBusSubscriber(modid = CompactMachines.MOD_ID)
12+
public class ServerEvents {
13+
14+
@SubscribeEvent
15+
public static void onServerStarted(final ServerStartedEvent evt) {
16+
final MinecraftServer serv = evt.getServer();
17+
18+
var compactLevel = serv.getLevel(Registration.COMPACT_DIMENSION);
19+
20+
if (compactLevel == null) {
21+
DimensionUtil.createAndRegisterWorldAndDimension(serv);
22+
}
23+
}
24+
}

src/test/java/dev/compactmods/machines/test/data/CodecTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.mojang.serialization.DataResult;
44
import dev.compactmods.machines.data.codec.CodecExtensions;
5-
import dev.compactmods.machines.reference.EnumMachineSize;
5+
import dev.compactmods.machines.rooms.RoomSize;
66
import net.minecraft.nbt.ListTag;
77
import net.minecraft.nbt.NbtOps;
88
import net.minecraft.nbt.StringTag;
@@ -31,15 +31,15 @@ void canSerializeVector3d() {
3131

3232
@Test
3333
void canSerializeMachineSize() {
34-
DataResult<Tag> result = EnumMachineSize.CODEC.encodeStart(NbtOps.INSTANCE, EnumMachineSize.LARGE);
34+
DataResult<Tag> result = RoomSize.CODEC.encodeStart(NbtOps.INSTANCE, RoomSize.LARGE);
3535

3636
result.resultOrPartial(Assertions::fail)
3737
.ifPresent(nbt -> {
3838
Assertions.assertEquals(StringTag.TYPE, nbt.getType());
3939

4040
StringTag string = (StringTag) nbt;
4141
Assertions.assertNotNull(string);
42-
Assertions.assertEquals(EnumMachineSize.LARGE.getSerializedName(), string.getAsString());
42+
Assertions.assertEquals(RoomSize.LARGE.getSerializedName(), string.getAsString());
4343
});
4444
}
4545
}

src/test/java/dev/compactmods/machines/test/data/MachineExternalDataTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
import net.minecraft.nbt.NbtOps;
2020
import net.minecraft.resources.ResourceKey;
2121
import net.minecraft.resources.ResourceLocation;
22-
import org.junit.jupiter.api.DisplayName;
22+
import net.minecraftforge.gametest.GameTestHolder;
23+
import net.minecraftforge.gametest.PrefixGameTestTemplate;
2324

24-
@DisplayName("External Machine Data")
25+
@PrefixGameTestTemplate(false)
26+
@GameTestHolder(CompactMachines.MOD_ID)
2527
public class MachineExternalDataTests {
2628
final static Path EXTERNAL = Paths.get("scenario", "single-machine-player-inside", "machines_external.dat");
2729

@@ -30,7 +32,7 @@ public class MachineExternalDataTests {
3032
.stable()
3133
.codec();
3234

33-
@GameTest(templateNamespace = CompactMachines.MOD_ID, prefixTemplateWithClassname = false, template = "empty_5x", timeoutTicks = 240)
35+
@GameTest(template = "empty_5x5", timeoutTicks = 240, batch = "machine_data")
3436
public static void canLoadSingleMachineData(final GameTestHelper game) throws IOException {
3537
// The external point is overworld @ 8x4x8 (it was made in a default void superflat)
3638
DimensionalPosition OUTSIDE = new DimensionalPosition(
@@ -53,8 +55,6 @@ public static void canLoadSingleMachineData(final GameTestHelper game) throws IO
5355
return;
5456
}
5557

56-
CompactMachines.LOGGER.debug("hi - " + game.getTick());
57-
5858
res.ifPresent(list -> {
5959
if (list.size() != 1) {
6060
game.fail("Expected exactly one connection; got " + list.size());
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.compactmods.machines.test.util;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.gametest.framework.GameTestHelper;
5+
import net.minecraft.resources.ResourceLocation;
6+
import net.minecraft.world.level.block.Block;
7+
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
8+
9+
public class TestUtil {
10+
11+
public static void loadStructureIntoTestArea(GameTestHelper test, ResourceLocation structure, BlockPos relLocation) {
12+
final var structures = test.getLevel().getStructureManager();
13+
final var template = structures.get(structure);
14+
if(template.isEmpty())
15+
return;
16+
17+
var placeAt = test.absolutePos(relLocation);
18+
template.get().placeInWorld(
19+
test.getLevel(),
20+
placeAt,
21+
placeAt,
22+
new StructurePlaceSettings(),
23+
test.getLevel().getRandom(),
24+
Block.UPDATE_ALL);
25+
}
26+
27+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.compactmods.machines.test.worldgen;
2+
3+
import dev.compactmods.machines.CompactMachines;
4+
import dev.compactmods.machines.core.Registration;
5+
import net.minecraft.gametest.framework.GameTest;
6+
import net.minecraft.gametest.framework.GameTestHelper;
7+
import net.minecraftforge.gametest.GameTestHolder;
8+
import net.minecraftforge.gametest.PrefixGameTestTemplate;
9+
10+
@PrefixGameTestTemplate(false)
11+
@GameTestHolder(CompactMachines.MOD_ID)
12+
public class DimensionTests {
13+
14+
@GameTest(template = "empty_5x5", batch = "dimension")
15+
public static void dimensionRegistered(final GameTestHelper test) {
16+
var level = test.getLevel();
17+
var server = level.getServer();
18+
19+
var compact = server.getLevel(Registration.COMPACT_DIMENSION);
20+
21+
if (compact == null)
22+
test.fail("Compact dimension not registered.");
23+
24+
test.succeed();
25+
}
26+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package dev.compactmods.machines.test.worldgen;
2+
3+
import java.util.Collection;
4+
import java.util.HashSet;
5+
import java.util.function.Consumer;
6+
import dev.compactmods.machines.CompactMachines;
7+
import dev.compactmods.machines.machine.CompactMachineBlockEntity;
8+
import dev.compactmods.machines.core.Registration;
9+
import dev.compactmods.machines.rooms.RoomSize;
10+
import dev.compactmods.machines.test.util.TestUtil;
11+
import dev.compactmods.machines.util.CompactStructureGenerator;
12+
import net.minecraft.core.BlockPos;
13+
import net.minecraft.core.Direction;
14+
import net.minecraft.gametest.framework.GameTest;
15+
import net.minecraft.gametest.framework.GameTestGenerator;
16+
import net.minecraft.gametest.framework.GameTestHelper;
17+
import net.minecraft.gametest.framework.TestFunction;
18+
import net.minecraft.resources.ResourceLocation;
19+
import net.minecraft.world.InteractionHand;
20+
import net.minecraft.world.item.ItemStack;
21+
import net.minecraft.world.level.block.state.BlockState;
22+
import net.minecraft.world.phys.BlockHitResult;
23+
import net.minecraft.world.phys.Vec3;
24+
import net.minecraftforge.gametest.GameTestHolder;
25+
import net.minecraftforge.gametest.PrefixGameTestTemplate;
26+
27+
@PrefixGameTestTemplate(false)
28+
@GameTestHolder(CompactMachines.MOD_ID)
29+
public class MachineRoomGenerationTests {
30+
31+
@GameTestGenerator
32+
public static Collection<TestFunction> generatesMachinesCorrectly() {
33+
HashSet<TestFunction> tests = new HashSet<>();
34+
35+
// TestFunction(String batch, String testName, String structure, int testTime, long setupTime, boolean isRequired, Consumer<GameTestHelper> tester)
36+
for (var size : RoomSize.values()) {
37+
var template = new ResourceLocation(CompactMachines.MOD_ID, size.getSerializedName());
38+
Consumer<GameTestHelper> test = (t) -> {
39+
var lev = t.getLevel();
40+
TestUtil.loadStructureIntoTestArea(t, template, new BlockPos(0, 17, 0));
41+
42+
var centerSpawn = t.absolutePos(new BlockPos(7, 8, 7));
43+
CompactStructureGenerator.generateCompactStructure(lev, size, centerSpawn);
44+
45+
BlockPos
46+
.betweenClosedStream(BlockPos.ZERO.above(), new BlockPos(15, 16, 15))
47+
.forEach(pos -> {
48+
var compare = pos.above(16);
49+
t.assertSameBlockState(pos, compare);
50+
});
51+
52+
t.succeed();
53+
};
54+
55+
var testf = new TestFunction("room_generation", "room_" + size.getSerializedName(), "compactmachines:empty_15x31", 50, 0, true, test);
56+
tests.add(testf);
57+
}
58+
;
59+
60+
return tests;
61+
}
62+
63+
@GameTest(template = "empty_5x5", batch = "dimension")
64+
public static void usingPsdCreatesRoom(final GameTestHelper test) {
65+
var player = test.makeMockPlayer();
66+
67+
var machLoc = new BlockPos(3, 0, 3);
68+
var realMachLoc = test.absolutePos(machLoc);
69+
70+
test.setBlock(machLoc, Registration.MACHINE_BLOCK_NORMAL.get());
71+
72+
player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(Registration.PERSONAL_SHRINKING_DEVICE.get()));
73+
74+
test.startSequence()
75+
.thenExecute(() -> {
76+
BlockState blockstate = test.getBlockState(machLoc);
77+
blockstate.use(test.getLevel(), player, InteractionHand.MAIN_HAND, new BlockHitResult(Vec3.atCenterOf(realMachLoc), Direction.NORTH, realMachLoc, true));
78+
79+
})
80+
.thenExecuteAfter(2, () -> {
81+
if(test.getBlockEntity(machLoc) instanceof CompactMachineBlockEntity mach) {
82+
83+
if(!mach.mapped())
84+
test.fail("Machine was not mapped to a room.");
85+
86+
if(mach.machineId == -1)
87+
test.fail("Machine ID not set after PSD usage.");
88+
89+
var roomid = mach.getInternalChunkPos();
90+
if(roomid.isEmpty())
91+
test.fail("Room was not registered.");
92+
93+
test.succeed();
94+
} else {
95+
test.fail("Expected machine block to have a block entity.");
96+
}
97+
});
98+
}
99+
}

0 commit comments

Comments
 (0)