2026-03-01 12:16:08 +08:00
# include "stdafx.h"
# include "net.minecraft.stats.h"
# include "net.minecraft.locale.h"
# include "net.minecraft.world.entity.h"
# include "net.minecraft.world.entity.item.h"
# include "net.minecraft.world.entity.player.h"
# include "net.minecraft.world.item.h"
# include "net.minecraft.world.item.enchantment.h"
# include "net.minecraft.world.level.material.h"
# include "net.minecraft.world.level.tile.h"
# include "net.minecraft.world.level.tile.entity.h"
# include "net.minecraft.world.level.h"
2026-03-03 03:04:10 +08:00
# include "net.minecraft.world.level.redstone.h"
2026-03-01 12:16:08 +08:00
# include "net.minecraft.world.phys.h"
# include "net.minecraft.world.food.h"
# include "net.minecraft.world.h"
# include "net.minecraft.h"
# include "Tile.h"
2026-03-02 17:39:35 +07:00
wstring Tile : : TILE_DESCRIPTION_PREFIX = L " Tile. " ;
2026-03-01 12:16:08 +08:00
const float Tile : : INDESTRUCTIBLE_DESTROY_TIME = - 1.0f ;
Tile : : SoundType * Tile : : SOUND_NORMAL = NULL ;
Tile : : SoundType * Tile : : SOUND_WOOD = NULL ;
Tile : : SoundType * Tile : : SOUND_GRAVEL = NULL ;
2026-03-02 17:39:35 +07:00
Tile : : SoundType * Tile : : SOUND_GRASS = NULL ;
2026-03-01 12:16:08 +08:00
Tile : : SoundType * Tile : : SOUND_STONE = NULL ;
Tile : : SoundType * Tile : : SOUND_METAL = NULL ;
Tile : : SoundType * Tile : : SOUND_GLASS = NULL ;
Tile : : SoundType * Tile : : SOUND_CLOTH = NULL ;
Tile : : SoundType * Tile : : SOUND_SAND = NULL ;
Tile : : SoundType * Tile : : SOUND_SNOW = NULL ;
Tile : : SoundType * Tile : : SOUND_LADDER = NULL ;
Tile : : SoundType * Tile : : SOUND_ANVIL = NULL ;
bool Tile : : solid [ TILE_NUM_COUNT ] ;
int Tile : : lightBlock [ TILE_NUM_COUNT ] ;
bool Tile : : transculent [ TILE_NUM_COUNT ] ;
int Tile : : lightEmission [ TILE_NUM_COUNT ] ;
unsigned char Tile : : _sendTileData [ TILE_NUM_COUNT ] ; // 4J changed - was bool, now bitfield to indicate which bits are important to be sent
bool Tile : : mipmapEnable [ TILE_NUM_COUNT ] ;
bool Tile : : propagate [ TILE_NUM_COUNT ] ;
Tile * * Tile : : tiles = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : stone = NULL ;
2026-03-01 12:16:08 +08:00
GrassTile * Tile : : grass = NULL ;
Tile * Tile : : dirt = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : cobblestone = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : wood = NULL ;
Tile * Tile : : sapling = NULL ;
Tile * Tile : : unbreakable = NULL ;
LiquidTile * Tile : : water = NULL ;
Tile * Tile : : calmWater = NULL ;
LiquidTile * Tile : : lava = NULL ;
Tile * Tile : : calmLava = NULL ;
Tile * Tile : : sand = NULL ;
Tile * Tile : : gravel = NULL ;
Tile * Tile : : goldOre = NULL ;
Tile * Tile : : ironOre = NULL ;
Tile * Tile : : coalOre = NULL ;
Tile * Tile : : treeTrunk = NULL ;
LeafTile * Tile : : leaves = NULL ;
Tile * Tile : : sponge = NULL ;
Tile * Tile : : glass = NULL ;
Tile * Tile : : lapisOre = NULL ;
Tile * Tile : : lapisBlock = NULL ;
Tile * Tile : : dispenser = NULL ;
Tile * Tile : : sandStone = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : noteblock = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : bed = NULL ;
Tile * Tile : : goldenRail = NULL ;
Tile * Tile : : detectorRail = NULL ;
PistonBaseTile * Tile : : pistonStickyBase = NULL ;
Tile * Tile : : web = NULL ;
TallGrass * Tile : : tallgrass = NULL ;
DeadBushTile * Tile : : deadBush = NULL ;
PistonBaseTile * Tile : : pistonBase = NULL ;
PistonExtensionTile * Tile : : pistonExtension = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : wool = NULL ;
2026-03-01 12:16:08 +08:00
PistonMovingPiece * Tile : : pistonMovingPiece = NULL ;
Bush * Tile : : flower = NULL ;
Bush * Tile : : rose = NULL ;
2026-03-03 03:04:10 +08:00
Bush * Tile : : mushroom_brown = NULL ;
Bush * Tile : : mushroom_red = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : goldBlock = NULL ;
Tile * Tile : : ironBlock = NULL ;
HalfSlabTile * Tile : : stoneSlab = NULL ;
HalfSlabTile * Tile : : stoneSlabHalf = NULL ;
Tile * Tile : : redBrick = NULL ;
Tile * Tile : : tnt = NULL ;
Tile * Tile : : bookshelf = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : mossyCobblestone = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : obsidian = NULL ;
Tile * Tile : : torch = NULL ;
FireTile * Tile : : fire = NULL ;
Tile * Tile : : mobSpawner = NULL ;
Tile * Tile : : stairs_wood = NULL ;
ChestTile * Tile : : chest = NULL ;
RedStoneDustTile * Tile : : redStoneDust = NULL ;
Tile * Tile : : diamondOre = NULL ;
Tile * Tile : : diamondBlock = NULL ;
Tile * Tile : : workBench = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : wheat = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : farmland = NULL ;
Tile * Tile : : furnace = NULL ;
Tile * Tile : : furnace_lit = NULL ;
Tile * Tile : : sign = NULL ;
Tile * Tile : : door_wood = NULL ;
Tile * Tile : : ladder = NULL ;
Tile * Tile : : rail = NULL ;
Tile * Tile : : stairs_stone = NULL ;
Tile * Tile : : wallSign = NULL ;
Tile * Tile : : lever = NULL ;
Tile * Tile : : pressurePlate_stone = NULL ;
Tile * Tile : : door_iron = NULL ;
Tile * Tile : : pressurePlate_wood = NULL ;
Tile * Tile : : redStoneOre = NULL ;
Tile * Tile : : redStoneOre_lit = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : redstoneTorch_off = NULL ;
Tile * Tile : : redstoneTorch_on = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : button = NULL ;
Tile * Tile : : topSnow = NULL ;
Tile * Tile : : ice = NULL ;
Tile * Tile : : snow = NULL ;
Tile * Tile : : cactus = NULL ;
Tile * Tile : : clay = NULL ;
Tile * Tile : : reeds = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : jukebox = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : fence = NULL ;
Tile * Tile : : pumpkin = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : netherRack = NULL ;
Tile * Tile : : soulsand = NULL ;
Tile * Tile : : glowstone = NULL ;
2026-03-01 12:16:08 +08:00
PortalTile * Tile : : portalTile = NULL ;
Tile * Tile : : litPumpkin = NULL ;
Tile * Tile : : cake = NULL ;
RepeaterTile * Tile : : diode_off = NULL ;
RepeaterTile * Tile : : diode_on = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : stained_glass = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : trapdoor = NULL ;
Tile * Tile : : monsterStoneEgg = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : stoneBrick = NULL ;
Tile * Tile : : hugeMushroom_brown = NULL ;
Tile * Tile : : hugeMushroom_red = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : ironFence = NULL ;
Tile * Tile : : thinGlass = NULL ;
Tile * Tile : : melon = NULL ;
Tile * Tile : : pumpkinStem = NULL ;
Tile * Tile : : melonStem = NULL ;
Tile * Tile : : vine = NULL ;
Tile * Tile : : fenceGate = NULL ;
Tile * Tile : : stairs_bricks = NULL ;
Tile * Tile : : stairs_stoneBrickSmooth = NULL ;
MycelTile * Tile : : mycel = NULL ;
Tile * Tile : : waterLily = NULL ;
Tile * Tile : : netherBrick = NULL ;
Tile * Tile : : netherFence = NULL ;
Tile * Tile : : stairs_netherBricks = NULL ;
Tile * Tile : : netherStalk = NULL ;
Tile * Tile : : enchantTable = NULL ;
Tile * Tile : : brewingStand = NULL ;
CauldronTile * Tile : : cauldron = NULL ;
Tile * Tile : : endPortalTile = NULL ;
Tile * Tile : : endPortalFrameTile = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : endStone = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : dragonEgg = NULL ;
Tile * Tile : : redstoneLight = NULL ;
Tile * Tile : : redstoneLight_lit = NULL ;
// TU9
Tile * Tile : : stairs_sandstone = NULL ;
Tile * Tile : : woodStairsDark = NULL ;
Tile * Tile : : woodStairsBirch = NULL ;
Tile * Tile : : woodStairsJungle = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : commandBlock = NULL ;
BeaconTile * Tile : : beacon = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : button_wood = NULL ;
HalfSlabTile * Tile : : woodSlab = NULL ;
HalfSlabTile * Tile : : woodSlabHalf = NULL ;
Tile * Tile : : emeraldOre = NULL ;
Tile * Tile : : enderChest = NULL ;
TripWireSourceTile * Tile : : tripWireSource = NULL ;
Tile * Tile : : tripWire = NULL ;
Tile * Tile : : emeraldBlock = NULL ;
2026-03-03 03:04:10 +08:00
2026-03-01 12:16:08 +08:00
Tile * Tile : : cocoa = NULL ;
Tile * Tile : : skull = NULL ;
Tile * Tile : : cobbleWall = NULL ;
Tile * Tile : : flowerPot = NULL ;
Tile * Tile : : carrots = NULL ;
Tile * Tile : : potatoes = NULL ;
Tile * Tile : : anvil = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : chest_trap = NULL ;
Tile * Tile : : weightedPlate_light = NULL ;
Tile * Tile : : weightedPlate_heavy = NULL ;
ComparatorTile * Tile : : comparator_off = NULL ;
ComparatorTile * Tile : : comparator_on = NULL ;
DaylightDetectorTile * Tile : : daylightDetector = NULL ;
Tile * Tile : : redstoneBlock = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : netherQuartz = NULL ;
2026-03-03 03:04:10 +08:00
HopperTile * Tile : : hopper = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : quartzBlock = NULL ;
Tile * Tile : : stairs_quartz = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : activatorRail = NULL ;
Tile * Tile : : dropper = NULL ;
Tile * Tile : : clayHardened_colored = NULL ;
Tile * Tile : : stained_glass_pane = NULL ;
2026-03-01 12:16:08 +08:00
2026-03-03 03:04:10 +08:00
Tile * Tile : : hayBlock = NULL ;
2026-03-01 12:16:08 +08:00
Tile * Tile : : woolCarpet = NULL ;
2026-03-03 03:04:10 +08:00
Tile * Tile : : clayHardened = NULL ;
Tile * Tile : : coalBlock = NULL ;
2026-03-01 12:16:08 +08:00
DWORD Tile : : tlsIdxShape = TlsAlloc ( ) ;
Tile : : ThreadStorage : : ThreadStorage ( )
{
xx0 = yy0 = zz0 = xx1 = yy1 = zz1 = 0.0 ;
tileId = 0 ;
}
void Tile : : CreateNewThreadStorage ( )
{
ThreadStorage * tls = new ThreadStorage ( ) ;
TlsSetValue ( Tile : : tlsIdxShape , tls ) ;
}
void Tile : : ReleaseThreadStorage ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
delete tls ;
}
void Tile : : staticCtor ( )
{
Tile : : SOUND_NORMAL = new Tile : : SoundType ( eMaterialSoundType_STONE , 1 , 1 ) ;
Tile : : SOUND_WOOD = new Tile : : SoundType ( eMaterialSoundType_WOOD , 1 , 1 ) ;
Tile : : SOUND_GRAVEL = new Tile : : SoundType ( eMaterialSoundType_GRAVEL , 1 , 1 ) ;
Tile : : SOUND_GRASS = new Tile : : SoundType ( eMaterialSoundType_GRASS , 1 , 1 ) ;
Tile : : SOUND_STONE = new Tile : : SoundType ( eMaterialSoundType_STONE , 1 , 1 ) ;
Tile : : SOUND_METAL = new Tile : : SoundType ( eMaterialSoundType_STONE , 1 , 1.5f ) ;
Tile : : SOUND_GLASS = new Tile : : SoundType ( eMaterialSoundType_STONE , 1 , 1 , eSoundType_RANDOM_GLASS , eSoundType_STEP_STONE ) ;
Tile : : SOUND_CLOTH = new Tile : : SoundType ( eMaterialSoundType_CLOTH , 1 , 1 ) ;
Tile : : SOUND_SAND = new Tile : : SoundType ( eMaterialSoundType_SAND , 1 , 1 ) ;
Tile : : SOUND_SNOW = new Tile : : SoundType ( eMaterialSoundType_SNOW , 1 , 1 ) ;
Tile : : SOUND_LADDER = new Tile : : SoundType ( eMaterialSoundType_LADDER , 1 , 1 , eSoundType_DIG_WOOD ) ;
Tile : : SOUND_ANVIL = new Tile : : SoundType ( eMaterialSoundType_ANVIL , 0.3f , 1 , eSoundType_DIG_STONE , eSoundType_RANDOM_ANVIL_LAND ) ;
Tile : : tiles = new Tile * [ TILE_NUM_COUNT ] ;
memset ( tiles , 0 , sizeof ( Tile * ) * TILE_NUM_COUNT ) ;
2026-03-03 03:04:10 +08:00
Tile : : stone = ( new StoneTile ( 1 ) ) - > setDestroyTime ( 1.5f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " stone " ) - > setDescriptionId ( IDS_TILE_STONE ) - > setUseDescriptionId ( IDS_DESC_STONE ) ;
Tile : : grass = ( GrassTile * ) ( new GrassTile ( 2 ) ) - > setDestroyTime ( 0.6f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " grass " ) - > setDescriptionId ( IDS_TILE_GRASS ) - > setUseDescriptionId ( IDS_DESC_GRASS ) ;
Tile : : dirt = ( new DirtTile ( 3 ) ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_GRAVEL ) - > setIconName ( L " dirt " ) - > setDescriptionId ( IDS_TILE_DIRT ) - > setUseDescriptionId ( IDS_DESC_DIRT ) ;
Tile : : cobblestone = ( new Tile ( 4 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_stone ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " cobblestone " ) - > setDescriptionId ( IDS_TILE_STONE_BRICK ) - > setUseDescriptionId ( IDS_DESC_STONE_BRICK ) ;
Tile : : wood = ( new WoodTile ( 5 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structwoodstuff , Item : : eMaterial_wood ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " planks " ) - > setDescriptionId ( IDS_TILE_OAKWOOD_PLANKS ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_WOODENPLANKS ) ;
Tile : : sapling = ( new Sapling ( 6 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " sapling " ) - > setDescriptionId ( IDS_TILE_SAPLING ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_SAPLING ) - > disableMipmap ( ) ;
Tile : : unbreakable = ( new Tile ( 7 , Material : : stone ) ) - > setIndestructible ( ) - > setExplodeable ( 6000000 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " bedrock " ) - > setDescriptionId ( IDS_TILE_BEDROCK ) - > setNotCollectStatistics ( ) - > setUseDescriptionId ( IDS_DESC_BEDROCK ) ;
Tile : : water = ( LiquidTile * ) ( new LiquidTileDynamic ( 8 , Material : : water ) ) - > setDestroyTime ( 100.0f ) - > setLightBlock ( 3 ) - > setIconName ( L " water_flow " ) - > setDescriptionId ( IDS_TILE_WATER ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_WATER ) ;
Tile : : calmWater = ( new LiquidTileStatic ( 9 , Material : : water ) ) - > setDestroyTime ( 100.0f ) - > setLightBlock ( 3 ) - > setIconName ( L " water_still " ) - > setDescriptionId ( IDS_TILE_WATER ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_WATER ) ;
Tile : : lava = ( LiquidTile * ) ( new LiquidTileDynamic ( 10 , Material : : lava ) ) - > setDestroyTime ( 00.0f ) - > setLightEmission ( 1.0f ) - > setLightBlock ( 255 ) - > setIconName ( L " lava_flow " ) - > setDescriptionId ( IDS_TILE_LAVA ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_LAVA ) ;
Tile : : calmLava = ( new LiquidTileStatic ( 11 , Material : : lava ) ) - > setDestroyTime ( 100.0f ) - > setLightEmission ( 1.0f ) - > setLightBlock ( 255 ) - > setIconName ( L " lava_still " ) - > setDescriptionId ( IDS_TILE_LAVA ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_LAVA ) ;
Tile : : sand = ( new HeavyTile ( 12 ) ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_SAND ) - > setIconName ( L " sand " ) - > setDescriptionId ( IDS_TILE_SAND ) - > setUseDescriptionId ( IDS_DESC_SAND ) ;
Tile : : gravel = ( new GravelTile ( 13 ) ) - > setDestroyTime ( 0.6f ) - > setSoundType ( Tile : : SOUND_GRAVEL ) - > setIconName ( L " gravel " ) - > setDescriptionId ( IDS_TILE_GRAVEL ) - > setUseDescriptionId ( IDS_DESC_GRAVEL ) ;
Tile : : goldOre = ( new OreTile ( 14 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " gold_ore " ) - > setDescriptionId ( IDS_TILE_ORE_GOLD ) - > setUseDescriptionId ( IDS_DESC_ORE_GOLD ) ;
Tile : : ironOre = ( new OreTile ( 15 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " iron_ore " ) - > setDescriptionId ( IDS_TILE_ORE_IRON ) - > setUseDescriptionId ( IDS_DESC_ORE_IRON ) ;
Tile : : coalOre = ( new OreTile ( 16 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " coal_ore " ) - > setDescriptionId ( IDS_TILE_ORE_COAL ) - > setUseDescriptionId ( IDS_DESC_ORE_COAL ) ;
Tile : : treeTrunk = ( new TreeTile ( 17 ) ) - > setDestroyTime ( 2.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " log " ) - > setDescriptionId ( IDS_TILE_LOG ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_LOG ) ;
2026-03-01 12:16:08 +08:00
// 4J - for leaves, have specified that only the data bits that encode the type of leaf are important to be sent
2026-03-03 03:04:10 +08:00
Tile : : leaves = ( LeafTile * ) ( new LeafTile ( 18 ) ) - > setDestroyTime ( 0.2f ) - > setLightBlock ( 1 ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " leaves " ) - > setDescriptionId ( IDS_TILE_LEAVES ) - > sendTileData ( LeafTile : : LEAF_TYPE_MASK ) - > setUseDescriptionId ( IDS_DESC_LEAVES ) ;
Tile : : sponge = ( new Sponge ( 19 ) ) - > setDestroyTime ( 0.6f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " sponge " ) - > setDescriptionId ( IDS_TILE_SPONGE ) - > setUseDescriptionId ( IDS_DESC_SPONGE ) ;
Tile : : glass = ( new GlassTile ( 20 , Material : : glass , false ) ) - > setDestroyTime ( 0.3f ) - > setSoundType ( Tile : : SOUND_GLASS ) - > setIconName ( L " glass " ) - > setDescriptionId ( IDS_TILE_GLASS ) - > setUseDescriptionId ( IDS_DESC_GLASS ) ;
Tile : : lapisOre = ( new OreTile ( 21 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " lapis_ore " ) - > setDescriptionId ( IDS_TILE_ORE_LAPIS ) - > setUseDescriptionId ( IDS_DESC_ORE_LAPIS ) ;
Tile : : lapisBlock = ( new Tile ( 22 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_lapis ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " lapis_block " ) - > setDescriptionId ( IDS_TILE_BLOCK_LAPIS ) - > setUseDescriptionId ( IDS_DESC_BLOCK_LAPIS ) ;
Tile : : dispenser = ( new DispenserTile ( 23 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_redstoneContainer , Item : : eMaterial_undefined ) - > setDestroyTime ( 3.5f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " dispenser " ) - > setDescriptionId ( IDS_TILE_DISPENSER ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_DISPENSER ) ;
Tile : : sandStone = ( new SandStoneTile ( 24 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_sand ) - > setSoundType ( Tile : : SOUND_STONE ) - > setDestroyTime ( 0.8f ) - > sendTileData ( ) - > setIconName ( L " sandstone " ) - > setDescriptionId ( IDS_TILE_SANDSTONE ) - > setUseDescriptionId ( IDS_DESC_SANDSTONE ) - > sendTileData ( ) ;
Tile : : noteblock = ( new NoteBlockTile ( 25 ) ) - > setDestroyTime ( 0.8f ) - > setIconName ( L " noteblock " ) - > setDescriptionId ( IDS_TILE_MUSIC_BLOCK ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_NOTEBLOCK ) ;
Tile : : bed = ( new BedTile ( 26 ) ) - > setDestroyTime ( 0.2f ) - > setIconName ( L " bed " ) - > setDescriptionId ( IDS_TILE_BED ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_BED ) ;
Tile : : goldenRail = ( new PoweredRailTile ( 27 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_rail , Item : : eMaterial_gold ) - > setDestroyTime ( 0.7f ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " rail_golden " ) - > setDescriptionId ( IDS_TILE_GOLDEN_RAIL ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_POWEREDRAIL ) - > disableMipmap ( ) ;
Tile : : detectorRail = ( new DetectorRailTile ( 28 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_rail , Item : : eMaterial_detector ) - > setDestroyTime ( 0.7f ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " rail_detector " ) - > setDescriptionId ( IDS_TILE_DETECTOR_RAIL ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_DETECTORRAIL ) - > disableMipmap ( ) ;
Tile : : pistonStickyBase = ( PistonBaseTile * ) ( new PistonBaseTile ( 29 , true ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_piston , Item : : eMaterial_stickypiston ) - > setIconName ( L " pistonStickyBase " ) - > setDescriptionId ( IDS_TILE_PISTON_STICK_BASE ) - > setUseDescriptionId ( IDS_DESC_STICKY_PISTON ) - > sendTileData ( ) ;
Tile : : web = ( new WebTile ( 30 ) ) - > setLightBlock ( 1 ) - > setDestroyTime ( 4.0f ) - > setIconName ( L " web " ) - > setDescriptionId ( IDS_TILE_WEB ) - > setUseDescriptionId ( IDS_DESC_WEB ) ;
Tile : : tallgrass = ( TallGrass * ) ( new TallGrass ( 31 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " tallgrass " ) - > setDescriptionId ( IDS_TILE_TALL_GRASS ) - > setUseDescriptionId ( IDS_DESC_TALL_GRASS ) - > disableMipmap ( ) ;
Tile : : deadBush = ( DeadBushTile * ) ( new DeadBushTile ( 32 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " deadbush " ) - > setDescriptionId ( IDS_TILE_DEAD_BUSH ) - > setUseDescriptionId ( IDS_DESC_DEAD_BUSH ) - > disableMipmap ( ) ;
Tile : : pistonBase = ( PistonBaseTile * ) ( new PistonBaseTile ( 33 , false ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_piston , Item : : eMaterial_piston ) - > setIconName ( L " pistonBase " ) - > setDescriptionId ( IDS_TILE_PISTON_BASE ) - > setUseDescriptionId ( IDS_DESC_PISTON ) - > sendTileData ( ) ;
Tile : : pistonExtension = ( PistonExtensionTile * ) ( new PistonExtensionTile ( 34 ) ) - > setDescriptionId ( IDS_TILE_PISTON_BASE ) - > setUseDescriptionId ( - 1 ) - > sendTileData ( ) ;
Tile : : wool = ( new ColoredTile ( 35 , Material : : cloth ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_cloth , Item : : eMaterial_cloth ) - > setDestroyTime ( 0.8f ) - > setSoundType ( Tile : : SOUND_CLOTH ) - > setIconName ( L " wool_colored " ) - > setDescriptionId ( IDS_TILE_CLOTH ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_WOOL ) ;
2026-03-01 12:16:08 +08:00
Tile : : pistonMovingPiece = ( PistonMovingPiece * ) ( new PistonMovingPiece ( 36 ) ) - > setDescriptionId ( IDS_TILE_PISTON_BASE ) - > setUseDescriptionId ( - 1 ) ;
2026-03-03 03:04:10 +08:00
Tile : : flower = ( Bush * ) ( new Bush ( 37 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " flower_dandelion " ) - > setDescriptionId ( IDS_TILE_FLOWER ) - > setUseDescriptionId ( IDS_DESC_FLOWER ) - > disableMipmap ( ) ;
Tile : : rose = ( Bush * ) ( new Bush ( 38 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " flower_rose " ) - > setDescriptionId ( IDS_TILE_ROSE ) - > setUseDescriptionId ( IDS_DESC_FLOWER ) - > disableMipmap ( ) ;
Tile : : mushroom_brown = ( Bush * ) ( new Mushroom ( 39 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setLightEmission ( 2 / 16.0f ) - > setIconName ( L " mushroom_brown " ) - > setDescriptionId ( IDS_TILE_MUSHROOM ) - > setUseDescriptionId ( IDS_DESC_MUSHROOM ) - > disableMipmap ( ) ;
Tile : : mushroom_red = ( Bush * ) ( new Mushroom ( 40 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " mushroom_red " ) - > setDescriptionId ( IDS_TILE_MUSHROOM ) - > setUseDescriptionId ( IDS_DESC_MUSHROOM ) - > disableMipmap ( ) ;
Tile : : goldBlock = ( new MetalTile ( 41 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_gold ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " gold_block " ) - > setDescriptionId ( IDS_TILE_BLOCK_GOLD ) - > setUseDescriptionId ( IDS_DESC_BLOCK_GOLD ) ;
Tile : : ironBlock = ( new MetalTile ( 42 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_iron ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " iron_block " ) - > setDescriptionId ( IDS_TILE_BLOCK_IRON ) - > setUseDescriptionId ( IDS_DESC_BLOCK_IRON ) ;
Tile : : stoneSlab = ( HalfSlabTile * ) ( new StoneSlabTile ( Tile : : stoneSlab_Id , true ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_slab , Item : : eMaterial_stone ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " stoneSlab " ) - > setDescriptionId ( IDS_TILE_STONESLAB ) - > setUseDescriptionId ( IDS_DESC_SLAB ) ;
Tile : : stoneSlabHalf = ( HalfSlabTile * ) ( new StoneSlabTile ( Tile : : stoneSlabHalf_Id , false ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_halfslab , Item : : eMaterial_stone ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " stoneSlab " ) - > setDescriptionId ( IDS_TILE_STONESLAB ) - > setUseDescriptionId ( IDS_DESC_HALFSLAB ) ;
Tile : : redBrick = ( new Tile ( 45 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_brick ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " brick " ) - > setDescriptionId ( IDS_TILE_BRICK ) - > setUseDescriptionId ( IDS_DESC_BRICK ) ;
Tile : : tnt = ( new TntTile ( 46 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " tnt " ) - > setDescriptionId ( IDS_TILE_TNT ) - > setUseDescriptionId ( IDS_DESC_TNT ) ;
Tile : : bookshelf = ( new BookshelfTile ( 47 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_paper , Item : : eMaterial_bookshelf ) - > setDestroyTime ( 1.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " bookshelf " ) - > setDescriptionId ( IDS_TILE_BOOKSHELF ) - > setUseDescriptionId ( IDS_DESC_BOOKSHELF ) ;
Tile : : mossyCobblestone = ( new Tile ( 48 , Material : : stone ) ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " cobblestone_mossy " ) - > setDescriptionId ( IDS_TILE_STONE_MOSS ) - > setUseDescriptionId ( IDS_DESC_MOSS_STONE ) ;
Tile : : obsidian = ( new ObsidianTile ( 49 ) ) - > setDestroyTime ( 50.0f ) - > setExplodeable ( 2000 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " obsidian " ) - > setDescriptionId ( IDS_TILE_OBSIDIAN ) - > setUseDescriptionId ( IDS_DESC_OBSIDIAN ) ;
Tile : : torch = ( new TorchTile ( 50 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_torch , Item : : eMaterial_wood ) - > setDestroyTime ( 0.0f ) - > setLightEmission ( 15 / 16.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " torch_on " ) - > setDescriptionId ( IDS_TILE_TORCH ) - > setUseDescriptionId ( IDS_DESC_TORCH ) - > disableMipmap ( ) ;
Tile : : fire = ( FireTile * ) ( ( new FireTile ( 51 ) ) - > setDestroyTime ( 0.0f ) - > setLightEmission ( 1.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) ) - > setIconName ( L " fire " ) - > setDescriptionId ( IDS_TILE_FIRE ) - > setNotCollectStatistics ( ) - > setUseDescriptionId ( - 1 ) ;
Tile : : mobSpawner = ( new MobSpawnerTile ( 52 ) ) - > setDestroyTime ( 5.0f ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " mob_spawner " ) - > setDescriptionId ( IDS_TILE_MOB_SPAWNER ) - > setNotCollectStatistics ( ) - > setUseDescriptionId ( IDS_DESC_MOB_SPAWNER ) ;
Tile : : stairs_wood = ( new StairTile ( 53 , Tile : : wood , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_wood ) - > setIconName ( L " stairsWood " ) - > setDescriptionId ( IDS_TILE_STAIRS_WOOD ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : chest = ( ChestTile * ) ( new ChestTile ( 54 , ChestTile : : TYPE_BASIC ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_chest , Item : : eMaterial_wood ) - > setDestroyTime ( 2.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " chest " ) - > setDescriptionId ( IDS_TILE_CHEST ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_CHEST ) ;
Tile : : redStoneDust = ( RedStoneDustTile * ) ( new RedStoneDustTile ( 55 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_NORMAL ) - > setIconName ( L " redstone_dust " ) - > setDescriptionId ( IDS_TILE_REDSTONE_DUST ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_REDSTONE_DUST ) ;
Tile : : diamondOre = ( new OreTile ( 56 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " diamond_ore " ) - > setDescriptionId ( IDS_TILE_ORE_DIAMOND ) - > setUseDescriptionId ( IDS_DESC_ORE_DIAMOND ) ;
Tile : : diamondBlock = ( new MetalTile ( 57 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_diamond ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " diamond_block " ) - > setDescriptionId ( IDS_TILE_BLOCK_DIAMOND ) - > setUseDescriptionId ( IDS_DESC_BLOCK_DIAMOND ) ;
Tile : : workBench = ( new WorkbenchTile ( 58 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_device , Item : : eMaterial_wood ) - > setDestroyTime ( 2.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " crafting_table " ) - > setDescriptionId ( IDS_TILE_WORKBENCH ) - > setUseDescriptionId ( IDS_DESC_CRAFTINGTABLE ) ;
Tile : : wheat = ( new CropTile ( 59 ) ) - > setIconName ( L " wheat " ) - > setDescriptionId ( IDS_TILE_CROPS ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_CROPS ) - > disableMipmap ( ) ;
Tile : : farmland = ( new FarmTile ( 60 ) ) - > setDestroyTime ( 0.6f ) - > setSoundType ( Tile : : SOUND_GRAVEL ) - > setIconName ( L " farmland " ) - > setDescriptionId ( IDS_TILE_FARMLAND ) - > setUseDescriptionId ( IDS_DESC_FARMLAND ) - > sendTileData ( ) ;
Tile : : furnace = ( new FurnaceTile ( 61 , false ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_device , Item : : eMaterial_stone ) - > setDestroyTime ( 3.5f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " furnace " ) - > setDescriptionId ( IDS_TILE_FURNACE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_FURNACE ) ;
Tile : : furnace_lit = ( new FurnaceTile ( 62 , true ) ) - > setDestroyTime ( 3.5f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setLightEmission ( 14 / 16.0f ) - > setIconName ( L " furnace " ) - > setDescriptionId ( IDS_TILE_FURNACE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_FURNACE ) ;
Tile : : sign = ( new SignTile ( 63 , eTYPE_SIGNTILEENTITY , true ) ) - > setDestroyTime ( 1.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " sign " ) - > setDescriptionId ( IDS_TILE_SIGN ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_SIGN ) ;
Tile : : door_wood = ( new DoorTile ( 64 , Material : : wood ) ) - > setDestroyTime ( 3.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " door_wood " ) - > setDescriptionId ( IDS_TILE_DOOR_WOOD ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_DOOR_WOOD ) ;
Tile : : ladder = ( new LadderTile ( 65 ) ) - > setDestroyTime ( 0.4f ) - > setSoundType ( Tile : : SOUND_LADDER ) - > setIconName ( L " ladder " ) - > setDescriptionId ( IDS_TILE_LADDER ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_LADDER ) - > disableMipmap ( ) ;
Tile : : rail = ( new RailTile ( 66 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_rail , Item : : eMaterial_iron ) - > setDestroyTime ( 0.7f ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " rail_normal " ) - > setDescriptionId ( IDS_TILE_RAIL ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_RAIL ) - > disableMipmap ( ) ;
Tile : : stairs_stone = ( new StairTile ( 67 , Tile : : cobblestone , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_stone ) - > setIconName ( L " stairsStone " ) - > setDescriptionId ( IDS_TILE_STAIRS_STONE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : wallSign = ( new SignTile ( 68 , eTYPE_SIGNTILEENTITY , false ) ) - > setDestroyTime ( 1.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " sign " ) - > setDescriptionId ( IDS_TILE_SIGN ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_SIGN ) ;
Tile : : lever = ( new LeverTile ( 69 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_lever , Item : : eMaterial_wood ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " lever " ) - > setDescriptionId ( IDS_TILE_LEVER ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_LEVER ) ;
Tile : : pressurePlate_stone = ( Tile * ) ( new PressurePlateTile ( 70 , L " stone " , Material : : stone , PressurePlateTile : : mobs ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_pressureplate , Item : : eMaterial_stone ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setDescriptionId ( IDS_TILE_PRESSURE_PLATE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_PRESSUREPLATE ) ;
Tile : : door_iron = ( new DoorTile ( 71 , Material : : metal ) ) - > setDestroyTime ( 5.0f ) - > setSoundType ( Tile : : SOUND_METAL ) - > setIconName ( L " door_iron " ) - > setDescriptionId ( IDS_TILE_DOOR_IRON ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_DOOR_IRON ) ;
Tile : : pressurePlate_wood = ( new PressurePlateTile ( 72 , L " planks_oak " , Material : : wood , PressurePlateTile : : everything ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_pressureplate , Item : : eMaterial_wood ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setDescriptionId ( IDS_TILE_PRESSURE_PLATE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_PRESSUREPLATE ) ;
Tile : : redStoneOre = ( new RedStoneOreTile ( 73 , false ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " redstone_ore " ) - > setDescriptionId ( IDS_TILE_ORE_REDSTONE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_ORE_REDSTONE ) ;
Tile : : redStoneOre_lit = ( new RedStoneOreTile ( 74 , true ) ) - > setLightEmission ( 10 / 16.0f ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " redstone_ore " ) - > setDescriptionId ( IDS_TILE_ORE_REDSTONE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_ORE_REDSTONE ) ;
Tile : : redstoneTorch_off = ( new NotGateTile ( 75 , false ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " redstone_torch_off " ) - > setDescriptionId ( IDS_TILE_NOT_GATE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_REDSTONETORCH ) - > disableMipmap ( ) ;
Tile : : redstoneTorch_on = ( new NotGateTile ( 76 , true ) ) - > setDestroyTime ( 0.0f ) - > setLightEmission ( 8 / 16.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " redstone_torch_on " ) - > setDescriptionId ( IDS_TILE_NOT_GATE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_REDSTONETORCH ) - > disableMipmap ( ) ;
Tile : : button = ( new StoneButtonTile ( 77 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_button , Item : : eMaterial_stone ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " button " ) - > setDescriptionId ( IDS_TILE_BUTTON ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_BUTTON ) ;
Tile : : topSnow = ( new TopSnowTile ( 78 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_snow ) - > setDestroyTime ( 0.1f ) - > setSoundType ( Tile : : SOUND_SNOW ) - > setIconName ( L " snow " ) - > setDescriptionId ( IDS_TILE_SNOW ) - > setUseDescriptionId ( IDS_DESC_TOP_SNOW ) - > sendTileData ( ) - > setLightBlock ( 0 ) ;
Tile : : ice = ( new IceTile ( 79 ) ) - > setDestroyTime ( 0.5f ) - > setLightBlock ( 3 ) - > setSoundType ( Tile : : SOUND_GLASS ) - > setIconName ( L " ice " ) - > setDescriptionId ( IDS_TILE_ICE ) - > setUseDescriptionId ( IDS_DESC_ICE ) ;
Tile : : snow = ( new SnowTile ( 80 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_snow ) - > setDestroyTime ( 0.2f ) - > setSoundType ( Tile : : SOUND_CLOTH ) - > setIconName ( L " snow " ) - > setDescriptionId ( IDS_TILE_SNOW ) - > setUseDescriptionId ( IDS_DESC_SNOW ) ;
Tile : : cactus = ( new CactusTile ( 81 ) ) - > setDestroyTime ( 0.4f ) - > setSoundType ( Tile : : SOUND_CLOTH ) - > setIconName ( L " cactus " ) - > setDescriptionId ( IDS_TILE_CACTUS ) - > setUseDescriptionId ( IDS_DESC_CACTUS ) - > disableMipmap ( ) ;
Tile : : clay = ( new ClayTile ( 82 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_clay ) - > setDestroyTime ( 0.6f ) - > setSoundType ( Tile : : SOUND_GRAVEL ) - > setIconName ( L " clay " ) - > setDescriptionId ( IDS_TILE_CLAY ) - > setUseDescriptionId ( IDS_DESC_CLAY_TILE ) ;
Tile : : reeds = ( new ReedTile ( 83 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_GRASS ) - > setIconName ( L " reeds " ) - > setDescriptionId ( IDS_TILE_REEDS ) - > setNotCollectStatistics ( ) - > setUseDescriptionId ( IDS_DESC_REEDS ) - > disableMipmap ( ) ;
Tile : : jukebox = ( new JukeboxTile ( 84 ) ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " jukebox " ) - > setDescriptionId ( IDS_TILE_JUKEBOX ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_JUKEBOX ) ;
Tile : : fence = ( new FenceTile ( 85 , L " planks_oak " , Material : : wood ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_fence , Item : : eMaterial_wood ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 5 ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setDescriptionId ( IDS_TILE_FENCE ) - > setUseDescriptionId ( IDS_DESC_FENCE ) ;
Tile : : pumpkin = ( new PumpkinTile ( 86 , false ) ) - > setDestroyTime ( 1.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " pumpkin " ) - > setDescriptionId ( IDS_TILE_PUMPKIN ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_PUMPKIN ) ;
Tile : : netherRack = ( new NetherrackTile ( 87 ) ) - > setDestroyTime ( 0.4f ) - > setSoundType ( Tile : : SOUND_STONE ) - > setIconName ( L " netherrack " ) - > setDescriptionId ( IDS_TILE_HELL_ROCK ) - > setUseDescriptionId ( IDS_DESC_HELL_ROCK ) ;
Tile : : soulsand = ( new SoulSandTile ( 88 ) ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_SAND ) - > setIconName ( L " soul_sand " ) - > setDescriptionId ( IDS_TILE_HELL_SAND ) - > setUseDescriptionId ( IDS_DESC_HELL_SAND ) ;
Tile : : glowstone = ( new Glowstonetile ( 89 , Material : : glass ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_torch , Item : : eMaterial_glowstone ) - > setDestroyTime ( 0.3f ) - > setSoundType ( Tile : : SOUND_GLASS ) - > setLightEmission ( 1.0f ) - > setIconName ( L " glowstone " ) - > setDescriptionId ( IDS_TILE_LIGHT_GEM ) - > setUseDescriptionId ( IDS_DESC_GLOWSTONE ) ;
Tile : : portalTile = ( PortalTile * ) ( ( new PortalTile ( 90 ) ) - > setDestroyTime ( - 1 ) - > setSoundType ( Tile : : SOUND_GLASS ) - > setLightEmission ( 0.75f ) ) - > setIconName ( L " portal " ) - > setDescriptionId ( IDS_TILE_PORTAL ) - > setUseDescriptionId ( IDS_DESC_PORTAL ) ;
Tile : : litPumpkin = ( new PumpkinTile ( 91 , true ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_torch , Item : : eMaterial_pumpkin ) - > setDestroyTime ( 1.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setLightEmission ( 1.0f ) - > setIconName ( L " pumpkin " ) - > setDescriptionId ( IDS_TILE_LIT_PUMPKIN ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_JACKOLANTERN ) ;
Tile : : cake = ( new CakeTile ( 92 ) ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_CLOTH ) - > setIconName ( L " cake " ) - > setDescriptionId ( IDS_TILE_CAKE ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_CAKE ) ;
Tile : : diode_off = ( RepeaterTile * ) ( new RepeaterTile ( 93 , false ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " repeater_off " ) - > setDescriptionId ( IDS_ITEM_DIODE ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_REDSTONEREPEATER ) - > disableMipmap ( ) ;
Tile : : diode_on = ( RepeaterTile * ) ( new RepeaterTile ( 94 , true ) ) - > setDestroyTime ( 0.0f ) - > setLightEmission ( 10 / 16.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " repeater_on " ) - > setDescriptionId ( IDS_ITEM_DIODE ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_REDSTONEREPEATER ) - > disableMipmap ( ) ;
Tile : : stained_glass = ( new StainedGlassBlock ( 95 , Material : : glass ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_glass , Item : : eMaterial_glass ) - > setDestroyTime ( 0.3f ) - > setSoundType ( SOUND_GLASS ) - > setIconName ( L " glass " ) - > setDescriptionId ( IDS_TILE_STAINED_GLASS ) - > setUseDescriptionId ( IDS_DESC_STAINED_GLASS ) ;
Tile : : trapdoor = ( new TrapDoorTile ( 96 , Material : : wood ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_door , Item : : eMaterial_trap ) - > setDestroyTime ( 3.0f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " trapdoor " ) - > setDescriptionId ( IDS_TILE_TRAPDOOR ) - > setNotCollectStatistics ( ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_TRAPDOOR ) ;
Tile : : monsterStoneEgg = ( new StoneMonsterTile ( 97 ) ) - > setDestroyTime ( 0.75f ) - > setIconName ( L " monsterStoneEgg " ) - > setDescriptionId ( IDS_TILE_STONE_SILVERFISH ) - > setUseDescriptionId ( IDS_DESC_STONE_SILVERFISH ) ;
Tile : : stoneBrick = ( new SmoothStoneBrickTile ( 98 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_stoneSmooth ) - > setDestroyTime ( 1.5f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " stonebrick " ) - > setDescriptionId ( IDS_TILE_STONE_BRICK_SMOOTH ) - > setUseDescriptionId ( IDS_DESC_STONE_BRICK_SMOOTH ) ;
Tile : : hugeMushroom_brown = ( new HugeMushroomTile ( 99 , Material : : wood , HugeMushroomTile : : MUSHROOM_TYPE_BROWN ) ) - > setDestroyTime ( 0.2f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " mushroom_block " ) - > setDescriptionId ( IDS_TILE_HUGE_MUSHROOM_1 ) - > setUseDescriptionId ( IDS_DESC_MUSHROOM ) - > sendTileData ( ) ;
Tile : : hugeMushroom_red = ( new HugeMushroomTile ( 100 , Material : : wood , HugeMushroomTile : : MUSHROOM_TYPE_RED ) ) - > setDestroyTime ( 0.2f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " mushroom_block " ) - > setDescriptionId ( IDS_TILE_HUGE_MUSHROOM_2 ) - > setUseDescriptionId ( IDS_DESC_MUSHROOM ) - > sendTileData ( ) ;
Tile : : ironFence = ( new ThinFenceTile ( 101 , L " iron_bars " , L " iron_bars " , Material : : metal , true ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_fence , Item : : eMaterial_iron ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_METAL ) - > setDescriptionId ( IDS_TILE_IRON_FENCE ) - > setUseDescriptionId ( IDS_DESC_IRON_FENCE ) ;
Tile : : thinGlass = ( new ThinFenceTile ( 102 , L " glass " , L " glass_pane_top " , Material : : glass , false ) ) - > setDestroyTime ( 0.3f ) - > setSoundType ( SOUND_GLASS ) - > setDescriptionId ( IDS_TILE_THIN_GLASS ) - > setUseDescriptionId ( IDS_DESC_THIN_GLASS ) ;
Tile : : melon = ( new MelonTile ( 103 ) ) - > setDestroyTime ( 1.0f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " melon " ) - > setDescriptionId ( IDS_TILE_MELON ) - > setUseDescriptionId ( IDS_DESC_MELON_BLOCK ) ;
Tile : : pumpkinStem = ( new StemTile ( 104 , Tile : : pumpkin ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " pumpkin_stem " ) - > setDescriptionId ( IDS_TILE_PUMPKIN_STEM ) - > sendTileData ( ) ;
Tile : : melonStem = ( new StemTile ( 105 , Tile : : melon ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " melon_stem " ) - > setDescriptionId ( IDS_TILE_MELON_STEM ) - > sendTileData ( ) ;
Tile : : vine = ( new VineTile ( 106 ) ) - > setDestroyTime ( 0.2f ) - > setSoundType ( SOUND_GRASS ) - > setIconName ( L " vine " ) - > setDescriptionId ( IDS_TILE_VINE ) - > setUseDescriptionId ( IDS_DESC_VINE ) - > sendTileData ( ) ;
Tile : : fenceGate = ( new FenceGateTile ( 107 ) ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " fenceGate " ) - > setDescriptionId ( IDS_TILE_FENCE_GATE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_FENCE_GATE ) ;
Tile : : stairs_bricks = ( new StairTile ( 108 , Tile : : redBrick , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_brick ) - > setIconName ( L " stairsBrick " ) - > setDescriptionId ( IDS_TILE_STAIRS_BRICKS ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : stairs_stoneBrickSmooth = ( new StairTile ( 109 , Tile : : stoneBrick , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_stoneSmooth ) - > setIconName ( L " stairsStoneBrickSmooth " ) - > setDescriptionId ( IDS_TILE_STAIRS_STONE_BRICKS_SMOOTH ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : mycel = ( MycelTile * ) ( new MycelTile ( 110 ) ) - > setDestroyTime ( 0.6f ) - > setSoundType ( SOUND_GRASS ) - > setIconName ( L " mycelium " ) - > setDescriptionId ( IDS_TILE_MYCEL ) - > setUseDescriptionId ( IDS_DESC_MYCEL ) ;
Tile : : waterLily = ( new WaterlilyTile ( 111 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( SOUND_GRASS ) - > setIconName ( L " waterlily " ) - > setDescriptionId ( IDS_TILE_WATERLILY ) - > setUseDescriptionId ( IDS_DESC_WATERLILY ) ;
Tile : : netherBrick = ( new Tile ( 112 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_netherbrick ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " nether_brick " ) - > setDescriptionId ( IDS_TILE_NETHERBRICK ) - > setUseDescriptionId ( IDS_DESC_NETHERBRICK ) ;
Tile : : netherFence = ( new FenceTile ( 113 , L " nether_brick " , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_fence , Item : : eMaterial_netherbrick ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_STONE ) - > setDescriptionId ( IDS_TILE_NETHERFENCE ) - > setUseDescriptionId ( IDS_DESC_NETHERFENCE ) ;
Tile : : stairs_netherBricks = ( new StairTile ( 114 , Tile : : netherBrick , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_netherbrick ) - > setIconName ( L " stairsNetherBrick " ) - > setDescriptionId ( IDS_TILE_STAIRS_NETHERBRICK ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : netherStalk = ( new NetherWartTile ( 115 ) ) - > setIconName ( L " nether_wart " ) - > setDescriptionId ( IDS_TILE_NETHERSTALK ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_NETHERSTALK ) ;
Tile : : enchantTable = ( new EnchantmentTableTile ( 116 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_device , Item : : eMaterial_magic ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 2000 ) - > setIconName ( L " enchanting_table " ) - > setDescriptionId ( IDS_TILE_ENCHANTMENTTABLE ) - > setUseDescriptionId ( IDS_DESC_ENCHANTMENTTABLE ) ;
Tile : : brewingStand = ( new BrewingStandTile ( 117 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_device , Item : : eMaterial_blaze ) - > setDestroyTime ( 0.5f ) - > setLightEmission ( 2 / 16.0f ) - > setIconName ( L " brewing_stand " ) - > setDescriptionId ( IDS_TILE_BREWINGSTAND ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_BREWING_STAND ) ;
Tile : : cauldron = ( CauldronTile * ) ( new CauldronTile ( 118 ) ) - > setDestroyTime ( 2.0f ) - > setIconName ( L " cauldron " ) - > setDescriptionId ( IDS_TILE_CAULDRON ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_CAULDRON ) ;
Tile : : endPortalTile = ( new TheEndPortal ( 119 , Material : : portal ) ) - > setDestroyTime ( INDESTRUCTIBLE_DESTROY_TIME ) - > setExplodeable ( 6000000 ) - > setDescriptionId ( IDS_TILE_END_PORTAL ) - > setUseDescriptionId ( IDS_DESC_END_PORTAL ) ;
Tile : : endPortalFrameTile = ( new TheEndPortalFrameTile ( 120 ) ) - > setSoundType ( SOUND_GLASS ) - > setLightEmission ( 2 / 16.0f ) - > setDestroyTime ( INDESTRUCTIBLE_DESTROY_TIME ) - > setIconName ( L " endframe " ) - > setDescriptionId ( IDS_TILE_ENDPORTALFRAME ) - > sendTileData ( ) - > setExplodeable ( 6000000 ) - > setUseDescriptionId ( IDS_DESC_ENDPORTALFRAME ) ;
Tile : : endStone = ( new Tile ( 121 , Material : : stone ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 15 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " end_stone " ) - > setDescriptionId ( IDS_TILE_WHITESTONE ) - > setUseDescriptionId ( IDS_DESC_WHITESTONE ) ;
Tile : : dragonEgg = ( new EggTile ( 122 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 15 ) - > setSoundType ( SOUND_STONE ) - > setLightEmission ( 2.0f / 16.0f ) - > setIconName ( L " dragon_egg " ) - > setDescriptionId ( IDS_TILE_DRAGONEGG ) - > setUseDescriptionId ( IDS_DESC_DRAGONEGG ) ;
Tile : : redstoneLight = ( new RedlightTile ( 123 , false ) ) - > setDestroyTime ( 0.3f ) - > setSoundType ( SOUND_GLASS ) - > setIconName ( L " redstone_lamp_off " ) - > setDescriptionId ( IDS_TILE_REDSTONE_LIGHT ) - > setUseDescriptionId ( IDS_DESC_REDSTONE_LIGHT ) ;
Tile : : redstoneLight_lit = ( new RedlightTile ( 124 , true ) ) - > setDestroyTime ( 0.3f ) - > setSoundType ( SOUND_GLASS ) - > setIconName ( L " redstone_lamp_on " ) - > setDescriptionId ( IDS_TILE_REDSTONE_LIGHT ) - > setUseDescriptionId ( IDS_DESC_REDSTONE_LIGHT ) ;
Tile : : woodSlab = ( HalfSlabTile * ) ( new WoodSlabTile ( Tile : : woodSlab_Id , true ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_slab , Item : : eMaterial_wood ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " woodSlab " ) - > setDescriptionId ( IDS_DESC_WOODSLAB ) - > setUseDescriptionId ( IDS_DESC_WOODSLAB ) ;
Tile : : woodSlabHalf = ( HalfSlabTile * ) ( new WoodSlabTile ( Tile : : woodSlabHalf_Id , false ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_halfslab , Item : : eMaterial_wood ) - > setDestroyTime ( 2.0f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " woodSlab " ) - > setDescriptionId ( IDS_DESC_WOODSLAB ) - > setUseDescriptionId ( IDS_DESC_WOODSLAB ) ;
Tile : : cocoa = ( new CocoaTile ( 127 ) ) - > setDestroyTime ( 0.2f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " cocoa " ) - > sendTileData ( ) - > setDescriptionId ( IDS_TILE_COCOA ) - > setUseDescriptionId ( IDS_DESC_COCOA ) ;
Tile : : stairs_sandstone = ( new StairTile ( 128 , Tile : : sandStone , 0 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_sand ) - > setIconName ( L " stairsSandstone " ) - > setDescriptionId ( IDS_TILE_STAIRS_SANDSTONE ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : emeraldOre = ( new OreTile ( 129 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " emerald_ore " ) - > setDescriptionId ( IDS_TILE_EMERALDORE ) - > setUseDescriptionId ( IDS_DESC_EMERALDORE ) ;
Tile : : enderChest = ( new EnderChestTile ( 130 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_chest , Item : : eMaterial_ender ) - > setDestroyTime ( 22.5f ) - > setExplodeable ( 1000 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " enderChest " ) - > sendTileData ( ) - > setLightEmission ( .5f ) - > setDescriptionId ( IDS_TILE_ENDERCHEST ) - > setUseDescriptionId ( IDS_DESC_ENDERCHEST ) ;
Tile : : tripWireSource = ( TripWireSourceTile * ) ( new TripWireSourceTile ( 131 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_lever , Item : : eMaterial_undefined ) - > setIconName ( L " trip_wire_source " ) - > sendTileData ( ) - > setDescriptionId ( IDS_TILE_TRIPWIRE_SOURCE ) - > setUseDescriptionId ( IDS_DESC_TRIPWIRE_SOURCE ) ;
Tile : : tripWire = ( new TripWireTile ( 132 ) ) - > setIconName ( L " trip_wire " ) - > sendTileData ( ) - > setDescriptionId ( IDS_TILE_TRIPWIRE ) - > setUseDescriptionId ( IDS_DESC_TRIPWIRE ) ;
Tile : : emeraldBlock = ( new MetalTile ( 133 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_emerald ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_METAL ) - > setIconName ( L " emerald_block " ) - > setDescriptionId ( IDS_TILE_EMERALDBLOCK ) - > setUseDescriptionId ( IDS_DESC_EMERALDBLOCK ) ;
Tile : : woodStairsDark = ( new StairTile ( 134 , Tile : : wood , TreeTile : : DARK_TRUNK ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_sprucewood ) - > setIconName ( L " stairsWoodSpruce " ) - > setDescriptionId ( IDS_TILE_STAIRS_SPRUCEWOOD ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : woodStairsBirch = ( new StairTile ( 135 , Tile : : wood , TreeTile : : BIRCH_TRUNK ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_birchwood ) - > setIconName ( L " stairsWoodBirch " ) - > setDescriptionId ( IDS_TILE_STAIRS_BIRCHWOOD ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : woodStairsJungle = ( new StairTile ( 136 , Tile : : wood , TreeTile : : JUNGLE_TRUNK ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_junglewood ) - > setIconName ( L " stairsWoodJungle " ) - > setDescriptionId ( IDS_TILE_STAIRS_JUNGLEWOOD ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : commandBlock = ( new CommandBlock ( 137 ) ) - > setIndestructible ( ) - > setExplodeable ( 6000000 ) - > setIconName ( L " command_block " ) - > setDescriptionId ( IDS_TILE_COMMAND_BLOCK ) - > setUseDescriptionId ( IDS_DESC_COMMAND_BLOCK ) ;
Tile : : beacon = ( BeaconTile * ) ( new BeaconTile ( 138 ) ) - > setLightEmission ( 1.0f ) - > setIconName ( L " beacon " ) - > setDescriptionId ( IDS_TILE_BEACON ) - > setUseDescriptionId ( IDS_DESC_BEACON ) ;
Tile : : cobbleWall = ( new WallTile ( 139 , Tile : : stoneBrick ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_fence , Item : : eMaterial_stone ) - > setIconName ( L " cobbleWall " ) - > setDescriptionId ( IDS_TILE_COBBLESTONE_WALL ) - > setUseDescriptionId ( IDS_DESC_COBBLESTONE_WALL ) ;
Tile : : flowerPot = ( new FlowerPotTile ( 140 ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( SOUND_NORMAL ) - > setIconName ( L " flower_pot " ) - > setDescriptionId ( IDS_TILE_FLOWERPOT ) - > setUseDescriptionId ( IDS_DESC_FLOWERPOT ) ;
Tile : : carrots = ( new CarrotTile ( 141 ) ) - > setIconName ( L " carrots " ) - > setDescriptionId ( IDS_TILE_CARROTS ) - > setUseDescriptionId ( IDS_DESC_CARROTS ) - > disableMipmap ( ) ;
Tile : : potatoes = ( new PotatoTile ( 142 ) ) - > setIconName ( L " potatoes " ) - > setDescriptionId ( IDS_TILE_POTATOES ) - > setUseDescriptionId ( IDS_DESC_POTATO ) - > disableMipmap ( ) ;
Tile : : button_wood = ( new WoodButtonTile ( 143 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_button , Item : : eMaterial_wood ) - > setDestroyTime ( 0.5f ) - > setSoundType ( Tile : : SOUND_WOOD ) - > setIconName ( L " button " ) - > setDescriptionId ( IDS_TILE_BUTTON ) - > sendTileData ( ) - > setUseDescriptionId ( IDS_DESC_BUTTON ) ;
Tile : : skull = ( new SkullTile ( 144 ) ) - > setDestroyTime ( 1.0f ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " skull " ) - > setDescriptionId ( IDS_TILE_SKULL ) - > setUseDescriptionId ( IDS_DESC_SKULL ) ;
Tile : : anvil = ( new AnvilTile ( 145 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_device , Item : : eMaterial_iron ) - > setDestroyTime ( 5.0f ) - > setSoundType ( SOUND_ANVIL ) - > setExplodeable ( 2000 ) - > setIconName ( L " anvil " ) - > sendTileData ( ) - > setDescriptionId ( IDS_TILE_ANVIL ) - > setUseDescriptionId ( IDS_DESC_ANVIL ) ;
Tile : : chest_trap = ( new ChestTile ( 146 , ChestTile : : TYPE_TRAP ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_chest , Item : : eMaterial_trap ) - > setDestroyTime ( 2.5f ) - > setSoundType ( SOUND_WOOD ) - > setDescriptionId ( IDS_TILE_CHEST_TRAP ) - > setUseDescriptionId ( IDS_DESC_CHEST_TRAP ) ;
Tile : : weightedPlate_light = ( new WeightedPressurePlateTile ( 147 , L " gold_block " , Material : : metal , Redstone : : SIGNAL_MAX ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_pressureplate , Item : : eMaterial_gold ) - > setDestroyTime ( 0.5f ) - > setSoundType ( SOUND_WOOD ) - > setDescriptionId ( IDS_TILE_WEIGHTED_PLATE_LIGHT ) - > setUseDescriptionId ( IDS_DESC_WEIGHTED_PLATE_LIGHT ) ;
Tile : : weightedPlate_heavy = ( new WeightedPressurePlateTile ( 148 , L " iron_block " , Material : : metal , Redstone : : SIGNAL_MAX * 10 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_pressureplate , Item : : eMaterial_iron ) - > setDestroyTime ( 0.5f ) - > setSoundType ( SOUND_WOOD ) - > setDescriptionId ( IDS_TILE_WEIGHTED_PLATE_HEAVY ) - > setUseDescriptionId ( IDS_DESC_WEIGHTED_PLATE_HEAVY ) ;
Tile : : comparator_off = ( ComparatorTile * ) ( new ComparatorTile ( 149 , false ) ) - > setDestroyTime ( 0.0f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " comparator_off " ) - > setDescriptionId ( IDS_TILE_COMPARATOR ) - > setUseDescriptionId ( IDS_DESC_COMPARATOR ) ;
Tile : : comparator_on = ( ComparatorTile * ) ( new ComparatorTile ( 150 , true ) ) - > setDestroyTime ( 0.0f ) - > setLightEmission ( 10 / 16.0f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " comparator_on " ) - > setDescriptionId ( IDS_TILE_COMPARATOR ) - > setUseDescriptionId ( IDS_DESC_COMPARATOR ) ;
Tile : : daylightDetector = ( DaylightDetectorTile * ) ( new DaylightDetectorTile ( 151 ) ) - > setDestroyTime ( 0.2f ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " daylight_detector " ) - > setDescriptionId ( IDS_TILE_DAYLIGHT_DETECTOR ) - > setUseDescriptionId ( IDS_DESC_DAYLIGHT_DETECTOR ) ;
Tile : : redstoneBlock = ( new PoweredMetalTile ( 152 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_redstone ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_METAL ) - > setIconName ( L " redstone_block " ) - > setDescriptionId ( IDS_TILE_REDSTONE_BLOCK ) - > setUseDescriptionId ( IDS_DESC_REDSTONE_BLOCK ) ;
Tile : : netherQuartz = ( new OreTile ( 153 ) ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 5 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " quartz_ore " ) - > setDescriptionId ( IDS_TILE_NETHER_QUARTZ ) - > setUseDescriptionId ( IDS_DESC_NETHER_QUARTZ_ORE ) ;
Tile : : hopper = ( HopperTile * ) ( new HopperTile ( 154 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_redstoneContainer , Item : : eMaterial_undefined ) - > setDestroyTime ( 3.0f ) - > setExplodeable ( 8 ) - > setSoundType ( SOUND_WOOD ) - > setIconName ( L " hopper " ) - > setDescriptionId ( IDS_TILE_HOPPER ) - > setUseDescriptionId ( IDS_DESC_HOPPER ) ;
Tile : : quartzBlock = ( new QuartzBlockTile ( 155 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_structblock , Item : : eMaterial_quartz ) - > setSoundType ( SOUND_STONE ) - > setDestroyTime ( 0.8f ) - > setIconName ( L " quartz_block " ) - > setDescriptionId ( IDS_TILE_QUARTZ_BLOCK ) - > setUseDescriptionId ( IDS_DESC_QUARTZ_BLOCK ) ;
Tile : : stairs_quartz = ( new StairTile ( 156 , Tile : : quartzBlock , QuartzBlockTile : : TYPE_DEFAULT ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_stairs , Item : : eMaterial_quartz ) - > setIconName ( L " stairsQuartz " ) - > setDescriptionId ( IDS_TILE_STAIRS_QUARTZ ) - > setUseDescriptionId ( IDS_DESC_STAIRS ) ;
Tile : : activatorRail = ( new PoweredRailTile ( 157 ) ) - > setDestroyTime ( 0.7f ) - > setSoundType ( SOUND_METAL ) - > setIconName ( L " rail_activator " ) - > setDescriptionId ( IDS_TILE_ACTIVATOR_RAIL ) - > setUseDescriptionId ( IDS_DESC_ACTIVATOR_RAIL ) ;
Tile : : dropper = ( new DropperTile ( 158 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_redstoneContainer , Item : : eMaterial_undefined ) - > setDestroyTime ( 3.5f ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " dropper " ) - > setDescriptionId ( IDS_TILE_DROPPER ) - > setUseDescriptionId ( IDS_DESC_DROPPER ) ;
Tile : : clayHardened_colored = ( new ColoredTile ( 159 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_clay , Item : : eMaterial_clay ) - > setDestroyTime ( 1.25f ) - > setExplodeable ( 7 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " hardened_clay_stained " ) - > setDescriptionId ( IDS_TILE_STAINED_CLAY ) - > setUseDescriptionId ( IDS_DESC_STAINED_CLAY ) ;
Tile : : stained_glass_pane = ( new StainedGlassPaneBlock ( 160 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_glass , Item : : eMaterial_glass ) - > setDestroyTime ( 0.3f ) - > setSoundType ( SOUND_GLASS ) - > setIconName ( L " glass " ) - > setDescriptionId ( IDS_TILE_STAINED_GLASS_PANE ) - > setUseDescriptionId ( IDS_DESC_STAINED_GLASS_PANE ) ;
Tile : : hayBlock = ( new HayBlockTile ( 170 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_wheat ) - > setDestroyTime ( 0.5f ) - > setSoundType ( SOUND_GRASS ) - > setIconName ( L " hay_block " ) - > setDescriptionId ( IDS_TILE_HAY ) - > setUseDescriptionId ( IDS_DESC_HAY ) ;
Tile : : woolCarpet = ( new WoolCarpetTile ( 171 ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_carpet , Item : : eMaterial_cloth ) - > setDestroyTime ( 0.1f ) - > setSoundType ( SOUND_CLOTH ) - > setIconName ( L " woolCarpet " ) - > setLightBlock ( 0 ) - > setDescriptionId ( IDS_TILE_CARPET ) - > setUseDescriptionId ( IDS_DESC_CARPET ) ;
Tile : : clayHardened = ( new Tile ( 172 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_clay , Item : : eMaterial_clay ) - > setDestroyTime ( 1.25f ) - > setExplodeable ( 7 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " hardened_clay " ) - > setDescriptionId ( IDS_TILE_HARDENED_CLAY ) - > setUseDescriptionId ( IDS_DESC_HARDENED_CLAY ) ;
Tile : : coalBlock = ( new Tile ( 173 , Material : : stone ) ) - > setBaseItemTypeAndMaterial ( Item : : eBaseItemType_block , Item : : eMaterial_coal ) - > setDestroyTime ( 5.0f ) - > setExplodeable ( 10 ) - > setSoundType ( SOUND_STONE ) - > setIconName ( L " coal_block " ) - > setDescriptionId ( IDS_TILE_COAL ) - > setUseDescriptionId ( IDS_DESC_COAL_BLOCK ) ;
2026-03-01 12:16:08 +08:00
// Special cases for certain items since they can have different icons
2026-03-03 03:04:10 +08:00
Item : : items [ wool_Id ] = ( new WoolTileItem ( Tile : : wool_Id - 256 ) ) - > setIconName ( L " cloth " ) - > setDescriptionId ( IDS_TILE_CLOTH ) - > setUseDescriptionId ( IDS_DESC_WOOL ) ;
Item : : items [ clayHardened_colored_Id ] = ( new WoolTileItem ( Tile : : clayHardened_colored_Id - 256 ) ) - > setIconName ( L " clayHardenedStained " ) - > setDescriptionId ( IDS_TILE_STAINED_CLAY ) - > setUseDescriptionId ( IDS_DESC_STAINED_CLAY ) ;
Item : : items [ stained_glass_Id ] = ( new WoolTileItem ( Tile : : stained_glass_Id - 256 ) ) - > setIconName ( L " stainedGlass " ) - > setDescriptionId ( IDS_TILE_STAINED_GLASS ) - > setUseDescriptionId ( IDS_DESC_STAINED_GLASS ) ;
Item : : items [ stained_glass_pane_Id ] = ( new WoolTileItem ( Tile : : stained_glass_pane_Id - 256 ) ) - > setIconName ( L " stainedGlassPane " ) - > setDescriptionId ( IDS_TILE_STAINED_GLASS_PANE ) - > setUseDescriptionId ( IDS_DESC_STAINED_GLASS_PANE ) ;
Item : : items [ woolCarpet_Id ] = ( new WoolTileItem ( Tile : : woolCarpet_Id - 256 ) ) - > setIconName ( L " woolCarpet " ) - > setDescriptionId ( IDS_TILE_CARPET ) - > setUseDescriptionId ( IDS_DESC_CARPET ) ;
Item : : items [ treeTrunk_Id ] = ( new MultiTextureTileItem ( Tile : : treeTrunk_Id - 256 , treeTrunk , ( int * ) TreeTile : : TREE_NAMES , 4 ) ) - > setIconName ( L " log " ) - > setDescriptionId ( IDS_TILE_LOG ) - > setUseDescriptionId ( IDS_DESC_LOG ) ;
Item : : items [ wood_Id ] = ( new MultiTextureTileItem ( Tile : : wood_Id - 256 , Tile : : wood , ( int * ) WoodTile : : WOOD_NAMES , 4 , IDS_TILE_PLANKS ) ) - > setIconName ( L " wood " ) - > setDescriptionId ( IDS_TILE_OAKWOOD_PLANKS ) - > setUseDescriptionId ( IDS_DESC_LOG ) ; // <- TODO
Item : : items [ monsterStoneEgg_Id ] = ( new MultiTextureTileItem ( Tile : : monsterStoneEgg_Id - 256 , monsterStoneEgg , ( int * ) StoneMonsterTile : : STONE_MONSTER_NAMES , 3 ) ) - > setIconName ( L " monsterStoneEgg " ) - > setDescriptionId ( IDS_TILE_STONE_SILVERFISH ) - > setUseDescriptionId ( IDS_DESC_STONE_SILVERFISH ) ; // 4J - Brought forward from post-1.2 to fix stacking problem
Item : : items [ stoneBrick_Id ] = ( new MultiTextureTileItem ( Tile : : stoneBrick_Id - 256 , stoneBrick , ( int * ) SmoothStoneBrickTile : : SMOOTH_STONE_BRICK_NAMES , 4 ) ) - > setIconName ( L " stonebricksmooth " ) - > setDescriptionId ( IDS_TILE_STONE_BRICK_SMOOTH ) ;
Item : : items [ sandStone_Id ] = ( new MultiTextureTileItem ( sandStone_Id - 256 , sandStone , SandStoneTile : : SANDSTONE_NAMES , SandStoneTile : : SANDSTONE_BLOCK_NAMES ) ) - > setIconName ( L " sandStone " ) - > setDescriptionId ( IDS_TILE_SANDSTONE ) - > setUseDescriptionId ( IDS_DESC_SANDSTONE ) ;
Item : : items [ quartzBlock_Id ] = ( new MultiTextureTileItem ( quartzBlock_Id - 256 , quartzBlock , QuartzBlockTile : : BLOCK_NAMES , QuartzBlockTile : : QUARTZ_BLOCK_NAMES ) ) - > setIconName ( L " quartzBlock " ) - > setDescriptionId ( IDS_TILE_QUARTZ_BLOCK ) - > setUseDescriptionId ( IDS_DESC_QUARTZ_BLOCK ) ;
Item : : items [ stoneSlabHalf_Id ] = ( new StoneSlabTileItem ( Tile : : stoneSlabHalf_Id - 256 , Tile : : stoneSlabHalf , Tile : : stoneSlab , false ) ) - > setIconName ( L " stoneSlab " ) - > setDescriptionId ( IDS_TILE_STONESLAB ) - > setUseDescriptionId ( IDS_DESC_HALFSLAB ) ;
Item : : items [ stoneSlab_Id ] = ( new StoneSlabTileItem ( Tile : : stoneSlab_Id - 256 , Tile : : stoneSlabHalf , Tile : : stoneSlab , true ) ) - > setIconName ( L " stoneSlab " ) - > setDescriptionId ( IDS_DESC_STONESLAB ) - > setUseDescriptionId ( IDS_DESC_SLAB ) ;
Item : : items [ woodSlabHalf_Id ] = ( new StoneSlabTileItem ( Tile : : woodSlabHalf_Id - 256 , Tile : : woodSlabHalf , Tile : : woodSlab , false ) ) - > setIconName ( L " woodSlab " ) - > setDescriptionId ( IDS_DESC_WOODSLAB ) - > setUseDescriptionId ( IDS_DESC_WOODSLAB ) ;
Item : : items [ woodSlab_Id ] = ( new StoneSlabTileItem ( Tile : : woodSlab_Id - 256 , Tile : : woodSlabHalf , Tile : : woodSlab , true ) ) - > setIconName ( L " woodSlab " ) - > setDescriptionId ( IDS_DESC_WOODSLAB ) - > setUseDescriptionId ( IDS_DESC_WOODSLAB ) ;
Item : : items [ sapling_Id ] = ( new MultiTextureTileItem ( Tile : : sapling_Id - 256 , Tile : : sapling , Sapling : : SAPLING_NAMES , 4 ) ) - > setIconName ( L " sapling " ) - > setDescriptionId ( IDS_TILE_SAPLING ) - > setUseDescriptionId ( IDS_DESC_SAPLING ) ;
Item : : items [ leaves_Id ] = ( new LeafTileItem ( Tile : : leaves_Id - 256 ) ) - > setIconName ( L " leaves " ) - > setDescriptionId ( IDS_TILE_LEAVES ) - > setUseDescriptionId ( IDS_DESC_LEAVES ) ;
Item : : items [ vine_Id ] = ( new ColoredTileItem ( Tile : : vine_Id - 256 , false ) ) - > setDescriptionId ( IDS_TILE_VINE ) - > setUseDescriptionId ( IDS_DESC_VINE ) ;
int idsData [ 3 ] = { IDS_TILE_SHRUB , IDS_TILE_TALL_GRASS , IDS_TILE_FERN } ;
2026-03-01 12:16:08 +08:00
intArray ids = intArray ( idsData , 3 ) ;
2026-03-03 03:04:10 +08:00
Item : : items [ tallgrass_Id ] = ( ( ColoredTileItem * ) ( new ColoredTileItem ( Tile : : tallgrass_Id - 256 , true ) ) - > setDescriptionId ( IDS_TILE_TALL_GRASS ) ) - > setDescriptionPostfixes ( ids ) ;
Item : : items [ topSnow_Id ] = ( new SnowItem ( topSnow_Id - 256 , topSnow ) ) ;
Item : : items [ waterLily_Id ] = ( new WaterLilyTileItem ( Tile : : waterLily_Id - 256 ) ) ;
Item : : items [ pistonBase_Id ] = ( new PistonTileItem ( Tile : : pistonBase_Id - 256 ) ) - > setDescriptionId ( IDS_TILE_PISTON_BASE ) - > setUseDescriptionId ( IDS_DESC_PISTON ) ;
Item : : items [ pistonStickyBase_Id ] = ( new PistonTileItem ( Tile : : pistonStickyBase_Id - 256 ) ) - > setDescriptionId ( IDS_TILE_PISTON_STICK_BASE ) - > setUseDescriptionId ( IDS_DESC_STICKY_PISTON ) ;
Item : : items [ cobbleWall_Id ] = ( new MultiTextureTileItem ( cobbleWall_Id - 256 , cobbleWall , ( int * ) WallTile : : COBBLE_NAMES , 2 ) ) - > setDescriptionId ( IDS_TILE_COBBLESTONE_WALL ) - > setUseDescriptionId ( IDS_DESC_COBBLESTONE_WALL ) ;
Item : : items [ anvil_Id ] = ( new AnvilTileItem ( anvil ) ) - > setDescriptionId ( IDS_TILE_ANVIL ) - > setUseDescriptionId ( IDS_DESC_ANVIL ) ;
2026-03-01 12:16:08 +08:00
for ( int i = 0 ; i < 256 ; i + + )
{
if ( Tile : : tiles [ i ] ! = NULL )
{
if ( Item : : items [ i ] = = NULL )
{
Item : : items [ i ] = new TileItem ( i - 256 ) ;
Tile : : tiles [ i ] - > init ( ) ;
}
2026-03-03 03:04:10 +08:00
bool propagate = false ;
if ( i > 0 & & Tile : : tiles [ i ] - > getRenderShape ( ) = = Tile : : SHAPE_STAIRS ) propagate = true ;
if ( i > 0 & & dynamic_cast < HalfSlabTile * > ( Tile : : tiles [ i ] ) ! = NULL )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
propagate = true ;
}
if ( i = = Tile : : farmland_Id ) propagate = true ;
2026-03-01 12:16:08 +08:00
if ( Tile : : transculent [ i ] )
{
propagate = true ;
}
if ( Tile : : lightBlock [ i ] = = 0 )
{
propagate = true ;
}
2026-03-03 03:04:10 +08:00
Tile : : propagate [ i ] = propagate ;
2026-03-01 12:16:08 +08:00
}
}
Tile : : transculent [ 0 ] = true ;
Stats : : buildItemStats ( ) ;
// */
}
// 4J - added for common ctor code
void Tile : : _init ( int id , Material * material , bool isSolidRender )
{
destroySpeed = 0.0f ;
explosionResistance = 0.0f ;
isInventoryItem = true ;
collectStatistics = true ;
// 4J Stu - Removed these in favour of TLS versions
//xx0 = yy0 = zz0 = xx1 = yy1 = zz1 = 0;
soundType = Tile : : SOUND_NORMAL ;
gravity = 1.0f ;
friction = 0.6f ;
_isTicking = false ;
_isEntityTile = false ;
/* 4J - TODO
if ( Tile . tiles [ id ] ! = null )
{
throw new IllegalArgumentException ( " Slot " + id + " is already occupied by " + Tile . tiles [ id ] + " when adding " + this ) ;
}
*/
this - > material = material ;
Tile : : tiles [ id ] = this ;
this - > id = id ;
updateDefaultShape ( ) ;
// 4J - note these used to call isSolidRender(), but that always calls Tile::isSolidRender in C++ so have added as a parameter that can be varied from
// derived ctors
solid [ id ] = isSolidRender ;
lightBlock [ id ] = isSolidRender ? 255 : 0 ;
transculent [ id ] = ! material - > blocksLight ( ) ;
mipmapEnable [ id ] = true ; // 4J added
2026-03-03 03:04:10 +08:00
iconName = L " " ;
2026-03-01 12:16:08 +08:00
}
Tile : : Tile ( int id , Material * material , bool isSolidRender )
{
_init ( id , material , isSolidRender ) ;
m_iMaterial = Item : : eMaterial_undefined ;
m_iBaseItemType = Item : : eBaseItemType_undefined ;
icon = NULL ;
}
Tile * Tile : : sendTileData ( unsigned char importantMask /*=15*/ )
{
Tile : : _sendTileData [ id ] = importantMask ; // 4J - changed was bool, now bitfield to indicate which bits are important to be sent. Default behaviour with this method is all 4 bits
return this ;
}
void Tile : : init ( )
{
}
// 4J-PB - adding so we can class different items together for the new crafting menu
// so pickaxe_stone would get tagged with pickaxe and stone
Tile * Tile : : setBaseItemTypeAndMaterial ( int iType , int iMaterial )
{
this - > m_iBaseItemType = iType ;
this - > m_iMaterial = iMaterial ;
return this ;
}
int Tile : : getBaseItemType ( )
{
return this - > m_iBaseItemType ;
}
int Tile : : getMaterial ( )
{
return this - > m_iMaterial ;
}
Tile * Tile : : setSoundType ( const SoundType * soundType )
{
this - > soundType = soundType ;
return this ;
}
Tile * Tile : : setLightBlock ( int i )
{
lightBlock [ id ] = i ;
return this ;
}
Tile * Tile : : setLightEmission ( float f )
{
Tile : : lightEmission [ id ] = ( int ) ( Level : : MAX_BRIGHTNESS * f ) ;
return this ;
}
Tile * Tile : : setExplodeable ( float explosionResistance )
{
this - > explosionResistance = explosionResistance * 3 ;
return this ;
}
bool Tile : : isSolidBlockingTile ( int t )
{
Tile * tile = Tile : : tiles [ t ] ;
if ( tile = = NULL ) return false ;
2026-03-03 03:04:10 +08:00
return tile - > material - > isSolidBlocking ( ) & & tile - > isCubeShaped ( ) & & ! tile - > isSignalSource ( ) ;
2026-03-01 12:16:08 +08:00
}
bool Tile : : isCubeShaped ( )
{
return true ;
}
bool Tile : : isPathfindable ( LevelSource * level , int x , int y , int z )
{
return ! material - > blocksMotion ( ) ;
}
int Tile : : getRenderShape ( )
{
return SHAPE_BLOCK ;
}
Tile * Tile : : setDestroyTime ( float destroySpeed )
{
this - > destroySpeed = destroySpeed ;
if ( explosionResistance < destroySpeed * 5 ) explosionResistance = destroySpeed * 5 ;
return this ;
}
Tile * Tile : : setIndestructible ( )
{
setDestroyTime ( INDESTRUCTIBLE_DESTROY_TIME ) ;
return this ;
}
float Tile : : getDestroySpeed ( Level * level , int x , int y , int z )
{
return destroySpeed ;
}
Tile * Tile : : setTicking ( bool tick )
{
_isTicking = tick ;
return this ;
}
bool Tile : : isTicking ( )
{
return _isTicking ;
}
bool Tile : : isEntityTile ( )
{
return _isEntityTile ;
}
Tile * Tile : : disableMipmap ( )
{
mipmapEnable [ id ] = false ;
return this ;
}
void Tile : : setShape ( float x0 , float y0 , float z0 , float x1 , float y1 , float z1 )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
tls - > xx0 = x0 ;
tls - > yy0 = y0 ;
tls - > zz0 = z0 ;
tls - > xx1 = x1 ;
tls - > yy1 = y1 ;
tls - > zz1 = z1 ;
tls - > tileId = this - > id ;
2026-03-03 03:04:10 +08:00
2026-03-01 12:16:08 +08:00
//this->xx0 = x0;
//this->yy0 = y0;
//this->zz0 = z0;
//this->xx1 = x1;
//this->yy1 = y1;
//this->zz1 = z1;
}
float Tile : : getBrightness ( LevelSource * level , int x , int y , int z )
{
// Lighting fix brought forward from ~1.5 here - used to use the lightEmission level for this tile rather than getting the for the passed in x/y/z coords
2026-03-03 03:04:10 +08:00
return level - > getBrightness ( x , y , z , lightEmission [ level - > getTile ( x , y , z ) ] ) ;
2026-03-01 12:16:08 +08:00
}
// 4J - brought forward from 1.8.2
int Tile : : getLightColor ( LevelSource * level , int x , int y , int z , int tileId /*=-1*/ )
{
// Lighting fix brought forward from ~1.5 here - used to use the lightEmission level for this tile rather than getting the for the passed in x/y/z coords
if ( tileId = = - 1 )
{
2026-03-03 03:04:10 +08:00
return level - > getLightColor ( x , y , z , lightEmission [ level - > getTile ( x , y , z ) ] , - 1 ) ;
2026-03-01 12:16:08 +08:00
}
else
{
2026-03-03 03:04:10 +08:00
return level - > getLightColor ( x , y , z , lightEmission [ tileId ] , tileId ) ;
2026-03-01 12:16:08 +08:00
}
}
bool Tile : : isFaceVisible ( Level * level , int x , int y , int z , int f )
{
if ( f = = 0 ) y - - ;
if ( f = = 1 ) y + + ;
if ( f = = 2 ) z - - ;
if ( f = = 3 ) z + + ;
if ( f = = 4 ) x - - ;
if ( f = = 5 ) x + + ;
return ! level - > isSolidRenderTile ( x , y , z ) ;
}
bool Tile : : shouldRenderFace ( LevelSource * level , int x , int y , int z , int face )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
if ( face = = 0 & & tls - > yy0 > 0 ) return true ;
if ( face = = 1 & & tls - > yy1 < 1 ) return true ;
if ( face = = 2 & & tls - > zz0 > 0 ) return true ;
if ( face = = 3 & & tls - > zz1 < 1 ) return true ;
if ( face = = 4 & & tls - > xx0 > 0 ) return true ;
if ( face = = 5 & & tls - > xx1 < 1 ) return true ;
return ( ! level - > isSolidRenderTile ( x , y , z ) ) ;
}
// AP - added this function so we can generate the faceFlags for a block in a single fast function
int Tile : : getFaceFlags ( LevelSource * level , int x , int y , int z )
{
int faceFlags = 0 ;
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
if ( tls - > yy0 > 0 | | ( ! level - > isSolidRenderTile ( x , y - 1 , z ) ) ) faceFlags | = 0x01 ;
if ( tls - > yy1 < 1 | | ( ! level - > isSolidRenderTile ( x , y + 1 , z ) ) ) faceFlags | = 0x02 ;
if ( tls - > zz0 > 0 | | ( ! level - > isSolidRenderTile ( x , y , z - 1 ) ) ) faceFlags | = 0x04 ;
if ( tls - > zz1 < 1 | | ( ! level - > isSolidRenderTile ( x , y , z + 1 ) ) ) faceFlags | = 0x08 ;
if ( tls - > xx0 > 0 | | ( ! level - > isSolidRenderTile ( x - 1 , y , z ) ) ) faceFlags | = 0x10 ;
if ( tls - > xx1 < 1 | | ( ! level - > isSolidRenderTile ( x + 1 , y , z ) ) ) faceFlags | = 0x20 ;
return faceFlags ;
}
bool Tile : : isSolidFace ( LevelSource * level , int x , int y , int z , int face )
{
return ( level - > getMaterial ( x , y , z ) - > isSolid ( ) ) ;
}
Icon * Tile : : getTexture ( LevelSource * level , int x , int y , int z , int face )
{
// 4J - addition here to make rendering big blocks of leaves more efficient. Normally leaves never consider themselves as solid, so
// blocks of leaves will have all sides of each block completely visible. Changing to consider as solid if this block is surrounded by
// other leaves (or solid things). This is paired with another change in Level::isSolidRenderTile/Region::isSolidRenderTile which makes things solid
// code-wise (ie for determining visible sides of neighbouring blocks). This change just makes the texture a solid one (tex + 1) which
// we already have in the texture map for doing non-fancy graphics. Note: this tile-specific code is here rather than making some new virtual
// method in the tiles, for the sake of efficiency - I don't imagine we'll be doing much more of this sort of thing
int tileId = level - > getTile ( x , y , z ) ;
int tileData = level - > getData ( x , y , z ) ;
if ( tileId = = Tile : : leaves_Id )
{
bool opaque = true ;
int axo [ 6 ] = { 1 , - 1 , 0 , 0 , 0 , 0 } ;
int ayo [ 6 ] = { 0 , 0 , 1 , - 1 , 0 , 0 } ;
int azo [ 6 ] = { 0 , 0 , 0 , 0 , 1 , - 1 } ;
for ( int i = 0 ; ( i < 6 ) & & opaque ; i + + )
{
int t = level - > getTile ( x + axo [ i ] , y + ayo [ i ] , z + azo [ i ] ) ;
if ( ( t ! = Tile : : leaves_Id ) & & ( ( Tile : : tiles [ t ] = = NULL ) | | ! Tile : : tiles [ t ] - > isSolidRender ( ) ) )
{
opaque = false ;
}
}
Icon * icon = NULL ;
if ( opaque )
{
Tile : : leaves - > setFancy ( false ) ;
icon = getTexture ( face , tileData ) ;
Tile : : leaves - > setFancy ( true ) ;
}
else
{
icon = getTexture ( face , tileData ) ;
}
return icon ;
}
return getTexture ( face , tileData ) ;
}
Icon * Tile : : getTexture ( int face , int data )
{
return icon ;
}
Icon * Tile : : getTexture ( int face )
{
return getTexture ( face , 0 ) ;
}
AABB * Tile : : getTileAABB ( Level * level , int x , int y , int z )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return AABB : : newTemp ( x + tls - > xx0 , y + tls - > yy0 , z + tls - > zz0 , x + tls - > xx1 , y + tls - > yy1 , z + tls - > zz1 ) ;
}
2026-03-02 17:39:35 +07:00
void Tile : : addAABBs ( Level * level , int x , int y , int z , AABB * box , AABBList * boxes , shared_ptr < Entity > source )
2026-03-01 12:16:08 +08:00
{
AABB * aabb = getAABB ( level , x , y , z ) ;
if ( aabb ! = NULL & & box - > intersects ( aabb ) ) boxes - > push_back ( aabb ) ;
}
AABB * Tile : : getAABB ( Level * level , int x , int y , int z )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return AABB : : newTemp ( x + tls - > xx0 , y + tls - > yy0 , z + tls - > zz0 , x + tls - > xx1 , y + tls - > yy1 , z + tls - > zz1 ) ;
}
bool Tile : : isSolidRender ( bool isServerLevel )
{
return true ;
}
bool Tile : : mayPick ( int data , bool liquid )
{
return mayPick ( ) ;
}
bool Tile : : mayPick ( )
{
return true ;
}
void Tile : : tick ( Level * level , int x , int y , int z , Random * random )
{
}
void Tile : : animateTick ( Level * level , int x , int y , int z , Random * random )
{
}
void Tile : : destroy ( Level * level , int x , int y , int z , int data )
{
}
void Tile : : neighborChanged ( Level * level , int x , int y , int z , int type )
{
}
void Tile : : addLights ( Level * level , int x , int y , int z )
{
}
2026-03-03 03:04:10 +08:00
int Tile : : getTickDelay ( Level * level )
2026-03-01 12:16:08 +08:00
{
return 10 ;
}
void Tile : : onPlace ( Level * level , int x , int y , int z )
{
}
void Tile : : onRemove ( Level * level , int x , int y , int z , int id , int data )
{
}
int Tile : : getResourceCount ( Random * random )
{
return 1 ;
}
int Tile : : getResource ( int data , Random * random , int playerBonusLevel )
{
return id ;
}
2026-03-02 17:37:16 +07:00
float Tile : : getDestroyProgress ( shared_ptr < Player > player , Level * level , int x , int y , int z )
2026-03-01 12:16:08 +08:00
{
float destroySpeed = getDestroySpeed ( level , x , y , z ) ;
if ( destroySpeed < 0 ) return 0 ;
2026-03-03 03:04:10 +08:00
if ( ! player - > canDestroy ( this ) )
{
return player - > getDestroySpeed ( this , false ) / destroySpeed / 100.0f ;
}
return ( player - > getDestroySpeed ( this , true ) / destroySpeed ) / 30 ;
2026-03-01 12:16:08 +08:00
}
void Tile : : spawnResources ( Level * level , int x , int y , int z , int data , int playerBonusLevel )
{
spawnResources ( level , x , y , z , data , 1 , playerBonusLevel ) ;
}
void Tile : : spawnResources ( Level * level , int x , int y , int z , int data , float odds , int playerBonusLevel )
{
if ( level - > isClientSide ) return ;
int count = getResourceCountForLootBonus ( playerBonusLevel , level - > random ) ;
for ( int i = 0 ; i < count ; i + + )
{
if ( level - > random - > nextFloat ( ) > odds ) continue ;
int type = getResource ( data , level - > random , playerBonusLevel ) ;
if ( type < = 0 ) continue ;
2026-03-02 17:37:16 +07:00
popResource ( level , x , y , z , shared_ptr < ItemInstance > ( new ItemInstance ( type , 1 , getSpawnResourcesAuxValue ( data ) ) ) ) ;
2026-03-01 12:16:08 +08:00
}
}
2026-03-02 17:37:16 +07:00
void Tile : : popResource ( Level * level , int x , int y , int z , shared_ptr < ItemInstance > itemInstance )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
if ( level - > isClientSide | | ! level - > getGameRules ( ) - > getBoolean ( GameRules : : RULE_DOTILEDROPS ) ) return ;
2026-03-01 12:16:08 +08:00
float s = 0.7f ;
double xo = level - > random - > nextFloat ( ) * s + ( 1 - s ) * 0.5 ;
double yo = level - > random - > nextFloat ( ) * s + ( 1 - s ) * 0.5 ;
double zo = level - > random - > nextFloat ( ) * s + ( 1 - s ) * 0.5 ;
2026-03-02 17:37:16 +07:00
shared_ptr < ItemEntity > item = shared_ptr < ItemEntity > ( new ItemEntity ( level , x + xo , y + yo , z + zo , itemInstance ) ) ;
2026-03-01 12:16:08 +08:00
item - > throwTime = 10 ;
level - > addEntity ( item ) ;
}
// Brought forward for TU7
void Tile : : popExperience ( Level * level , int x , int y , int z , int amount )
{
if ( ! level - > isClientSide )
{
while ( amount > 0 )
{
int newCount = ExperienceOrb : : getExperienceValue ( amount ) ;
amount - = newCount ;
2026-03-02 17:37:16 +07:00
level - > addEntity ( shared_ptr < ExperienceOrb > ( new ExperienceOrb ( level , x + .5 , y + .5 , z + .5 , newCount ) ) ) ;
2026-03-01 12:16:08 +08:00
}
}
}
int Tile : : getSpawnResourcesAuxValue ( int data )
{
return 0 ;
}
2026-03-02 17:37:16 +07:00
float Tile : : getExplosionResistance ( shared_ptr < Entity > source )
2026-03-01 12:16:08 +08:00
{
return explosionResistance / 5.0f ;
}
HitResult * Tile : : clip ( Level * level , int xt , int yt , int zt , Vec3 * a , Vec3 * b )
{
updateShape ( level , xt , yt , zt ) ;
a = a - > add ( - xt , - yt , - zt ) ;
b = b - > add ( - xt , - yt , - zt ) ;
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
Vec3 * xh0 = a - > clipX ( b , tls - > xx0 ) ;
Vec3 * xh1 = a - > clipX ( b , tls - > xx1 ) ;
Vec3 * yh0 = a - > clipY ( b , tls - > yy0 ) ;
Vec3 * yh1 = a - > clipY ( b , tls - > yy1 ) ;
Vec3 * zh0 = a - > clipZ ( b , tls - > zz0 ) ;
Vec3 * zh1 = a - > clipZ ( b , tls - > zz1 ) ;
Vec3 * closest = NULL ;
if ( containsX ( xh0 ) & & ( closest = = NULL | | a - > distanceToSqr ( xh0 ) < a - > distanceToSqr ( closest ) ) ) closest = xh0 ;
if ( containsX ( xh1 ) & & ( closest = = NULL | | a - > distanceToSqr ( xh1 ) < a - > distanceToSqr ( closest ) ) ) closest = xh1 ;
if ( containsY ( yh0 ) & & ( closest = = NULL | | a - > distanceToSqr ( yh0 ) < a - > distanceToSqr ( closest ) ) ) closest = yh0 ;
if ( containsY ( yh1 ) & & ( closest = = NULL | | a - > distanceToSqr ( yh1 ) < a - > distanceToSqr ( closest ) ) ) closest = yh1 ;
if ( containsZ ( zh0 ) & & ( closest = = NULL | | a - > distanceToSqr ( zh0 ) < a - > distanceToSqr ( closest ) ) ) closest = zh0 ;
if ( containsZ ( zh1 ) & & ( closest = = NULL | | a - > distanceToSqr ( zh1 ) < a - > distanceToSqr ( closest ) ) ) closest = zh1 ;
if ( closest = = NULL ) return NULL ;
int face = - 1 ;
if ( closest = = xh0 ) face = Facing : : WEST ;
if ( closest = = xh1 ) face = Facing : : EAST ;
if ( closest = = yh0 ) face = Facing : : DOWN ;
if ( closest = = yh1 ) face = Facing : : UP ;
if ( closest = = zh0 ) face = Facing : : NORTH ;
if ( closest = = zh1 ) face = Facing : : SOUTH ;
return new HitResult ( xt , yt , zt , face , closest - > add ( xt , yt , zt ) ) ;
}
bool Tile : : containsX ( Vec3 * v )
{
if ( v = = NULL ) return false ;
2026-03-03 03:04:10 +08:00
2026-03-01 12:16:08 +08:00
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return v - > y > = tls - > yy0 & & v - > y < = tls - > yy1 & & v - > z > = tls - > zz0 & & v - > z < = tls - > zz1 ;
}
bool Tile : : containsY ( Vec3 * v )
{
if ( v = = NULL ) return false ;
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return v - > x > = tls - > xx0 & & v - > x < = tls - > xx1 & & v - > z > = tls - > zz0 & & v - > z < = tls - > zz1 ;
}
bool Tile : : containsZ ( Vec3 * v )
{
if ( v = = NULL ) return false ;
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return v - > x > = tls - > xx0 & & v - > x < = tls - > xx1 & & v - > y > = tls - > yy0 & & v - > y < = tls - > yy1 ;
}
2026-03-03 03:04:10 +08:00
void Tile : : wasExploded ( Level * level , int x , int y , int z , Explosion * explosion )
2026-03-01 12:16:08 +08:00
{
}
2026-03-03 03:04:10 +08:00
bool Tile : : mayPlace ( Level * level , int x , int y , int z , int face , shared_ptr < ItemInstance > item )
{
return mayPlace ( level , x , y , z , face ) ;
}
2026-03-01 12:16:08 +08:00
int Tile : : getRenderLayer ( )
{
return 0 ;
}
bool Tile : : mayPlace ( Level * level , int x , int y , int z , int face )
{
return mayPlace ( level , x , y , z ) ;
}
bool Tile : : mayPlace ( Level * level , int x , int y , int z )
{
int t = level - > getTile ( x , y , z ) ;
return t = = 0 | | Tile : : tiles [ t ] - > material - > isReplaceable ( ) ;
}
// 4J-PB - Adding a TestUse for tooltip display
bool Tile : : TestUse ( )
{
return false ;
}
2026-03-02 17:37:16 +07:00
bool Tile : : TestUse ( Level * level , int x , int y , int z , shared_ptr < Player > player )
2026-03-01 12:16:08 +08:00
{
return false ;
}
2026-03-02 17:37:16 +07:00
bool Tile : : 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
2026-03-01 12:16:08 +08:00
{
return false ;
}
2026-03-02 17:37:16 +07:00
void Tile : : stepOn ( Level * level , int x , int y , int z , shared_ptr < Entity > entity )
2026-03-01 12:16:08 +08:00
{
}
int Tile : : getPlacedOnFaceDataValue ( Level * level , int x , int y , int z , int face , float clickX , float clickY , float clickZ , int itemValue )
{
return itemValue ;
}
void Tile : : prepareRender ( Level * level , int x , int y , int z )
{
}
2026-03-02 17:37:16 +07:00
void Tile : : attack ( Level * level , int x , int y , int z , shared_ptr < Player > player )
2026-03-01 12:16:08 +08:00
{
}
2026-03-02 17:37:16 +07:00
void Tile : : handleEntityInside ( Level * level , int x , int y , int z , shared_ptr < Entity > e , Vec3 * current )
2026-03-01 12:16:08 +08:00
{
}
2026-03-02 17:37:16 +07:00
void Tile : : updateShape ( LevelSource * level , int x , int y , int z , int forceData , shared_ptr < TileEntity > forceEntity ) // 4J added forceData, forceEntity param
2026-03-01 12:16:08 +08:00
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
}
double Tile : : getShapeX0 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > xx0 ;
}
double Tile : : getShapeX1 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > xx1 ;
}
double Tile : : getShapeY0 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > yy0 ;
}
double Tile : : getShapeY1 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > yy1 ;
}
double Tile : : getShapeZ0 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > zz0 ;
}
double Tile : : getShapeZ1 ( )
{
ThreadStorage * tls = ( ThreadStorage * ) TlsGetValue ( Tile : : tlsIdxShape ) ;
// 4J Stu - Added this so that the TLS shape is correct for this tile
if ( tls - > tileId ! = this - > id ) updateDefaultShape ( ) ;
return tls - > zz1 ;
}
int Tile : : getColor ( ) const
{
return 0xffffff ;
}
int Tile : : getColor ( int auxData )
{
return 0xffffff ;
}
int Tile : : getColor ( LevelSource * level , int x , int y , int z )
{
return 0xffffff ;
}
int Tile : : getColor ( LevelSource * level , int x , int y , int z , int data )
{
return 0xffffff ;
}
2026-03-03 03:04:10 +08:00
int Tile : : getSignal ( LevelSource * level , int x , int y , int z , int dir )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
return Redstone : : SIGNAL_NONE ;
2026-03-01 12:16:08 +08:00
}
bool Tile : : isSignalSource ( )
{
return false ;
}
2026-03-02 17:37:16 +07:00
void Tile : : entityInside ( Level * level , int x , int y , int z , shared_ptr < Entity > entity )
2026-03-01 12:16:08 +08:00
{
}
2026-03-03 03:04:10 +08:00
int Tile : : getDirectSignal ( LevelSource * level , int x , int y , int z , int dir )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
return Redstone : : SIGNAL_NONE ;
2026-03-01 12:16:08 +08:00
}
void Tile : : updateDefaultShape ( )
{
setShape ( 0 , 0 , 0 , 1 , 1 , 1 ) ;
}
2026-03-02 17:37:16 +07:00
void Tile : : playerDestroy ( Level * level , shared_ptr < Player > player , int x , int y , int z , int data )
2026-03-01 12:16:08 +08:00
{
// 4J Stu - Special case - only record a crop destroy if is fully grown
2026-03-03 03:04:10 +08:00
if ( id = = Tile : : wheat_Id )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
if ( Tile : : wheat - > getResource ( data , NULL , 0 ) > 0 )
2026-03-01 12:16:08 +08:00
player - > awardStat (
2026-03-03 03:04:10 +08:00
GenericStats : : blocksMined ( id ) ,
GenericStats : : param_blocksMined ( id , data , 1 )
) ;
2026-03-01 12:16:08 +08:00
}
else if ( id = = Tile : : potatoes_Id )
{
if ( Tile : : potatoes - > getResource ( data , NULL , 0 ) > 0 )
player - > awardStat (
2026-03-03 03:04:10 +08:00
GenericStats : : blocksMined ( id ) ,
GenericStats : : param_blocksMined ( id , data , 1 )
) ;
2026-03-01 12:16:08 +08:00
}
else if ( id = = Tile : : carrots_Id )
{
if ( Tile : : potatoes - > getResource ( data , NULL , 0 ) > 0 )
player - > awardStat (
2026-03-03 03:04:10 +08:00
GenericStats : : blocksMined ( id ) ,
GenericStats : : param_blocksMined ( id , data , 1 )
) ;
2026-03-01 12:16:08 +08:00
}
else
{
player - > awardStat (
GenericStats : : blocksMined ( id ) ,
GenericStats : : param_blocksMined ( id , data , 1 )
) ;
}
player - > awardStat ( GenericStats : : totalBlocksMined ( ) , GenericStats : : param_noArgs ( ) ) ; // 4J : WESTY : Added for other award.
player - > causeFoodExhaustion ( FoodConstants : : EXHAUSTION_MINE ) ;
if ( id = = Tile : : treeTrunk_Id )
player - > awardStat ( GenericStats : : mineWood ( ) , GenericStats : : param_noArgs ( ) ) ;
2026-03-03 03:04:10 +08:00
if ( isSilkTouchable ( ) & & EnchantmentHelper : : hasSilkTouch ( player ) )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
shared_ptr < ItemInstance > item = getSilkTouchItemInstance ( data ) ;
if ( item ! = NULL )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
popResource ( level , x , y , z , item ) ;
}
}
2026-03-01 12:16:08 +08:00
else
{
2026-03-03 03:04:10 +08:00
int playerBonusLevel = EnchantmentHelper : : getDiggingLootBonus ( player ) ;
spawnResources ( level , x , y , z , data , playerBonusLevel ) ;
}
2026-03-01 12:16:08 +08:00
}
bool Tile : : isSilkTouchable ( )
{
return isCubeShaped ( ) & & ! _isEntityTile ;
}
2026-03-02 17:37:16 +07:00
shared_ptr < ItemInstance > Tile : : getSilkTouchItemInstance ( int data )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
int popData = 0 ;
if ( id > = 0 & & id < Item : : items . length & & Item : : items [ id ] - > isStackedByData ( ) )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
popData = data ;
}
return shared_ptr < ItemInstance > ( new ItemInstance ( id , 1 , popData ) ) ;
2026-03-01 12:16:08 +08:00
}
int Tile : : getResourceCountForLootBonus ( int bonusLevel , Random * random )
{
return getResourceCount ( random ) ;
}
bool Tile : : canSurvive ( Level * level , int x , int y , int z )
{
return true ;
}
2026-03-03 03:04:10 +08:00
void Tile : : setPlacedBy ( Level * level , int x , int y , int z , shared_ptr < LivingEntity > by , shared_ptr < ItemInstance > itemInstance )
2026-03-01 12:16:08 +08:00
{
}
void Tile : : finalizePlacement ( Level * level , int x , int y , int z , int data )
{
}
Tile * Tile : : setDescriptionId ( unsigned int id )
{
this - > descriptionId = id ;
return this ;
}
wstring Tile : : getName ( )
{
return L " " ; //I18n::get(getDescriptionId() + L".name");
}
unsigned int Tile : : getDescriptionId ( int iData /*= -1*/ )
{
return descriptionId ;
}
Tile * Tile : : setUseDescriptionId ( unsigned int id )
{
this - > useDescriptionId = id ;
return this ;
}
unsigned int Tile : : getUseDescriptionId ( )
{
return useDescriptionId ;
}
2026-03-03 03:04:10 +08:00
bool Tile : : triggerEvent ( Level * level , int x , int y , int z , int b0 , int b1 )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
return false ;
2026-03-01 12:16:08 +08:00
}
bool Tile : : isCollectStatistics ( )
{
return collectStatistics ;
}
Tile * Tile : : setNotCollectStatistics ( )
{
collectStatistics = false ;
return this ;
}
int Tile : : getPistonPushReaction ( )
{
return material - > getPushReaction ( ) ;
}
// 4J - brought forward from 1.8.2
float Tile : : getShadeBrightness ( LevelSource * level , int x , int y , int z )
{
return level - > isSolidBlockingTile ( x , y , z ) ? 0.2f : 1.0f ;
}
2026-03-02 17:37:16 +07:00
void Tile : : fallOn ( Level * level , int x , int y , int z , shared_ptr < Entity > entity , float fallDistance )
2026-03-01 12:16:08 +08:00
{
}
int Tile : : cloneTileId ( Level * level , int x , int y , int z )
{
return id ;
}
int Tile : : cloneTileData ( Level * level , int x , int y , int z )
{
return getSpawnResourcesAuxValue ( level - > getData ( x , y , z ) ) ;
}
2026-03-02 17:37:16 +07:00
void Tile : : playerWillDestroy ( Level * level , int x , int y , int z , int data , shared_ptr < Player > player )
2026-03-01 12:16:08 +08:00
{
}
void Tile : : onRemoving ( Level * level , int x , int y , int z , int data )
{
}
void Tile : : handleRain ( Level * level , int x , int y , int z )
{
}
2026-03-03 03:04:10 +08:00
void Tile : : levelTimeChanged ( Level * level , __int64 delta , __int64 newTime )
2026-03-01 12:16:08 +08:00
{
}
2026-03-03 03:04:10 +08:00
bool Tile : : useOwnCloneData ( )
{
return false ;
}
bool Tile : : canInstantlyTick ( )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
return true ;
2026-03-01 12:16:08 +08:00
}
2026-03-03 03:04:10 +08:00
bool Tile : : dropFromExplosion ( Explosion * explosion )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
return true ;
}
bool Tile : : isMatching ( int id )
{
return this - > id = = id ;
}
bool Tile : : isMatching ( int tileIdA , int tileIdB )
{
if ( tileIdA = = tileIdB )
{
return true ;
}
if ( tileIdA = = 0 | | tileIdB = = 0 | | tiles [ tileIdA ] = = NULL | | tiles [ tileIdB ] = = NULL )
{
return false ;
}
return tiles [ tileIdA ] - > isMatching ( tileIdB ) ;
}
bool Tile : : hasAnalogOutputSignal ( )
{
return false ;
}
int Tile : : getAnalogOutputSignal ( Level * level , int x , int y , int z , int dir )
{
return Redstone : : SIGNAL_NONE ;
2026-03-01 12:16:08 +08:00
}
2026-03-03 03:04:10 +08:00
Tile * Tile : : setIconName ( const wstring & iconName )
2026-03-01 12:16:08 +08:00
{
2026-03-03 03:04:10 +08:00
this - > iconName = iconName ;
2026-03-01 12:16:08 +08:00
return this ;
}
2026-03-03 03:04:10 +08:00
wstring Tile : : getIconName ( )
{
return iconName . empty ( ) ? L " MISSING_ICON_TILE_ " + _toString < int > ( id ) + L " _ " + _toString < int > ( descriptionId ) : iconName ;
}
void Tile : : registerIcons ( IconRegister * iconRegister )
{
icon = iconRegister - > registerIcon ( getIconName ( ) ) ;
}
wstring Tile : : getTileItemIconName ( )
{
return L " " ;
}
2026-03-01 12:16:08 +08:00
Tile : : SoundType : : SoundType ( eMATERIALSOUND_TYPE eMaterialSound , float volume , float pitch , int iBreakSound , int iPlaceSound )
{
this - > eMaterialSound = eMaterialSound ;
if ( iBreakSound > - 1 )
{
this - > iBreakSound = iBreakSound ;
}
else
{
switch ( eMaterialSound )
{
case eMaterialSoundType_STONE :
this - > iBreakSound = eSoundType_DIG_STONE ;
break ;
case eMaterialSoundType_WOOD :
this - > iBreakSound = eSoundType_DIG_WOOD ;
break ;
case eMaterialSoundType_GRAVEL :
this - > iBreakSound = eSoundType_DIG_GRAVEL ;
break ;
case eMaterialSoundType_GRASS :
this - > iBreakSound = eSoundType_DIG_GRASS ;
break ;
case eMaterialSoundType_METAL :
this - > iBreakSound = eSoundType_DIG_STONE ;
break ;
case eMaterialSoundType_GLASS :
this - > iBreakSound = eSoundType_RANDOM_GLASS ;
break ;
case eMaterialSoundType_CLOTH :
this - > iBreakSound = eSoundType_DIG_CLOTH ;
break ;
case eMaterialSoundType_SAND :
this - > iBreakSound = eSoundType_DIG_SAND ;
break ;
case eMaterialSoundType_SNOW :
this - > iBreakSound = eSoundType_DIG_SNOW ;
break ;
case eMaterialSoundType_LADDER :
this - > iBreakSound = eSoundType_DIG_WOOD ;
break ;
default :
app . DebugPrintf ( " NO BREAK SOUND! \n " ) ;
this - > iBreakSound = - 1 ;
break ;
}
//this->breakSound = L"step." + this->name;
}
if ( iPlaceSound > - 1 )
{
this - > iPlaceSound = iPlaceSound ;
}
else
{
this - > iPlaceSound = this - > iBreakSound ;
}
switch ( eMaterialSound )
{
case eMaterialSoundType_STONE :
this - > iStepSound = eSoundType_STEP_STONE ;
break ;
case eMaterialSoundType_WOOD :
this - > iStepSound = eSoundType_STEP_WOOD ;
break ;
case eMaterialSoundType_GRAVEL :
this - > iStepSound = eSoundType_STEP_GRAVEL ;
break ;
case eMaterialSoundType_GRASS :
this - > iStepSound = eSoundType_STEP_GRASS ;
break ;
case eMaterialSoundType_METAL :
this - > iStepSound = eSoundType_STEP_METAL ;
break ;
case eMaterialSoundType_CLOTH :
this - > iStepSound = eSoundType_STEP_CLOTH ;
break ;
case eMaterialSoundType_SAND :
this - > iStepSound = eSoundType_STEP_SAND ;
break ;
case eMaterialSoundType_SNOW :
this - > iStepSound = eSoundType_STEP_SNOW ;
break ;
case eMaterialSoundType_LADDER :
this - > iStepSound = eSoundType_STEP_LADDER ;
break ;
default :
app . DebugPrintf ( " NO STEP SOUND! \n " ) ;
this - > iStepSound = - 1 ;
break ;
}
//this->stepSound = L"step." + this->name;
this - > volume = volume ;
this - > pitch = pitch ;
}
float Tile : : SoundType : : getVolume ( ) const
2026-03-02 17:39:35 +07:00
{
return volume ;
2026-03-01 12:16:08 +08:00
}
float Tile : : SoundType : : getPitch ( ) const
2026-03-02 17:39:35 +07:00
{
return pitch ;
2026-03-01 12:16:08 +08:00
}
//wstring getBreakSound() const { return breakSound; }
//wstring getStepSound() const { return stepSound; }
int Tile : : SoundType : : getBreakSound ( ) const
2026-03-02 17:39:35 +07:00
{
return iBreakSound ;
2026-03-01 12:16:08 +08:00
}
int Tile : : SoundType : : getStepSound ( ) const
2026-03-02 17:39:35 +07:00
{
return iStepSound ;
2026-03-01 12:16:08 +08:00
}
int Tile : : SoundType : : getPlaceSound ( ) const
2026-03-02 17:39:35 +07:00
{
return iPlaceSound ;
2026-03-01 12:16:08 +08:00
}
/*
2026-03-03 03:04:10 +08:00
4 J : These are necessary on the PS3 .
( and 4 and Vita ) .
2026-03-01 12:16:08 +08:00
*/
# if (defined __PS3__ || defined __ORBIS__ || defined __PSVITA__)
2026-03-03 03:04:10 +08:00
const int Tile : : stone_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : grass_Id ;
const int Tile : : dirt_Id ;
2026-03-03 03:04:10 +08:00
// 4
2026-03-01 12:16:08 +08:00
const int Tile : : wood_Id ;
const int Tile : : sapling_Id ;
const int Tile : : unbreakable_Id ;
const int Tile : : water_Id ;
const int Tile : : calmWater_Id ;
const int Tile : : lava_Id ;
const int Tile : : calmLava_Id ;
const int Tile : : sand_Id ;
const int Tile : : gravel_Id ;
const int Tile : : goldOre_Id ;
const int Tile : : ironOre_Id ;
const int Tile : : coalOre_Id ;
const int Tile : : treeTrunk_Id ;
const int Tile : : leaves_Id ;
const int Tile : : sponge_Id ;
const int Tile : : glass_Id ;
const int Tile : : lapisOre_Id ;
const int Tile : : lapisBlock_Id ;
const int Tile : : dispenser_Id ;
const int Tile : : sandStone_Id ;
2026-03-03 03:04:10 +08:00
// 25
2026-03-01 12:16:08 +08:00
const int Tile : : bed_Id ;
const int Tile : : goldenRail_Id ;
const int Tile : : detectorRail_Id ;
const int Tile : : pistonStickyBase_Id ;
const int Tile : : web_Id ;
const int Tile : : tallgrass_Id ;
const int Tile : : deadBush_Id ;
const int Tile : : pistonBase_Id ;
const int Tile : : pistonExtensionPiece_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : wool_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : pistonMovingPiece_Id ;
const int Tile : : flower_Id ;
const int Tile : : rose_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : mushroom_brown_Id ;
const int Tile : : mushroom_red_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : goldBlock_Id ;
const int Tile : : ironBlock_Id ;
const int Tile : : stoneSlab_Id ;
const int Tile : : stoneSlabHalf_Id ;
const int Tile : : redBrick_Id ;
const int Tile : : tnt_Id ;
const int Tile : : bookshelf_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : mossyCobblestone_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : obsidian_Id ;
const int Tile : : torch_Id ;
const int Tile : : fire_Id ;
const int Tile : : mobSpawner_Id ;
const int Tile : : stairs_wood_Id ;
const int Tile : : chest_Id ;
const int Tile : : redStoneDust_Id ;
const int Tile : : diamondOre_Id ;
const int Tile : : diamondBlock_Id ;
const int Tile : : workBench_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : wheat_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : farmland_Id ;
const int Tile : : furnace_Id ;
const int Tile : : furnace_lit_Id ;
const int Tile : : sign_Id ;
const int Tile : : door_wood_Id ;
const int Tile : : ladder_Id ;
const int Tile : : rail_Id ;
const int Tile : : stairs_stone_Id ;
const int Tile : : wallSign_Id ;
const int Tile : : lever_Id ;
const int Tile : : pressurePlate_stone_Id ;
const int Tile : : door_iron_Id ;
const int Tile : : pressurePlate_wood_Id ;
const int Tile : : redStoneOre_Id ;
const int Tile : : redStoneOre_lit_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : redstoneTorch_off_Id ;
const int Tile : : redstoneTorch_on_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : button_stone_Id ;
const int Tile : : topSnow_Id ;
const int Tile : : ice_Id ;
const int Tile : : snow_Id ;
const int Tile : : cactus_Id ;
const int Tile : : clay_Id ;
const int Tile : : reeds_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : jukebox_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : fence_Id ;
const int Tile : : pumpkin_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : netherRack_Id ;
const int Tile : : soulsand_Id ;
const int Tile : : glowstone_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : portalTile_Id ;
const int Tile : : litPumpkin_Id ;
const int Tile : : cake_Id ;
const int Tile : : diode_off_Id ;
const int Tile : : diode_on_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : stained_glass_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : trapdoor_Id ;
const int Tile : : monsterStoneEgg_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : stoneBrick_Id ;
const int Tile : : hugeMushroom_brown_Id ;
const int Tile : : hugeMushroom_red_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : ironFence_Id ;
const int Tile : : thinGlass_Id ;
const int Tile : : melon_Id ;
const int Tile : : pumpkinStem_Id ;
const int Tile : : melonStem_Id ;
const int Tile : : vine_Id ;
const int Tile : : fenceGate_Id ;
const int Tile : : stairs_bricks_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : stairs_stoneBrick_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : mycel_Id ;
const int Tile : : waterLily_Id ;
const int Tile : : netherBrick_Id ;
const int Tile : : netherFence_Id ;
const int Tile : : stairs_netherBricks_Id ;
const int Tile : : netherStalk_Id ;
const int Tile : : enchantTable_Id ;
const int Tile : : brewingStand_Id ;
const int Tile : : cauldron_Id ;
const int Tile : : endPortalTile_Id ;
const int Tile : : endPortalFrameTile_Id ;
2026-03-03 03:04:10 +08:00
const int Tile : : endStone_Id ;
2026-03-01 12:16:08 +08:00
const int Tile : : dragonEgg_Id ;
const int Tile : : redstoneLight_Id ;
const int Tile : : redstoneLight_lit_Id ;
const int Tile : : woodSlab_Id ;
const int Tile : : woodSlabHalf_Id ;
const int Tile : : cocoa_Id ;
const int Tile : : stairs_sandstone_Id ;
const int Tile : : stairs_sprucewood_Id ;
const int Tile : : stairs_birchwood_Id ;
const int Tile : : stairs_junglewood_Id ;
const int Tile : : emeraldOre_Id ;
const int Tile : : enderChest_Id ;
const int Tile : : tripWireSource_Id ;
const int Tile : : tripWire_Id ;
const int Tile : : emeraldBlock_Id ;
const int Tile : : cobbleWall_Id ;
const int Tile : : flowerPot_Id ;
const int Tile : : carrots_Id ;
const int Tile : : potatoes_Id ;
const int Tile : : anvil_Id ;
const int Tile : : button_wood_Id ;
const int Tile : : skull_Id ;
const int Tile : : netherQuartz_Id ;
const int Tile : : quartzBlock_Id ;
const int Tile : : stairs_quartz_Id ;
const int Tile : : woolCarpet_Id ;
# endif