Renamed and rewrote the manager for protected players. Most protected player logic should now be handled by the manager.
This commit is contained in:
153
src/main/java/dev/micle/loginprotection/data/ProtectedPlayerManager.java
Executable file
153
src/main/java/dev/micle/loginprotection/data/ProtectedPlayerManager.java
Executable file
@ -0,0 +1,153 @@
|
||||
package dev.micle.loginprotection.data;
|
||||
|
||||
import dev.micle.loginprotection.LoginProtection;
|
||||
import dev.micle.loginprotection.setup.Config;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TimerTask;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ProtectedPlayerManager {
|
||||
// Initialize variables
|
||||
private static final List<ProtectedPlayer> protectedPlayers = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Method for initializing the ProtectedPlayerManager.
|
||||
*/
|
||||
public static void init() {
|
||||
for (ProtectedPlayer protectedPlayer : protectedPlayers) {
|
||||
removePlayer(protectedPlayer.getPlayerUUID());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a player to be protected.
|
||||
* @param playerUUID UUID of player to protect.
|
||||
*/
|
||||
public static void addPlayer(UUID playerUUID) {
|
||||
if (getPlayer(playerUUID) != null) {
|
||||
return;
|
||||
}
|
||||
protectedPlayers.add(new ProtectedPlayer(playerUUID, ProtectedPlayer.State.JOINING));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a protected player from the list of protected players.
|
||||
* @param playerUUID UUID of player to get.
|
||||
* @return ProtectedPlayer instance if player is present, otherwise null.
|
||||
*/
|
||||
public static ProtectedPlayer getPlayer(UUID playerUUID) {
|
||||
for (ProtectedPlayer protectedPlayer : protectedPlayers) {
|
||||
if (protectedPlayer.getPlayerUUID().equals(playerUUID)) {
|
||||
return protectedPlayer;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a player from the list of protected players.
|
||||
* @param playerUUID UUID of player to remove.
|
||||
*/
|
||||
public static void removePlayer(UUID playerUUID) {
|
||||
ProtectedPlayer player = getPlayer(playerUUID);
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
player.getGracePeriodTimer().cancel();
|
||||
protectedPlayers.remove(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a player's state appropriately.
|
||||
* @param playerUUID UUID of player to update the state of.
|
||||
*/
|
||||
public static void updateState(UUID playerUUID) {
|
||||
ProtectedPlayer player = getPlayer(playerUUID);
|
||||
|
||||
if (player == null) {
|
||||
addPlayer(playerUUID);
|
||||
} else {
|
||||
ProtectedPlayer.State currentState = player.getState();
|
||||
if (currentState.equals(ProtectedPlayer.State.JOINING) || currentState.equals(ProtectedPlayer.State.AFK)) {
|
||||
// JOINING, AFK -> ACTIVE
|
||||
player.setState(ProtectedPlayer.State.ACTIVE);
|
||||
if (Config.Server.POST_GRACE_ENABLED.get()) {
|
||||
startGracePeriod(playerUUID);
|
||||
} else {
|
||||
applyPostEffects(playerUUID);
|
||||
}
|
||||
} else {
|
||||
// ACTIVE -> AFK
|
||||
if (Config.Server.AFK_PROTECTION_ENABLED.get()) {
|
||||
player.setState(ProtectedPlayer.State.AFK);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the grace period counter for a player.
|
||||
* @param playerUUID UUID of player to start the grace period for.
|
||||
*/
|
||||
private static void startGracePeriod(UUID playerUUID) {
|
||||
ProtectedPlayer player = getPlayer(playerUUID);
|
||||
if (player == null) return;
|
||||
|
||||
// Set grace period length
|
||||
player.setGracePeriod(Config.Server.POST_GRACE_DURATION.get());
|
||||
|
||||
// Create scheduled task
|
||||
player.getGracePeriodTimer().schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
player.setGracePeriod(player.getGracePeriodTimeRemaining() - 1);
|
||||
if (player.getGracePeriodTimeRemaining() == 0) {
|
||||
applyPostEffects(playerUUID);
|
||||
player.getGracePeriodTimer().cancel();
|
||||
}
|
||||
}
|
||||
}, 1000, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies effects to the player.
|
||||
* @param playerUUID UUID of player to apply effects to.
|
||||
*/
|
||||
private static void applyPostEffects(UUID playerUUID) {
|
||||
// Get player entity
|
||||
Player player = LoginProtection.getProxy().getServer().getPlayerList().getPlayer(playerUUID);
|
||||
if (player == null) {
|
||||
removePlayer(playerUUID);
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply effects
|
||||
if (player.isInWater()) {
|
||||
if (Config.Server.POST_REFILL_AIR_ENABLED.get()) {
|
||||
player.setAirSupply(player.getMaxAirSupply());
|
||||
}
|
||||
if (Config.Server.POST_WATER_ENABLED.get()) {
|
||||
player.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING,
|
||||
Config.Server.POST_WATER_DURATION.get() * 20, 0));
|
||||
}
|
||||
}
|
||||
if (player.isInLava()) {
|
||||
if (Config.Server.POST_LAVA_ENABLED.get()) {
|
||||
player.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE,
|
||||
Config.Server.POST_LAVA_DURATION.get()*20, 0));
|
||||
}
|
||||
}
|
||||
if (player.isOnFire()) {
|
||||
if (Config.Server.POST_FIRE_ENABLED.get()) {
|
||||
player.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE,
|
||||
Config.Server.POST_FIRE_DURATION.get()*20, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
package dev.micle.loginprotection.data;
|
||||
|
||||
import dev.micle.loginprotection.setup.Config;
|
||||
import net.minecraft.network.chat.TextComponent;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraftforge.server.ServerLifecycleHooks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ProtectedPlayers {
|
||||
private final List<ProtectedPlayer> protected_players = new ArrayList<>();
|
||||
|
||||
public ProtectedPlayers() { }
|
||||
|
||||
public int size() {
|
||||
return protected_players.size();
|
||||
}
|
||||
|
||||
public void addPlayer(UUID player_uuid) {
|
||||
protected_players.add(new ProtectedPlayer(player_uuid));
|
||||
}
|
||||
|
||||
public ProtectedPlayer getPlayer(UUID player_uuid) {
|
||||
ProtectedPlayer player;
|
||||
for (ProtectedPlayer protected_player : protected_players) {
|
||||
player = protected_player;
|
||||
if (player.getPlayerUUID() == player_uuid) {
|
||||
return player;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void removePlayer(UUID player_uuid) {
|
||||
ProtectedPlayer protected_player = getPlayer(player_uuid);
|
||||
if (protected_player == null) { return; }
|
||||
protected_players.remove(protected_player);
|
||||
|
||||
ServerPlayer player = ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayer(player_uuid);
|
||||
if (player == null) { return; }
|
||||
|
||||
if (!Config.Server.POST_GRACE_ENABLED.get()) { return; }
|
||||
player.sendMessage(new TextComponent("[LoginProtection] Grace period ended!"), player_uuid);
|
||||
}
|
||||
|
||||
public void updateGracePeriod(UUID player_uuid) {
|
||||
ProtectedPlayer protected_player = getPlayer(player_uuid);
|
||||
if (protected_player.isLoading()) { return; }
|
||||
|
||||
int grace_period = protected_player.getGracePeriod()-1;
|
||||
protected_player.setGracePeriod(grace_period);
|
||||
if (grace_period <= 0) {
|
||||
removePlayer(player_uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user