From bdd3cbbcd9a10bed1cf8606b0ae47e8d9ad2ea45 Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sun, 27 Aug 2023 23:22:02 -0400 Subject: [PATCH] Add `PlayerFinishDungeonEvent` --- .../game/dungeons/DungeonManager.java | 36 +++++++++---------- .../player/PlayerFinishDungeonEvent.java | 17 +++++++++ 2 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 src/main/java/emu/grasscutter/server/event/player/PlayerFinishDungeonEvent.java diff --git a/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java b/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java index ba184a56b..f742a2cbd 100644 --- a/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java +++ b/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java @@ -3,34 +3,26 @@ package emu.grasscutter.game.dungeons; import emu.grasscutter.Grasscutter; import emu.grasscutter.data.GameData; import emu.grasscutter.data.common.ItemParamData; -import emu.grasscutter.data.excels.dungeon.DungeonData; -import emu.grasscutter.data.excels.dungeon.DungeonPassConfigData; +import emu.grasscutter.data.excels.dungeon.*; import emu.grasscutter.game.activity.trialavatar.TrialAvatarActivityHandler; import emu.grasscutter.game.dungeons.dungeon_results.BaseDungeonResult; import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType; import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.player.Player; -import emu.grasscutter.game.props.ActionReason; -import emu.grasscutter.game.props.ActivityType; -import emu.grasscutter.game.props.WatcherTriggerType; -import emu.grasscutter.game.quest.enums.LogicType; -import emu.grasscutter.game.quest.enums.QuestContent; -import emu.grasscutter.game.world.Position; -import emu.grasscutter.game.world.Scene; +import emu.grasscutter.game.props.*; +import emu.grasscutter.game.quest.enums.*; +import emu.grasscutter.game.world.*; import emu.grasscutter.scripts.constants.EventType; import emu.grasscutter.scripts.data.ScriptArgs; -import emu.grasscutter.server.packet.send.PacketDungeonWayPointNotify; -import emu.grasscutter.server.packet.send.PacketGadgetAutoPickDropInfoNotify; +import emu.grasscutter.server.event.player.PlayerFinishDungeonEvent; +import emu.grasscutter.server.packet.send.*; import emu.grasscutter.utils.Utils; -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.IntStream; +import it.unimi.dsi.fastutil.ints.*; +import lombok.*; + import javax.annotation.Nullable; -import lombok.Getter; -import lombok.NonNull; -import lombok.val; +import java.util.*; +import java.util.stream.*; /** * TODO handle time limits TODO handle respawn points TODO handle team wipes and respawns TODO check @@ -288,6 +280,12 @@ public final class DungeonManager { public void finishDungeon() { this.notifyEndDungeon(true); this.endDungeon(BaseDungeonResult.DungeonEndReason.COMPLETED); + + // Call PlayerFinishDungeonEvent. + new PlayerFinishDungeonEvent( + this.getScene().getPlayers(), + this.getScene(), this + ).call(); } public void quitDungeon() { diff --git a/src/main/java/emu/grasscutter/server/event/player/PlayerFinishDungeonEvent.java b/src/main/java/emu/grasscutter/server/event/player/PlayerFinishDungeonEvent.java new file mode 100644 index 000000000..afcb75daf --- /dev/null +++ b/src/main/java/emu/grasscutter/server/event/player/PlayerFinishDungeonEvent.java @@ -0,0 +1,17 @@ +package emu.grasscutter.server.event.player; + +import emu.grasscutter.game.dungeons.DungeonManager; +import emu.grasscutter.game.player.Player; +import emu.grasscutter.game.world.Scene; +import emu.grasscutter.server.event.Event; +import lombok.*; + +import java.util.List; + +@Getter +@RequiredArgsConstructor +public final class PlayerFinishDungeonEvent extends Event { + private final List players; + private final Scene dungeon; + private final DungeonManager manager; +}