Faucet/Minecraft.Client/SDK.cpp
Soda Can 94999b1812 edited sdk to add new function: GetPlayerX, GetPlayerY, GetPlayerZ and GetPlayerPos
Call GetPlayerPos like this and get output

PlayerPos pos = SDK::GetPlayerPos();
SDK::Log(L"X: " + std::to_wstring(pos.x));
SDK::Log(L"Y: " + std::to_wstring(pos.y));
SDK::Log(L"Z: " + std::to_wstring(pos.z));

Call GetPlayerX or Y or Z like this and get output

double x = SDK::GetPlayerX();
double y = SDK::GetPlayerY();
double z = SDK::GetPlayerZ();
2026-03-10 15:04:38 +11:00

178 lines
5 KiB
C++

#include "stdafx.h"
#include "SDK.h"
#include "ModLoader.h"
#include "Minecraft.h"
#include "MinecraftServer.h"
#include "ServerLevel.h"
#include "MultiPlayerLevel.h"
#include "PlayerList.h"
#include "ServerPlayer.h"
#include "MultiplayerLocalPlayer.h"
#ifndef XUSER_MAX_COUNT
#define XUSER_MAX_COUNT 4
#endif
// ============================================================================
// Logging
// ============================================================================
void SDK::Log(const std::wstring& message) {
ModLoader::Get().Log(message);
}
void SDK::LogWarn(const std::wstring& message) {
ModLoader::Get().Log(L"[WARN] " + message);
}
void SDK::LogError(const std::wstring& message) {
ModLoader::Get().Log(L"[ERROR] " + message);
}
// ============================================================================
// Singletons
// ============================================================================
MinecraftServer* SDK::GetServer() {
return MinecraftServer::getInstance(); // Lowercase g for Server
}
Minecraft* SDK::GetClient() {
return Minecraft::GetInstance(); // Capital G for Client
}
// ============================================================================
// Level Access
// ============================================================================
ServerLevel* SDK::GetServerLevel(int dimension) {
MinecraftServer* s = GetServer();
return s ? s->getLevel(dimension) : nullptr;
}
MultiPlayerLevel* SDK::GetClientLevel(int dimension) {
Minecraft* mc = GetClient();
if (!mc) return nullptr;
return mc->getLevel(dimension);
}
// ============================================================================
// Player Access (LCE Split-screen aware)
// ============================================================================
PlayerList* SDK::GetPlayerList() {
MinecraftServer* s = GetServer();
return s ? s->getPlayers() : nullptr;
}
MultiplayerLocalPlayer* SDK::GetLocalPlayer(int index) {
Minecraft* mc = GetClient();
if (!mc) return nullptr;
if (index < 0 || index >= XUSER_MAX_COUNT) return nullptr;
// In LCE, localplayers is an array of shared_ptr. Use .get() for the raw pointer.
return mc->localplayers[index].get();
}
MultiplayerLocalPlayer* SDK::GetLocalPlayer() {
Minecraft* mc = GetClient();
if (!mc) return nullptr;
// Return the player currently in focus
int currentIdx = mc->getLocalPlayerIdx();
return mc->localplayers[currentIdx].get();
}
// ============================================================================
// Player Pos
// ============================================================================
double SDK::GetPlayerX(int index) {
MultiplayerLocalPlayer* p = GetLocalPlayer(index);
return p ? p->x : 0.0;
}
double SDK::GetPlayerY(int index) {
MultiplayerLocalPlayer* p = GetLocalPlayer(index);
return p ? p->y : 0.0;
}
double SDK::GetPlayerZ(int index) {
MultiplayerLocalPlayer* p = GetLocalPlayer(index);
return p ? p->z : 0.0;
}
PlayerPos SDK::GetPlayerPos(int index) {
MultiplayerLocalPlayer* p = GetLocalPlayer(index);
if (!p) return { 0.0, 0.0, 0.0 };
return { p->x, p->y, p->z };
}
// ============================================================================
// Messaging
// ============================================================================
void SDK::BroadcastMessage(const std::wstring& message) {
PlayerList* list = GetPlayerList();
if (list) list->sendMessage(L"", message);
}
void SDK::SendMessageToPlayer(const std::wstring& playerName, const std::wstring& message) {
PlayerList* list = GetPlayerList();
if (list) list->sendMessage(playerName, message);
}
// ============================================================================
// Server Control
// ============================================================================
void SDK::ExecuteCommand(const std::wstring& command) {
MinecraftServer* s = GetServer();
if (s) s->handleConsoleInput(command, nullptr);
}
void SDK::SetTimeOfDay(__int64 time) {
// Some LCE versions use a static call, others use the instance
MinecraftServer::SetTimeOfDay(time);
}
void SDK::SaveAll(bool force) {
MinecraftServer* s = GetServer();
if (!s) return;
for (int dim : { 0, -1, 1 }) {
ServerLevel* level = s->getLevel(dim);
if (level) level->save(force, nullptr);
}
PlayerList* list = s->getPlayers();
if (list) list->saveAll(nullptr);
}
// ============================================================================
// Game Rules
// ============================================================================
bool SDK::IsPvpAllowed() {
MinecraftServer* s = GetServer();
return s ? s->isPvpAllowed() : false;
}
void SDK::SetPvpAllowed(bool enabled) {
MinecraftServer* s = GetServer();
if (s) s->setPvpAllowed(enabled);
}
bool SDK::IsFlightAllowed() {
MinecraftServer* s = GetServer();
return s ? s->isFlightAllowed() : false;
}
void SDK::SetFlightAllowed(bool enabled) {
MinecraftServer* s = GetServer();
if (s) s->setFlightAllowed(enabled);
}