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
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import lombok.Setter;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.UnmodifiableView;
import org.jetbrains.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.Collections;
Expand Down Expand Up @@ -249,7 +250,8 @@ private void refundAll(ClickData clickData) {
}
}

private void onPatternChange(int index) {
@VisibleForTesting
public void onPatternChange(int index) {
if (isRemote()) return;

// remove old if applicable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@

import com.gregtechceu.gtceu.GTCEu;
import com.gregtechceu.gtceu.api.capability.IWorkable;
import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability;
import com.gregtechceu.gtceu.api.capability.recipe.IO;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank;
import com.gregtechceu.gtceu.common.cover.detector.AdvancedFluidDetectorCover;
import com.gregtechceu.gtceu.common.cover.detector.AdvancedItemDetectorCover;
import com.gregtechceu.gtceu.common.data.GTItems;
import com.gregtechceu.gtceu.gametest.util.TestUtils;
import com.gregtechceu.gtceu.utils.RedstoneUtil;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.gametest.framework.GameTest;
import net.minecraft.gametest.framework.GameTestHelper;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.gametest.GameTestHolder;
import net.minecraftforge.gametest.PrefixGameTestTemplate;

Expand Down Expand Up @@ -52,13 +58,20 @@ public static void testAdvancedActivityDetectorCoverWithActivity(GameTestHelper
@GameTest(template = "electrolyzer", batch = "coverTests")
public static void testAdvancedActivityDetectorCoverWithoutActivity(GameTestHelper helper) {
helper.pullLever(new BlockPos(2, 2, 2));
MetaMachine machine = ((MetaMachine) helper.getBlockEntity(new BlockPos(1, 2, 1)));
SimpleTieredMachine machine = ((SimpleTieredMachine) helper.getBlockEntity(new BlockPos(1, 2, 1)));
TestUtils.placeCover(helper, machine, GTItems.COVER_ACTIVITY_DETECTOR_ADVANCED.asStack(), Direction.WEST);
helper.runAtTickTime(20 - machine.getOffsetTimer() % 20, () -> helper.pullLever(2, 2, 2));
helper.runAtTickTime(45 - machine.getOffsetTimer() % 20, () -> {
TestUtils.assertLampOff(helper, new BlockPos(0, 2, 1));
helper.succeed();
int offset = (int) (machine.getOffsetTimer() % 20L);
helper.runAtTickTime(20 - offset, () -> {
// Stop the fluid input
helper.pullLever(2, 2, 2);
// Also clear out the tank
NotifiableFluidTank tank = (NotifiableFluidTank) machine
.getCapabilitiesFlat(IO.IN, FluidRecipeCapability.CAP).get(0);
tank.setFluidInTank(0, FluidStack.EMPTY);
});
// 20 ticks for the cover to update, 11 ticks for the recipe to finish, 1 tick for the cover to update
helper.runAtTickTime(52 - offset,
() -> helper.succeedWhen(() -> TestUtils.assertLampOff(helper, new BlockPos(0, 2, 1))));
}

@GameTest(template = "electrolyzer", batch = "coverTests")
Expand All @@ -70,10 +83,25 @@ public static void testAdvancedFluidDetectorCover(GameTestHelper helper) {
cover.setMaxValue(100000);
cover.setMinValue(1);
cover.setLatched(false);
// At t=80, 21k will be inside, giving a redstone value of 2 or 3
helper.runAtTickTime(81, () -> {
TestUtils.assertRedstone(helper, new BlockPos(0, 2, 1), 2, 3);
TestUtils.assertLampOn(helper, new BlockPos(0, 2, 1));
MutableInt expected = new MutableInt();
int offset = (int) (machine.getOffsetTimer() % 20L);
helper.runAtTickTime(80 - offset, () -> {
// Actually pull in the value at the time, since offset might change the amount
var handler = machine.getFluidHandlerCap(null, false);
long storedFluid = 0;
for (int tank = 0; tank < handler.getTanks(); tank++) {
storedFluid += handler.getFluidInTank(tank).getAmount();
}
expected.setValue(RedstoneUtil.computeRedstoneBetweenValues(storedFluid,
cover.getMaxValue(), cover.getMinValue(), cover.isInverted()));
});

helper.runAtTickTime(81 - offset, () -> {
int value = expected.intValue();
TestUtils.assertRedstoneEither(helper, new BlockPos(0, 2, 1),
value,
Math.max(0, value - 1),
Math.min(15, value + 1));
helper.succeed();
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ private static BusHolder getBussesAndForm(GameTestHelper helper) {
@GameTest(template = "patternbuffertest", batch = "PatternBuffer", setupTicks = 40, timeoutTicks = 200)
public static void patternBufferNormalInputBusTest(GameTestHelper helper) {
BusHolder busHolder = getBussesAndForm(helper);
busHolder.patternBuffer.onPatternChange(0); // Jank forced pattern update, likely needed because of NBT
// placement structure bug
busHolder.inputBus1.getInventory().setStackInSlot(0, new ItemStack(Blocks.COBBLESTONE));
helper.succeedWhen(() -> {
helper.assertTrue(
Expand All @@ -97,6 +99,8 @@ public static void patternBufferNormalInputBusTest(GameTestHelper helper) {
@GameTest(template = "patternbuffertest", batch = "PatternBuffer", setupTicks = 40, timeoutTicks = 200)
public static void patternBufferBasicRequestTest(GameTestHelper helper) {
BusHolder busHolder = getBussesAndForm(helper);
busHolder.patternBuffer.onPatternChange(0); // Jank forced pattern update, likely needed because of NBT
// placement structure bug

IGrid grid = busHolder.patternBuffer.getGrid();

Expand Down Expand Up @@ -139,6 +143,8 @@ public static void patternBufferBasicRequestTest(GameTestHelper helper) {
@GameTest(template = "patternbuffertest", batch = "PatternBuffer", setupTicks = 40, timeoutTicks = 200)
public static void patternBufferDistinctDoesNothingTest(GameTestHelper helper) {
BusHolder busHolder = getBussesAndForm(helper);
busHolder.patternBuffer.onPatternChange(0); // Jank forced pattern update, likely needed because of NBT
// placement structure bug
busHolder.patternBuffer.setDistinct(true);

IGrid grid = busHolder.patternBuffer.getGrid();
Expand Down Expand Up @@ -182,6 +188,8 @@ public static void patternBufferDistinctDoesNothingTest(GameTestHelper helper) {
@GameTest(template = "patternbuffertest", batch = "PatternBuffer", setupTicks = 40, timeoutTicks = 200)
public static void patternBufferDyeingDoesNothingTest(GameTestHelper helper) {
BusHolder busHolder = getBussesAndForm(helper);
busHolder.patternBuffer.onPatternChange(0); // Jank forced pattern update, likely needed because of NBT
// placement structure bug
busHolder.patternBuffer.setPaintingColor(0xff);

IGrid grid = busHolder.patternBuffer.getGrid();
Expand Down
Binary file modified src/test/resources/data/gtceu/structures/patternbuffertest.nbt
Binary file not shown.
Loading