diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/GameMode.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/GameMode.cpp')
| -rw-r--r-- | Minecraft.Client/GameMode.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/Minecraft.Client/GameMode.cpp b/Minecraft.Client/GameMode.cpp new file mode 100644 index 00000000..a11d6c07 --- /dev/null +++ b/Minecraft.Client/GameMode.cpp @@ -0,0 +1,182 @@ +#include "stdafx.h" +#include "GameMode.h" +#include "LocalPlayer.h" +#include "LevelRenderer.h" +#include "..\Minecraft.World\net.minecraft.world.level.h" +#include "..\Minecraft.World\net.minecraft.world.level.tile.h" +#include "..\Minecraft.World\net.minecraft.world.level.dimension.h" +#include "..\Minecraft.World\net.minecraft.world.item.h" +#include "..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\Minecraft.World\net.minecraft.world.entity.player.h" +#include "..\Minecraft.World\net.minecraft.world.level.chunk.h" + +GameMode::GameMode(Minecraft *minecraft) +{ + instaBuild = false; // 4J - added + this->minecraft = minecraft; +} + +void GameMode::initLevel(Level *level) +{ +} + +bool GameMode::destroyBlock(int x, int y, int z, int face) +{ + Level *level = minecraft->level; + Tile *oldTile = Tile::tiles[level->getTile(x, y, z)]; + if (oldTile == NULL) return false; + + // 4J - Let the rendering side of thing know we are about to destroy the tile, so we can synchronise collision with async render data upates. + minecraft->levelRenderer->destroyedTileManager->destroyingTileAt(level, x, y, z); + level->levelEvent(LevelEvent::PARTICLES_DESTROY_BLOCK, x, y, z, oldTile->id + (level->getData(x, y, z) << Tile::TILE_NUM_SHIFT)); + int data = level->getData(x, y, z); + // 4J - before we remove the tile, recalc the heightmap - setTile depends on this being valid to be able to do + // a quick update of skylighting when the block is removed, and there are cases with falling tiles where this can get out of sync + level->getChunkAt(x,z)->recalcHeightmapOnly(); + bool changed = level->setTile(x, y, z, 0); + + if (oldTile != NULL && changed) + { + oldTile->destroy(level, x, y, z, data); + } + return changed; +} + +void GameMode::render(float a) +{ +} + +bool GameMode::useItem(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, bool bTestUseOnly) +{ +} + +void GameMode::initPlayer(shared_ptr<Player> player) +{ +} + +void GameMode::tick() +{ +} + +void GameMode::adjustPlayer(shared_ptr<Player> player) +{ +} + +//bool GameMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face, bool bTestUseOnOnly) +//{ +// // 4J-PB - Adding a test only version to allow tooltips to be displayed +// int t = level->getTile(x, y, z); +// if (t > 0) +// { +// if(bTestUseOnOnly) +// { +// switch(t) +// { +// case Tile::recordPlayer_Id: +// case Tile::bed_Id: // special case for a bed +// if (Tile::tiles[t]->TestUse(level, x, y, z, player )) +// { +// return true; +// } +// else +// { +// // bed is too far away, or something +// return false; +// } +// break; +// default: +// if (Tile::tiles[t]->TestUse()) return true; +// break; +// } +// } +// else +// { +// if (Tile::tiles[t]->use(level, x, y, z, player )) return true; +// } +// } +// +// if (item == NULL) return false; +// return item->useOn(player, level, x, y, z, face, bTestUseOnOnly); +//} + + +shared_ptr<Player> GameMode::createPlayer(Level *level) +{ + return shared_ptr<Player>( new LocalPlayer(minecraft, level, minecraft->user, level->dimension->id) ); +} + +bool GameMode::interact(shared_ptr<Player> player, shared_ptr<Entity> entity) +{ + return player->interact(entity); +} + +void GameMode::attack(shared_ptr<Player> player, shared_ptr<Entity> entity) +{ + player->attack(entity); +} + +shared_ptr<ItemInstance> GameMode::handleInventoryMouseClick(int containerId, int slotNum, int buttonNum, bool quickKeyHeld, shared_ptr<Player> player) +{ + return nullptr; +} + +void GameMode::handleCloseInventory(int containerId, shared_ptr<Player> player) +{ + player->containerMenu->removed(player); + delete player->containerMenu; + player->containerMenu = player->inventoryMenu; +} + +void GameMode::handleInventoryButtonClick(int containerId, int buttonId) +{ + +} + +bool GameMode::isCutScene() +{ + return false; +} + +void GameMode::releaseUsingItem(shared_ptr<Player> player) +{ + player->releaseUsingItem(); +} + +bool GameMode::hasExperience() +{ + return false; +} + +bool GameMode::hasMissTime() +{ + return true; +} + +bool GameMode::hasInfiniteItems() +{ + return false; +} + +bool GameMode::hasFarPickRange() +{ + return false; +} + +void GameMode::handleCreativeModeItemAdd(shared_ptr<ItemInstance> clicked, int i) +{ +} + +void GameMode::handleCreativeModeItemDrop(shared_ptr<ItemInstance> clicked) +{ +} + +bool GameMode::handleCraftItem(int recipe, shared_ptr<Player> player) +{ + return true; +} + +// 4J-PB +void GameMode::handleDebugOptions(unsigned int uiVal, shared_ptr<Player> player) +{ + player->SetDebugOptions(uiVal); +} |
