mirror of
https://github.com/GabsPuNs/Project-Zenith-Main.git
synced 2026-05-22 10:44:49 +00:00
187 lines
4.4 KiB
C++
187 lines
4.4 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_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);
|
|
} |