fix(arena): improve containment and boss idle
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class ArenaBossStateTest {
|
||||
@Test
|
||||
void idleBossIsCenteredHealedUntargetedAndFrozen() {
|
||||
Zombie boss = mock(Zombie.class);
|
||||
Location center = mock(Location.class);
|
||||
|
||||
ArenaBossState.idle(boss, center, 80.0);
|
||||
|
||||
verify(boss).setAI(false);
|
||||
verify(boss).setTarget(null);
|
||||
verify(boss).setHealth(80.0);
|
||||
verify(boss).teleport(center);
|
||||
}
|
||||
|
||||
@Test
|
||||
void challengerEntryEnablesBossAndSetsTarget() {
|
||||
Zombie boss = mock(Zombie.class);
|
||||
Player challenger = mock(Player.class);
|
||||
|
||||
ArenaBossState.engage(boss, challenger);
|
||||
|
||||
verify(boss).setAI(true);
|
||||
verify(boss).setTarget(challenger);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class ArenaBuildProtectionTest {
|
||||
private static final ArenaLocation CENTER = new ArenaLocation(
|
||||
"world", 0.0, 64.0, 0.0, 0.0F, 0.0F
|
||||
);
|
||||
|
||||
@Test
|
||||
void protectsOnlyInsideConfiguredArenaDuringFight() {
|
||||
assertTrue(ArenaBuildProtection.isProtected(
|
||||
true, CENTER, 10.0, "world", 5.0, 70.0, 5.0
|
||||
));
|
||||
assertFalse(ArenaBuildProtection.isProtected(
|
||||
false, CENTER, 10.0, "world", 5.0, 70.0, 5.0
|
||||
));
|
||||
assertFalse(ArenaBuildProtection.isProtected(
|
||||
true, CENTER, 10.0, "world", 11.0, 70.0, 0.0
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ final class DefaultConfigurationTest {
|
||||
assertEquals(50.0, settings.tyrantRangeBlocks());
|
||||
assertEquals(Duration.ofDays(7), settings.optOutDuration());
|
||||
assertEquals(Duration.ofMinutes(1), settings.roleMaintenanceInterval());
|
||||
assertEquals(12, settings.arenaBarrierHeightBlocks());
|
||||
assertEquals("FISHING_ROD", settings.tamerItem().material());
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ final class PluginSettingsTest {
|
||||
assertEquals(Duration.ofMinutes(10), settings.fixerEffectDuration());
|
||||
assertEquals(Duration.ofHours(24), settings.rosterIntelligenceCooldown());
|
||||
assertEquals(10.0, settings.vigilanteArenaRadiusBlocks());
|
||||
assertEquals(12, settings.arenaBarrierHeightBlocks());
|
||||
assertEquals(80.0, settings.vigilanteBossHealth());
|
||||
assertEquals(8.0, settings.vigilanteBossDamage());
|
||||
assertEquals(10.0, settings.vigilanteBossArmor());
|
||||
@@ -84,6 +85,10 @@ final class PluginSettingsTest {
|
||||
IllegalArgumentException.class,
|
||||
() -> PluginSettings.from(Map.of("vigilante-arena-radius-blocks", 0))
|
||||
);
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() -> PluginSettings.from(Map.of("arena-barrier-height-blocks", 2))
|
||||
);
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() -> PluginSettings.from(Map.of("vigilante-boss-health", Double.NaN))
|
||||
|
||||
+25
-4
@@ -1,5 +1,6 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
@@ -8,14 +9,16 @@ import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.List;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
|
||||
final class VigilanteArenaBarrierTest {
|
||||
final class RoleArenaBarrierTest {
|
||||
private static final ArenaLocation CENTER = new ArenaLocation(
|
||||
"world", 0.0, 64.0, 0.0, 0.0F, 0.0F
|
||||
);
|
||||
@@ -28,7 +31,7 @@ final class VigilanteArenaBarrierTest {
|
||||
when(solid.getLocation()).thenReturn(new Location(world, 1.0, 64.0, 0.0));
|
||||
when(solid.getType()).thenReturn(Material.CHEST);
|
||||
|
||||
new VigilanteArenaBarrier().build(world, CENTER, 10.0);
|
||||
new RoleArenaBarrier().build(world, CENTER, 10.0, 12);
|
||||
|
||||
verify(solid, never()).setType(Material.BARRIER, false);
|
||||
}
|
||||
@@ -45,12 +48,30 @@ final class VigilanteArenaBarrierTest {
|
||||
when(air.getType()).thenReturn(Material.AIR);
|
||||
when(air.getBlockData()).thenReturn(original);
|
||||
when(original.clone()).thenReturn(snapshot);
|
||||
VigilanteArenaBarrier barrier = new VigilanteArenaBarrier();
|
||||
RoleArenaBarrier barrier = new RoleArenaBarrier();
|
||||
|
||||
barrier.build(world, CENTER, 10.0);
|
||||
barrier.build(world, CENTER, 10.0, 12);
|
||||
barrier.clear();
|
||||
|
||||
verify(air, atLeastOnce()).setType(Material.BARRIER, false);
|
||||
verify(air).setBlockData(snapshot, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
void wallExtendsOneBelowFloorForTwelveBlocks() {
|
||||
World world = mock(World.class);
|
||||
Block solid = mock(Block.class);
|
||||
when(world.getBlockAt(anyInt(), anyInt(), anyInt())).thenReturn(solid);
|
||||
when(solid.getLocation()).thenReturn(new Location(world, 1.0, 64.0, 0.0));
|
||||
when(solid.getType()).thenReturn(Material.CHEST);
|
||||
RoleArenaBarrier barrier = new RoleArenaBarrier();
|
||||
|
||||
barrier.build(world, CENTER, 10.0, 12);
|
||||
|
||||
ArgumentCaptor<Integer> y = ArgumentCaptor.forClass(Integer.class);
|
||||
verify(world, atLeastOnce()).getBlockAt(anyInt(), y.capture(), anyInt());
|
||||
List<Integer> values = y.getAllValues();
|
||||
assertEquals(63, values.stream().mapToInt(Integer::intValue).min().orElseThrow());
|
||||
assertEquals(74, values.stream().mapToInt(Integer::intValue).max().orElseThrow());
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.mockito.ArgumentMatchers.contains;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -29,6 +30,12 @@ final class RoleArenaControllerTest {
|
||||
assertEquals(Color.RED, RoleArenaController.boundaryColor(ArenaRole.TYRANT));
|
||||
assertEquals(Color.BLUE, RoleArenaController.boundaryColor(ArenaRole.VIGILANTE));
|
||||
assertNull(RoleArenaController.boundaryColor(null));
|
||||
assertArrayEquals(
|
||||
new int[] {1}, RoleArenaController.boundaryHeightOffsets(false, 12)
|
||||
);
|
||||
assertArrayEquals(
|
||||
new int[] {1, 4, 7, 10}, RoleArenaController.boundaryHeightOffsets(true, 12)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user