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/CreativeMode.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/CreativeMode.cpp')
| -rw-r--r-- | Minecraft.Client/CreativeMode.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/Minecraft.Client/CreativeMode.cpp b/Minecraft.Client/CreativeMode.cpp new file mode 100644 index 00000000..48342ebc --- /dev/null +++ b/Minecraft.Client/CreativeMode.cpp @@ -0,0 +1,128 @@ +#include "stdafx.h" +#include "CreativeMode.h" +#include "User.h" +#include "LocalPlayer.h" +#include "..\Minecraft.World\\net.minecraft.world.entity.player.h" +#include "..\Minecraft.World\net.minecraft.world.item.h" +#include "..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\Minecraft.World\net.minecraft.world.level.h" +#include "..\Minecraft.World\net.minecraft.world.level.tile.h" + +CreativeMode::CreativeMode(Minecraft *minecraft) : GameMode(minecraft) +{ + destroyDelay = 0; + instaBuild = true; +} + +void CreativeMode::init() +{ + // initPlayer(); +} + +void CreativeMode::enableCreativeForPlayer(shared_ptr<Player> player) +{ + // please check ServerPlayerGameMode.java if you change these + player->abilities.mayfly = true; + player->abilities.instabuild = true; + player->abilities.invulnerable = true; +} + +void CreativeMode::disableCreativeForPlayer(shared_ptr<Player> player) +{ + player->abilities.mayfly = false; + player->abilities.flying = false; + player->abilities.instabuild = false; + player->abilities.invulnerable = false; +} + +void CreativeMode::adjustPlayer(shared_ptr<Player> player) +{ + enableCreativeForPlayer(player); + + for (int i = 0; i < 9; i++) + { + if (player->inventory->items[i] == NULL) + { + player->inventory->items[i] = shared_ptr<ItemInstance>( new ItemInstance(User::allowedTiles[i]) ); + } + else + { + // 4J-PB - this line is commented out in 1.0.1 + //player->inventory->items[i]->count = 1; + } + } +} + +void CreativeMode::creativeDestroyBlock(Minecraft *minecraft, GameMode *gameMode, int x, int y, int z, int face) +{ + if(!minecraft->level->extinguishFire(minecraft->player, x, y, z, face)) + { + gameMode->destroyBlock(x, y, z, face); + } +} + +bool CreativeMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face, bool bTestUseOnOnly, bool *pbUsedItem) +{ + int t = level->getTile(x, y, z); + if (t > 0) + { + if (Tile::tiles[t]->use(level, x, y, z, player)) return true; + } + if (item == NULL) return false; + int aux = item->getAuxValue(); + int count = item->count; + bool success = item->useOn(player, level, x, y, z, face); + item->setAuxValue(aux); + item->count = count; + return success; +} + +void CreativeMode::startDestroyBlock(int x, int y, int z, int face) +{ + creativeDestroyBlock(minecraft, this, x, y, z, face); + destroyDelay = 5; +} + +void CreativeMode::continueDestroyBlock(int x, int y, int z, int face) +{ + destroyDelay--; + if (destroyDelay <= 0) + { + destroyDelay = 5; + creativeDestroyBlock(minecraft, this, x, y, z, face); + } +} + +void CreativeMode::stopDestroyBlock() +{ +} + +bool CreativeMode::canHurtPlayer() +{ + return false; +} + +void CreativeMode::initLevel(Level *level) +{ + GameMode::initLevel(level); +} + +float CreativeMode::getPickRange() +{ + return 5.0f; +} + +bool CreativeMode::hasMissTime() +{ + return false; +} + +bool CreativeMode::hasInfiniteItems() +{ + return true; +} + +bool CreativeMode::hasFarPickRange() +{ + return true; +}
\ No newline at end of file |
