50 lines
1.6 KiB
Java
50 lines
1.6 KiB
Java
package games.dmg.spigottyrant;
|
|
|
|
import java.time.Clock;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.entity.Player;
|
|
|
|
public final class AbilityItemRefreshTask implements Runnable {
|
|
private final TyrantStateManager stateManager;
|
|
private final AbilityReadinessService readiness;
|
|
private final AbilityItemService items;
|
|
private final Server server;
|
|
private final Clock clock;
|
|
private final CapturedMobInventoryService capturedMobInventory;
|
|
|
|
public AbilityItemRefreshTask(
|
|
TyrantStateManager stateManager,
|
|
AbilityReadinessService readiness,
|
|
AbilityItemService items,
|
|
CapturedMobInventoryService capturedMobInventory,
|
|
Server server,
|
|
Clock clock
|
|
) {
|
|
this.stateManager = stateManager;
|
|
this.readiness = readiness;
|
|
this.items = items;
|
|
this.capturedMobInventory = capturedMobInventory;
|
|
this.server = server;
|
|
this.clock = clock;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
if (stateManager.game().lifecycle() != GameLifecycle.RUNNING) {
|
|
return;
|
|
}
|
|
for (Player player : server.getOnlinePlayers()) {
|
|
PlayerState before = stateManager.player(player.getUniqueId(), player.getName());
|
|
PlayerState after = readiness.refresh(before, clock.instant());
|
|
if (!after.equals(before)) {
|
|
stateManager.updatePlayer(
|
|
player.getUniqueId(), player.getName(), current -> after
|
|
);
|
|
}
|
|
items.removeInvalid(player, after);
|
|
items.recover(player, after);
|
|
capturedMobInventory.reconcile(player, after);
|
|
}
|
|
}
|
|
}
|