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 "SurvivalMode.h"
3#include "DemoMode.h"
4#include "LevelRenderer.h"
5#include "LocalPlayer.h"
6#include "..\Minecraft.World\net.minecraft.world.level.h"
7#include "..\Minecraft.World\net.minecraft.world.level.tile.h"
8#include "..\Minecraft.World\net.minecraft.world.entity.player.h"
9#include "..\Minecraft.World\net.minecraft.world.item.h"
10#include "ClientConstants.h"
11
12SurvivalMode::SurvivalMode(Minecraft *minecraft) : GameMode(minecraft)
13{
14 // 4J - added initialisers
15 xDestroyBlock = -1;
16 yDestroyBlock = -1;
17 zDestroyBlock = -1;
18 destroyProgress = 0;
19 oDestroyProgress = 0;
20 destroyTicks = 0;
21 destroyDelay = 0;
22
23 if (ClientConstants::IS_DEMO_VERSION)
24 {
25 if( dynamic_cast<DemoMode *>(this) == NULL )
26 {
27 assert(false);
28// throw new IllegalStateException("Invalid game mode"); // 4J - removed
29 }
30 }
31}
32
33// 4J Stu - Added this ctor so we can exit the tutorial and replace it with a standard
34// survival mode
35SurvivalMode::SurvivalMode(SurvivalMode *copy) : GameMode( copy->minecraft )
36{
37 xDestroyBlock = copy->xDestroyBlock;
38 yDestroyBlock = copy->yDestroyBlock;
39 zDestroyBlock = copy->zDestroyBlock;
40 destroyProgress = copy->destroyProgress;
41 oDestroyProgress = copy->oDestroyProgress;
42 destroyTicks = copy->destroyTicks;
43 destroyDelay = copy->destroyDelay;
44}
45
46void SurvivalMode::initPlayer(shared_ptr<Player> player)
47{
48 player->yRot = -180;
49}
50
51void SurvivalMode::init()
52{
53}
54
55bool SurvivalMode::canHurtPlayer()
56{
57 return true;
58}
59
60bool SurvivalMode::destroyBlock(int x, int y, int z, int face)
61{
62 int t = minecraft->level->getTile(x, y, z);
63 int data = minecraft->level->getData(x, y, z);
64 bool changed = GameMode::destroyBlock(x, y, z, face);
65
66 shared_ptr<ItemInstance> item = minecraft->player->getSelectedItem();
67 bool couldDestroy = minecraft->player->canDestroy(Tile::tiles[t]);
68 if (item != NULL)
69 {
70 item->mineBlock(t, x, y, z, minecraft->player);
71 if (item->count == 0)
72 {
73 minecraft->player->removeSelectedItem();
74 }
75 }
76 if (changed && couldDestroy)
77 {
78 Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data);
79 }
80 return changed;
81
82}
83
84void SurvivalMode::startDestroyBlock(int x, int y, int z, int face)
85{
86 if (!minecraft->player->mayBuild(x, y, z)) return;
87 minecraft->level->extinguishFire(minecraft->player, x, y, z, face);
88 int t = minecraft->level->getTile(x, y, z);
89 if (t > 0 && destroyProgress == 0) Tile::tiles[t]->attack(minecraft->level, x, y, z, minecraft->player);
90 if (t > 0 && Tile::tiles[t]->getDestroyProgress(minecraft->player) >= 1)
91 {
92 destroyBlock(x, y, z, face);
93 }
94}
95
96void SurvivalMode::stopDestroyBlock()
97{
98 destroyProgress = 0;
99 destroyDelay = 0;
100}
101
102void SurvivalMode::continueDestroyBlock(int x, int y, int z, int face)
103{
104 if (destroyDelay > 0)
105 {
106 destroyDelay--;
107 return;
108 }
109 if (x == xDestroyBlock && y == yDestroyBlock && z == zDestroyBlock)
110 {
111 int t = minecraft->level->getTile(x, y, z);
112 if (!minecraft->player->mayBuild(x, y, z)) return;
113 if (t == 0) return;
114 Tile *tile = Tile::tiles[t];
115
116 destroyProgress += tile->getDestroyProgress(minecraft->player);
117
118 if (destroyTicks % 4 == 0)
119 {
120 if (tile != NULL)
121 {
122 minecraft->soundEngine->play(tile->soundType->getStepSound(), x + 0.5f, y + 0.5f, z + 0.5f, (tile->soundType->getVolume() + 1) / 8, tile->soundType->getPitch() * 0.5f);
123 }
124 }
125
126 destroyTicks++;
127
128 if (destroyProgress >= 1)
129 {
130 destroyBlock(x, y, z, face);
131 destroyProgress = 0;
132 oDestroyProgress = 0;
133 destroyTicks = 0;
134 destroyDelay = 5;
135 }
136 }
137 else
138 {
139 destroyProgress = 0;
140 oDestroyProgress = 0;
141 destroyTicks = 0;
142 xDestroyBlock = x;
143 yDestroyBlock = y;
144 zDestroyBlock = z;
145 }
146
147}
148
149void SurvivalMode::render(float a)
150{
151 if (destroyProgress <= 0)
152 {
153 minecraft->gui->progress = 0;
154 minecraft->levelRenderer->destroyProgress = 0;
155 }
156 else
157 {
158 float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a;
159 minecraft->gui->progress = dp;
160 minecraft->levelRenderer->destroyProgress = dp;
161 }
162}
163
164float SurvivalMode::getPickRange()
165{
166 return 4.0f;
167}
168
169void SurvivalMode::initLevel(Level *level)
170{
171 GameMode::initLevel(level);
172}
173
174shared_ptr<Player> SurvivalMode::createPlayer(Level *level)
175{
176 shared_ptr<Player> player = GameMode::createPlayer(level);
177 // player.inventory.add(new ItemInstance(Item.pickAxe_diamond));
178 // player.inventory.add(new ItemInstance(Item.hatchet_diamond));
179 // player.inventory.add(new ItemInstance(Tile.torch, 64));
180 // player.inventory.add(new ItemInstance(Item.porkChop_cooked, 4));
181 // player.inventory.add(new ItemInstance(Item.bow, 1));
182 // player.inventory.add(new ItemInstance(Item.arrow, 64));
183 return player;
184}
185
186void SurvivalMode::tick()
187{
188 oDestroyProgress = destroyProgress;
189 //minecraft->soundEngine->playMusicTick();
190}
191
192bool SurvivalMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face, bool bTestUseOnOnly, bool *pbUsedItem)
193{
194 int t = level->getTile(x, y, z);
195 if (t > 0)
196 {
197 if (Tile::tiles[t]->use(level, x, y, z, player)) return true;
198 }
199 if (item == NULL) return false;
200 return item->useOn(player, level, x, y, z, face);
201}
202
203bool SurvivalMode::hasExperience()
204{
205 return true;
206}