the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2
3#include "Tutorial.h"
4#include "..\..\Minecraft.h"
5#include "..\..\MultiplayerLocalPlayer.h"
6#include "..\..\..\Minecraft.World\net.minecraft.world.level.h"
7#include "ChangeStateConstraint.h"
8#include "..\..\..\Minecraft.World\AABB.h"
9#include "..\..\ClientConnection.h"
10#include "..\..\..\Minecraft.World\net.minecraft.network.packet.h"
11
12ChangeStateConstraint::ChangeStateConstraint( Tutorial *tutorial, eTutorial_State targetState, eTutorial_State sourceStates[], DWORD sourceStatesCount,
13 double x0, double y0, double z0, double x1, double y1, double z1, bool contains /*= true*/, bool changeGameMode /*= false*/, GameType *targetGameMode /*= 0*/ )
14 : TutorialConstraint( -1 )
15{
16 movementArea = AABB::newPermanent(x0, y0, z0, x1, y1, z1);
17
18 this->contains = contains;
19
20 m_changeGameMode = changeGameMode;
21 m_targetGameMode = targetGameMode;
22 m_changedFromGameMode = 0;
23
24 m_tutorial = tutorial;
25 m_targetState = targetState;
26 m_sourceStatesCount = sourceStatesCount;
27
28 m_bHasChanged = false;
29 m_changedFromState = e_Tutorial_State_None;
30
31 m_bComplete = false;
32
33 m_sourceStates = new eTutorial_State [m_sourceStatesCount];
34 for(unsigned int i=0;i<m_sourceStatesCount;i++)
35 {
36 m_sourceStates[i]=sourceStates[i];
37 }
38}
39
40ChangeStateConstraint::~ChangeStateConstraint()
41{
42 delete movementArea;
43 if(m_sourceStatesCount>0) delete [] m_sourceStates;
44}
45
46void ChangeStateConstraint::tick(int iPad)
47{
48 if(m_bComplete) return;
49
50 if(m_tutorial->isStateCompleted(m_targetState))
51 {
52 Minecraft *minecraft = Minecraft::GetInstance();
53 if(m_changeGameMode)
54 {
55 unsigned int playerPrivs = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
56 Player::setPlayerGamePrivilege(playerPrivs,Player::ePlayerGamePrivilege_CreativeMode,m_changedFromGameMode == GameType::CREATIVE);
57
58 unsigned int originalPrivileges = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
59 if(originalPrivileges != playerPrivs)
60 {
61 // Send update settings packet to server
62 Minecraft *pMinecraft = Minecraft::GetInstance();
63 shared_ptr<MultiplayerLocalPlayer> player = minecraft->localplayers[iPad];
64 if(player != NULL && player->connection && player->connection->getNetworkPlayer() != NULL)
65 {
66 player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( player->connection->getNetworkPlayer()->GetSmallId(), -1, playerPrivs) ) );
67 }
68 }
69 }
70 m_bComplete = true;
71 return;
72 }
73
74 bool inASourceState = false;
75 Minecraft *minecraft = Minecraft::GetInstance();
76 for(DWORD i = 0; i < m_sourceStatesCount; ++i)
77 {
78 if(m_sourceStates[i] == m_tutorial->getCurrentState())
79 {
80 inASourceState = true;
81 break;
82 }
83 }
84 if( !m_bHasChanged && inASourceState && movementArea->contains( minecraft->localplayers[iPad]->getPos(1) ) == contains )
85 {
86 m_bHasChanged = true;
87 m_changedFromState = m_tutorial->getCurrentState();
88 m_tutorial->changeTutorialState(m_targetState);
89
90 if(m_changeGameMode)
91 {
92 if(minecraft->localgameModes[iPad] != NULL)
93 {
94 m_changedFromGameMode = minecraft->localplayers[iPad]->abilities.instabuild ? GameType::CREATIVE : GameType::SURVIVAL;
95
96 unsigned int playerPrivs = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
97 Player::setPlayerGamePrivilege(playerPrivs,Player::ePlayerGamePrivilege_CreativeMode,m_targetGameMode == GameType::CREATIVE);
98
99 unsigned int originalPrivileges = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
100 if(originalPrivileges != playerPrivs)
101 {
102 // Send update settings packet to server
103 Minecraft *pMinecraft = Minecraft::GetInstance();
104 shared_ptr<MultiplayerLocalPlayer> player = minecraft->localplayers[iPad];
105 if(player != NULL && player->connection && player->connection->getNetworkPlayer() != NULL)
106 {
107 player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( player->connection->getNetworkPlayer()->GetSmallId(), -1, playerPrivs) ) );
108 }
109 }
110 }
111 }
112 }
113 else if( m_bHasChanged && movementArea->contains( minecraft->localplayers[iPad]->getPos(1) ) != contains )
114 {
115 m_bHasChanged = false;
116 m_tutorial->changeTutorialState(m_changedFromState);
117
118 if(m_changeGameMode)
119 {
120 unsigned int playerPrivs = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
121 Player::setPlayerGamePrivilege(playerPrivs,Player::ePlayerGamePrivilege_CreativeMode,m_changedFromGameMode == GameType::CREATIVE);
122
123 unsigned int originalPrivileges = minecraft->localplayers[iPad]->getAllPlayerGamePrivileges();
124 if(originalPrivileges != playerPrivs)
125 {
126 // Send update settings packet to server
127 Minecraft *pMinecraft = Minecraft::GetInstance();
128 shared_ptr<MultiplayerLocalPlayer> player = minecraft->localplayers[iPad];
129 if(player != NULL && player->connection && player->connection->getNetworkPlayer() != NULL)
130 {
131 player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( player->connection->getNetworkPlayer()->GetSmallId(), -1, playerPrivs) ) );
132 }
133 }
134 }
135 }
136}