the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 225 lines 6.0 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.network.packet.h" 3#include "net.minecraft.world.level.h" 4#include "net.minecraft.world.level.tile.h" 5#include "net.minecraft.world.level.tile.entity.h" 6#include "TileEntity.h" 7#include "PistonPieceEntity.h" 8 9 10 11TileEntity::idToCreateMapType TileEntity::idCreateMap = unordered_map<wstring, tileEntityCreateFn>(); 12TileEntity::classToIdMapType TileEntity::classIdMap = unordered_map<eINSTANCEOF, wstring, eINSTANCEOFKeyHash, eINSTANCEOFKeyEq>(); 13 14void TileEntity::staticCtor() 15{ 16 TileEntity::setId(FurnaceTileEntity::create, eTYPE_FURNACETILEENTITY, L"Furnace"); 17 TileEntity::setId(ChestTileEntity::create, eTYPE_CHESTTILEENTITY, L"Chest"); 18 TileEntity::setId(EnderChestTileEntity::create, eTYPE_ENDERCHESTTILEENTITY, L"EnderChest"); 19 TileEntity::setId(JukeboxTile::Entity::create, eTYPE_RECORDPLAYERTILE, L"RecordPlayer"); 20 TileEntity::setId(DispenserTileEntity::create, eTYPE_DISPENSERTILEENTITY, L"Trap"); 21 TileEntity::setId(DropperTileEntity::create, eTYPE_DROPPERTILEENTITY, L"Dropper"); 22 TileEntity::setId(SignTileEntity::create, eTYPE_SIGNTILEENTITY, L"Sign"); 23 TileEntity::setId(MobSpawnerTileEntity::create, eTYPE_MOBSPAWNERTILEENTITY, L"MobSpawner"); 24 TileEntity::setId(MusicTileEntity::create, eTYPE_MUSICTILEENTITY, L"Music"); 25 TileEntity::setId(PistonPieceEntity::create, eTYPE_PISTONPIECEENTITY, L"Piston"); 26 TileEntity::setId(BrewingStandTileEntity::create, eTYPE_BREWINGSTANDTILEENTITY, L"Cauldron"); 27 TileEntity::setId(EnchantmentTableEntity::create, eTYPE_ENCHANTMENTTABLEENTITY, L"EnchantTable"); 28 TileEntity::setId(TheEndPortalTileEntity::create, eTYPE_THEENDPORTALTILEENTITY, L"Airportal"); 29 TileEntity::setId(CommandBlockEntity::create, eTYPE_COMMANDBLOCKTILEENTITY, L"Control"); 30 TileEntity::setId(BeaconTileEntity::create, eTYPE_BEACONTILEENTITY, L"Beacon"); 31 TileEntity::setId(SkullTileEntity::create,eTYPE_SKULLTILEENTITY, L"Skull"); 32 TileEntity::setId(DaylightDetectorTileEntity::create, eTYPE_DAYLIGHTDETECTORTILEENTITY, L"DLDetector"); 33 TileEntity::setId(HopperTileEntity::create, eTYPE_HOPPERTILEENTITY, L"Hopper"); 34 TileEntity::setId(ComparatorTileEntity::create, eTYPE_COMPARATORTILEENTITY, L"Comparator"); 35} 36 37void TileEntity::setId(tileEntityCreateFn createFn, eINSTANCEOF clas, wstring id) 38{ 39 // 4J Stu - Java has classIdMap.containsKey(id) which would never work as id is not of the type of the key in classIdMap 40 // I have changed to use idClassMap instead so that we can still search from the string key 41 // TODO 4J Stu - Exceptions 42 if (idCreateMap.find(id) != idCreateMap.end() ) {}//throw new IllegalArgumentException("Duplicate id: " + id); 43 idCreateMap.insert( idToCreateMapType::value_type(id, createFn) ); 44 classIdMap.insert( classToIdMapType::value_type( clas, id ) ); 45} 46 47TileEntity::TileEntity() 48{ 49 level = NULL; 50 x = y = z = 0; 51 remove = false; 52 data = -1; 53 tile = NULL; 54 renderRemoveStage = e_RenderRemoveStageKeep; 55} 56 57Level *TileEntity::getLevel() 58{ 59 return level; 60} 61 62void TileEntity::setLevel(Level *level) 63{ 64 this->level = level; 65} 66 67bool TileEntity::hasLevel() 68{ 69 return level != NULL; 70} 71 72void TileEntity::load(CompoundTag *tag) 73{ 74 x = tag->getInt(L"x"); 75 y = tag->getInt(L"y"); 76 z = tag->getInt(L"z"); 77} 78 79void TileEntity::save(CompoundTag *tag) 80{ 81 AUTO_VAR(it, classIdMap.find( this->GetType() )); 82 if ( it == classIdMap.end() ) 83 { 84 // TODO 4J Stu - Some sort of exception handling 85 //throw new RuntimeException(this->getClass() + " is missing a mapping! This is a bug!"); 86 return; 87 } 88 tag->putString(L"id", ( (*it).second ) ); 89 tag->putInt(L"x", x); 90 tag->putInt(L"y", y); 91 tag->putInt(L"z", z); 92} 93 94void TileEntity::tick() 95{ 96} 97 98shared_ptr<TileEntity> TileEntity::loadStatic(CompoundTag *tag) 99{ 100 shared_ptr<TileEntity> entity = nullptr; 101 102 //try 103 //{ 104 AUTO_VAR(it, idCreateMap.find(tag->getString(L"id"))); 105 if (it != idCreateMap.end() ) entity = shared_ptr<TileEntity>(it->second()); 106 //} 107 //catch (Exception e) 108 //{ 109 // TODO 4J Stu - Exception handling? 110 // e->printStackTrace(); 111 //} 112 if (entity != NULL) 113 { 114 entity->load(tag); 115 } 116 else 117 { 118#ifdef _DEBUG 119 app.DebugPrintf("Skipping TileEntity with id %ls.\n" , tag->getString(L"id").c_str() ); 120#endif 121 } 122 123 return entity; 124} 125 126int TileEntity::getData() 127{ 128 if (data == -1) data = level->getData(x, y, z); 129 return data; 130} 131 132void TileEntity::setData(int data, int updateFlags) 133{ 134 this->data = data; 135 level->setData(x, y, z, data, updateFlags); 136} 137 138void TileEntity::setChanged() 139{ 140 if (level != NULL) 141 { 142 data = level->getData(x, y, z); 143 level->tileEntityChanged(x, y, z, shared_from_this()); 144 if (getTile() != NULL) level->updateNeighbourForOutputSignal(x, y, z, getTile()->id); 145 } 146} 147 148double TileEntity::distanceToSqr(double xPlayer, double yPlayer, double zPlayer) 149{ 150 double xd = (x + 0.5) - xPlayer; 151 double yd = (y + 0.5) - yPlayer; 152 double zd = (z + 0.5) - zPlayer; 153 return xd * xd + yd * yd + zd * zd; 154} 155 156double TileEntity::getViewDistance() 157{ 158 return 64 * 64; 159} 160 161Tile *TileEntity::getTile() 162{ 163 if( tile == NULL ) tile = Tile::tiles[level->getTile(x, y, z)]; 164 return tile; 165} 166 167shared_ptr<Packet> TileEntity::getUpdatePacket() 168{ 169 return nullptr; 170} 171 172bool TileEntity::isRemoved() 173{ 174 return remove; 175} 176 177void TileEntity::setRemoved() 178{ 179 remove = true; 180} 181 182void TileEntity::clearRemoved() 183{ 184 remove = false; 185} 186 187bool TileEntity::triggerEvent(int b0, int b1) 188{ 189 return false; 190} 191 192void TileEntity::clearCache() 193{ 194 tile = NULL; 195 data = -1; 196} 197 198void TileEntity::setRenderRemoveStage( unsigned char stage ) 199{ 200 renderRemoveStage = stage; 201} 202 203bool TileEntity::shouldRemoveForRender() 204{ 205 return (renderRemoveStage == e_RenderRemoveStageRemove); 206} 207 208void TileEntity::upgradeRenderRemoveStage() 209{ 210 if( renderRemoveStage == e_RenderRemoveStageFlaggedAtChunk ) 211 { 212 renderRemoveStage = e_RenderRemoveStageRemove; 213 } 214} 215 216// 4J Added 217void TileEntity::clone(shared_ptr<TileEntity> tileEntity) 218{ 219 tileEntity->level = this->level; 220 tileEntity->x = this->x; 221 tileEntity->y = this->y; 222 tileEntity->z = this->z; 223 tileEntity->data = this->data; 224 tileEntity->tile = this->tile; 225}