2026-03-01 12:16:08 +08:00
# pragma once
// #include "Material.h"
// #include "Vec3.h"
// #include "Definitions.h"
// #include "SoundTypes.h"
// using namespace std;
# include "Icon_SPU.h"
# include "Material_SPU.h"
# include <stddef.h>
class ChunkRebuildData ;
class GrassTile_SPU ;
class LeafTile ;
class TallGrass ;
class DeadBushTile ;
class FireTile ;
class PortalTile ;
class MycelTile ;
class PistonExtensionTile ;
class PistonMovingPiece ;
class StoneTile ;
class stoneBrick ;
class Bush ;
class StairTile ;
class LiquidTile ;
class PistonBaseTile ;
class ChestTile ;
class RedStoneDustTile ;
class RepeaterTile ;
class CauldronTile ;
class TripWireSourceTile ;
class Random ;
class HitResult ;
class Level ;
class Player ;
class LevelSource ;
class Mob ;
class TileEntity ;
class HalfSlabTile ;
class IconRegister ;
class TileData_SPU
{
public :
class Bitfield256
{
unsigned int m_data [ 8 ] ;
void setBit ( unsigned char i ) { m_data [ i > > 5 ] | = ( 1 < < ( i % 32 ) ) ; }
void clearBit ( unsigned char i ) { m_data [ i > > 5 ] & = ~ ( 1 < < ( i % 32 ) ) ; }
public :
bool operator [ ] ( unsigned char i ) { return ( m_data [ i > > 5 ] & 1 < < ( i % 32 ) ) ! = 0 ; }
void set ( unsigned char i , bool val ) { ( val ) ? setBit ( i ) : clearBit ( i ) ; }
} ;
Bitfield256 mipmapEnable ;
Bitfield256 solid ;
Bitfield256 transculent ;
Bitfield256 _sendTileData ;
Bitfield256 propagate ;
Bitfield256 signalSource ;
Bitfield256 cubeShaped ;
char lightBlock [ 256 ] ;
char lightEmission [ 256 ] ;
char materialIDs [ 256 ] ;
Material_SPU materials [ Material_SPU : : num_Ids ] ;
float xx0 [ 256 ] ;
float yy0 [ 256 ] ;
float zz0 [ 256 ] ;
float xx1 [ 256 ] ;
float yy1 [ 256 ] ;
float zz1 [ 256 ] ;
int iconTexWidth ;
int iconTexHeight ;
Icon_SPU iconData [ 256 ] ;
Icon_SPU grass_iconTop ;
Icon_SPU grass_iconSnowSide ;
Icon_SPU grass_iconSideOverlay ;
Icon_SPU ironFence_EdgeTexture ;
Icon_SPU thinGlass_EdgeTexture ;
Icon_SPU farmTile_Wet ;
Icon_SPU farmTile_Dry ;
Icon_SPU doorTile_Icons [ 8 ] ;
Icon_SPU tallGrass_Icons [ 3 ] ;
Icon_SPU sandStone_icons [ 3 ] ;
Icon_SPU sandStone_iconTop ;
Icon_SPU sandStone_iconBottom ;
Icon_SPU woodTile_icons [ 4 ] ;
Icon_SPU treeTile_icons [ 4 ] ;
Icon_SPU treeTile_iconTop ;
Icon_SPU leafTile_icons [ 2 ] [ 4 ] ;
bool leafTile_allowSame ;
int leafTile_fancyTextureSet ;
Icon_SPU cropTile_icons [ 8 ] ;
Icon_SPU furnaceTile_iconTop ;
Icon_SPU furnaceTile_iconFront ;
Icon_SPU furnaceTile_iconFront_lit ;
Icon_SPU liquidTile_iconWaterStill ;
Icon_SPU liquidTile_iconWaterFlow ;
Icon_SPU liquidTile_iconLavaStill ;
Icon_SPU liquidTile_iconLavaFlow ;
Icon_SPU fireTile_icons [ 2 ] ;
Icon_SPU sapling_icons [ 4 ] ;
bool glassTile_allowSame ;
bool iceTile_allowSame ;
Icon_SPU dispenserTile_iconTop ;
Icon_SPU dispenserTile_iconFront ;
Icon_SPU dispenserTile_iconFrontVertical ;
Icon_SPU railTile_iconTurn ;
Icon_SPU railTile_iconTurnGolden ;
Icon_SPU detectorRailTile_icons [ 2 ] ;
Icon_SPU tntTile_iconBottom ;
Icon_SPU tntTile_iconTop ;
Icon_SPU workBench_iconTop ;
Icon_SPU workBench_iconFront ;
Icon_SPU cactusTile_iconTop ;
Icon_SPU cactusTile_iconBottom ;
Icon_SPU recordPlayer_iconTop ;
Icon_SPU pumpkinTile_iconTop ;
Icon_SPU pumpkinTile_iconFace ;
Icon_SPU pumpkinTile_iconFaceLit ;
Icon_SPU cakeTile_iconTop ;
Icon_SPU cakeTile_iconBottom ;
Icon_SPU cakeTile_iconInner ;
Icon_SPU smoothStoneBrick_icons [ 4 ] ;
Icon_SPU hugeMushroom_icons [ 2 ] ;
Icon_SPU hugeMushroom_iconStem ;
Icon_SPU hugeMushroom_iconInside ;
Icon_SPU melonTile_iconTop ;
Icon_SPU stemTile_iconAngled ;
Icon_SPU mycelTile_iconTop ;
Icon_SPU mycelTile_iconSnowSide ;
Icon_SPU netherStalk_icons [ 3 ] ;
Icon_SPU enchantmentTable_iconTop ;
Icon_SPU enchantmentTable_iconBottom ;
Icon_SPU brewingStand_iconBase ;
Icon_SPU redStoneDust_iconCross ;
Icon_SPU redStoneDust_iconLine ;
Icon_SPU redStoneDust_iconCrossOver ;
Icon_SPU redStoneDust_iconLineOver ;
Icon_SPU clothTile_icons [ 16 ] ;
Icon_SPU stoneSlab_iconSide ;
Icon_SPU carrot_icons [ 4 ] ;
Icon_SPU potato_icons [ 4 ] ;
Icon_SPU anvil_icons [ 3 ] ;
Icon_SPU quartzBlock_icons [ 5 ] ;
Icon_SPU quartzBlock_iconChiseledTop ;
Icon_SPU quartzBlock_iconLinesTop ;
Icon_SPU quartzBlock_iconTop ;
Icon_SPU quartzBlock_iconBottom ;
int anvilPart ; // normally part of the AnvilTile class
unsigned int stemTile_minColour ;
unsigned int stemTile_maxColour ;
unsigned int waterLily_colour ;
unsigned int foliageColor_evergreenColor ;
unsigned int foliageColor_birchColor ;
protected :
// float destroySpeed;
// float explosionResistance;
// bool isInventoryItem;
// bool collectStatistics;
// int m_iMaterial;
// int m_iBaseItemType;
public :
// const SoundType *soundType;
//
// float gravity;
// Material *material;
// float friction;
private :
// unsigned int descriptionId;
// unsigned int useDescriptionId; // 4J Added
//
// wstring m_textureName;
protected :
// Icon *icon;
public :
int getRenderShape ( ) ;
void setShape ( float x0 , float y0 , float z0 , float x1 , float y1 , float z1 ) ;
float getBrightness ( ChunkRebuildData * level , int x , int y , int z ) ;
int getLightColor ( ChunkRebuildData * level , int x , int y , int z ) ; // 4J - brought forward from 1.8.2
bool shouldRenderFace ( ChunkRebuildData * level , int x , int y , int z , int face ) ;
public :
Icon_SPU * getTexture ( ChunkRebuildData * level , int x , int y , int z , int face ) ;
Icon_SPU * getTexture ( int face , int data ) ;
Icon_SPU * getTexture ( int face ) ;
public :
2026-03-08 19:08:36 -04:00
void updateShape ( ChunkRebuildData * level , int x , int y , int z , int forceData = - 1 , TileEntity * forceEntity = nullptr ) ; // 4J added forceData, forceEntity param
2026-03-01 12:16:08 +08:00
double getShapeX0 ( ) ;
double getShapeX1 ( ) ;
double getShapeY0 ( ) ;
double getShapeY1 ( ) ;
double getShapeZ0 ( ) ;
double getShapeZ1 ( ) ;
// int getColor(int auxData);
int getColor ( ChunkRebuildData * level , int x , int y , int z ) ;
float getShadeBrightness ( ChunkRebuildData * level , int x , int y , int z ) ; // 4J - brought forward from 1.8.2
bool hasMaterialLiquid ( ) { return false ; } // material->isLiquid()
} ;
class Tile_SPU
{
public :
static const int SHAPE_INVISIBLE = - 1 ;
static const int SHAPE_BLOCK = 0 ;
static const int SHAPE_CROSS_TEXTURE = 1 ;
static const int SHAPE_TORCH = 2 ;
static const int SHAPE_FIRE = 3 ;
static const int SHAPE_WATER = 4 ;
static const int SHAPE_RED_DUST = 5 ;
static const int SHAPE_ROWS = 6 ;
static const int SHAPE_DOOR = 7 ;
static const int SHAPE_LADDER = 8 ;
static const int SHAPE_RAIL = 9 ;
static const int SHAPE_STAIRS = 10 ;
static const int SHAPE_FENCE = 11 ;
static const int SHAPE_LEVER = 12 ;
static const int SHAPE_CACTUS = 13 ;
static const int SHAPE_BED = 14 ;
static const int SHAPE_DIODE = 15 ;
static const int SHAPE_PISTON_BASE = 16 ;
static const int SHAPE_PISTON_EXTENSION = 17 ;
static const int SHAPE_IRON_FENCE = 18 ;
static const int SHAPE_STEM = 19 ;
static const int SHAPE_VINE = 20 ;
static const int SHAPE_FENCE_GATE = 21 ;
static const int SHAPE_ENTITYTILE_ANIMATED = 22 ;
static const int SHAPE_LILYPAD = 23 ;
static const int SHAPE_CAULDRON = 24 ;
static const int SHAPE_BREWING_STAND = 25 ;
static const int SHAPE_PORTAL_FRAME = 26 ;
static const int SHAPE_EGG = 27 ;
static const int SHAPE_COCOA = 28 ;
static const int SHAPE_TRIPWIRE_SOURCE = 29 ;
static const int SHAPE_TRIPWIRE = 30 ;
static const int SHAPE_TREE = 31 ;
static const int SHAPE_WALL = 32 ;
static const int SHAPE_FLOWER_POT = 33 ;
static const int SHAPE_BEACON = 34 ;
static const int SHAPE_ANVIL = 35 ;
static const int SHAPE_QUARTZ = 39 ;
// 4J - this array of simple constants made so the compiler can optimise references to Ids that were previous of the form Tile_SPU::<whatever>->id, and are now simply Tile_SPU::whatever_Id
static const int rock_Id = 1 ;
static const int grass_Id = 2 ;
static const int dirt_Id = 3 ;
static const int stoneBrick_Id = 4 ;
static const int wood_Id = 5 ;
static const int sapling_Id = 6 ;
static const int unbreakable_Id = 7 ;
static const int water_Id = 8 ;
static const int calmWater_Id = 9 ;
static const int lava_Id = 10 ;
static const int calmLava_Id = 11 ;
static const int sand_Id = 12 ;
static const int gravel_Id = 13 ;
static const int goldOre_Id = 14 ;
static const int ironOre_Id = 15 ;
static const int coalOre_Id = 16 ;
static const int treeTrunk_Id = 17 ;
static const int leaves_Id = 18 ;
static const int sponge_Id = 19 ;
static const int glass_Id = 20 ;
static const int lapisOre_Id = 21 ;
static const int lapisBlock_Id = 22 ;
static const int dispenser_Id = 23 ;
static const int sandStone_Id = 24 ;
static const int musicBlock_Id = 25 ;
static const int bed_Id = 26 ;
static const int goldenRail_Id = 27 ;
static const int detectorRail_Id = 28 ;
static const int pistonStickyBase_Id = 29 ;
static const int web_Id = 30 ;
static const int tallgrass_Id = 31 ;
static const int deadBush_Id = 32 ;
static const int pistonBase_Id = 33 ;
static const int pistonExtensionPiece_Id = 34 ;
static const int cloth_Id = 35 ;
static const int pistonMovingPiece_Id = 36 ;
static const int flower_Id = 37 ;
static const int rose_Id = 38 ;
static const int mushroom1_Id = 39 ;
static const int mushroom2_Id = 40 ;
static const int goldBlock_Id = 41 ;
static const int ironBlock_Id = 42 ;
static const int stoneSlab_Id = 43 ;
static const int stoneSlabHalf_Id = 44 ;
static const int redBrick_Id = 45 ;
static const int tnt_Id = 46 ;
static const int bookshelf_Id = 47 ;
static const int mossStone_Id = 48 ;
static const int obsidian_Id = 49 ;
static const int torch_Id = 50 ;
static const int fire_Id = 51 ;
static const int mobSpawner_Id = 52 ;
static const int stairs_wood_Id = 53 ;
static const int chest_Id = 54 ;
static const int redStoneDust_Id = 55 ;
static const int diamondOre_Id = 56 ;
static const int diamondBlock_Id = 57 ;
static const int workBench_Id = 58 ;
static const int crops_Id = 59 ;
static const int farmland_Id = 60 ;
static const int furnace_Id = 61 ;
static const int furnace_lit_Id = 62 ;
static const int sign_Id = 63 ;
static const int door_wood_Id = 64 ;
static const int ladder_Id = 65 ;
static const int rail_Id = 66 ;
static const int stairs_stone_Id = 67 ;
static const int wallSign_Id = 68 ;
static const int lever_Id = 69 ;
static const int pressurePlate_stone_Id = 70 ;
static const int door_iron_Id = 71 ;
static const int pressurePlate_wood_Id = 72 ;
static const int redStoneOre_Id = 73 ;
static const int redStoneOre_lit_Id = 74 ;
static const int notGate_off_Id = 75 ;
static const int notGate_on_Id = 76 ;
static const int button_stone_Id = 77 ;
static const int topSnow_Id = 78 ;
static const int ice_Id = 79 ;
static const int snow_Id = 80 ;
static const int cactus_Id = 81 ;
static const int clay_Id = 82 ;
static const int reeds_Id = 83 ;
static const int recordPlayer_Id = 84 ;
static const int fence_Id = 85 ;
static const int pumpkin_Id = 86 ;
static const int hellRock_Id = 87 ;
static const int hellSand_Id = 88 ;
static const int lightGem_Id = 89 ;
static const int portalTile_Id = 90 ;
static const int litPumpkin_Id = 91 ;
static const int cake_Id = 92 ;
static const int diode_off_Id = 93 ;
static const int diode_on_Id = 94 ;
static const int aprilFoolsJoke_Id = 95 ;
static const int trapdoor_Id = 96 ;
static const int monsterStoneEgg_Id = 97 ;
static const int stoneBrickSmooth_Id = 98 ;
static const int hugeMushroom1_Id = 99 ;
static const int hugeMushroom2_Id = 100 ;
static const int ironFence_Id = 101 ;
static const int thinGlass_Id = 102 ;
static const int melon_Id = 103 ;
static const int pumpkinStem_Id = 104 ;
static const int melonStem_Id = 105 ;
static const int vine_Id = 106 ;
static const int fenceGate_Id = 107 ;
static const int stairs_bricks_Id = 108 ;
static const int stairs_stoneBrickSmooth_Id = 109 ;
static const int mycel_Id = 110 ;
static const int waterLily_Id = 111 ;
static const int netherBrick_Id = 112 ;
static const int netherFence_Id = 113 ;
static const int stairs_netherBricks_Id = 114 ;
static const int netherStalk_Id = 115 ;
static const int enchantTable_Id = 116 ;
static const int brewingStand_Id = 117 ;
static const int cauldron_Id = 118 ;
static const int endPortalTile_Id = 119 ;
static const int endPortalFrameTile_Id = 120 ;
static const int whiteStone_Id = 121 ;
static const int dragonEgg_Id = 122 ;
static const int redstoneLight_Id = 123 ;
static const int redstoneLight_lit_Id = 124 ;
static const int woodSlab_Id = 125 ;
static const int woodSlabHalf_Id = 126 ;
static const int cocoa_Id = 127 ;
static const int stairs_sandstone_Id = 128 ;
static const int stairs_sprucewood_Id = 134 ;
static const int stairs_birchwood_Id = 135 ;
static const int stairs_junglewood_Id = 136 ;
static const int emeraldOre_Id = 129 ;
static const int enderChest_Id = 130 ;
static const int tripWireSource_Id = 131 ;
static const int tripWire_Id = 132 ;
static const int emeraldBlock_Id = 133 ;
static const int cobbleWall_Id = 139 ;
static const int flowerPot_Id = 140 ;
static const int carrots_Id = 141 ;
static const int potatoes_Id = 142 ;
static const int anvil_Id = 145 ;
static const int button_wood_Id = 143 ;
static const int skull_Id = 144 ;
static const int netherQuartz_Id = 153 ;
static const int quartzBlock_Id = 155 ;
static const int stairs_quartz_Id = 156 ;
static const int woolCarpet_Id = 171 ;
static Tile_SPU m_tiles [ 256 ] ;
Tile_SPU ( ) { id = - 1 ; }
Tile_SPU ( int tileID ) { id = tileID ; }
virtual ~ Tile_SPU ( ) { }
double getShapeX0 ( ) { return ms_pTileData - > xx0 [ id ] ; }
double getShapeX1 ( ) { return ms_pTileData - > xx1 [ id ] ; }
double getShapeY0 ( ) { return ms_pTileData - > yy0 [ id ] ; }
double getShapeY1 ( ) { return ms_pTileData - > yy1 [ id ] ; }
double getShapeZ0 ( ) { return ms_pTileData - > zz0 [ id ] ; }
double getShapeZ1 ( ) { return ms_pTileData - > zz1 [ id ] ; }
Material_SPU * getMaterial ( ) ;
2026-03-08 19:08:36 -04:00
virtual void updateShape ( ChunkRebuildData * level , int x , int y , int z , int forceData = - 1 , TileEntity * forceEntity = nullptr ) ; // 4J added forceData, forceEntity param
2026-03-01 12:16:08 +08:00
virtual void updateDefaultShape ( ) ;
virtual void setShape ( float x0 , float y0 , float z0 , float x1 , float y1 , float z1 ) ;
virtual float getBrightness ( ChunkRebuildData * level , int x , int y , int z ) ;
virtual int getLightColor ( ChunkRebuildData * level , int x , int y , int z ) ; // 4J - brought forward from 1.8.2
virtual bool shouldRenderFace ( ChunkRebuildData * level , int x , int y , int z , int face ) ;
virtual int getRenderShape ( ) ;
virtual int getColor ( ChunkRebuildData * level , int x , int y , int z ) ;
virtual float getShadeBrightness ( ChunkRebuildData * level , int x , int y , int z ) ; // 4J - brought forward from 1.8.2
virtual bool isSolidRender ( bool isServerLevel = false ) ;
virtual bool isSolidFace ( ChunkRebuildData * level , int x , int y , int z , int face ) ;
virtual int getRenderLayer ( ) ;
virtual Icon_SPU * getTexture ( ChunkRebuildData * level , int x , int y , int z , int face ) ;
virtual Icon_SPU * getTexture ( int face , int data ) ;
virtual Icon_SPU * getTexture ( int face ) ;
bool isSignalSource ( ) { return ms_pTileData - > signalSource [ id ] ; }
bool isCubeShaped ( ) { return ms_pTileData - > cubeShaped [ id ] ; }
Icon_SPU * icon ( ) { return & ms_pTileData - > iconData [ id ] ; }
int id ;
static TileData_SPU * ms_pTileData ;
static void initTilePointers ( ) ;
static Tile_SPU * createFromID ( int tileID ) ;
} ;
class TileRef_SPU
{
// because of the way this ref stuff works, we need all the tile classes to be of the same size,
// so make sure no data is added to child classes.
Tile_SPU * m_pTile ;
public :
TileRef_SPU ( int tileID ) { m_pTile = Tile_SPU : : createFromID ( tileID ) ; }
virtual ~ TileRef_SPU ( ) { }
Tile_SPU * operator - > ( ) const { return m_pTile ; }
Tile_SPU * getPtr ( ) { return m_pTile ; }
} ;
//class stoneBrick : public Tile {};