the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2#include "Material.h"
3#include "Vec3.h"
4#include "Definitions.h"
5#include "SoundTypes.h"
6using namespace std;
7
8class GrassTile;
9class LeafTile;
10class TallGrass;
11class DeadBushTile;
12class FireTile;
13class PortalTile;
14class MycelTile;
15class PistonExtensionTile;
16class PistonMovingPiece;
17class StoneTile;
18class stoneBrick;
19class Bush;
20class StairTile;
21class LiquidTile;
22class PistonBaseTile;
23class ChestTile;
24class RedStoneDustTile;
25class RepeaterTile;
26class CauldronTile;
27class TripWireSourceTile;
28class BeaconTile;
29class ComparatorTile;
30class DaylightDetectorTile;
31class Random;
32class HitResult;
33class Level;
34class HopperTile;
35class Player;
36class LevelSource;
37class Mob;
38class TileEntity;
39class HalfSlabTile;
40class Icon;
41class IconRegister;
42
43class ChunkRebuildData;
44
45class Tile
46{
47 // 4J Stu - Stair tile accesses the protected members of a Tile object passed in
48 friend class StairTile;
49 friend class ChunkRebuildData;
50 friend class WallTile;
51
52protected:
53 // 4J added so we can have separate shapes for different threads
54 class ThreadStorage
55 {
56 public:
57 double xx0, yy0, zz0, xx1, yy1, zz1;
58 int tileId;
59 ThreadStorage();
60 };
61 static DWORD tlsIdxShape;
62public:
63 // Each new thread that needs to use Vec3 pools will need to call one of the following 2 functions, to either create its own
64 // local storage, or share the default storage already allocated by the main thread
65 static void CreateNewThreadStorage();
66 static void ReleaseThreadStorage();
67
68public:
69 static const int TILE_NUM_COUNT = 4096;
70 static const int TILE_NUM_MASK = 0xfff; // 4096 - 1
71 static const int TILE_NUM_SHIFT = 12; // 4096 is 12 bits
72
73 // tile update flags
74 // neighbors: notify neighbors the block changed
75 static const int UPDATE_NEIGHBORS = (1 << 0);
76 // clients: send tile update over network connections
77 static const int UPDATE_CLIENTS = (1 << 1);
78 // invisible: this update is invisible, so don't rebuild graphics
79 static const int UPDATE_INVISIBLE = (1 << 2);
80 // clients: send tile update over network connections
81 static const int UPDATE_INVISIBLE_NO_LIGHT = (1 << 3) | UPDATE_INVISIBLE;
82
83 static const int UPDATE_NONE = UPDATE_INVISIBLE;
84 static const int UPDATE_ALL = UPDATE_NEIGHBORS | UPDATE_CLIENTS;
85
86private:
87 // 4J Stu - Was const but had to change it so that we can initialise it in TileStaticInit
88 static wstring TILE_DESCRIPTION_PREFIX;
89protected:
90 static const float INDESTRUCTIBLE_DESTROY_TIME;
91
92 wstring iconName;
93
94public:
95
96 class SoundType
97 {
98 public:
99 // wstring name;
100 // wstring breakSound;
101 // wstring stepSound;
102 eMATERIALSOUND_TYPE eMaterialSound;
103 int iBreakSound,iStepSound,iPlaceSound;
104 float volume;
105 float pitch;
106
107 SoundType(eMATERIALSOUND_TYPE eMaterialSound, float volume, float pitch, int iBreakSound = -1, int iPlaceSound = -1);
108
109 float getVolume() const;
110 float getPitch() const;
111 //wstring getBreakSound() const { return breakSound; }
112 //wstring getStepSound() const { return stepSound; }
113 int getBreakSound() const;
114 int getStepSound() const;
115 int getPlaceSound() const;
116 };
117
118 static SoundType *SOUND_NORMAL;
119 static SoundType *SOUND_WOOD;
120 static SoundType *SOUND_GRAVEL;
121 static SoundType *SOUND_GRASS;
122 static SoundType *SOUND_STONE;
123 static SoundType *SOUND_METAL;
124 static SoundType *SOUND_GLASS;
125 static SoundType *SOUND_CLOTH;
126 static SoundType *SOUND_SAND;
127 static SoundType *SOUND_SNOW;
128 static SoundType *SOUND_LADDER;
129 static SoundType *SOUND_ANVIL;
130
131 static const int SHAPE_INVISIBLE = -1;
132 static const int SHAPE_BLOCK = 0;
133 static const int SHAPE_CROSS_TEXTURE = 1;
134 static const int SHAPE_TORCH = 2;
135 static const int SHAPE_FIRE = 3;
136 static const int SHAPE_WATER = 4;
137 static const int SHAPE_RED_DUST = 5;
138 static const int SHAPE_ROWS = 6;
139 static const int SHAPE_DOOR = 7;
140 static const int SHAPE_LADDER = 8;
141 static const int SHAPE_RAIL = 9;
142 static const int SHAPE_STAIRS = 10;
143 static const int SHAPE_FENCE = 11;
144 static const int SHAPE_LEVER = 12;
145 static const int SHAPE_CACTUS = 13;
146 static const int SHAPE_BED = 14;
147 static const int SHAPE_REPEATER = 15;
148 static const int SHAPE_PISTON_BASE = 16;
149 static const int SHAPE_PISTON_EXTENSION = 17;
150 static const int SHAPE_IRON_FENCE = 18;
151 static const int SHAPE_STEM = 19;
152 static const int SHAPE_VINE = 20;
153 static const int SHAPE_FENCE_GATE = 21;
154 static const int SHAPE_ENTITYTILE_ANIMATED = 22;
155 static const int SHAPE_LILYPAD = 23;
156 static const int SHAPE_CAULDRON = 24;
157 static const int SHAPE_BREWING_STAND = 25;
158 static const int SHAPE_PORTAL_FRAME = 26;
159 static const int SHAPE_EGG = 27;
160 static const int SHAPE_COCOA = 28;
161 static const int SHAPE_TRIPWIRE_SOURCE = 29;
162 static const int SHAPE_TRIPWIRE = 30;
163 static const int SHAPE_TREE = 31;
164 static const int SHAPE_WALL = 32;
165 static const int SHAPE_FLOWER_POT = 33;
166 static const int SHAPE_BEACON = 34;
167 static const int SHAPE_ANVIL = 35;
168 static const int SHAPE_DIODE = 36;
169 static const int SHAPE_COMPARATOR = 37;
170 static const int SHAPE_HOPPER = 38;
171 static const int SHAPE_QUARTZ = 39;
172 static const int SHAPE_THIN_PANE = 40;
173
174 static const int SHAPE_COUNT = 41;
175
176 static Tile **tiles;
177
178 static bool mipmapEnable[TILE_NUM_COUNT];
179 static bool solid[TILE_NUM_COUNT];
180 static int lightBlock[TILE_NUM_COUNT];
181 static bool transculent[TILE_NUM_COUNT];
182 static int lightEmission[TILE_NUM_COUNT];
183 static unsigned char _sendTileData[TILE_NUM_COUNT]; // 4J - was bool, changed to bitfield so we can indicate which bits are important to be sent
184 static bool propagate[TILE_NUM_COUNT];
185
186 // 4J - this array of simple constants made so the compiler can optimise references to Ids that were previous of the form Tile::<whatever>->id, and are now simply Tile::whatever_Id
187 static const int stone_Id = 1;
188 static const int grass_Id = 2;
189 static const int dirt_Id = 3;
190 static const int cobblestone_Id = 4;
191 static const int wood_Id = 5;
192 static const int sapling_Id = 6;
193 static const int unbreakable_Id = 7;
194 static const int water_Id = 8;
195 static const int calmWater_Id = 9;
196 static const int lava_Id = 10;
197
198 static const int calmLava_Id = 11;
199 static const int sand_Id = 12;
200 static const int gravel_Id = 13;
201 static const int goldOre_Id = 14;
202 static const int ironOre_Id = 15;
203 static const int coalOre_Id = 16;
204 static const int treeTrunk_Id = 17;
205 static const int leaves_Id = 18;
206 static const int sponge_Id = 19;
207 static const int glass_Id = 20;
208
209 static const int lapisOre_Id = 21;
210 static const int lapisBlock_Id = 22;
211 static const int dispenser_Id = 23;
212 static const int sandStone_Id = 24;
213 static const int noteblock_Id = 25;
214 static const int bed_Id = 26;
215 static const int goldenRail_Id = 27;
216 static const int detectorRail_Id = 28;
217 static const int pistonStickyBase_Id = 29;
218 static const int web_Id = 30;
219
220 static const int tallgrass_Id = 31;
221 static const int deadBush_Id = 32;
222 static const int pistonBase_Id = 33;
223 static const int pistonExtensionPiece_Id = 34;
224 static const int wool_Id = 35;
225 static const int pistonMovingPiece_Id = 36;
226 static const int flower_Id = 37;
227 static const int rose_Id = 38;
228 static const int mushroom_brown_Id = 39;
229 static const int mushroom_red_Id = 40;
230
231 static const int goldBlock_Id = 41;
232 static const int ironBlock_Id = 42;
233 static const int stoneSlab_Id = 43;
234 static const int stoneSlabHalf_Id = 44;
235 static const int redBrick_Id = 45;
236 static const int tnt_Id = 46;
237 static const int bookshelf_Id = 47;
238 static const int mossyCobblestone_Id = 48;
239 static const int obsidian_Id = 49;
240 static const int torch_Id = 50;
241
242 static const int fire_Id = 51;
243 static const int mobSpawner_Id = 52;
244 static const int stairs_wood_Id = 53;
245 static const int chest_Id = 54;
246 static const int redStoneDust_Id = 55;
247 static const int diamondOre_Id = 56;
248 static const int diamondBlock_Id = 57;
249 static const int workBench_Id = 58;
250 static const int wheat_Id = 59;
251 static const int farmland_Id = 60;
252
253 static const int furnace_Id = 61;
254 static const int furnace_lit_Id = 62;
255 static const int sign_Id = 63;
256 static const int door_wood_Id = 64;
257 static const int ladder_Id = 65;
258 static const int rail_Id = 66;
259 static const int stairs_stone_Id = 67;
260 static const int wallSign_Id = 68;
261 static const int lever_Id = 69;
262 static const int pressurePlate_stone_Id = 70;
263
264 static const int door_iron_Id = 71;
265 static const int pressurePlate_wood_Id = 72;
266 static const int redStoneOre_Id = 73;
267 static const int redStoneOre_lit_Id = 74;
268 static const int redstoneTorch_off_Id = 75;
269 static const int redstoneTorch_on_Id = 76;
270 static const int button_stone_Id = 77;
271 static const int topSnow_Id = 78;
272 static const int ice_Id = 79;
273 static const int snow_Id = 80;
274
275 static const int cactus_Id = 81;
276 static const int clay_Id = 82;
277 static const int reeds_Id = 83;
278 static const int jukebox_Id = 84;
279 static const int fence_Id = 85;
280 static const int pumpkin_Id = 86;
281 static const int netherRack_Id = 87;
282 static const int soulsand_Id = 88;
283 static const int glowstone_Id = 89;
284 static const int portalTile_Id = 90;
285
286 static const int litPumpkin_Id = 91;
287 static const int cake_Id = 92;
288 static const int diode_off_Id = 93;
289 static const int diode_on_Id = 94;
290 static const int stained_glass_Id = 95;
291 static const int trapdoor_Id = 96;
292 static const int monsterStoneEgg_Id = 97;
293 static const int stoneBrick_Id = 98;
294 static const int hugeMushroom_brown_Id = 99;
295 static const int hugeMushroom_red_Id = 100;
296
297 static const int ironFence_Id = 101;
298 static const int thinGlass_Id = 102;
299 static const int melon_Id = 103;
300 static const int pumpkinStem_Id = 104;
301 static const int melonStem_Id = 105;
302 static const int vine_Id = 106;
303 static const int fenceGate_Id = 107;
304 static const int stairs_bricks_Id = 108;
305 static const int stairs_stoneBrick_Id = 109;
306 static const int mycel_Id = 110;
307
308 static const int waterLily_Id = 111;
309 static const int netherBrick_Id = 112;
310 static const int netherFence_Id = 113;
311 static const int stairs_netherBricks_Id = 114;
312 static const int netherStalk_Id = 115;
313 static const int enchantTable_Id = 116;
314 static const int brewingStand_Id = 117;
315 static const int cauldron_Id = 118;
316 static const int endPortalTile_Id = 119;
317 static const int endPortalFrameTile_Id = 120;
318
319 static const int endStone_Id = 121;
320 static const int dragonEgg_Id = 122;
321 static const int redstoneLight_Id = 123;
322 static const int redstoneLight_lit_Id = 124;
323 static const int woodSlab_Id = 125;
324 static const int woodSlabHalf_Id = 126;
325 static const int cocoa_Id = 127;
326 static const int stairs_sandstone_Id = 128;
327 static const int emeraldOre_Id = 129;
328 static const int enderChest_Id = 130;
329
330 static const int tripWireSource_Id = 131;
331 static const int tripWire_Id = 132;
332 static const int emeraldBlock_Id = 133;
333 static const int stairs_sprucewood_Id = 134;
334 static const int stairs_birchwood_Id = 135;
335 static const int stairs_junglewood_Id = 136;
336 static const int commandBlock_Id = 137;
337 static const int beacon_Id = 138;
338 static const int cobbleWall_Id = 139;
339 static const int flowerPot_Id = 140;
340
341 static const int carrots_Id = 141;
342 static const int potatoes_Id = 142;
343 static const int button_wood_Id = 143;
344 static const int skull_Id = 144;
345 static const int anvil_Id = 145;
346 static const int chest_trap_Id = 146;
347 static const int weightedPlate_light_Id = 147;
348 static const int weightedPlate_heavy_Id = 148;
349 static const int comparator_off_Id = 149;
350 static const int comparator_on_Id = 150;
351
352 static const int daylightDetector_Id = 151;
353 static const int redstoneBlock_Id = 152;
354 static const int netherQuartz_Id = 153;
355 static const int hopper_Id = 154;
356 static const int quartzBlock_Id = 155;
357 static const int stairs_quartz_Id = 156;
358 static const int activatorRail_Id = 157;
359 static const int dropper_Id = 158;
360 static const int clayHardened_colored_Id = 159;
361 static const int stained_glass_pane_Id = 160;
362
363 static const int hayBlock_Id = 170;
364 static const int woolCarpet_Id = 171;
365 static const int clayHardened_Id = 172;
366 static const int coalBlock_Id = 173;
367
368
369 static Tile *stone;
370 static GrassTile *grass;
371 static Tile *dirt;
372 static Tile *cobblestone;
373 static Tile *wood;
374 static Tile *sapling;
375 static Tile *unbreakable;
376 static LiquidTile *water;
377 static Tile *calmWater;
378 static LiquidTile *lava;
379 static Tile *calmLava;
380 static Tile *sand;
381 static Tile *gravel;
382 static Tile *goldOre;
383 static Tile *ironOre;
384 static Tile *coalOre;
385 static Tile *treeTrunk;
386 static LeafTile *leaves;
387 static Tile *sponge;
388 static Tile *glass;
389 static Tile *lapisOre;
390 static Tile *lapisBlock;
391 static Tile *dispenser;
392 static Tile *sandStone;
393 static Tile *noteblock;
394 static Tile *bed;
395 static Tile *goldenRail;
396 static Tile *detectorRail;
397 static PistonBaseTile *pistonStickyBase;
398 static Tile *web;
399 static TallGrass *tallgrass;
400 static DeadBushTile *deadBush;
401 static PistonBaseTile *pistonBase;
402 static PistonExtensionTile *pistonExtension;
403 static Tile *wool;
404 static PistonMovingPiece *pistonMovingPiece;
405 static Bush *flower;
406 static Bush *rose;
407 static Bush *mushroom_brown;
408 static Bush *mushroom_red;
409 static Tile *goldBlock;
410 static Tile *ironBlock;
411 // static Tile *stoneSlab;
412 // static Tile *stoneSlabHalf;
413 static Tile *redBrick;
414 static Tile *tnt;
415 static Tile *bookshelf;
416 static Tile *mossyCobblestone;
417 static Tile *obsidian;
418 static Tile *torch;
419 static FireTile *fire;
420 static Tile *mobSpawner;
421 static Tile *stairs_wood;
422 static ChestTile *chest;
423 static RedStoneDustTile *redStoneDust;
424 static Tile *diamondOre;
425 static Tile *diamondBlock;
426 static Tile *workBench;
427 static Tile *wheat;
428 static Tile *farmland;
429 static Tile *furnace;
430 static Tile *furnace_lit;
431 static Tile *sign;
432 static Tile *door_wood;
433 static Tile *ladder;
434 static Tile *rail;
435 static Tile *stairs_stone;
436 static Tile *wallSign;
437 static Tile *lever;
438 static Tile *pressurePlate_stone;
439 static Tile *door_iron;
440 static Tile *pressurePlate_wood;
441 static Tile *redStoneOre;
442 static Tile *redStoneOre_lit;
443 static Tile *redstoneTorch_off;
444 static Tile *redstoneTorch_on;
445 static Tile *button;
446 static Tile *topSnow;
447 static Tile *ice;
448 static Tile *snow;
449 static Tile *cactus;
450 static Tile *clay;
451 static Tile *reeds;
452 static Tile *jukebox;
453 static Tile *fence;
454 static Tile *pumpkin;
455 static Tile *netherRack;
456 static Tile *soulsand;
457 static Tile *glowstone;
458 static PortalTile *portalTile;
459 static Tile *litPumpkin;
460 static Tile *cake;
461 static RepeaterTile *diode_off;
462 static RepeaterTile *diode_on;
463 static Tile *stained_glass;
464 static Tile *trapdoor;
465
466 static Tile *monsterStoneEgg;
467 static Tile *stoneBrick;
468 static Tile *hugeMushroom_brown;
469 static Tile *hugeMushroom_red;
470 static Tile *ironFence;
471 static Tile *thinGlass;
472 static Tile *melon;
473 static Tile *pumpkinStem;
474 static Tile *melonStem;
475 static Tile *vine;
476 static Tile *fenceGate;
477 static Tile *stairs_bricks;
478 static Tile *stairs_stoneBrickSmooth;
479
480 static MycelTile *mycel;
481 static Tile *waterLily;
482 static Tile *netherBrick;
483 static Tile *netherFence;
484 static Tile *stairs_netherBricks;
485 static Tile *netherStalk;
486 static Tile *enchantTable;
487 static Tile *brewingStand;
488 static CauldronTile *cauldron;
489 static Tile *endPortalTile;
490 static Tile *endPortalFrameTile;
491 static Tile *endStone;
492 static Tile *dragonEgg;
493 static Tile *redstoneLight;
494 static Tile *redstoneLight_lit;
495
496 static Tile *stairs_sandstone;
497 static Tile *woodStairsDark;
498 static Tile *woodStairsBirch;
499 static Tile *woodStairsJungle;
500 static Tile *commandBlock;
501 static BeaconTile *beacon;
502 static Tile *button_wood;
503 static HalfSlabTile *woodSlab;
504 static HalfSlabTile *woodSlabHalf;
505 static HalfSlabTile *stoneSlab;
506 static HalfSlabTile *stoneSlabHalf;
507 static Tile *emeraldOre;
508 static Tile *enderChest;
509 static TripWireSourceTile *tripWireSource;
510 static Tile *tripWire;
511 static Tile *emeraldBlock;
512
513 static Tile *cocoa;
514 static Tile *skull;
515
516 static Tile *cobbleWall;
517 static Tile *flowerPot;
518 static Tile *carrots;
519 static Tile *potatoes;
520 static Tile *anvil;
521 static Tile *chest_trap;
522 static Tile *weightedPlate_light;
523 static Tile *weightedPlate_heavy;
524 static ComparatorTile *comparator_off;
525 static ComparatorTile *comparator_on;
526
527 static DaylightDetectorTile *daylightDetector;
528 static Tile *redstoneBlock;
529
530 static Tile *netherQuartz;
531 static HopperTile *hopper;
532 static Tile *quartzBlock;
533 static Tile *stairs_quartz;
534 static Tile *activatorRail;
535 static Tile *dropper;
536 static Tile *clayHardened_colored;
537 static Tile *stained_glass_pane;
538
539 static Tile *hayBlock;
540 static Tile *woolCarpet;
541 static Tile *clayHardened;
542 static Tile *coalBlock;
543
544 static void staticCtor();
545
546 int id;
547protected:
548 float destroySpeed;
549 float explosionResistance;
550 bool isInventoryItem;
551 bool collectStatistics;
552 bool _isTicking;
553 bool _isEntityTile;
554 int m_iMaterial;
555 int m_iBaseItemType;
556
557 // 4J Stu - Removed this in favour of a TLS version
558 //double xx0, yy0, zz0, xx1, yy1, zz1;
559
560public:
561 const SoundType *soundType;
562
563 float gravity;
564 Material *material;
565 float friction;
566
567private:
568 unsigned int descriptionId;
569 unsigned int useDescriptionId; // 4J Added
570
571protected:
572 Icon *icon;
573
574protected:
575 void _init(int id, Material *material, bool isSolidRender);
576 Tile(int id, Material *material, bool isSolidRender = true);
577 virtual ~Tile() {}
578protected:
579 virtual Tile *sendTileData(unsigned char importantMask=15); // 4J - added importantMask to indicate which bits in the data are important
580protected:
581 virtual void init();
582 virtual Tile *setSoundType(const SoundType *soundType);
583 virtual Tile *setLightBlock(int i);
584 virtual Tile *setLightEmission(float f);
585 virtual Tile *setExplodeable(float explosionResistance);
586 Tile *setBaseItemTypeAndMaterial(int iType,int iMaterial);
587public:
588 static bool isSolidBlockingTile(int t);
589 virtual bool isCubeShaped();
590 virtual bool isPathfindable(LevelSource *level, int x, int y, int z);
591 virtual int getRenderShape();
592 // 4J-PB added
593 int getBaseItemType();
594 int getMaterial();
595protected:
596 virtual Tile *setDestroyTime(float destroySpeed);
597 virtual Tile *setIndestructible();
598public:
599 virtual float getDestroySpeed(Level *level, int x, int y, int z);
600protected:
601 virtual Tile *setTicking(bool tick);
602 virtual Tile *disableMipmap();
603public:
604 virtual bool isTicking();
605 virtual bool isEntityTile();
606 virtual void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
607 virtual float getBrightness(LevelSource *level, int x, int y, int z);
608 virtual int getLightColor(LevelSource *level, int x, int y, int z, int tileId=-1); // 4J - brought forward from 1.8.2
609 static bool isFaceVisible(Level *level, int x, int y, int z, int f);
610 virtual bool shouldRenderFace(LevelSource *level, int x, int y, int z, int face);
611 virtual bool isSolidFace(LevelSource *level, int x, int y, int z, int face);
612 virtual Icon *getTexture(LevelSource *level, int x, int y, int z, int face);
613 virtual Icon *getTexture(int face, int data);
614 virtual Icon *getTexture(int face);
615 virtual AABB *getTileAABB(Level *level, int x, int y, int z);
616 virtual void addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, shared_ptr<Entity> source);
617 virtual AABB *getAABB(Level *level, int x, int y, int z);
618 virtual bool isSolidRender(bool isServerLevel = false); // 4J - Added isServerLevel param
619 virtual bool mayPick(int data, bool liquid);
620 virtual bool mayPick();
621 virtual void tick(Level *level, int x, int y, int z, Random *random);
622 virtual void animateTick(Level *level, int x, int y, int z, Random *random);
623 virtual void destroy(Level *level, int x, int y, int z, int data);
624 virtual void neighborChanged(Level *level, int x, int y, int z, int type);
625 virtual void addLights(Level *level, int x, int y, int z);
626 virtual int getTickDelay(Level *level);
627 virtual void onPlace(Level *level, int x, int y, int z);
628 virtual void onRemove(Level *level, int x, int y, int z, int id, int data);
629 virtual int getResourceCount(Random *random);
630 virtual int getResource(int data, Random *random, int playerBonusLevel);
631 virtual float getDestroyProgress(shared_ptr<Player> player, Level *level, int x, int y, int z);
632 virtual void spawnResources(Level *level, int x, int y, int z, int data, int playerBonusLevel);
633 virtual void spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel);
634protected:
635 virtual void popResource(Level *level, int x, int y, int z, shared_ptr<ItemInstance> itemInstance);
636 virtual void popExperience(Level *level, int x, int y, int z, int amount);
637
638public:
639 virtual int getSpawnResourcesAuxValue(int data);
640 virtual float getExplosionResistance(shared_ptr<Entity> source);
641 virtual HitResult *clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3 *b);
642private:
643 virtual bool containsX(Vec3 *v);
644 virtual bool containsY(Vec3 *v);
645 virtual bool containsZ(Vec3 *v);
646public:
647 virtual void wasExploded(Level *level, int x, int y, int z, Explosion *explosion);
648 virtual int getRenderLayer();
649 virtual bool mayPlace(Level *level, int x, int y, int z, int face, shared_ptr<ItemInstance> item);
650 virtual bool mayPlace(Level *level, int x, int y, int z, int face);
651 virtual bool mayPlace(Level *level, int x, int y, int z);
652 virtual bool TestUse();
653 virtual bool TestUse(Level *level, int x, int y, int z, shared_ptr<Player> player);
654 virtual bool use(Level *level, int x, int y, int z, shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly = false); // 4J added soundOnly param
655 virtual void stepOn(Level *level, int x, int y, int z, shared_ptr<Entity> entity);
656 virtual int getPlacedOnFaceDataValue(Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, int itemValue);
657 virtual void prepareRender(Level *level, int x, int y, int z);
658 virtual void attack(Level *level, int x, int y, int z, shared_ptr<Player> player);
659 virtual void handleEntityInside(Level *level, int x, int y, int z, shared_ptr<Entity> e, Vec3 *current);
660 virtual void updateShape(LevelSource *level, int x, int y, int z, int forceData = -1, shared_ptr<TileEntity> forceEntity = shared_ptr<TileEntity>()); // 4J added forceData, forceEntity param
661 virtual double getShapeX0();
662 virtual double getShapeX1();
663 virtual double getShapeY0();
664 virtual double getShapeY1();
665 virtual double getShapeZ0();
666 virtual double getShapeZ1();
667 virtual int getColor() const;
668 virtual int getColor(int auxData);
669 virtual int getColor(LevelSource *level, int x, int y, int z);
670 virtual int getColor(LevelSource *level, int x, int y, int z, int data); // 4J added
671 virtual int getSignal(LevelSource *level, int x, int y, int z, int dir);
672 virtual bool isSignalSource();
673 virtual void entityInside(Level *level, int x, int y, int z, shared_ptr<Entity> entity);
674 virtual int getDirectSignal(LevelSource *level, int x, int y, int z, int dir);
675 virtual void updateDefaultShape();
676 virtual void playerDestroy(Level *level, shared_ptr<Player> player, int x, int y, int z, int data);
677 virtual bool canSurvive(Level *level, int x, int y, int z);
678protected:
679 virtual bool isSilkTouchable();
680 virtual shared_ptr<ItemInstance> getSilkTouchItemInstance(int data);
681public:
682 virtual int getResourceCountForLootBonus(int bonusLevel, Random *random);
683 virtual void setPlacedBy(Level *level, int x, int y, int z, shared_ptr<LivingEntity> by, shared_ptr<ItemInstance> itemInstance);
684 virtual void finalizePlacement(Level *level, int x, int y, int z, int data);
685 virtual Tile *setDescriptionId(unsigned int id);
686 virtual wstring getName();
687 virtual unsigned int getDescriptionId(int iData = -1);
688 virtual Tile *setUseDescriptionId(unsigned int id); // 4J Added
689 virtual unsigned int getUseDescriptionId(); // 4J Added
690 virtual bool triggerEvent(Level *level, int x, int y, int z, int b0, int b1);
691 virtual bool isCollectStatistics();
692
693 // 4J Added so we can check before we try to add a tile to the tick list if it's actually going to do seomthing
694 // Default to true (it's also checking a bool array) and just override when we need to be able to say no
695 virtual bool shouldTileTick(Level *level, int x,int y,int z) { return true; }
696protected:
697 virtual Tile *setNotCollectStatistics();
698public:
699 virtual int getPistonPushReaction();
700 virtual float getShadeBrightness(LevelSource *level, int x, int y, int z); // 4J - brought forward from 1.8.2
701 virtual void fallOn(Level *level, int x, int y, int z, shared_ptr<Entity> entity, float fallDistance);
702 virtual int cloneTileId(Level *level, int x, int y, int z);
703 virtual int cloneTileData(Level *level, int x, int y, int z);
704 virtual void playerWillDestroy(Level *level, int x, int y, int z, int data, shared_ptr<Player> player);
705 virtual void onRemoving(Level *level, int x, int y, int z, int data);
706 virtual void handleRain(Level *level, int x, int y, int z);
707 virtual void levelTimeChanged(Level *level, __int64 delta, __int64 newTime);
708 virtual bool useOwnCloneData();
709 virtual bool canInstantlyTick();
710 virtual bool dropFromExplosion(Explosion *explosion);
711 virtual bool isMatching(int id);
712 static bool isMatching(int tileIdA, int tileIdB);
713 virtual bool hasAnalogOutputSignal();
714 virtual int getAnalogOutputSignal(Level *level, int x, int y, int z, int dir);
715
716protected:
717 virtual Tile *setIconName(const wstring &iconName);
718 virtual wstring getIconName();
719
720public:
721 virtual void registerIcons(IconRegister *iconRegister);
722 virtual wstring getTileItemIconName();
723
724 // AP - added this function so we can generate the faceFlags for a block in a single fast function
725 int getFaceFlags(LevelSource *level, int x, int y, int z);
726};
727
728class stoneBrick : public Tile {};