mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/GabsPuNs-MinecraftConsoles.git
synced 2026-05-27 17:24:50 +00:00
162 lines
3.8 KiB
C++
162 lines
3.8 KiB
C++
#include "stdafx.h"
|
|
|
|
#include <discord_rpc.h>
|
|
#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_FORGING:
|
|
stateStr = "Forging";
|
|
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;
|
|
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);
|
|
} |