package net.buycraft.plugin.execution.strategy;
import lombok.EqualsAndHashCode;
import lombok.Value;
import net.buycraft.plugin.IBuycraftPlatform;
import net.buycraft.plugin.data.QueuedCommand;
import net.buycraft.plugin.data.QueuedPlayer;
import java.util.concurrent.TimeUnit;
@Value
@EqualsAndHashCode(exclude = {"queueTime"})
public class ToRunQueuedCommand {
private final QueuedPlayer player;
private final QueuedCommand command;
private final boolean requireOnline;
private final long queueTime = System.currentTimeMillis();
public boolean canExecute(IBuycraftPlatform platform) {
Integer requiredSlots = command.getConditions().get("slots");
if (requiredSlots != null || requireOnline) {
if (!platform.isPlayerOnline(player)) {
return false;
}
}
if (requiredSlots != null) {
int free = platform.getFreeSlots(player);
if (free < requiredSlots) {
return false;
}
}
Integer delay = command.getConditions().get("delay");
return !(delay != null && delay > 0 && System.currentTimeMillis() - queueTime < TimeUnit.SECONDS.toMillis(delay));
}
}