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 "XboxStructureActionPlaceContainer.h"
4#include "AddItemRuleDefinition.h"
5#include "..\..\..\Minecraft.World\net.minecraft.world.level.levelgen.structure.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.inventory.h"
9
10XboxStructureActionPlaceContainer::XboxStructureActionPlaceContainer()
11{
12 m_tile = Tile::chest_Id;
13}
14
15XboxStructureActionPlaceContainer::~XboxStructureActionPlaceContainer()
16{
17 for(AUTO_VAR(it, m_items.begin()); it != m_items.end(); ++it)
18 {
19 delete *it;
20 }
21}
22
23// 4J-JEV: Super class handles attr-facing fine.
24//void XboxStructureActionPlaceContainer::writeAttributes(DataOutputStream *dos, UINT numAttrs)
25
26
27void XboxStructureActionPlaceContainer::getChildren(vector<GameRuleDefinition *> *children)
28{
29 XboxStructureActionPlaceBlock::getChildren(children);
30 for(AUTO_VAR(it, m_items.begin()); it!=m_items.end(); it++)
31 children->push_back( *it );
32}
33
34GameRuleDefinition *XboxStructureActionPlaceContainer::addChild(ConsoleGameRules::EGameRuleType ruleType)
35{
36 GameRuleDefinition *rule = NULL;
37 if(ruleType == ConsoleGameRules::eGameRuleType_AddItem)
38 {
39 rule = new AddItemRuleDefinition();
40 m_items.push_back((AddItemRuleDefinition *)rule);
41 }
42 else
43 {
44#ifndef _CONTENT_PACKAGE
45 wprintf(L"XboxStructureActionPlaceContainer: Attempted to add invalid child rule - %d\n", ruleType );
46#endif
47 }
48 return rule;
49}
50
51void XboxStructureActionPlaceContainer::addAttribute(const wstring &attributeName, const wstring &attributeValue)
52{
53 if(attributeName.compare(L"facing") == 0)
54 {
55 int value = _fromString<int>(attributeValue);
56 m_data = value;
57 app.DebugPrintf("XboxStructureActionPlaceContainer: Adding parameter facing=%d\n",m_data);
58 }
59 else
60 {
61 XboxStructureActionPlaceBlock::addAttribute(attributeName, attributeValue);
62 }
63}
64
65bool XboxStructureActionPlaceContainer::placeContainerInLevel(StructurePiece *structure, Level *level, BoundingBox *chunkBB)
66{
67 int worldX = structure->getWorldX( m_x, m_z );
68 int worldY = structure->getWorldY( m_y );
69 int worldZ = structure->getWorldZ( m_x, m_z );
70
71 if ( chunkBB->isInside( worldX, worldY, worldZ ) )
72 {
73 if ( level->getTileEntity( worldX, worldY, worldZ ) != NULL )
74 {
75 // Remove the current tile entity
76 level->removeTileEntity( worldX, worldY, worldZ );
77 level->setTileAndData( worldX, worldY, worldZ, 0, 0, Tile::UPDATE_ALL );
78 }
79
80 level->setTileAndData( worldX, worldY, worldZ, m_tile, 0, Tile::UPDATE_ALL );
81 shared_ptr<Container> container = dynamic_pointer_cast<Container>(level->getTileEntity( worldX, worldY, worldZ ));
82
83 app.DebugPrintf("XboxStructureActionPlaceContainer - placing a container at (%d,%d,%d)\n", worldX, worldY, worldZ);
84 if ( container != NULL )
85 {
86 level->setData( worldX, worldY, worldZ, m_data, Tile::UPDATE_CLIENTS);
87 // Add items
88 int slotId = 0;
89 for(AUTO_VAR(it, m_items.begin()); it != m_items.end() && (slotId < container->getContainerSize()); ++it, ++slotId )
90 {
91 AddItemRuleDefinition *addItem = *it;
92
93 addItem->addItemToContainer(container,slotId);
94 }
95 }
96 return true;
97 }
98 return false;
99}