implements AutoUpdateItem task cancellation (fixes #12)

This commit is contained in:
D0gma_ 2022-12-21 13:20:31 +01:00
parent 5c776dcec2
commit 62cb021aa3

@ -3,26 +3,47 @@ package de.studiocode.invui.item.impl;
import de.studiocode.invui.InvUI; import de.studiocode.invui.InvUI;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemProvider; import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.window.Window;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
* An {@link Item} that updates it's {@link ItemProvider} every specified amount * An {@link Item} that updates its {@link ItemProvider} every specified amount
* of ticks. * of ticks.
*/ */
public class AutoUpdateItem extends SuppliedItem { public class AutoUpdateItem extends SuppliedItem {
private final BukkitTask task; private final int period;
private BukkitTask task;
public AutoUpdateItem(int period, Supplier<? extends ItemProvider> builderSupplier) { public AutoUpdateItem(int period, Supplier<? extends ItemProvider> builderSupplier) {
super(builderSupplier, null); super(builderSupplier, null);
this.period = period;
}
public void start() {
if (task != null) task.cancel();
task = Bukkit.getScheduler().runTaskTimer(InvUI.getInstance().getPlugin(), this::notifyWindows, 0, period); task = Bukkit.getScheduler().runTaskTimer(InvUI.getInstance().getPlugin(), this::notifyWindows, 0, period);
} }
public void cancel() { public void cancel() {
task.cancel(); task.cancel();
task = null;
} }
@Override
public void addWindow(Window window) {
super.addWindow(window);
if (task == null) start();
}
@Override
public void removeWindow(Window window) {
super.removeWindow(window);
if (getWindows().isEmpty() && task != null) cancel();
}
} }