From 569c7f35c020b3f548c5d2597dd3986fb1f68392 Mon Sep 17 00:00:00 2001 From: Soda Can Date: Tue, 10 Mar 2026 15:17:59 +1100 Subject: [PATCH] more shit --- Minecraft.Client/SDK.cpp | 79 ++++++++++++++++++++++++++++++++++++++++ Minecraft.Client/SDK.h | 18 +++++++++ 2 files changed, 97 insertions(+) diff --git a/Minecraft.Client/SDK.cpp b/Minecraft.Client/SDK.cpp index 031da295..1c4490e7 100644 --- a/Minecraft.Client/SDK.cpp +++ b/Minecraft.Client/SDK.cpp @@ -218,6 +218,85 @@ void SDK::SaveAll(bool force) { if (list) list->saveAll(nullptr); } +// ============================================================================ +// World / Level +// ============================================================================ + +void SDK::ExplodeAt(double x, double y, double z, float radius, bool fire, bool destroyBlocks, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->explode(nullptr, x, y, z, radius, fire, destroyBlocks); +} + +void SDK::SendParticles(const std::wstring& name, double x, double y, double z, int count, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->sendParticles(name, x, y, z, count); +} + +void SDK::SendParticlesEx(const std::wstring& name, double x, double y, double z, int count, double xDist, double yDist, double zDist, double speed, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->sendParticles(name, x, y, z, count, xDist, yDist, zDist, speed); +} + +void SDK::SaveLevel(bool force, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->save(force, nullptr); +} + +bool SDK::IsLevelLoaded(int dimension) { + return GetServerLevel(dimension) != nullptr; +} + +void SDK::SetLevelTime(__int64 time, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->setTimeAndAdjustTileTicks(time); +} + +__int64 SDK::GetLevelTime(int dimension) { + ServerLevel* level = GetServerLevel(dimension); + return level ? level->getGameTime() : 0LL; +} + +void SDK::QueueTileUpdate(int x, int y, int z, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->queueSendTileUpdate(x, y, z); +} + +void SDK::AddTickNextTick(int x, int y, int z, int tileId, int tickDelay, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + if (level) level->addToTickNextTick(x, y, z, tileId, tickDelay); +} + +bool SDK::MayPlayerInteract(int index, int x, int y, int z, int content, int dimension) { + ServerLevel* level = GetServerLevel(dimension); + auto* p = GetLocalPlayer(index); + if (!level || !p) return false; + return level->mayInteract(std::shared_ptr(p, [](Player*) {}), x, y, z, content); +} + +// ============================================================================ +// Entity Limits +// ============================================================================ + +int SDK::GetPrimedTntCount(int dimension) { + ServerLevel* level = GetServerLevel(dimension); + return level ? level->m_primedTntCount : 0; +} + +int SDK::GetFallingTileCount(int dimension) { + ServerLevel* level = GetServerLevel(dimension); + return level ? level->m_fallingTileCount : 0; +} + +bool SDK::CanSpawnTnt(int dimension) { + ServerLevel* level = GetServerLevel(dimension); + return level ? level->newPrimedTntAllowed() : false; +} + +bool SDK::CanSpawnFallingTile(int dimension) { + ServerLevel* level = GetServerLevel(dimension); + return level ? level->newFallingTileAllowed() : false; +} + // ============================================================================ // Game Rules // ============================================================================ diff --git a/Minecraft.Client/SDK.h b/Minecraft.Client/SDK.h index 52d6ec4f..3500a2d0 100644 --- a/Minecraft.Client/SDK.h +++ b/Minecraft.Client/SDK.h @@ -58,6 +58,24 @@ namespace SDK { // Player Info MODAPI std::wstring GetPlayerName(int index = 0); + // World / Level + MODAPI void ExplodeAt(double x, double y, double z, float radius, bool fire = false, bool destroyBlocks = true, int dimension = 0); + MODAPI void SendParticles(const std::wstring& name, double x, double y, double z, int count, int dimension = 0); + MODAPI void SendParticlesEx(const std::wstring& name, double x, double y, double z, int count, double xDist, double yDist, double zDist, double speed, int dimension = 0); + MODAPI void SaveLevel(bool force = false, int dimension = 0); + MODAPI bool IsLevelLoaded(int dimension = 0); + MODAPI void SetLevelTime(__int64 time, int dimension = 0); + MODAPI __int64 GetLevelTime(int dimension = 0); + MODAPI void QueueTileUpdate(int x, int y, int z, int dimension = 0); + MODAPI void AddTickNextTick(int x, int y, int z, int tileId, int tickDelay, int dimension = 0); + MODAPI bool MayPlayerInteract(int index, int x, int y, int z, int content, int dimension = 0); + + // Entity Limits (read only) + MODAPI int GetPrimedTntCount(int dimension = 0); + MODAPI int GetFallingTileCount(int dimension = 0); + MODAPI bool CanSpawnTnt(int dimension = 0); + MODAPI bool CanSpawnFallingTile(int dimension = 0); + // Messaging MODAPI void BroadcastMessage(const std::wstring& message); MODAPI void SendMessageToPlayer(const std::wstring& playerName, const std::wstring& message);