tests for refactored features

This commit is contained in:
TropheusJ 2025-02-25 15:41:49 -05:00
parent 97aa549307
commit db6d1fdcf9
9 changed files with 129 additions and 0 deletions

View file

@ -19,11 +19,13 @@ import net.minecraft.gametest.framework.GameTest;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.projectile.Arrow;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.CropBlock;
import net.minecraft.world.level.block.LeverBlock;
import net.minecraft.world.level.block.RedstoneLampBlock;
import net.minecraftforge.fluids.FluidStack;
@GameTestGroup(path = "contraptions")
@ -228,4 +230,48 @@ public class TestContraptions {
// public static void trainObserver(CreateGameTestHelper helper) {
// helper.fail("NYI");
// }
@GameTest(template = "dispensers_dont_fight")
public static void dispensersDontFight(CreateGameTestHelper helper) {
helper.pullLever(2, 3, 1);
BlockPos bottom = new BlockPos(6, 4, 1);
BlockPos top = new BlockPos(6, 6, 1);
BlockPos dispenser = new BlockPos(3, 4, 1);
helper.succeedWhen(() -> {
helper.assertEntitiesPresent(EntityType.ARROW, bottom, 3, 0);
helper.assertEntityNotPresent(EntityType.ARROW, top);
helper.assertBlockPresent(Blocks.DISPENSER, dispenser);
helper.assertContainerContains(dispenser, new ItemStack(Items.ARROW, 2));
});
}
@GameTest(template = "dispensers_refill")
public static void dispensersRefill(CreateGameTestHelper helper) {
BlockPos lever = new BlockPos(2, 3, 1);
helper.pullLever(lever);
BlockPos barrel = lever.above();
BlockPos dispenser = barrel.east();
helper.succeedWhen(() -> {
helper.assertBlockPresent(Blocks.DISPENSER, dispenser);
helper.assertContainerContains(dispenser, new ItemStack(Items.SPECTRAL_ARROW, 2));
helper.assertContainerEmpty(barrel);
});
}
@GameTest(template = "vaults_protect_fuel")
public static void vaultsProtectFuel(CreateGameTestHelper helper) {
BlockPos lever = new BlockPos(2, 2, 1);
helper.pullLever(lever);
BlockPos barrelLamp = new BlockPos(1, 3, 3);
BlockPos vaultLamp = barrelLamp.east(2);
helper.runAtTickTime(10, () -> helper.pullLever(lever));
helper.succeedWhen(() -> {
helper.assertBlockProperty(barrelLamp, RedstoneLampBlock.LIT, false);
helper.assertBlockProperty(vaultLamp, RedstoneLampBlock.LIT, true);
});
}
}

View file

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang3.mutable.MutableBoolean;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.content.fluids.hosePulley.HosePulleyFluidHandler;
import com.simibubi.create.content.fluids.pipes.valve.FluidValveBlock;
@ -18,15 +20,22 @@ import net.minecraft.gametest.framework.GameTest;
import net.minecraft.gametest.framework.GameTestAssertException;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.monster.Zombie;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.PotionUtils;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.FarmBlock;
import net.minecraft.world.level.block.LeverBlock;
import net.minecraft.world.level.block.RedstoneLampBlock;
import net.minecraft.world.level.material.Fluids;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidType;
import net.minecraftforge.fluids.capability.IFluidHandler;
@ -299,4 +308,59 @@ public class TestFluids {
}
});
}
@GameTest(template = "open_pipes")
public static void openPipes(CreateGameTestHelper helper) {
BlockPos effects = new BlockPos(2, 4, 2);
BlockPos removers = new BlockPos(3, 5, 2);
BlockPos firstSeat = new BlockPos(4, 2, 1);
BlockPos secondSeat = firstSeat.south(2);
Zombie firstZombie = helper.spawn(EntityType.ZOMBIE, firstSeat);
Zombie secondZombie = helper.spawn(EntityType.ZOMBIE, secondSeat);
helper.pullLever(effects);
MutableBoolean stage1 = new MutableBoolean(true);
helper.succeedWhen(() -> {
if (stage1.booleanValue()) {
helper.assertTrue(firstZombie.isOnFire(), "not ignited");
helper.assertFalse(secondZombie.getActiveEffects().isEmpty(), "no effects");
// success, stage 2 time
stage1.setFalse();
helper.pullLever(effects);
helper.pullLever(removers);
helper.fail("switching stages");
} else {
helper.assertFalse(firstZombie.isOnFire(), "not extinguished");
helper.assertTrue(secondZombie.getActiveEffects().isEmpty(), "has effects");
// all done
}
});
}
@GameTest(template = "spouting", timeoutTicks = CreateGameTestHelper.TEN_SECONDS)
public static void spouting(CreateGameTestHelper helper) {
BlockPos farmland = new BlockPos(3, 2, 3);
BlockPos depot = new BlockPos(5, 2, 1);
helper.pullLever(2, 3, 2);
ItemStack waterBottle = PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER);
helper.succeedWhen(() -> {
// lava
helper.assertBlockPresent(Blocks.LAVA_CAULDRON, 3, 2, 1);
// water
helper.assertBlockProperty(farmland, FarmBlock.MOISTURE, 7);
helper.assertBlockPresent(Blocks.MUD, farmland.east(1));
helper.assertBlockPresent(Blocks.MUD, farmland.east(2));
helper.assertBlockPresent(Blocks.MUD, farmland.east(3));
helper.assertBlockPresent(Blocks.WATER_CAULDRON, farmland.east(4));
helper.assertContainerContains(depot, Items.WATER_BUCKET);
helper.assertContainerContains(depot.east(1), waterBottle);
helper.assertContainerContains(depot.east(2), Items.GRASS_BLOCK);
});
}
}

View file

@ -31,6 +31,7 @@ import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.RedstoneLampBlock;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.registries.ForgeRegistries;
@ -390,4 +391,22 @@ public class TestItems {
helper.assertNixiePower(halfPearlNixie, 8);
});
}
@GameTest(template = "fan_processing", timeoutTicks = CreateGameTestHelper.TEN_SECONDS)
public static void fanProcessing(CreateGameTestHelper helper) {
// why does the redstone explode
BlockPos.betweenClosed(new BlockPos(2, 7, 3), new BlockPos(11, 7, 3)).forEach(
pos -> helper.setBlock(pos, Blocks.REDSTONE_WIRE)
);
helper.pullLever(1, 7, 3);
List<BlockPos> lamps = List.of(
new BlockPos(1, 2, 1), new BlockPos(5, 2, 1), new BlockPos(7, 2, 1),
new BlockPos(9, 2, 1), new BlockPos(11, 2, 1)
);
helper.succeedWhen(() -> {
for (BlockPos lamp : lamps) {
helper.assertBlockProperty(lamp, RedstoneLampBlock.LIT, true);
}
});
}
}