Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/verify-pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,35 @@ jobs:
with:
name: project-red-${{ steps.versioning.outputs.version }}
path: '*/build/libs/ProjectRed-*.jar'

integration_tests:
name: Integration Test - ${{ matrix.module }}
runs-on: ubuntu-latest
needs: build_test
strategy:
matrix:
module: [transmission]
steps:
- name: Checkout git repo
uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '21'

- name: Restore Gradle cache
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle2-${{ hashFiles('**/build.gradle', '**/build.properties', '**/gradle.properties', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle2-

- name: Run game tests
run: ./gradlew :${{ matrix.module }}:runGameTestServer
3 changes: 2 additions & 1 deletion core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ dependencies {
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

// ProjectRed API
jarJar(api project(":api")) // Use JarJar to bake within Core jar
compileOnly project(":api") // Not on runtime bc already included via JarJar
jarJar(project(":api")) // Use JarJar to bake within Core jar

// JEI
compileOnly("mezz.jei:jei-${mc_version}-common-api:${jei_version}")
Expand Down
1 change: 1 addition & 0 deletions expansion/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
}
1 change: 1 addition & 0 deletions exploration/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
}
1 change: 1 addition & 0 deletions fabrication/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
implementation project(":integration")
implementation project(":transmission")
Expand Down
1 change: 1 addition & 0 deletions illumination/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
}
1 change: 1 addition & 0 deletions integration/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ public int calculateSignal() {
if ((propagationMask & 1 << r) == 0) { continue; }
int s;

if (maskConnectsCorner(r)) {
FaceLookup lookup = FaceLookup.lookupCorner(level(), pos(), getSide(), r);
if (maskConnectsInside(r)) {
FaceLookup lookup = FaceLookup.lookupInsideFace(level(), pos(), getSide(), r);
s = RedstoneFaceLookup.resolveSignal(lookup, true);

} else if (maskConnectsStraight(r)) {
Expand All @@ -135,8 +135,8 @@ public int calculateSignal() {
s = RedstoneFaceLookup.resolveVanillaSignal(lookup, this, true, true);
}

} else if (maskConnectsInside(r)) {
FaceLookup lookup = FaceLookup.lookupInsideFace(level(), pos(), getSide(), r);
} else if (maskConnectsCorner(r)) {
FaceLookup lookup = FaceLookup.lookupCorner(level(), pos(), getSide(), r);
s = RedstoneFaceLookup.resolveSignal(lookup, true);

} else { // For non-connected sides, just do a vanilla signal lookup
Expand Down
10 changes: 6 additions & 4 deletions runtime/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@ neoForge {
accessTransformers.from "../core/src/main/resources/META-INF/accesstransformer.cfg"

runs {
configureEach {
}

client {
client()
}

server {
server()
}

configureEach {
logLevel = org.slf4j.event.Level.DEBUG
}
}
}
Expand All @@ -31,4 +34,3 @@ dependencies {
runtimeOnly project(":integration")
runtimeOnly project(":transmission")
}

18 changes: 18 additions & 0 deletions transmission/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,23 @@ neoForge {
data()
programArguments.addAll '--mod', mod_id, '--all', '--output', file("src/main/generated").absolutePath, '--existing', file("src/main/resources").absolutePath
}

gameTestServer {
type = "gameTestServer"
gameDirectory = project.file('runs/gameTestServer')
systemProperty 'neoforge.enableGameTest', 'true'
systemProperty 'neoforge.enabledGameTestNamespaces', mod_id
}

configureEach {
logLevel = org.slf4j.event.Level.DEBUG
}
}

mods {
"${mod_id}" {
sourceSet(sourceSets.main)
}
}
}

Expand All @@ -24,5 +41,6 @@ dependencies {
accessTransformers "io.codechicken:CodeChickenLib:${mc_version}-${ccl_version}"
accessTransformers "io.codechicken:CBMultipart:${mc_version}-${cbm_version}"

compileOnly project(":api")
implementation project(":core")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package mrtjp.projectred.transmission.gametests;

import mrtjp.projectred.transmission.ProjectRedTransmission;
import net.minecraft.core.BlockPos;
import net.minecraft.gametest.framework.GameTest;
import net.minecraft.gametest.framework.GameTestHelper;
import net.minecraft.world.level.block.LeverBlock;
import net.minecraft.world.level.block.RedstoneLampBlock;
import net.neoforged.neoforge.gametest.GameTestHolder;
import net.neoforged.neoforge.gametest.PrefixGameTestTemplate;

@GameTestHolder(ProjectRedTransmission.MOD_ID)
@PrefixGameTestTemplate(false)
public class RedwirePropagationTests {

@GameTest(template = "alloy_rw_wraparound_rs_block")
public static void redAlloyPropagatesAroundRSBlock(GameTestHelper helper) {
// Red alloy wires should propagate signal around a redsone block,
// and also power the lamp underneath

// Positions
var lever = new BlockPos(0, 2, 1);
var lampA = new BlockPos(3, 2, 1);
var lampB = new BlockPos(6, 2, 1);

// Assert start condition
helper.assertBlockState(lever, state -> !state.getValue(LeverBlock.POWERED), () -> "Lever should be off!");
helper.assertBlockState(lampA, state -> !state.getValue(RedstoneLampBlock.LIT), () -> "Lamp should be off!");
helper.assertBlockState(lampB, state -> !state.getValue(RedstoneLampBlock.LIT), () -> "Lamp should be off!");

// Pull lever, wait 2 ticks, then check lamp states
helper.startSequence()
.thenExecute(() -> helper.setBlock(lever, helper.getBlockState(lever).setValue(LeverBlock.POWERED, true)))
.thenIdle(2)
.thenExecute(() -> {
helper.assertBlockState(lever, state -> state.getValue(LeverBlock.POWERED), () -> "Lever should be on!");
helper.assertBlockState(lampA, state -> state.getValue(RedstoneLampBlock.LIT), () -> "Lamp A should be on!");
helper.assertBlockState(lampB, state -> state.getValue(RedstoneLampBlock.LIT), () -> "Lamp B should be on!");
}).thenSucceed();
}

@GameTest(template = "insulated_rw_wraparound_rs_block")
public static void insulatedWirePropagatesAroundRSBlock(GameTestHelper helper) {
// Insulated wires should propagate signal around a redsone block,
// but NOT power the lamp underneath

// Positions
var lever = new BlockPos(0, 2, 1);
var lampA = new BlockPos(3, 2, 1);
var lampB = new BlockPos(6, 2, 1);

// Assert start condition
helper.assertBlockState(lever, state -> !state.getValue(LeverBlock.POWERED), () -> "Lever should be off!");
helper.assertBlockState(lampA, state -> !state.getValue(RedstoneLampBlock.LIT), () -> "Lamp should be off!");
helper.assertBlockState(lampB, state -> !state.getValue(RedstoneLampBlock.LIT), () -> "Lamp should be off!");

// Pull lever, wait 2 ticks, then check lamp states
helper.startSequence()
.thenExecute(() -> helper.setBlock(lever, helper.getBlockState(lever).setValue(LeverBlock.POWERED, true)))
.thenIdle(2)
.thenExecute(() -> {
helper.assertBlockState(lever, state -> state.getValue(LeverBlock.POWERED), () -> "Lever should be on!");
helper.assertBlockState(lampA, state -> !state.getValue(RedstoneLampBlock.LIT), () -> "Lamp A should be off!");
helper.assertBlockState(lampB, state -> state.getValue(RedstoneLampBlock.LIT), () -> "Lamp B should be on!");
}).thenSucceed();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,8 @@ public int calculateSignal() {

for (int r = 0; r < 4; r++) {
int s = 0;
if (maskConnectsCorner(r)) {
FaceLookup lookup = FaceLookup.lookupCorner(level(), pos(), getSide(), r);
if (maskConnectsInside(r)) {
FaceLookup lookup = FaceLookup.lookupInsideFace(level(), pos(), getSide(), r);
s = resolveSignal(lookup);

} else if (maskConnectsStraight(r)) {
Expand All @@ -181,8 +181,8 @@ public int calculateSignal() {
s = RedstoneFaceLookup.resolveVanillaSignal(lookup, this, true, true);
}

} else if (maskConnectsInside(r)) {
FaceLookup lookup = FaceLookup.lookupInsideFace(level(), pos(), getSide(), r);
} else if (maskConnectsCorner(r)) {
FaceLookup lookup = FaceLookup.lookupCorner(level(), pos(), getSide(), r);
s = resolveSignal(lookup);
}

Expand Down
Binary file not shown.
Binary file not shown.
Loading