From 169024ce375ae9931c28892165efe53cffce52c1 Mon Sep 17 00:00:00 2001 From: vincent4vx Date: Mon, 13 Dec 2021 18:43:43 +0100 Subject: [PATCH 1/4] [exploration] close #211 Check monsters groups count before respawn --- .../LivingMonsterGroupPosition.java | 12 +++++++ .../MonsterEnvironmentService.java | 2 +- .../game/handler/StopSessionTest.java | 3 +- .../game/handler/fight/KickFighterTest.java | 11 +++--- .../LivingMonsterGroupPositionTest.java | 13 +++++++ .../MonsterEnvironmentServiceTest.java | 35 +++++++++++++++++-- .../araknemu/game/player/GamePlayerTest.java | 3 +- 7 files changed, 68 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPosition.java b/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPosition.java index 8d0e66cfd..9da5b4eca 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPosition.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPosition.java @@ -82,6 +82,18 @@ public void spawn() { map.add(factory.create(data, this)); } + /** + * Respawn a group on the map + * + * Unlike {@link LivingMonsterGroupPosition#spawn()} the maximum number of groups is checked, + * and this method will do nothing if the map is already full + */ + public void respawn() { + if (groupStream().count() < data.maxCount()) { + map.add(factory.create(data, this)); + } + } + /** * Get list of available monster groups on the map */ diff --git a/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentService.java b/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentService.java index 74ab17633..a21b786b9 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentService.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentService.java @@ -161,7 +161,7 @@ public Collection byMap(int mapId) { */ void respawn(LivingMonsterGroupPosition position, Duration delay) { activityService.execute( - new SimpleTask(logger -> position.spawn()) + new SimpleTask(logger -> position.respawn()) .setDelay(delay.dividedBy(configuration.monsterRespawnSpeedFactor())) .setMaxTries(2) .setName("Respawn") diff --git a/src/test/java/fr/quatrevieux/araknemu/game/handler/StopSessionTest.java b/src/test/java/fr/quatrevieux/araknemu/game/handler/StopSessionTest.java index 47ba9678f..cf2c5e10f 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/handler/StopSessionTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/handler/StopSessionTest.java @@ -42,6 +42,7 @@ import fr.quatrevieux.araknemu.game.fight.state.PlacementState; import fr.quatrevieux.araknemu.game.handler.event.Disconnected; import fr.quatrevieux.araknemu.game.player.GamePlayer; +import io.github.artsok.RepeatedIfExceptionsTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -237,7 +238,7 @@ public Class event() { assertFalse(map.creatures().contains(player)); } - @Test + @RepeatedIfExceptionsTest void saveCorrectLifeWhenSessionClosed() throws Exception{ ExplorationPlayer explorationPlayer = explorationPlayer(); explorationPlayer.player().properties().life().set(5); diff --git a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/KickFighterTest.java b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/KickFighterTest.java index 7ed705f49..47b2542cc 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/KickFighterTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/KickFighterTest.java @@ -33,6 +33,7 @@ import fr.quatrevieux.araknemu.network.game.out.fight.CancelFight; import fr.quatrevieux.araknemu.network.game.out.game.RemoveSprite; import fr.quatrevieux.araknemu.network.game.out.info.Error; +import io.github.artsok.RepeatedIfExceptionsTest; import org.junit.jupiter.api.Test; import java.sql.SQLException; @@ -45,7 +46,7 @@ void notInFight() { assertThrows(CloseImmediately.class, () -> handlePacket(new KickFighterRequest(12))); } - @Test + @RepeatedIfExceptionsTest void notInPlacementState() throws Exception { Fight fight = createFight(); Fighter teammate = makePlayerFighter(makeSimpleGamePlayer(10)); @@ -60,7 +61,7 @@ void notInPlacementState() throws Exception { requestStack.assertLast(Error.cantDoDuringFight()); } - @Test + @RepeatedIfExceptionsTest void notTeammate() throws Exception { Fight fight = createFight(); Fighter enemy = makePlayerFighter(makeSimpleGamePlayer(10)); @@ -73,7 +74,7 @@ void notTeammate() throws Exception { requestStack.assertLast(new Noop()); } - @Test + @RepeatedIfExceptionsTest void fighterNotFound() throws Exception { Fight fight = createFight(); @@ -83,7 +84,7 @@ void fighterNotFound() throws Exception { requestStack.assertLast(new Noop()); } - @Test + @RepeatedIfExceptionsTest void notLeader() throws Exception { Fight fight = createSimpleFight(container.get(ExplorationMapService.class).load(10340)); Fighter me = makePlayerFighter(gamePlayer()); @@ -97,7 +98,7 @@ void notLeader() throws Exception { assertTrue(fight.fighters().contains(me)); } - @Test + @RepeatedIfExceptionsTest void success() throws Exception { Fight fight = createFight(); Fighter teammate = makePlayerFighter(makeSimpleGamePlayer(10)); diff --git a/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPositionTest.java b/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPositionTest.java index 3cc53de31..9cad4ecb1 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPositionTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/LivingMonsterGroupPositionTest.java @@ -104,6 +104,19 @@ void spawn() { assertCount(3, monsterGroupPosition.available()); } + @Test + void respawn() { + monsterGroupPosition.populate(map); + map.remove(monsterGroupPosition.available().get(0)); + assertCount(1, monsterGroupPosition.available()); + + monsterGroupPosition.respawn(); + assertCount(2, monsterGroupPosition.available()); + + monsterGroupPosition.respawn(); + assertCount(2, monsterGroupPosition.available()); + } + @Test void fixedGroup() { monsterGroupPosition = new LivingMonsterGroupPosition( diff --git a/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentServiceTest.java b/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentServiceTest.java index 08073ddd3..e62574133 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentServiceTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/monster/environment/MonsterEnvironmentServiceTest.java @@ -144,6 +144,8 @@ void respawn() throws InterruptedException, SQLException { ExplorationMap map = container.get(ExplorationMapService.class).load(10340); monsterGroupPosition.populate(map); + map.remove(monsterGroupPosition.available().get(0)); + explorationPlayer().changeMap(map, 123); requestStack.clear(); @@ -151,11 +153,34 @@ void respawn() throws InterruptedException, SQLException { Thread.sleep(50); - MonsterGroup lastGroup = monsterGroupPosition.available().get(1); + MonsterGroup lastGroup = monsterGroupPosition.available().get(0); requestStack.assertLast(new AddSprites(Collections.singleton(lastGroup.sprite()))); } + @Test + void cantRespawnIfAlreadyFull() throws InterruptedException, SQLException { + LivingMonsterGroupPosition monsterGroupPosition = new LivingMonsterGroupPosition( + container.get(MonsterGroupFactory.class), + container.get(MonsterEnvironmentService.class), + container.get(FightService.class), + container.get(MonsterGroupDataRepository.class).get(3), + new RandomCellSelector(), false + ); + + ExplorationMap map = container.get(ExplorationMapService.class).load(10340); + monsterGroupPosition.populate(map); + + explorationPlayer().changeMap(map, 123); + requestStack.clear(); + + service.respawn(monsterGroupPosition, Duration.ZERO); + Thread.sleep(50); + + assertEquals(1, monsterGroupPosition.available().size()); + requestStack.assertEmpty(); + } + @RepeatedIfExceptionsTest void respawnWithDelay() throws InterruptedException, SQLException { LivingMonsterGroupPosition monsterGroupPosition = new LivingMonsterGroupPosition( @@ -168,6 +193,8 @@ void respawnWithDelay() throws InterruptedException, SQLException { ExplorationMap map = container.get(ExplorationMapService.class).load(10340); monsterGroupPosition.populate(map); + map.remove(monsterGroupPosition.available().get(0)); + int size = monsterGroupPosition.available().size(); explorationPlayer().changeMap(map, 123); @@ -179,7 +206,7 @@ void respawnWithDelay() throws InterruptedException, SQLException { assertEquals(size, monsterGroupPosition.available().size()); Thread.sleep(20); - MonsterGroup lastGroup = monsterGroupPosition.available().get(1); + MonsterGroup lastGroup = monsterGroupPosition.available().get(0); requestStack.assertLast(new AddSprites(Collections.singleton(lastGroup.sprite()))); } @@ -198,13 +225,15 @@ void respawnWithDelayAndRespawnSpeedFactor() throws InterruptedException, SQLExc ExplorationMap map = container.get(ExplorationMapService.class).load(10340); monsterGroupPosition.populate(map); + map.remove(monsterGroupPosition.available().get(0)); + explorationPlayer().changeMap(map, 123); requestStack.clear(); service.respawn(monsterGroupPosition, Duration.ofMillis(50)); Thread.sleep(40); - MonsterGroup lastGroup = monsterGroupPosition.available().get(1); + MonsterGroup lastGroup = monsterGroupPosition.available().get(0); requestStack.assertLast(new AddSprites(Collections.singleton(lastGroup.sprite()))); } diff --git a/src/test/java/fr/quatrevieux/araknemu/game/player/GamePlayerTest.java b/src/test/java/fr/quatrevieux/araknemu/game/player/GamePlayerTest.java index d7fa2de00..764a216f1 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/player/GamePlayerTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/player/GamePlayerTest.java @@ -47,6 +47,7 @@ import fr.quatrevieux.araknemu.game.player.spell.SpellBookService; import fr.quatrevieux.araknemu.game.world.creature.characteristics.DefaultCharacteristics; import fr.quatrevieux.araknemu.game.world.creature.characteristics.MutableCharacteristics; +import io.github.artsok.RepeatedIfExceptionsTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -229,7 +230,7 @@ void registerUnregister() { assertNull(session.player()); } - @Test + @RepeatedIfExceptionsTest void save() throws Exception { player.setPosition( new Position(7894, 12) From d7de0151834d080db090ace1bfc40bfcf3b39f5d Mon Sep 17 00:00:00 2001 From: vincent4vx Date: Tue, 14 Dec 2021 19:20:27 +0100 Subject: [PATCH 2/4] Clean logs written into errors.log --- .../game/fight/fighter/AbstractFighter.java | 10 ++++++++++ .../araknemu/game/fight/fighter/Fighter.java | 14 ++++++++++++++ .../handler/account/BoostCharacteristic.java | 16 +++++++++++----- .../game/handler/fight/EndFighterTurn.java | 3 ++- .../game/handler/fight/TerminateTurnAction.java | 3 ++- .../characteristic/PlayerCharacteristics.java | 4 +++- src/main/resources/log4j2.xml | 8 ++++---- .../fighter/monster/MonsterFighterTest.java | 10 +++++++++- .../fight/fighter/player/PlayerFighterTest.java | 9 ++++++++- .../order/AlternateTeamFighterOrderTest.java | 4 ++++ .../handler/account/BoostCharacteristicTest.java | 9 +++++---- .../game/handler/fight/EndFighterTurnTest.java | 4 +++- .../handler/fight/TerminateTurnActionTest.java | 9 +++++++++ .../game/player/PlayerCharacteristicsTest.java | 15 +++++++++------ 14 files changed, 93 insertions(+), 25 deletions(-) diff --git a/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/AbstractFighter.java b/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/AbstractFighter.java index d8d8f16bf..56e8524d9 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/AbstractFighter.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/AbstractFighter.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; /** * Base class for implements a fighter @@ -135,6 +136,15 @@ public final FightTurn turn() { return turn; } + @Override + public final void perform(Consumer action) { + final FightTurn turn = this.turn; + + if (turn != null) { + action.accept(turn); + } + } + @Override public final void attach(Object key, Object value) { attachments.put(key, value); diff --git a/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/Fighter.java b/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/Fighter.java index fbe8942aa..22d80dfb8 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/Fighter.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/fight/fighter/Fighter.java @@ -31,6 +31,8 @@ import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.game.world.creature.Creature; +import java.util.function.Consumer; + /** * Base fighter */ @@ -56,9 +58,21 @@ public interface Fighter extends Creature, Dispatcher, ActiveFighter * Get the current fighter turn * * @throws FightException If it's not the turn of the current fighter + * + * @see Fighter#perform(Consumer) For perform action on fighter in a safe way (no exception) */ public FightTurn turn(); + /** + * Perform an action on the current active turn + * The action will take as parameter the current turn + * + * If it's not the turn of the fighter, this method will not call the action + * + * @param action Action to perform + */ + public void perform(Consumer action); + /** * Attach an attribute to the fighter * diff --git a/src/main/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristic.java b/src/main/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristic.java index 8417adf0f..4de359db5 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristic.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristic.java @@ -19,9 +19,11 @@ package fr.quatrevieux.araknemu.game.handler.account; +import fr.quatrevieux.araknemu.core.network.exception.ErrorPacket; import fr.quatrevieux.araknemu.core.network.parser.PacketHandler; import fr.quatrevieux.araknemu.network.game.GameSession; import fr.quatrevieux.araknemu.network.game.in.account.AskBoost; +import fr.quatrevieux.araknemu.network.game.out.basic.Noop; /** * Boost player characteristic @@ -29,11 +31,15 @@ public final class BoostCharacteristic implements PacketHandler { @Override public void handle(GameSession session, AskBoost packet) throws Exception { - session.player() - .properties() - .characteristics() - .boostCharacteristic(packet.characteristic()) - ; + try { + session.player() + .properties() + .characteristics() + .boostCharacteristic(packet.characteristic()) + ; + } catch (RuntimeException e) { + throw new ErrorPacket(new Noop(), e); + } } @Override diff --git a/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurn.java b/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurn.java index 79eead85b..a1aa9669f 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurn.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurn.java @@ -20,6 +20,7 @@ package fr.quatrevieux.araknemu.game.handler.fight; import fr.quatrevieux.araknemu.core.network.parser.PacketHandler; +import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.network.game.GameSession; import fr.quatrevieux.araknemu.network.game.in.fight.TurnEnd; @@ -29,7 +30,7 @@ public final class EndFighterTurn implements PacketHandler { @Override public void handle(GameSession session, TurnEnd packet) { - session.fighter().turn().stop(); + session.fighter().perform(FightTurn::stop); } @Override diff --git a/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnAction.java b/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnAction.java index 3313f0295..082d1f53d 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnAction.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnAction.java @@ -20,6 +20,7 @@ package fr.quatrevieux.araknemu.game.handler.fight; import fr.quatrevieux.araknemu.core.network.parser.PacketHandler; +import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.network.game.GameSession; import fr.quatrevieux.araknemu.network.game.in.game.action.GameActionAcknowledge; @@ -29,7 +30,7 @@ public final class TerminateTurnAction implements PacketHandler { @Override public void handle(GameSession session, GameActionAcknowledge packet) { - session.fighter().turn().terminate(); + session.fighter().perform(FightTurn::terminate); } @Override diff --git a/src/main/java/fr/quatrevieux/araknemu/game/player/characteristic/PlayerCharacteristics.java b/src/main/java/fr/quatrevieux/araknemu/game/player/characteristic/PlayerCharacteristics.java index 41d9de18b..1b5e582b5 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/player/characteristic/PlayerCharacteristics.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/player/characteristic/PlayerCharacteristics.java @@ -91,6 +91,8 @@ public SpecialEffects specials() { /** * Boost a characteristic + * + * @throws IllegalStateException When the character has no enough points for boost the required characteristic */ public void boostCharacteristic(Characteristic characteristic) { final BoostStatsData.Interval interval = race.boost( @@ -101,7 +103,7 @@ public void boostCharacteristic(Characteristic characteristic) { final int points = entity.boostPoints() - interval.cost(); if (points < 0) { - throw new IllegalArgumentException("Not enough points for boost stats"); + throw new IllegalStateException("Not enough points for boost stats"); } entity.setBoostPoints(points); diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 74e6c6354..e207c0fb9 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -47,7 +47,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -79,7 +79,7 @@ - + @@ -99,7 +99,7 @@ - + \ No newline at end of file diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/monster/MonsterFighterTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/monster/MonsterFighterTest.java index 2b833f27c..57469e0b4 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/monster/MonsterFighterTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/monster/MonsterFighterTest.java @@ -256,15 +256,23 @@ void playStop() throws Exception { Fight fight = createFight(); fighter.joinFight(fight, fight.map().get(123)); - FightTurn turn = new FightTurn(fighter, fight, Duration.ZERO); + FightTurn turn = new FightTurn(fighter, fight, Duration.ofSeconds(10)); turn.start(); + AtomicReference ref = new AtomicReference<>(); fighter.play(turn); assertSame(turn, fighter.turn()); + fighter.perform(ref::set); + assertSame(turn, ref.get()); + + ref.set(null); fighter.stop(); + fighter.perform(ref::set); + + assertNull(ref.get()); assertThrows(FightException.class, () -> fighter.turn()); } diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/player/PlayerFighterTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/player/PlayerFighterTest.java index 1ee179c5a..2f2419305 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/player/PlayerFighterTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/fighter/player/PlayerFighterTest.java @@ -181,15 +181,22 @@ void turnNotSet() { @Test void playAndStop() { - FightTurn turn = new FightTurn(fighter, fight, Duration.ZERO); + FightTurn turn = new FightTurn(fighter, fight, Duration.ofSeconds(10)); turn.start(); + AtomicReference ref = new AtomicReference<>(); fighter.play(turn); assertSame(turn, fighter.turn()); + fighter.perform(ref::set); + assertSame(turn, ref.get()); + ref.set(null); fighter.stop(); + fighter.perform(ref::set); + + assertNull(ref.get()); assertThrows(FightException.class, () -> fighter.turn()); } diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/order/AlternateTeamFighterOrderTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/order/AlternateTeamFighterOrderTest.java index 0f91d3c60..9040489e0 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/order/AlternateTeamFighterOrderTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/order/AlternateTeamFighterOrderTest.java @@ -41,6 +41,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import static org.junit.jupiter.api.Assertions.*; @@ -174,6 +175,9 @@ public FightTurn turn() { return null; } + @Override + public void perform(Consumer action) {} + @Override public boolean dead() { return false; diff --git a/src/test/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristicTest.java b/src/test/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristicTest.java index 57dcd8f5b..5ed49b357 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristicTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/handler/account/BoostCharacteristicTest.java @@ -20,12 +20,14 @@ package fr.quatrevieux.araknemu.game.handler.account; import fr.quatrevieux.araknemu.core.di.ContainerException; +import fr.quatrevieux.araknemu.core.network.exception.ErrorPacket; import fr.quatrevieux.araknemu.data.constant.Characteristic; import fr.quatrevieux.araknemu.data.living.entity.player.Player; import fr.quatrevieux.araknemu.game.fight.Fight; import fr.quatrevieux.araknemu.game.fight.FightBaseCase; import fr.quatrevieux.araknemu.network.game.in.account.AskBoost; import fr.quatrevieux.araknemu.network.game.out.account.Stats; +import fr.quatrevieux.araknemu.network.game.out.basic.Noop; import fr.quatrevieux.araknemu.network.game.out.info.Error; import fr.quatrevieux.araknemu.network.game.out.object.InventoryWeight; import org.junit.jupiter.api.BeforeEach; @@ -67,12 +69,11 @@ void handleSuccess() throws Exception { } @Test - void handleError() throws SQLException, ContainerException, NoSuchFieldException, IllegalAccessException { + void handleError() throws Exception { this.readField(gamePlayer(), "entity").setBoostPoints(0); + requestStack.clear(); - assertThrows(IllegalArgumentException.class, () -> handler.handle(session, new AskBoost(Characteristic.INTELLIGENCE))); - - requestStack.assertEmpty(); + assertThrows(ErrorPacket.class, () -> handler.handle(session, new AskBoost(Characteristic.INTELLIGENCE))); } @Test diff --git a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurnTest.java b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurnTest.java index 301f942a5..29f3dcda7 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurnTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/EndFighterTurnTest.java @@ -49,7 +49,9 @@ public void setUp() throws Exception { @Test void notActiveTurn() { - assertThrows(FightException.class, () -> handler.handle(session, new TurnEnd())); + requestStack.clear(); + handler.handle(session, new TurnEnd()); + requestStack.assertEmpty(); } @Test diff --git a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnActionTest.java b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnActionTest.java index 0aa699036..27d728cb7 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnActionTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/handler/fight/TerminateTurnActionTest.java @@ -33,11 +33,13 @@ import fr.quatrevieux.araknemu.network.game.out.fight.action.ActionEffect; import io.github.artsok.RepeatedIfExceptionsTest; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class TerminateTurnActionTest extends FightBaseCase { private Fight fight; @@ -90,4 +92,11 @@ void terminateMove() { assertEquals(198, fighter.cell().id()); assertEquals(0, turn.points().movementPoints()); } + + @Test + void notActiveTurnShouldNotNothing() { + requestStack.clear(); + handler.handle(session, new GameActionAcknowledge(0)); + requestStack.assertEmpty(); + } } diff --git a/src/test/java/fr/quatrevieux/araknemu/game/player/PlayerCharacteristicsTest.java b/src/test/java/fr/quatrevieux/araknemu/game/player/PlayerCharacteristicsTest.java index 263e4bd89..b2bcc018d 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/player/PlayerCharacteristicsTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/player/PlayerCharacteristicsTest.java @@ -20,20 +20,20 @@ package fr.quatrevieux.araknemu.game.player; import fr.quatrevieux.araknemu.core.di.ContainerException; -import fr.quatrevieux.araknemu.data.constant.Characteristic; -import fr.quatrevieux.araknemu.game.GameBaseCase; import fr.quatrevieux.araknemu.core.event.DefaultListenerAggregate; import fr.quatrevieux.araknemu.core.event.ListenerAggregate; -import fr.quatrevieux.araknemu.game.player.characteristic.event.CharacteristicsChanged; +import fr.quatrevieux.araknemu.data.constant.Characteristic; +import fr.quatrevieux.araknemu.game.GameBaseCase; import fr.quatrevieux.araknemu.game.item.ItemService; +import fr.quatrevieux.araknemu.game.item.inventory.exception.InventoryException; import fr.quatrevieux.araknemu.game.player.characteristic.BaseCharacteristics; import fr.quatrevieux.araknemu.game.player.characteristic.PlayerCharacteristics; import fr.quatrevieux.araknemu.game.player.characteristic.SpecialEffects; +import fr.quatrevieux.araknemu.game.player.characteristic.event.CharacteristicsChanged; import fr.quatrevieux.araknemu.game.player.inventory.slot.BeltSlot; import fr.quatrevieux.araknemu.game.player.inventory.slot.BootsSlot; import fr.quatrevieux.araknemu.game.world.creature.characteristics.DefaultCharacteristics; import fr.quatrevieux.araknemu.game.world.creature.characteristics.MutableCharacteristics; -import fr.quatrevieux.araknemu.game.item.inventory.exception.InventoryException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -41,7 +41,10 @@ import java.util.NoSuchElementException; import java.util.concurrent.atomic.AtomicReference; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; class PlayerCharacteristicsTest extends GameBaseCase { private PlayerCharacteristics characteristics; @@ -182,7 +185,7 @@ void boostCharacteristicNotEnoughPoints() throws SQLException, ContainerExceptio AtomicReference ref = new AtomicReference<>(); dispatcher.add(CharacteristicsChanged.class, ref::set); - assertThrows(IllegalArgumentException.class, () -> characteristics.boostCharacteristic(Characteristic.STRENGTH)); + assertThrows(IllegalStateException.class, () -> characteristics.boostCharacteristic(Characteristic.STRENGTH)); assertNull(ref.get()); assertEquals(50, characteristics.base().get(Characteristic.STRENGTH)); From bca4284204fc8b5d575edf4f6105aa6fa76bd272 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Dec 2021 18:26:55 +0000 Subject: [PATCH 3/4] Bump log4j-core from 2.16.0 to 2.17.0 Bumps log4j-core from 2.16.0 to 2.17.0. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5f37cc625..d99291f95 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.apache.logging.log4j log4j-core - 2.16.0 + 2.17.0 org.ini4j From 6700dd2e313c6c04ed72d4ea8e0f5c36b014b2c4 Mon Sep 17 00:00:00 2001 From: vincent4vx Date: Mon, 20 Dec 2021 17:25:14 +0100 Subject: [PATCH 4/4] v0.9.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d99291f95..06c281126 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ fr.quatrevieux.araknemu araknemu - 0.9-alpha + 0.9.1-alpha io.netty