the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "GameMode.h"
3#include "LocalPlayer.h"
4#include "LevelRenderer.h"
5#include "..\Minecraft.World\net.minecraft.world.level.h"
6#include "..\Minecraft.World\net.minecraft.world.level.tile.h"
7#include "..\Minecraft.World\net.minecraft.world.level.dimension.h"
8#include "..\Minecraft.World\net.minecraft.world.item.h"
9#include "..\Minecraft.World\net.minecraft.world.inventory.h"
10#include "..\Minecraft.World\net.minecraft.world.entity.player.h"
11#include "..\Minecraft.World\net.minecraft.world.level.chunk.h"
12
13GameMode::GameMode(Minecraft *minecraft)
14{
15 instaBuild = false; // 4J - added
16 this->minecraft = minecraft;
17}
18
19void GameMode::initLevel(Level *level)
20{
21}
22
23bool GameMode::destroyBlock(int x, int y, int z, int face)
24{
25 Level *level = minecraft->level;
26 Tile *oldTile = Tile::tiles[level->getTile(x, y, z)];
27 if (oldTile == NULL) return false;
28
29 // 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.
30 minecraft->levelRenderer->destroyedTileManager->destroyingTileAt(level, x, y, z);
31 level->levelEvent(LevelEvent::PARTICLES_DESTROY_BLOCK, x, y, z, oldTile->id + (level->getData(x, y, z) << Tile::TILE_NUM_SHIFT));
32 int data = level->getData(x, y, z);
33 // 4J - before we remove the tile, recalc the heightmap - setTile depends on this being valid to be able to do
34 // a quick update of skylighting when the block is removed, and there are cases with falling tiles where this can get out of sync
35 level->getChunkAt(x,z)->recalcHeightmapOnly();
36 bool changed = level->setTile(x, y, z, 0);
37
38 if (oldTile != NULL && changed)
39 {
40 oldTile->destroy(level, x, y, z, data);
41 }
42 return changed;
43}
44
45void GameMode::render(float a)
46{
47}
48
49bool GameMode::useItem(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, bool bTestUseOnly)
50{
51}
52
53void GameMode::initPlayer(shared_ptr<Player> player)
54{
55}
56
57void GameMode::tick()
58{
59}
60
61void GameMode::adjustPlayer(shared_ptr<Player> player)
62{
63}
64
65//bool GameMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face, bool bTestUseOnOnly)
66//{
67// // 4J-PB - Adding a test only version to allow tooltips to be displayed
68// int t = level->getTile(x, y, z);
69// if (t > 0)
70// {
71// if(bTestUseOnOnly)
72// {
73// switch(t)
74// {
75// case Tile::recordPlayer_Id:
76// case Tile::bed_Id: // special case for a bed
77// if (Tile::tiles[t]->TestUse(level, x, y, z, player ))
78// {
79// return true;
80// }
81// else
82// {
83// // bed is too far away, or something
84// return false;
85// }
86// break;
87// default:
88// if (Tile::tiles[t]->TestUse()) return true;
89// break;
90// }
91// }
92// else
93// {
94// if (Tile::tiles[t]->use(level, x, y, z, player )) return true;
95// }
96// }
97//
98// if (item == NULL) return false;
99// return item->useOn(player, level, x, y, z, face, bTestUseOnOnly);
100//}
101
102
103shared_ptr<Player> GameMode::createPlayer(Level *level)
104{
105 return shared_ptr<Player>( new LocalPlayer(minecraft, level, minecraft->user, level->dimension->id) );
106}
107
108bool GameMode::interact(shared_ptr<Player> player, shared_ptr<Entity> entity)
109{
110 return player->interact(entity);
111}
112
113void GameMode::attack(shared_ptr<Player> player, shared_ptr<Entity> entity)
114{
115 player->attack(entity);
116}
117
118shared_ptr<ItemInstance> GameMode::handleInventoryMouseClick(int containerId, int slotNum, int buttonNum, bool quickKeyHeld, shared_ptr<Player> player)
119{
120 return nullptr;
121}
122
123void GameMode::handleCloseInventory(int containerId, shared_ptr<Player> player)
124{
125 player->containerMenu->removed(player);
126 delete player->containerMenu;
127 player->containerMenu = player->inventoryMenu;
128}
129
130void GameMode::handleInventoryButtonClick(int containerId, int buttonId)
131{
132
133}
134
135bool GameMode::isCutScene()
136{
137 return false;
138}
139
140void GameMode::releaseUsingItem(shared_ptr<Player> player)
141{
142 player->releaseUsingItem();
143}
144
145bool GameMode::hasExperience()
146{
147 return false;
148}
149
150bool GameMode::hasMissTime()
151{
152 return true;
153}
154
155bool GameMode::hasInfiniteItems()
156{
157 return false;
158}
159
160bool GameMode::hasFarPickRange()
161{
162 return false;
163}
164
165void GameMode::handleCreativeModeItemAdd(shared_ptr<ItemInstance> clicked, int i)
166{
167}
168
169void GameMode::handleCreativeModeItemDrop(shared_ptr<ItemInstance> clicked)
170{
171}
172
173bool GameMode::handleCraftItem(int recipe, shared_ptr<Player> player)
174{
175 return true;
176}
177
178// 4J-PB
179void GameMode::handleDebugOptions(unsigned int uiVal, shared_ptr<Player> player)
180{
181 player->SetDebugOptions(uiVal);
182}