Skip to content

Commit

Permalink
fix stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
Decryptu committed Jan 15, 2025
1 parent 069497b commit abb11ea
Show file tree
Hide file tree
Showing 7 changed files with 272 additions and 256 deletions.
67 changes: 32 additions & 35 deletions src/main/java/com/enhancedplayerlist/Config.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
// src/main/java/com/enhancedplayerlist/Config.java
package com.enhancedplayerlist;

import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.common.ModConfigSpec;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.config.ModConfigEvent;

Expand All @@ -25,28 +21,29 @@ public class Config {
.comment("Whether to gray out offline players in the player list")
.define("grayOutOffline", true);

private static final ModConfigSpec.ConfigValue<List<? extends String>> VISIBLE_STATS = BUILDER
.comment("Stats to display in the player list",
"Available stats:",
"playtime - Total play time",
"deaths - Number of deaths",
"lastDeath - Time since last death",
"mobKills - Total mob kills",
"playerKills - Player kills",
"blocksWalked - Blocks walked",
"blocksMined - Blocks mined",
"jumps - Jump count",
"damageDealt - Damage dealt",
"damageTaken - Damage taken")
.defineList("visibleStats",
Arrays.asList(
"playtime",
"deaths",
"lastDeath",
"mobKills",
"blocksWalked"
),
entry -> entry instanceof String && isValidStat((String) entry));
private static final ModConfigSpec.ConfigValue<List<? extends String>> VISIBLE_STATS = BUILDER
.comment("Stats to display in the player list",
"Available stats:",
"playtime - Total play time",
"deaths - Number of deaths",
"lastDeath - Time since last death",
"mobKills - Total mob kills",
"playerKills - Player kills",
"blocksWalked - Blocks walked",
"blocksMined - Blocks mined",
"jumps - Jump count",
"damageDealt - Damage dealt",
"damageTaken - Damage taken")
.defineList("visibleStats",
Arrays.asList(
"playtime",
"deaths",
"lastDeath",
"mobKills",
"blocksWalked"
),
() -> "playtime", // Supplier for new elements
entry -> entry instanceof String && isValidStat((String) entry));

private static final ModConfigSpec.IntValue UPDATE_FREQUENCY = BUILDER
.comment("How often to update player stats (in ticks, 20 ticks = 1 second)")
Expand Down Expand Up @@ -80,14 +77,14 @@ private static boolean isValidStat(String stat) {
).contains(stat);
}

public static void register(IEventBus modEventBus) {
// Register the config
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, SPEC);
// Register the event handler
modEventBus.addListener(Config::onConfigLoad);
modEventBus.addListener(Config::onConfigReload);
}
public static void register(IEventBus modEventBus, ModContainer container) { // Change method signature
// Use container instead of ModLoadingContext
container.registerConfig(ModConfig.Type.COMMON, SPEC);

// Register the event handlers
modEventBus.addListener(Config::onConfigLoad);
modEventBus.addListener(Config::onConfigReload);
}

private static void onConfigLoad(ModConfigEvent.Loading event) {
updateConfig();
Expand Down
76 changes: 38 additions & 38 deletions src/main/java/com/enhancedplayerlist/EnhancedPlayerList.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// src/main/java/com/enhancedplayerlist/EnhancedPlayerList.java

package com.enhancedplayerlist;

import com.enhancedplayerlist.network.NetworkHandler;
Expand All @@ -9,57 +8,58 @@
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.event.server.ServerStartedEvent;
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
import org.slf4j.Logger;
import com.mojang.logging.LogUtils;
import net.neoforged.fml.ModContainer;

@Mod(EnhancedPlayerList.MODID)
public class EnhancedPlayerList {
public static final String MODID = "enhancedplayerlist";
private static final Logger LOGGER = LogUtils.getLogger();
public static final String MODID = "enhancedplayerlist";
private static final Logger LOGGER = LogUtils.getLogger();

public EnhancedPlayerList(IEventBus modEventBus) {
// Register config
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC);

// Register mod events
modEventBus.addListener(this::commonSetup);
modEventBus.addListener(NetworkHandler::register);

// Register server/game events
NeoForge.EVENT_BUS.register(this);
}
public EnhancedPlayerList(IEventBus modEventBus) {
// Get the mod container
ModContainer modContainer = ModLoadingContext.get().getActiveContainer();

// Register config with both bus and container
Config.register(modEventBus, modContainer);

// Register mod events
modEventBus.addListener(this::commonSetup);
modEventBus.addListener(NetworkHandler::register);
NeoForge.EVENT_BUS.register(this);
}

private void commonSetup(final FMLCommonSetupEvent event) {
LOGGER.info("Enhanced Player List initialized");
}
private void commonSetup(final FMLCommonSetupEvent event) {
LOGGER.info("Enhanced Player List initialized");
}

@SubscribeEvent
public void onServerStarted(ServerStartedEvent event) {
ServerStatsManager.init(event.getServer());
}
@SubscribeEvent
public void onServerStarted(ServerStartedEvent event) {
ServerStatsManager.init(event.getServer());
}

@SubscribeEvent
public void onServerStopping(ServerStoppingEvent event) {
ServerStatsManager.onServerStopping();
}
@SubscribeEvent
public void onServerStopping(ServerStoppingEvent event) {
ServerStatsManager.onServerStopping();
}

@SubscribeEvent
public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
ServerStatsManager.onPlayerJoin(player);
}
}
@SubscribeEvent
public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
ServerStatsManager.onPlayerJoin(player);
}
}

