65 lines
2.1 KiB
Java
65 lines
2.1 KiB
Java
package games.dmg.spigottyrant;
|
|
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
import java.util.stream.Collectors;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.entity.Player;
|
|
|
|
public final class FormerTamerReleaseTask implements Runnable {
|
|
private final TyrantStateManager stateManager;
|
|
private final Server server;
|
|
private final CapturedMobCustodyRelease release;
|
|
private final CapturedMobInventoryService inventory;
|
|
|
|
public FormerTamerReleaseTask(
|
|
TyrantStateManager stateManager,
|
|
Server server,
|
|
CapturedMobCustodyRelease release
|
|
) {
|
|
this(stateManager, server, release, null);
|
|
}
|
|
|
|
public FormerTamerReleaseTask(
|
|
TyrantStateManager stateManager,
|
|
Server server,
|
|
CapturedMobCustodyRelease release,
|
|
CapturedMobInventoryService inventory
|
|
) {
|
|
this.stateManager = stateManager;
|
|
this.server = server;
|
|
this.release = release;
|
|
this.inventory = inventory;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
Map<UUID, Player> online = server.getOnlinePlayers().stream()
|
|
.collect(Collectors.toMap(Player::getUniqueId, player -> player));
|
|
for (PlayerState state : stateManager.players().values()) {
|
|
if (state.capturedMobs().isEmpty()
|
|
|| state.tyrantClass() == TyrantClass.TAMER
|
|
&& state.capturedMobs().size() == 1) {
|
|
continue;
|
|
}
|
|
Player player = online.get(state.playerId());
|
|
if (player == null || player.isDead()) {
|
|
continue;
|
|
}
|
|
PlayerState released = state.tyrantClass() == TyrantClass.TAMER
|
|
? release.releaseExcess(player, state, 1)
|
|
: release.releaseAll(player, state);
|
|
if (released.equals(state)) {
|
|
continue;
|
|
}
|
|
stateManager.updatePlayer(
|
|
state.playerId(), state.latestName(), current -> released
|
|
);
|
|
stateManager.saveIfDirty();
|
|
if (inventory != null) {
|
|
inventory.reconcile(player, released);
|
|
}
|
|
}
|
|
}
|
|
}
|