Files
AdminMode/src/main/java/org/blz/adminmode/moderation/ModeSession.java
2026-08-02 22:21:03 +03:00

254 lines
6.9 KiB
Java
Executable File

package org.blz.adminmode.moderation;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
public final class ModeSession {
private final UUID playerId;
private final String playerName;
private final ModeratorProfile profile;
private final long startTimestamp;
private final String previousGroup;
private final String activeGroup;
private final ItemStack[] inventoryContents;
private final ItemStack[] armorContents;
private final ItemStack offHandItem;
private final Location location;
private final GameMode gameMode;
private final double health;
private final double maxHealth;
private final int foodLevel;
private final float saturation;
private final float exhaustion;
private final int expLevel;
private final float exp;
private final int totalExperience;
private final Collection<PotionEffect> potionEffects;
private final boolean flying;
private final boolean allowFlight;
private final float flySpeed;
private final float walkSpeed;
private final int fireTicks;
public ModeSession(
UUID playerId,
String playerName,
ModeratorProfile profile,
long startTimestamp,
String previousGroup,
String activeGroup,
ItemStack[] inventoryContents,
ItemStack[] armorContents,
ItemStack offHandItem,
Location location,
GameMode gameMode,
double health,
double maxHealth,
int foodLevel,
float saturation,
float exhaustion,
int expLevel,
float exp,
int totalExperience,
Collection<PotionEffect> potionEffects,
boolean flying,
boolean allowFlight,
float flySpeed,
float walkSpeed,
int fireTicks) {
this.playerId = playerId;
this.playerName = playerName;
this.profile = profile;
this.startTimestamp = startTimestamp;
this.previousGroup = previousGroup;
this.activeGroup = activeGroup;
this.inventoryContents = cloneItems(inventoryContents);
this.armorContents = cloneItems(armorContents);
this.offHandItem = cloneItem(offHandItem);
this.location = location == null ? null : location.clone();
this.gameMode = gameMode;
this.health = health;
this.maxHealth = maxHealth;
this.foodLevel = foodLevel;
this.saturation = saturation;
this.exhaustion = exhaustion;
this.expLevel = expLevel;
this.exp = exp;
this.totalExperience = totalExperience;
this.potionEffects = potionEffects == null ? List.of() : new ArrayList<>(potionEffects);
this.flying = flying;
this.allowFlight = allowFlight;
this.flySpeed = flySpeed;
this.walkSpeed = walkSpeed;
this.fireTicks = fireTicks;
}
public static ModeSession capture(Player player, ModeratorProfile profile, String previousGroup, String activeGroup) {
double maxHealth = 20.0D;
if (player.getAttribute(Attribute.MAX_HEALTH) != null) {
maxHealth = player.getAttribute(Attribute.MAX_HEALTH).getBaseValue();
}
return new ModeSession(
player.getUniqueId(),
player.getName(),
profile,
System.currentTimeMillis(),
previousGroup,
activeGroup,
player.getInventory().getContents(),
player.getInventory().getArmorContents(),
player.getInventory().getItemInOffHand(),
player.getLocation(),
player.getGameMode(),
player.getHealth(),
maxHealth,
player.getFoodLevel(),
player.getSaturation(),
player.getExhaustion(),
player.getLevel(),
player.getExp(),
player.getTotalExperience(),
player.getActivePotionEffects(),
player.isFlying(),
player.getAllowFlight(),
player.getFlySpeed(),
player.getWalkSpeed(),
player.getFireTicks());
}
public UUID getPlayerId() {
return playerId;
}
public String getPlayerName() {
return playerName;
}
public ModeratorProfile getProfile() {
return profile;
}
public long getStartTimestamp() {
return startTimestamp;
}
public String getPreviousGroup() {
return previousGroup;
}
public String getActiveGroup() {
return activeGroup;
}
public ItemStack[] getInventoryContents() {
return cloneItems(inventoryContents);
}
public ItemStack[] getArmorContents() {
return cloneItems(armorContents);
}
public ItemStack getOffHandItem() {
return cloneItem(offHandItem);
}
public Location getLocation() {
return location == null ? null : location.clone();
}
public GameMode getGameMode() {
return gameMode;
}
public double getHealth() {
return health;
}
public double getMaxHealth() {
return maxHealth;
}
public int getFoodLevel() {
return foodLevel;
}
public float getSaturation() {
return saturation;
}
public float getExhaustion() {
return exhaustion;
}
public int getExpLevel() {
return expLevel;
}
public float getExp() {
return exp;
}
public int getTotalExperience() {
return totalExperience;
}
public Collection<PotionEffect> getPotionEffects() {
return new ArrayList<>(potionEffects);
}
public boolean isFlying() {
return flying;
}
public boolean isAllowFlight() {
return allowFlight;
}
public float getFlySpeed() {
return flySpeed;
}
public float getWalkSpeed() {
return walkSpeed;
}
public int getFireTicks() {
return fireTicks;
}
public long getDurationMillis() {
return Math.max(0L, System.currentTimeMillis() - startTimestamp);
}
private static ItemStack[] cloneItems(ItemStack[] source) {
if (source == null) {
return new ItemStack[0];
}
ItemStack[] clone = new ItemStack[source.length];
for (int i = 0; i < source.length; i++) {
clone[i] = cloneItem(source[i]);
}
return clone;
}
private static ItemStack cloneItem(ItemStack item) {
if (item == null || item.getType() == Material.AIR) {
return ItemStack.empty();
}
return item.clone();
}
}