@SubscribeEvent
public void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
ServerStatsManager.onPlayerLeave(player);
}
}
@SubscribeEvent
public void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
ServerStatsManager.onPlayerLeave(player);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
package com.enhancedplayerlist.client.event;

import com.enhancedplayerlist.Config;
import com.enhancedplayerlist.EnhancedPlayerList;
import com.enhancedplayerlist.client.PlayerListRenderer;
import com.enhancedplayerlist.client.ClientStatsManager;
import net.minecraft.client.Minecraft;
Expand All @@ -10,43 +11,40 @@
import net.minecraft.network.chat.Component;
import net.minecraft.world.scores.Scoreboard;
import net.minecraft.world.scores.Objective;
import net.minecraft.world.scores.DisplaySlot;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
import net.neoforged.neoforge.client.gui.overlay.IGuiOverlay;

import java.util.List;
import java.util.UUID;

@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE)
@Mod.EventBusSubscriber(modid = EnhancedPlayerList.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class ClientEventHandler {

private static final Minecraft minecraft = Minecraft.getInstance();
private static int lastListWidth = 0;

@SubscribeEvent
public static void onRenderPlayerList(CustomizeGuiOverlayEvent.PlayerList event) {
if (!minecraft.isWindowActive() || minecraft.options.keyPlayerList.isDown()) {

private static final IGuiOverlay PLAYER_LIST_OVERLAY = ((gui, graphics, partialTick, screenWidth, screenHeight) -> {
if (!minecraft.isWindowActive() || !minecraft.options.keyPlayerList.isDown()) {
return;
}

GuiGraphics graphics = event.getGuiGraphics();
int screenWidth = event.getWindow().getGuiScaledWidth();
int screenHeight = event.getWindow().getGuiScaledHeight();

// Get scoreboard objective if any
Scoreboard scoreboard = minecraft.level.getScoreboard();
Objective objective = scoreboard != null ? scoreboard.getDisplayObjective(0) : null;
Objective objective = scoreboard != null ? scoreboard.getDisplayObjective(DisplaySlot.LIST) : null;

// Get player list width including stats
PlayerTabOverlay playerList = minecraft.gui.getTabList();
List<UUID> players = event.getPlayerInfo().stream()
.map(info -> info.getProfile().getId())
.toList();

// Get online players via player connection
var players = minecraft.player.connection.getListedOnlinePlayers();

// Calculate extra width needed for stats
// Calculate extra width for stats
int extraWidth = 0;
for (UUID playerId : players) {
for (var playerInfo : players) {
UUID playerId = playerInfo.getProfile().getId();
List<Component> stats = PlayerListRenderer.getPlayerStats(playerId);
if (!stats.isEmpty()) {
for (Component stat : stats) {
Expand All @@ -58,19 +56,17 @@ public static void onRenderPlayerList(CustomizeGuiOverlayEvent.PlayerList event)

// Add padding
extraWidth += 20;

// Store the final list width for other renderers
lastListWidth = event.getMaxPlayerNameWidth() + extraWidth;

// Modify player list entries to include stats
int y = 0;
for (UUID playerId : players) {
lastListWidth = minecraft.font.width("Player") + extraWidth;

// Render player stats
int y = 10;
for (var playerInfo : players) {
UUID playerId = playerInfo.getProfile().getId();
List<Component> stats = PlayerListRenderer.getPlayerStats(playerId);
if (!stats.isEmpty()) {
int baseX = screenWidth - extraWidth - 5;
int statY = y * 9 + event.getHeaderHeight();
int statY = y;

// Render each stat line
for (Component stat : stats) {
graphics.drawString(
minecraft.font,
Expand All @@ -82,19 +78,18 @@ public static void onRenderPlayerList(CustomizeGuiOverlayEvent.PlayerList event)
statY += 9;
}
}
y++;
y += 9;
}

// Handle offline players if enabled
// Handle offline players
if (Config.showOfflinePlayers) {
ClientStatsManager.getPlayerStats().forEach((uuid, statsData) -> {
if (!statsData.isOnline()) {
List<Component> stats = PlayerListRenderer.getPlayerStats(uuid);
if (!stats.isEmpty()) {
int baseX = screenWidth - extraWidth - 5;
int statY = y * 9 + event.getHeaderHeight();
int statY = y;

// Render offline player name
graphics.drawString(
minecraft.font,
Component.literal(statsData.getPlayerName()),
Expand All @@ -103,7 +98,6 @@ public static void onRenderPlayerList(CustomizeGuiOverlayEvent.PlayerList event)
Config.grayOutOffline ? 0x808080 : 0xFFFFFF
);

// Render offline player stats
for (Component stat : stats) {
graphics.drawString(
minecraft.font,
Expand All @@ -114,14 +108,15 @@ public static void onRenderPlayerList(CustomizeGuiOverlayEvent.PlayerList event)
);
statY += 9;
}
y++;
y += 9;
}
}
});
}
});

// Update list height
event.setFooterHeight(event.getFooterHeight() + y * 9);
public static void register() {
net.neoforged.neoforge.client.gui.overlay.VanillaGuiOverlay.PLAYER_LIST.insert(PLAYER_LIST_OVERLAY);
}

public static int getLastListWidth() {
Expand Down
Loading

0 comments on commit abb11ea

Please sign in to comment.