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 "..\..\..\Minecraft.World\StringHelpers.h"
3#include "..\..\..\Minecraft.World\net.minecraft.world.item.h"
4#include "CompoundGameRuleDefinition.h"
5#include "ConsoleGameRules.h"
6
7CompoundGameRuleDefinition::CompoundGameRuleDefinition()
8{
9 m_lastRuleStatusChanged = NULL;
10}
11
12CompoundGameRuleDefinition::~CompoundGameRuleDefinition()
13{
14 for(AUTO_VAR(it, m_children.begin()); it != m_children.end(); ++it)
15 {
16 delete (*it);
17 }
18}
19
20void CompoundGameRuleDefinition::getChildren(vector<GameRuleDefinition *> *children)
21{
22 GameRuleDefinition::getChildren(children);
23 for (AUTO_VAR(it, m_children.begin()); it != m_children.end(); it++)
24 children->push_back(*it);
25}
26
27GameRuleDefinition *CompoundGameRuleDefinition::addChild(ConsoleGameRules::EGameRuleType ruleType)
28{
29 GameRuleDefinition *rule = NULL;
30 if(ruleType == ConsoleGameRules::eGameRuleType_CompleteAllRule)
31 {
32 rule = new CompleteAllRuleDefinition();
33 }
34 else if(ruleType == ConsoleGameRules::eGameRuleType_CollectItemRule)
35 {
36 rule = new CollectItemRuleDefinition();
37 }
38 else if(ruleType == ConsoleGameRules::eGameRuleType_UseTileRule)
39 {
40 rule = new UseTileRuleDefinition();
41 }
42 else if(ruleType == ConsoleGameRules::eGameRuleType_UpdatePlayerRule)
43 {
44 rule = new UpdatePlayerRuleDefinition();
45 }
46 else
47 {
48#ifndef _CONTENT_PACKAGE
49 wprintf(L"CompoundGameRuleDefinition: Attempted to add invalid child rule - %d\n", ruleType );
50#endif
51 }
52 if(rule != NULL) m_children.push_back(rule);
53 return rule;
54}
55
56void CompoundGameRuleDefinition::populateGameRule(GameRulesInstance::EGameRulesInstanceType type, GameRule *rule)
57{
58 GameRule *newRule = NULL;
59 int i = 0;
60 for(AUTO_VAR(it, m_children.begin()); it != m_children.end(); ++it)
61 {
62 newRule = new GameRule(*it, rule->getConnection() );
63 (*it)->populateGameRule(type,newRule);
64
65 GameRule::ValueType value;
66 value.gr = newRule;
67 value.isPointer = true;
68
69 // Somehow add the newRule to the current rule
70 rule->setParameter(L"rule" + _toString<int>(i),value);
71 ++i;
72 }
73 GameRuleDefinition::populateGameRule(type, rule);
74}
75
76bool CompoundGameRuleDefinition::onUseTile(GameRule *rule, int tileId, int x, int y, int z)
77{
78 bool statusChanged = false;
79 for(AUTO_VAR(it, rule->m_parameters.begin()); it != rule->m_parameters.end(); ++it)
80 {
81 if(it->second.isPointer)
82 {
83 bool changed = it->second.gr->getGameRuleDefinition()->onUseTile(it->second.gr,tileId,x,y,z);
84 if(!statusChanged && changed)
85 {
86 m_lastRuleStatusChanged = it->second.gr->getGameRuleDefinition();
87 statusChanged = true;
88 }
89 }
90 }
91 return statusChanged;
92}
93
94bool CompoundGameRuleDefinition::onCollectItem(GameRule *rule, shared_ptr<ItemInstance> item)
95{
96 bool statusChanged = false;
97 for(AUTO_VAR(it, rule->m_parameters.begin()); it != rule->m_parameters.end(); ++it)
98 {
99 if(it->second.isPointer)
100 {
101 bool changed = it->second.gr->getGameRuleDefinition()->onCollectItem(it->second.gr,item);
102 if(!statusChanged && changed)
103 {
104 m_lastRuleStatusChanged = it->second.gr->getGameRuleDefinition();
105 statusChanged = true;
106 }
107 }
108 }
109 return statusChanged;
110}
111
112void CompoundGameRuleDefinition::postProcessPlayer(shared_ptr<Player> player)
113{
114 for(AUTO_VAR(it, m_children.begin()); it != m_children.end(); ++it)
115 {
116 (*it)->postProcessPlayer(player);
117 }
118}