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 "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}