package ar.com.companeros.horror; import ar.com.companeros.Companeros; import java.util.UUID; import net.minecraft.gametest.framework.*; import net.minecraft.nbt.CompoundTag; import net.minecraftforge.gametest.*; @GameTestHolder(Companeros.ID) @PrefixGameTestTemplate(false) public final class HorrorPacingTests { @GameTest(template = "empty", timeoutTicks = 20) public void cavesEscalateButHitsDoNotCancelTheHunt(GameTestHelper helper) { HorrorPacing pacing = new HorrorPacing(); UUID player = UUID.randomUUID(); pacing.intensity(60); pacing.begin(player, 0); for (int tick = 0; tick <= 1000; tick += 20) pacing.observe(player, tick, true, false); helper.assertTrue(pacing.mayAttack(player, 1000, 4), "Una visita prolongada a una cueva debe poder convertirse en cacería"); for (int hit = 0; hit < 8; hit++) pacing.hit(player); helper.assertTrue(pacing.mayAttack(player, 1000, 4), "No existe un límite de dos golpes ni de ocho golpes"); pacing.killed(player, 1000); helper.assertTrue(!pacing.available(player, 12999) && pacing.available(player, 13000), "La víctima descansa diez minutos tras morir"); helper.succeed(); } @GameTest(template = "empty", timeoutTicks = 20) public void restartKeepsRestAndSoundBudgetAndZeroIsQuiet(GameTestHelper helper) { HorrorPacing pacing = new HorrorPacing(); UUID a = UUID.randomUUID(), b = UUID.randomUUID(); pacing.begin(a, 0); helper.assertTrue(pacing.reserveSound(a, 20), "El primer sonido puede entregarse"); pacing.release(a, 30); HorrorPacing copy = HorrorPacing.load(pacing.save(new CompoundTag())); helper.assertTrue(!copy.available(a, 40) && copy.available(b, 40), "Dar descanso a una persona no excluye a otra"); helper.assertTrue(!copy.reserveSound(a, 40), "El reinicio no reinicia los avisos"); copy.intensity(0); helper.assertTrue(!copy.available(b, 50) && !copy.mayAttack(b, 50, 4) && !copy.reserveSound(b, 50), "Cero desactiva ataques y avisos"); helper.succeed(); } @GameTest(template = "empty", timeoutTicks = 20) public void sleepBuildsTensionWithoutEveryTickSpamming(GameTestHelper helper) { HorrorPacing pacing = new HorrorPacing(); UUID player = UUID.randomUUID(); pacing.begin(player, 0); pacing.observe(player, 0, false, true); String first = pacing.describe(player, 0); for (int index = 0; index < 100; index++) pacing.observe(player, 0, false, true); helper.assertTrue(first.equals(pacing.describe(player, 0)), "Dormir no suma el mismo acontecimiento cien veces"); helper.assertTrue(pacing.reserveSound(player, 0) && !pacing.reserveSound(player, 20), "El siguiente segundo no repite el aviso"); helper.assertTrue(!pacing.mayAttack(player, 0, 4), "Dormirse una vez no provoca un ataque inmediato"); helper.succeed(); } }