Update server state handling and mapping for web player integration.

- Introduced `WebPlayer` class for representing web players.
- Added `WebPlayerMapper` for converting between `WebPlayer` and DTOs.
- Updated `ServerMapper` and `WebHandler` to support `WebPlayer`.
- Refactored `PlayerListener` to include `ChatUser` in server state updates.
This commit is contained in:
akastijn 2026-08-09 02:07:05 +02:00
parent e72f79cb29
commit 0d2ac3763f
6 changed files with 63 additions and 10 deletions

View File

@ -7,9 +7,9 @@ import com.alttd.altitudeweb.model.ChatMessageDto;
import com.alttd.chat.config.Config; import com.alttd.chat.config.Config;
import com.alttd.chat.objects.chat_log.mapper.chat_log.ChatLogMapper; import com.alttd.chat.objects.chat_log.mapper.chat_log.ChatLogMapper;
import com.alttd.chat.objects.chat_log.mapper.server_state.ServerMapper; import com.alttd.chat.objects.chat_log.mapper.server_state.ServerMapper;
import com.alttd.chat.objects.chat_log.mapper.server_state.WebPlayer;
import com.alttd.chat.util.ALogger; import com.alttd.chat.util.ALogger;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -48,7 +48,7 @@ public class WebHandler {
triggerSend(); triggerSend();
} }
public void updateServerState(String serverName, List<Player> playerList) { public void updateServerState(String serverName, List<WebPlayer> playerList) {
try { try {
chatApi.updateServerStatesAsync(ServerMapper.toDto(serverName, playerList), new SilentApiHandler()); chatApi.updateServerStatesAsync(ServerMapper.toDto(serverName, playerList), new SilentApiHandler());
} catch (ApiException e) { } catch (ApiException e) {

View File

@ -3,19 +3,18 @@ package com.alttd.chat.objects.chat_log.mapper.server_state;
import com.alttd.altitudeweb.model.ServerDto; import com.alttd.altitudeweb.model.ServerDto;
import com.alttd.altitudeweb.model.ServerStateDto; import com.alttd.altitudeweb.model.ServerStateDto;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@UtilityClass @UtilityClass
public class ServerMapper { public class ServerMapper {
public static ServerStateDto toDto(String serverName, List<Player> playerList) { public static ServerStateDto toDto(String serverName, List<WebPlayer> playerList) {
ServerStateDto serverStateDto = new ServerStateDto(); ServerStateDto serverStateDto = new ServerStateDto();
ServerDto serverDto = new ServerDto(); ServerDto serverDto = new ServerDto();
serverDto.setName(serverName); serverDto.setName(serverName);
serverDto.setPlayers(playerList.stream().map(UserMapper::toDto).toList()); serverDto.setPlayers(playerList.stream().map(WebPlayerMapper::toDto).toList());
serverStateDto.setServers(List.of(serverDto)); serverStateDto.setServers(List.of(serverDto));
return serverStateDto; return serverStateDto;
} }

View File

@ -0,0 +1,16 @@
package com.alttd.chat.objects.chat_log.mapper.server_state;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.UUID;
@Data
@NoArgsConstructor
public class WebPlayer {
private UUID uuid;
private String name;
private String styledName;
}

View File

@ -0,0 +1,17 @@
package com.alttd.chat.objects.chat_log.mapper.server_state;
import com.alttd.altitudeweb.model.UserDto;
import lombok.experimental.UtilityClass;
@UtilityClass
public class WebPlayerMapper {
public static UserDto toDto(WebPlayer webPlayer) {
UserDto userDto = new UserDto();
userDto.setName(webPlayer.getName());
userDto.setUuid(webPlayer.getUuid());
userDto.setStyledName(webPlayer.getStyledName());
return userDto;
}
}

View File

@ -62,6 +62,7 @@ public class PlayerListener implements Listener {
ChatUser user = ChatUserManager.getChatUser(uuid); ChatUser user = ChatUserManager.getChatUser(uuid);
if (user != null) { if (user != null) {
updateServerState(event.getPlayer(), user, true);
return; return;
} }
@ -69,9 +70,8 @@ public class PlayerListener implements Listener {
ChatUser chatUser = new ChatUser(uuid, -1, null); ChatUser chatUser = new ChatUser(uuid, -1, null);
ChatUserManager.addUser(chatUser); ChatUserManager.addUser(chatUser);
Queries.saveUser(chatUser); Queries.saveUser(chatUser);
updateServerState(event.getPlayer(), chatUser, true);
//TODO load player on other servers with plugin message? //TODO load player on other servers with plugin message?
updateServerState(event.getPlayer(), true);
} }
@EventHandler @EventHandler
@ -79,10 +79,10 @@ public class PlayerListener implements Listener {
UUID uuid = event.getPlayer().getUniqueId(); UUID uuid = event.getPlayer().getUniqueId();
ChatUser user = ChatUserManager.getChatUser(uuid); ChatUser user = ChatUserManager.getChatUser(uuid);
ChatUserManager.removeUser(user); ChatUserManager.removeUser(user);
updateServerState(event.getPlayer(), false); updateServerState(event.getPlayer(), user, false);
} }
private void updateServerState(Player triggerPlayer, boolean add) { private void updateServerState(Player triggerPlayer, ChatUser chatUser, boolean add) {
ArrayList<Player> playerList = new ArrayList<>(Bukkit.getOnlinePlayers()); ArrayList<Player> playerList = new ArrayList<>(Bukkit.getOnlinePlayers());
if (add) { if (add) {
if (playerList.stream() if (playerList.stream()
@ -95,7 +95,9 @@ public class PlayerListener implements Listener {
playerList.removeIf(player -> player.getUniqueId().equals(triggerPlayer.getUniqueId())); playerList.removeIf(player -> player.getUniqueId().equals(triggerPlayer.getUniqueId()));
} }
String name = Bukkit.getServer().getName(); String name = Bukkit.getServer().getName();
webHandler.updateServerState(name, playerList); webHandler.updateServerState(name,
playerList.stream().map(player -> WebPlayerMapper.fromPlayer(player, chatUser)).toList()
);
} }
@EventHandler(ignoreCancelled = true) // untested @EventHandler(ignoreCancelled = true) // untested

View File

@ -0,0 +1,19 @@
package com.alttd.chat.listeners;
import com.alttd.chat.objects.ChatUser;
import com.alttd.chat.objects.chat_log.mapper.server_state.WebPlayer;
import lombok.experimental.UtilityClass;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import org.bukkit.entity.Player;
@UtilityClass
public class WebPlayerMapper {
public static WebPlayer fromPlayer(Player player, ChatUser chatUser) {
WebPlayer webPlayer = new WebPlayer();
webPlayer.setUuid(player.getUniqueId());
webPlayer.setName(player.getName());
webPlayer.setStyledName(GsonComponentSerializer.gson().serialize(chatUser.getDisplayName().asComponent()));
return webPlayer;
}
}