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