#include "stdafx.h" #include #include "Windows64_DiscordPresence.h" #include "../../Minecraft.World/StringHelpers.h" #include "MultiPlayerLevel.h" #include "../Minecraft.World/LevelData.h" DiscordPresence g_DiscordPresence; static DiscordRichPresence presence; void DiscordPresence::Initialise() { app.DebugPrintf("Initialising Discord Presence...\n"); DiscordEventHandlers handlers; memset(&handlers, 0, sizeof(handlers)); memset(&presence, 0, sizeof(presence)); handlers.ready = [](const DiscordUser* request) { app.DebugPrintf("Discord Ready!\n"); }; handlers.errored = [](int errorCode, const char* message) { app.DebugPrintf("Discord Errored (%d): %s\n", errorCode, convStringToWstring(message).c_str()); }; handlers.disconnected = [](int errorCode, const char* message) { app.DebugPrintf("Discord Disconnected (%d): %s\n", errorCode, convStringToWstring(message).c_str()); }; Discord_Initialize("784487734748119067", &handlers, 1, nullptr); app.DebugPrintf("Initialised Discord Presence...\n"); } void DiscordPresence::Shutdown() { app.DebugPrintf("Shutting down Discord Presence...\n"); memset(&presence, 0, sizeof(presence)); Discord_Shutdown(); } void DiscordPresence::Tick() { Discord_RunCallbacks(); } void DiscordPresence::SetPresenceContext(int state) { const char* stateStr = ""; switch(state) { case CONTEXT_GAME_STATE_BLANK: stateStr = "Enjoying the view!"; break; case CONTEXT_GAME_STATE_RIDING_PIG: stateStr = "Riding a pig"; break; case CONTEXT_GAME_STATE_RIDING_MINECART: stateStr = "Riding a minecart"; break; case CONTEXT_GAME_STATE_BOATING: stateStr = "In a boat"; break; case CONTEXT_GAME_STATE_FISHING: stateStr = "Fishing"; break; case CONTEXT_GAME_STATE_CRAFTING: stateStr = "Crafting"; break; case CONTEXT_GAME_STATE_NETHER: stateStr = "Into the Nether"; break; case CONTEXT_GAME_STATE_CD: stateStr = "Listening to a disc"; break; case CONTEXT_GAME_STATE_MAP: stateStr = "Looking at a map"; break; case CONTEXT_GAME_STATE_ENCHANTING: stateStr = "Enchanting"; break; case CONTEXT_GAME_STATE_BREWING: stateStr = "Brewing a potion"; break; case CONTEXT_GAME_STATE_ANVIL: stateStr = "Working at the Anvil"; break; case CONTEXT_GAME_STATE_TRADING: stateStr = "Meeting the neighbours"; break; // New case CONTEXT_GAME_STATE_BEACON: stateStr = "Powering the beacon"; break; case CONTEXT_GAME_STATE_END: stateStr = "To the End"; break; case CONTEXT_GAME_STATE_END_POEM: stateStr = "Listening to the universe"; break; case CONTEXT_GAME_STATE_FIREWORKS: stateStr = "Mixing pyrotechnics"; break; case CONTEXT_GAME_STATE_FURNACE: stateStr = "Smelting away"; break; case CONTEXT_GAME_STATE_HOPPER: stateStr = "Filtering items"; break; case CONTEXT_GAME_STATE_HORSE: stateStr = "Checking the saddlebags"; break; case CONTEXT_GAME_STATE_RIDING_HORSE: stateStr = "Riding a horse"; break; case CONTEXT_GAME_STATE_SIGN: stateStr = "Leaving a message"; break; default: stateStr = ""; break; } presence.state = stateStr; Discord_UpdatePresence(&presence); } void DiscordPresence::SetCurrentGameActivity(int details) { static char finalDetails[64]; const char* detailsStr = ""; const char* gameTypeStr = ""; Minecraft* pMinecraft = Minecraft::GetInstance(); if (pMinecraft->level != nullptr) { GameType* gameType = pMinecraft->level->getLevelData()->getGameType(); if (gameType == GameType::SURVIVAL) gameTypeStr = "Survival Mode"; else if (gameType == GameType::CREATIVE) gameTypeStr = "Creative Mode"; else if (gameType == GameType::ADVENTURE) gameTypeStr = "Adventure Mode"; else gameTypeStr = "Unknown Mode"; } switch(details) { case CONTEXT_PRESENCE_IDLE: detailsStr = "Idle"; break; case CONTEXT_PRESENCE_MENUS: detailsStr = "In the menus"; break; case CONTEXT_PRESENCE_MULTIPLAYER: detailsStr = "Playing Multiplayer - %s"; break; case CONTEXT_PRESENCE_MULTIPLAYEROFFLINE: detailsStr = "Offline Multiplayer - %s"; break; case CONTEXT_PRESENCE_MULTIPLAYER_1P: detailsStr = "Playing Alone - %s"; break; case CONTEXT_PRESENCE_MULTIPLAYER_1POFFLINE: detailsStr = "Offline Alone - %s"; break; default: detailsStr = ""; break; } snprintf(finalDetails, sizeof(finalDetails), detailsStr, gameTypeStr); presence.details = finalDetails; Discord_UpdatePresence(&presence); }