Improved AutoCycleItem

This commit is contained in:
NichtStudioCode 2021-06-17 21:13:43 +02:00
parent a721a8c028
commit 886a8ebbcb

@ -3,6 +3,7 @@ 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.ItemBuilder; import de.studiocode.invui.item.ItemBuilder;
import de.studiocode.invui.window.Window;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
@ -16,17 +17,24 @@ import org.bukkit.scheduler.BukkitTask;
public class AutoCycleItem extends BaseItem { public class AutoCycleItem extends BaseItem {
private final ItemBuilder[] itemBuilders; private final ItemBuilder[] itemBuilders;
private final BukkitTask task; private final int period;
private BukkitTask task;
private int state; private int state;
public AutoCycleItem(int period, ItemBuilder... itemBuilders) { public AutoCycleItem(int period, ItemBuilder... itemBuilders) {
this.itemBuilders = itemBuilders; this.itemBuilders = itemBuilders;
this.period = period;
}
public void start() {
if (task != null) task.cancel();
task = Bukkit.getScheduler().runTaskTimer(InvUI.getInstance().getPlugin(), this::cycle, 0, period); task = Bukkit.getScheduler().runTaskTimer(InvUI.getInstance().getPlugin(), this::cycle, 0, period);
} }
public void cancel() { public void cancel() {
task.cancel(); task.cancel();
task = null;
} }
private void cycle() { private void cycle() {
@ -40,6 +48,18 @@ public class AutoCycleItem extends BaseItem {
return itemBuilders[state]; return itemBuilders[state];
} }
@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();
}
@Override @Override
public void handleClick(ClickType clickType, Player player, InventoryClickEvent event) { public void handleClick(ClickType clickType, Player player, InventoryClickEvent event) {
// empty // empty