the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 99 lines 3.3 kB view raw
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}