diff --git a/src/main/java/emu/grasscutter/game/entity/gadget/chest/NormalChestInteractHandler.java b/src/main/java/emu/grasscutter/game/entity/gadget/chest/NormalChestInteractHandler.java index 0674c7fe0..33f2d9be8 100644 --- a/src/main/java/emu/grasscutter/game/entity/gadget/chest/NormalChestInteractHandler.java +++ b/src/main/java/emu/grasscutter/game/entity/gadget/chest/NormalChestInteractHandler.java @@ -3,6 +3,8 @@ package emu.grasscutter.game.entity.gadget.chest; import emu.grasscutter.game.entity.gadget.GadgetChest; import emu.grasscutter.game.player.Player; import emu.grasscutter.game.world.ChestReward; +import emu.grasscutter.server.event.player.PlayerOpenChestEvent; + import java.util.Random; public class NormalChestInteractHandler implements ChestInteractHandler { @@ -19,6 +21,10 @@ public class NormalChestInteractHandler implements ChestInteractHandler { @Override public boolean onInteract(GadgetChest chest, Player player) { + // Invoke open chest event. + var event = new PlayerOpenChestEvent(player, chest, this.chestReward); + event.call(); if (event.isCanceled()) return true; + player.earnExp(chestReward.getAdvExp()); player.getInventory().addItem(201, chestReward.getResin()); diff --git a/src/main/java/emu/grasscutter/server/event/player/PlayerOpenChestEvent.java b/src/main/java/emu/grasscutter/server/event/player/PlayerOpenChestEvent.java new file mode 100644 index 000000000..c87572af1 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/event/player/PlayerOpenChestEvent.java @@ -0,0 +1,33 @@ +package emu.grasscutter.server.event.player; + +import emu.grasscutter.game.entity.gadget.GadgetChest; +import emu.grasscutter.game.player.Player; +import emu.grasscutter.game.world.ChestReward; +import emu.grasscutter.server.event.Cancellable; +import emu.grasscutter.server.event.types.PlayerEvent; + +public final class PlayerOpenChestEvent extends PlayerEvent implements Cancellable { + private final GadgetChest chest; + private ChestReward reward; + + public PlayerOpenChestEvent(Player player, + GadgetChest chest, ChestReward reward + ) { + super(player); + + this.chest = chest; + this.reward = reward; + } + + public GadgetChest getChest() { + return this.chest; + } + + public void setReward(ChestReward reward) { + this.reward = reward; + } + + public ChestReward getReward() { + return this.reward; + } +}