diff --git a/src/main/java/de/studiocode/invgui/animation/impl/BaseAnimation.java b/src/main/java/de/studiocode/invgui/animation/impl/BaseAnimation.java index d1a7cf7..1e4c612 100644 --- a/src/main/java/de/studiocode/invgui/animation/impl/BaseAnimation.java +++ b/src/main/java/de/studiocode/invgui/animation/impl/BaseAnimation.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.BiConsumer; @@ -21,7 +22,7 @@ public abstract class BaseAnimation implements Animation { private Player player; private CopyOnWriteArrayList slots; private BiConsumer show; - private Runnable finish; + private final List finishHandlers = new ArrayList<>(); private BukkitTask task; private int frame; @@ -50,8 +51,8 @@ public abstract class BaseAnimation implements Animation { } @Override - public void setFinishHandler(@NotNull Runnable finish) { - this.finish = finish; + public void addFinishHandler(@NotNull Runnable finish) { + finishHandlers.add(finish); } public CopyOnWriteArrayList getSlots() { @@ -65,7 +66,7 @@ public abstract class BaseAnimation implements Animation { protected void finished() { task.cancel(); - finish.run(); + finishHandlers.forEach(Runnable::run); } public void start() { diff --git a/src/main/java/de/studiocode/invgui/window/impl/BaseWindow.java b/src/main/java/de/studiocode/invgui/window/impl/BaseWindow.java index f6dfdcb..43f32e3 100644 --- a/src/main/java/de/studiocode/invgui/window/impl/BaseWindow.java +++ b/src/main/java/de/studiocode/invgui/window/impl/BaseWindow.java @@ -146,7 +146,7 @@ public abstract class BaseWindow implements Window { animation.setBounds(getGui().getWidth(), getGui().getHeight()); animation.setPlayer(getViewer()); animation.addShowHandler((frame, index) -> redrawItem(index, itemsDisplayed[index], false)); - animation.setFinishHandler(() -> this.animation = null); + animation.addFinishHandler(() -> this.animation = null); animation.setSlots(IntStream.range(0, size) .filter(i -> itemsDisplayed[i] != null) .boxed()