feat: register and activate player cosmetics

This commit is contained in:
2026-07-14 15:27:40 +02:00
parent b42e397365
commit 4bf4126121
@@ -4,14 +4,19 @@ package de.fullrisk.citrusDev.client;
import de.fullrisk.citrusDev.Config; import de.fullrisk.citrusDev.Config;
import de.fullrisk.citrusDev.UI.*; import de.fullrisk.citrusDev.UI.*;
import de.fullrisk.citrusDev.UIHelper.DraggableHud; import de.fullrisk.citrusDev.UIHelper.DraggableHud;
import de.fullrisk.citrusDev.client.cosmetic.PlayerCosmeticManager;
import de.fullrisk.citrusDev.client.cosmetic.PlayerCosmeticRenderLayer;
import de.fullrisk.citrusDev.helper.RankHelper; import de.fullrisk.citrusDev.helper.RankHelper;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityRenderLayerRegistrationCallback;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
import net.minecraft.resources.Identifier; import net.minecraft.resources.Identifier;
import net.minecraft.world.entity.EntityType;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -25,9 +30,11 @@ public class CitrusDevClient implements ClientModInitializer {
public static final String API_URL = "https://citrus-api.winniepat.de"; public static final String API_URL = "https://citrus-api.winniepat.de";
private static KeyMapping openScreenKey; private static KeyMapping openScreenKey;
private static boolean testCosmeticPending;
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
registerPlayerCosmetics();
Module_FPS.register(); Module_FPS.register();
Module_KeyStrokes.register(); Module_KeyStrokes.register();
Module_Coords.register(); Module_Coords.register();
@@ -36,7 +43,11 @@ public class CitrusDevClient implements ClientModInitializer {
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPCManager.shutdown()); ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPCManager.shutdown());
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> DiscordRPCManager.setIdle()); ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> {
DiscordRPCManager.setIdle();
PlayerCosmeticManager.clear();
testCosmeticPending = false;
});
KeyMapping.Category category = KeyMapping.Category.register( KeyMapping.Category category = KeyMapping.Category.register(
Identifier.fromNamespaceAndPath("citrus-dev", "general")); Identifier.fromNamespaceAndPath("citrus-dev", "general"));
@@ -47,12 +58,23 @@ public class CitrusDevClient implements ClientModInitializer {
category category
)); ));
ClientPlayConnectionEvents.JOIN.register((sender, client1, player) -> { ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> {
RankHelper.fetchAllRanks(); RankHelper.fetchAllRanks();
if (client.player != null) {
PlayerCosmeticManager.enableTestCosmetic(client.player.getUUID());
} else {
testCosmeticPending = true;
}
}); });
ClientTickEvents.END_CLIENT_TICK.register(client -> { ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (testCosmeticPending && client.player != null) {
PlayerCosmeticManager.enableTestCosmetic(client.player.getUUID());
testCosmeticPending = false;
}
if (client.player != null && !client.isPaused()) { if (client.player != null && !client.isPaused()) {
PlaytimeTracker.tick(); PlaytimeTracker.tick();
QuestsPanel.tick(); QuestsPanel.tick();
@@ -80,6 +102,17 @@ public class CitrusDevClient implements ClientModInitializer {
}); });
} }
private static void registerPlayerCosmetics() {
LivingEntityRenderLayerRegistrationCallback.EVENT.register(
(entityType, entityRenderer, registrationHelper, context) -> {
if (entityType == EntityType.PLAYER
&& entityRenderer instanceof AvatarRenderer<?> avatarRenderer) {
registrationHelper.register(new PlayerCosmeticRenderLayer(avatarRenderer));
}
}
);
}
public static void debugLog(String message) { public static void debugLog(String message) {
if (debug) { if (debug) {
logger.info("[Citrus] [DEBUG] {}", message); logger.info("[Citrus] [DEBUG] {}", message);