diff --git a/src/main/java/de/fullrisk/citrusDev/client/CitrusDevClient.java b/src/main/java/de/fullrisk/citrusDev/client/CitrusDevClient.java index 90f5193..27b7e2c 100644 --- a/src/main/java/de/fullrisk/citrusDev/client/CitrusDevClient.java +++ b/src/main/java/de/fullrisk/citrusDev/client/CitrusDevClient.java @@ -4,14 +4,19 @@ package de.fullrisk.citrusDev.client; import de.fullrisk.citrusDev.Config; import de.fullrisk.citrusDev.UI.*; 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 net.fabricmc.api.ClientModInitializer; 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.keymapping.v1.KeyMappingHelper; 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.renderer.entity.player.AvatarRenderer; import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.EntityType; import org.lwjgl.glfw.GLFW; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,9 +30,11 @@ public class CitrusDevClient implements ClientModInitializer { public static final String API_URL = "https://citrus-api.winniepat.de"; private static KeyMapping openScreenKey; + private static boolean testCosmeticPending; @Override public void onInitializeClient() { + registerPlayerCosmetics(); Module_FPS.register(); Module_KeyStrokes.register(); Module_Coords.register(); @@ -36,7 +43,11 @@ public class CitrusDevClient implements ClientModInitializer { 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( Identifier.fromNamespaceAndPath("citrus-dev", "general")); @@ -47,12 +58,23 @@ public class CitrusDevClient implements ClientModInitializer { category )); - ClientPlayConnectionEvents.JOIN.register((sender, client1, player) -> { + ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { RankHelper.fetchAllRanks(); + + if (client.player != null) { + PlayerCosmeticManager.enableTestCosmetic(client.player.getUUID()); + } else { + testCosmeticPending = true; + } }); ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (testCosmeticPending && client.player != null) { + PlayerCosmeticManager.enableTestCosmetic(client.player.getUUID()); + testCosmeticPending = false; + } + if (client.player != null && !client.isPaused()) { PlaytimeTracker.tick(); QuestsPanel.tick(); @@ -80,9 +102,20 @@ 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) { if (debug) { logger.info("[Citrus] [DEBUG] {}", message); } } -} \ No newline at end of file +}