the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 1705 lines 89 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.stats.h" 3#include "net.minecraft.locale.h" 4#include "net.minecraft.world.entity.h" 5#include "net.minecraft.world.entity.item.h" 6#include "net.minecraft.world.entity.player.h" 7#include "net.minecraft.world.item.h" 8#include "net.minecraft.world.item.enchantment.h" 9#include "net.minecraft.world.level.material.h" 10#include "net.minecraft.world.level.tile.h" 11#include "net.minecraft.world.level.tile.entity.h" 12#include "net.minecraft.world.level.h" 13#include "net.minecraft.world.level.redstone.h" 14#include "net.minecraft.world.phys.h" 15#include "net.minecraft.world.food.h" 16#include "net.minecraft.world.h" 17#include "net.minecraft.h" 18#include "Tile.h" 19 20wstring Tile::TILE_DESCRIPTION_PREFIX = L"Tile."; 21 22const float Tile::INDESTRUCTIBLE_DESTROY_TIME = -1.0f; 23 24Tile::SoundType *Tile::SOUND_NORMAL = NULL; 25Tile::SoundType *Tile::SOUND_WOOD = NULL; 26Tile::SoundType *Tile::SOUND_GRAVEL = NULL; 27Tile::SoundType *Tile::SOUND_GRASS = NULL; 28Tile::SoundType *Tile::SOUND_STONE = NULL; 29Tile::SoundType *Tile::SOUND_METAL = NULL; 30Tile::SoundType *Tile::SOUND_GLASS = NULL; 31Tile::SoundType *Tile::SOUND_CLOTH = NULL; 32Tile::SoundType *Tile::SOUND_SAND = NULL; 33Tile::SoundType *Tile::SOUND_SNOW = NULL; 34Tile::SoundType *Tile::SOUND_LADDER = NULL; 35Tile::SoundType *Tile::SOUND_ANVIL = NULL; 36 37bool Tile::solid[TILE_NUM_COUNT]; 38int Tile::lightBlock[TILE_NUM_COUNT]; 39bool Tile::transculent[TILE_NUM_COUNT]; 40int Tile::lightEmission[TILE_NUM_COUNT]; 41unsigned char Tile::_sendTileData[TILE_NUM_COUNT]; // 4J changed - was bool, now bitfield to indicate which bits are important to be sent 42bool Tile::mipmapEnable[TILE_NUM_COUNT]; 43bool Tile::propagate[TILE_NUM_COUNT]; 44 45Tile **Tile::tiles = NULL; 46 47Tile *Tile::stone = NULL; 48GrassTile *Tile::grass = NULL; 49Tile *Tile::dirt = NULL; 50Tile *Tile::cobblestone = NULL; 51Tile *Tile::wood = NULL; 52Tile *Tile::sapling = NULL; 53Tile *Tile::unbreakable = NULL; 54LiquidTile *Tile::water = NULL; 55Tile *Tile::calmWater = NULL; 56LiquidTile *Tile::lava = NULL; 57Tile *Tile::calmLava = NULL; 58Tile *Tile::sand = NULL; 59Tile *Tile::gravel = NULL; 60Tile *Tile::goldOre = NULL; 61Tile *Tile::ironOre = NULL; 62Tile *Tile::coalOre = NULL; 63Tile *Tile::treeTrunk = NULL; 64LeafTile *Tile::leaves = NULL; 65Tile *Tile::sponge = NULL; 66Tile *Tile::glass = NULL; 67Tile *Tile::lapisOre = NULL; 68Tile *Tile::lapisBlock = NULL; 69Tile *Tile::dispenser = NULL; 70Tile *Tile::sandStone = NULL; 71Tile *Tile::noteblock = NULL; 72Tile *Tile::bed = NULL; 73Tile *Tile::goldenRail = NULL; 74Tile *Tile::detectorRail = NULL; 75PistonBaseTile *Tile::pistonStickyBase = NULL; 76Tile *Tile::web = NULL; 77TallGrass *Tile::tallgrass = NULL; 78DeadBushTile *Tile::deadBush = NULL; 79PistonBaseTile *Tile::pistonBase = NULL; 80PistonExtensionTile *Tile::pistonExtension = NULL; 81Tile *Tile::wool = NULL; 82PistonMovingPiece *Tile::pistonMovingPiece = NULL; 83Bush *Tile::flower = NULL; 84Bush *Tile::rose = NULL; 85Bush *Tile::mushroom_brown = NULL; 86Bush *Tile::mushroom_red = NULL; 87Tile *Tile::goldBlock = NULL; 88Tile *Tile::ironBlock = NULL; 89HalfSlabTile *Tile::stoneSlab = NULL; 90HalfSlabTile *Tile::stoneSlabHalf = NULL; 91Tile *Tile::redBrick = NULL; 92Tile *Tile::tnt = NULL; 93Tile *Tile::bookshelf = NULL; 94Tile *Tile::mossyCobblestone = NULL; 95Tile *Tile::obsidian = NULL; 96Tile *Tile::torch = NULL; 97FireTile *Tile::fire = NULL; 98Tile *Tile::mobSpawner = NULL; 99Tile *Tile::stairs_wood = NULL; 100ChestTile *Tile::chest = NULL; 101RedStoneDustTile *Tile::redStoneDust = NULL; 102Tile *Tile::diamondOre = NULL; 103Tile *Tile::diamondBlock = NULL; 104Tile *Tile::workBench = NULL; 105Tile *Tile::wheat = NULL; 106Tile *Tile::farmland = NULL; 107Tile *Tile::furnace = NULL; 108Tile *Tile::furnace_lit = NULL; 109Tile *Tile::sign = NULL; 110Tile *Tile::door_wood = NULL; 111Tile *Tile::ladder = NULL; 112Tile *Tile::rail = NULL; 113Tile *Tile::stairs_stone = NULL; 114Tile *Tile::wallSign = NULL; 115Tile *Tile::lever = NULL; 116Tile *Tile::pressurePlate_stone = NULL; 117Tile *Tile::door_iron = NULL; 118Tile *Tile::pressurePlate_wood = NULL; 119Tile *Tile::redStoneOre = NULL; 120Tile *Tile::redStoneOre_lit = NULL; 121Tile *Tile::redstoneTorch_off = NULL; 122Tile *Tile::redstoneTorch_on = NULL; 123Tile *Tile::button = NULL; 124Tile *Tile::topSnow = NULL; 125Tile *Tile::ice = NULL; 126Tile *Tile::snow = NULL; 127Tile *Tile::cactus = NULL; 128Tile *Tile::clay = NULL; 129Tile *Tile::reeds = NULL; 130Tile *Tile::jukebox = NULL; 131Tile *Tile::fence = NULL; 132Tile *Tile::pumpkin = NULL; 133Tile *Tile::netherRack = NULL; 134Tile *Tile::soulsand = NULL; 135Tile *Tile::glowstone = NULL; 136PortalTile *Tile::portalTile = NULL; 137Tile *Tile::litPumpkin = NULL; 138Tile *Tile::cake = NULL; 139RepeaterTile *Tile::diode_off = NULL; 140RepeaterTile *Tile::diode_on = NULL; 141Tile *Tile::stained_glass = NULL; 142Tile *Tile::trapdoor = NULL; 143 144Tile *Tile::monsterStoneEgg = NULL; 145Tile *Tile::stoneBrick = NULL; 146Tile *Tile::hugeMushroom_brown = NULL; 147Tile *Tile::hugeMushroom_red = NULL; 148Tile *Tile::ironFence = NULL; 149Tile *Tile::thinGlass = NULL; 150Tile *Tile::melon = NULL; 151Tile *Tile::pumpkinStem = NULL; 152Tile *Tile::melonStem = NULL; 153Tile *Tile::vine = NULL; 154Tile *Tile::fenceGate = NULL; 155Tile *Tile::stairs_bricks = NULL; 156Tile *Tile::stairs_stoneBrickSmooth = NULL; 157 158MycelTile *Tile::mycel = NULL; 159Tile *Tile::waterLily = NULL; 160Tile *Tile::netherBrick = NULL; 161Tile *Tile::netherFence = NULL; 162Tile *Tile::stairs_netherBricks = NULL; 163Tile *Tile::netherStalk = NULL; 164Tile *Tile::enchantTable = NULL; 165Tile *Tile::brewingStand = NULL; 166CauldronTile *Tile::cauldron = NULL; 167Tile *Tile::endPortalTile = NULL; 168Tile *Tile::endPortalFrameTile = NULL; 169Tile *Tile::endStone = NULL; 170Tile *Tile::dragonEgg = NULL; 171Tile *Tile::redstoneLight = NULL; 172Tile *Tile::redstoneLight_lit = NULL; 173 174// TU9 175Tile *Tile::stairs_sandstone = NULL; 176Tile *Tile::woodStairsDark = NULL; 177Tile *Tile::woodStairsBirch = NULL; 178Tile *Tile::woodStairsJungle = NULL; 179Tile *Tile::commandBlock = NULL; 180BeaconTile *Tile::beacon = NULL; 181Tile *Tile::button_wood = NULL; 182HalfSlabTile *Tile::woodSlab = NULL; 183HalfSlabTile *Tile::woodSlabHalf = NULL; 184 185Tile *Tile::emeraldOre = NULL; 186Tile *Tile::enderChest = NULL; 187TripWireSourceTile *Tile::tripWireSource = NULL; 188Tile *Tile::tripWire = NULL; 189Tile *Tile::emeraldBlock = NULL; 190 191 192Tile *Tile::cocoa = NULL; 193Tile *Tile::skull = NULL; 194 195Tile *Tile::cobbleWall = NULL; 196Tile *Tile::flowerPot = NULL; 197Tile *Tile::carrots = NULL; 198Tile *Tile::potatoes = NULL; 199Tile *Tile::anvil = NULL; 200Tile *Tile::chest_trap = NULL; 201Tile *Tile::weightedPlate_light = NULL; 202Tile *Tile::weightedPlate_heavy = NULL; 203ComparatorTile *Tile::comparator_off = NULL; 204ComparatorTile *Tile::comparator_on = NULL; 205 206DaylightDetectorTile *Tile::daylightDetector = NULL; 207Tile *Tile::redstoneBlock = NULL; 208 209Tile *Tile::netherQuartz = NULL; 210HopperTile *Tile::hopper = NULL; 211Tile *Tile::quartzBlock = NULL; 212Tile *Tile::stairs_quartz = NULL; 213Tile *Tile::activatorRail = NULL; 214Tile *Tile::dropper = NULL; 215Tile *Tile::clayHardened_colored = NULL; 216Tile *Tile::stained_glass_pane = NULL; 217 218Tile *Tile::hayBlock = NULL; 219Tile *Tile::woolCarpet = NULL; 220Tile *Tile::clayHardened = NULL; 221Tile *Tile::coalBlock = NULL; 222 223DWORD Tile::tlsIdxShape = TlsAlloc(); 224 225Tile::ThreadStorage::ThreadStorage() 226{ 227 xx0 = yy0 = zz0 = xx1 = yy1 = zz1 = 0.0; 228 tileId = 0; 229} 230 231void Tile::CreateNewThreadStorage() 232{ 233 ThreadStorage *tls = new ThreadStorage(); 234 TlsSetValue(Tile::tlsIdxShape, tls); 235} 236 237void Tile::ReleaseThreadStorage() 238{ 239 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 240 delete tls; 241} 242 243void Tile::staticCtor() 244{ 245 Tile::SOUND_NORMAL = new Tile::SoundType(eMaterialSoundType_STONE, 1, 1); 246 Tile::SOUND_WOOD = new Tile::SoundType(eMaterialSoundType_WOOD, 1, 1); 247 Tile::SOUND_GRAVEL = new Tile::SoundType(eMaterialSoundType_GRAVEL, 1, 1); 248 Tile::SOUND_GRASS = new Tile::SoundType(eMaterialSoundType_GRASS, 1, 1); 249 Tile::SOUND_STONE = new Tile::SoundType(eMaterialSoundType_STONE, 1, 1); 250 Tile::SOUND_METAL = new Tile::SoundType(eMaterialSoundType_STONE, 1, 1.5f); 251 Tile::SOUND_GLASS = new Tile::SoundType(eMaterialSoundType_STONE, 1, 1, eSoundType_RANDOM_GLASS,eSoundType_STEP_STONE); 252 Tile::SOUND_CLOTH = new Tile::SoundType(eMaterialSoundType_CLOTH, 1, 1); 253 Tile::SOUND_SAND = new Tile::SoundType(eMaterialSoundType_SAND, 1, 1); 254 Tile::SOUND_SNOW = new Tile::SoundType(eMaterialSoundType_SNOW, 1, 1); 255 Tile::SOUND_LADDER = new Tile::SoundType(eMaterialSoundType_LADDER, 1, 1,eSoundType_DIG_WOOD); 256 Tile::SOUND_ANVIL = new Tile::SoundType(eMaterialSoundType_ANVIL, 0.3f, 1, eSoundType_DIG_STONE, eSoundType_RANDOM_ANVIL_LAND); 257 258 Tile::tiles = new Tile *[TILE_NUM_COUNT]; 259 memset( tiles, 0, sizeof( Tile *)*TILE_NUM_COUNT ); 260 261 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); 262 Tile::grass = (GrassTile *) (new GrassTile(2)) ->setDestroyTime(0.6f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"grass")->setDescriptionId(IDS_TILE_GRASS)->setUseDescriptionId(IDS_DESC_GRASS); 263 Tile::dirt = (new DirtTile(3)) ->setDestroyTime(0.5f)->setSoundType(Tile::SOUND_GRAVEL)->setIconName(L"dirt")->setDescriptionId(IDS_TILE_DIRT)->setUseDescriptionId(IDS_DESC_DIRT); 264 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); 265 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); 266 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(); 267 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); 268 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); 269 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); 270 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); 271 272 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); 273 Tile::sand = (new HeavyTile(12)) ->setDestroyTime(0.5f)->setSoundType(Tile::SOUND_SAND)->setIconName(L"sand")->setDescriptionId(IDS_TILE_SAND)->setUseDescriptionId(IDS_DESC_SAND); 274 Tile::gravel = (new GravelTile(13)) ->setDestroyTime(0.6f)->setSoundType(Tile::SOUND_GRAVEL)->setIconName(L"gravel")->setDescriptionId(IDS_TILE_GRAVEL)->setUseDescriptionId(IDS_DESC_GRAVEL); 275 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); 276 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); 277 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); 278 Tile::treeTrunk = (new TreeTile(17))->setDestroyTime(2.0f) ->setSoundType(Tile::SOUND_WOOD)->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->sendTileData()->setUseDescriptionId(IDS_DESC_LOG); 279 // 4J - for leaves, have specified that only the data bits that encode the type of leaf are important to be sent 280 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); 281 Tile::sponge = (new Sponge(19)) ->setDestroyTime(0.6f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"sponge")->setDescriptionId(IDS_TILE_SPONGE)->setUseDescriptionId(IDS_DESC_SPONGE); 282 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); 283 284 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); 285 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); 286 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); 287 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(); 288 Tile::noteblock = (new NoteBlockTile(25)) ->setDestroyTime(0.8f)->setIconName(L"noteblock")->setDescriptionId(IDS_TILE_MUSIC_BLOCK)->sendTileData()->setUseDescriptionId(IDS_DESC_NOTEBLOCK); 289 Tile::bed = (new BedTile(26)) ->setDestroyTime(0.2f)->setIconName(L"bed")->setDescriptionId(IDS_TILE_BED)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_BED); 290 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(); 291 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(); 292 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(); 293 Tile::web = (new WebTile(30)) ->setLightBlock(1)->setDestroyTime(4.0f)->setIconName(L"web")->setDescriptionId(IDS_TILE_WEB)->setUseDescriptionId(IDS_DESC_WEB); 294 295 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(); 296 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(); 297 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(); 298 Tile::pistonExtension = (PistonExtensionTile *)(new PistonExtensionTile(34))->setDescriptionId(IDS_TILE_PISTON_BASE)->setUseDescriptionId(-1)->sendTileData(); 299 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); 300 Tile::pistonMovingPiece = (PistonMovingPiece *)(new PistonMovingPiece(36)) ->setDescriptionId(IDS_TILE_PISTON_BASE)->setUseDescriptionId(-1); 301 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(); 302 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(); 303 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(); 304 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(); 305 306 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); 307 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); 308 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); 309 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); 310 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); 311 Tile::tnt = (new TntTile(46)) ->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"tnt")->setDescriptionId(IDS_TILE_TNT)->setUseDescriptionId(IDS_DESC_TNT); 312 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); 313 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); 314 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); 315 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(); 316 317 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); 318 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); 319 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); 320 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); 321 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); 322 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); 323 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); 324 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); 325 Tile::wheat = (new CropTile(59)) ->setIconName(L"wheat")->setDescriptionId(IDS_TILE_CROPS)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_CROPS)->disableMipmap(); 326 Tile::farmland = (new FarmTile(60)) ->setDestroyTime(0.6f)->setSoundType(Tile::SOUND_GRAVEL)->setIconName(L"farmland")->setDescriptionId(IDS_TILE_FARMLAND)->setUseDescriptionId(IDS_DESC_FARMLAND)->sendTileData(); 327 328 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); 329 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); 330 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); 331 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); 332 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(); 333 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(); 334 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); 335 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); 336 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); 337 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); 338 339 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); 340 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); 341 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); 342 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); 343 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(); 344 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(); 345 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); 346 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); 347 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); 348 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); 349 350 Tile::cactus = (new CactusTile(81)) ->setDestroyTime(0.4f)->setSoundType(Tile::SOUND_CLOTH)->setIconName(L"cactus")->setDescriptionId(IDS_TILE_CACTUS)->setUseDescriptionId(IDS_DESC_CACTUS)->disableMipmap(); 351 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); 352 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(); 353 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); 354 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); 355 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); 356 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); 357 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); 358 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); 359 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); 360 361 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); 362 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); 363 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(); 364 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(); 365 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); 366 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); 367 Tile::monsterStoneEgg = (new StoneMonsterTile(97)) ->setDestroyTime(0.75f)->setIconName(L"monsterStoneEgg")->setDescriptionId(IDS_TILE_STONE_SILVERFISH)->setUseDescriptionId(IDS_DESC_STONE_SILVERFISH); 368 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); 369 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(); 370 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(); 371 372 373 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); 374 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); 375 Tile::melon = (new MelonTile(103)) ->setDestroyTime(1.0f)->setSoundType(SOUND_WOOD)->setIconName(L"melon")->setDescriptionId(IDS_TILE_MELON)->setUseDescriptionId(IDS_DESC_MELON_BLOCK); 376 Tile::pumpkinStem = (new StemTile(104, Tile::pumpkin)) ->setDestroyTime(0.0f)->setSoundType(SOUND_WOOD)->setIconName(L"pumpkin_stem")->setDescriptionId(IDS_TILE_PUMPKIN_STEM)->sendTileData(); 377 Tile::melonStem = (new StemTile(105, Tile::melon)) ->setDestroyTime(0.0f)->setSoundType(SOUND_WOOD)->setIconName(L"melon_stem")->setDescriptionId(IDS_TILE_MELON_STEM)->sendTileData(); 378 Tile::vine = (new VineTile(106))->setDestroyTime(0.2f) ->setSoundType(SOUND_GRASS)->setIconName(L"vine")->setDescriptionId(IDS_TILE_VINE)->setUseDescriptionId(IDS_DESC_VINE)->sendTileData(); 379 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); 380 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); 381 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); 382 Tile::mycel = (MycelTile *)(new MycelTile(110)) ->setDestroyTime(0.6f)->setSoundType(SOUND_GRASS)->setIconName(L"mycelium")->setDescriptionId(IDS_TILE_MYCEL)->setUseDescriptionId(IDS_DESC_MYCEL); 383 384 Tile::waterLily = (new WaterlilyTile(111)) ->setDestroyTime(0.0f)->setSoundType(SOUND_GRASS)->setIconName(L"waterlily")->setDescriptionId(IDS_TILE_WATERLILY)->setUseDescriptionId(IDS_DESC_WATERLILY); 385 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); 386 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); 387 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); 388 Tile::netherStalk = (new NetherWartTile(115)) ->setIconName(L"nether_wart")->setDescriptionId(IDS_TILE_NETHERSTALK)->sendTileData()->setUseDescriptionId(IDS_DESC_NETHERSTALK); 389 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); 390 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); 391 Tile::cauldron = (CauldronTile *)(new CauldronTile(118)) ->setDestroyTime(2.0f)->setIconName(L"cauldron")->setDescriptionId(IDS_TILE_CAULDRON)->sendTileData()->setUseDescriptionId(IDS_DESC_CAULDRON); 392 Tile::endPortalTile = (new TheEndPortal(119, Material::portal)) ->setDestroyTime(INDESTRUCTIBLE_DESTROY_TIME)->setExplodeable(6000000)->setDescriptionId(IDS_TILE_END_PORTAL)->setUseDescriptionId(IDS_DESC_END_PORTAL); 393 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); 394 395 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); 396 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); 397 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); 398 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); 399 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); 400 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); 401 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); 402 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); 403 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); 404 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); 405 406 407 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); 408 Tile::tripWire = (new TripWireTile(132)) ->setIconName(L"trip_wire")->sendTileData()->setDescriptionId(IDS_TILE_TRIPWIRE)->setUseDescriptionId(IDS_DESC_TRIPWIRE); 409 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); 410 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); 411 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); 412 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); 413 Tile::commandBlock = (new CommandBlock(137)) ->setIndestructible()->setExplodeable(6000000)->setIconName(L"command_block")->setDescriptionId(IDS_TILE_COMMAND_BLOCK)->setUseDescriptionId(IDS_DESC_COMMAND_BLOCK); 414 Tile::beacon = (BeaconTile *) (new BeaconTile(138)) ->setLightEmission(1.0f)->setIconName(L"beacon")->setDescriptionId(IDS_TILE_BEACON)->setUseDescriptionId(IDS_DESC_BEACON); 415 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); 416 Tile::flowerPot = (new FlowerPotTile(140)) ->setDestroyTime(0.0f)->setSoundType(SOUND_NORMAL)->setIconName(L"flower_pot")->setDescriptionId(IDS_TILE_FLOWERPOT)->setUseDescriptionId(IDS_DESC_FLOWERPOT); 417 418 Tile::carrots = (new CarrotTile(141)) ->setIconName(L"carrots")->setDescriptionId(IDS_TILE_CARROTS)->setUseDescriptionId(IDS_DESC_CARROTS)->disableMipmap(); 419 Tile::potatoes = (new PotatoTile(142)) ->setIconName(L"potatoes")->setDescriptionId(IDS_TILE_POTATOES)->setUseDescriptionId(IDS_DESC_POTATO)->disableMipmap(); 420 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); 421 Tile::skull = (new SkullTile(144)) ->setDestroyTime(1.0f)->setSoundType(SOUND_STONE)->setIconName(L"skull")->setDescriptionId(IDS_TILE_SKULL)->setUseDescriptionId(IDS_DESC_SKULL); 422 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); 423 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); 424 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); 425 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); 426 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); 427 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); 428 429 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); 430 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); 431 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); 432 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); 433 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); 434 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); 435 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); 436 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); 437 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); 438 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); 439 440 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); 441 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); 442 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); 443 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); 444 445 446 // Special cases for certain items since they can have different icons 447 Item::items[wool_Id] = ( new WoolTileItem(Tile::wool_Id- 256) )->setIconName(L"cloth")->setDescriptionId(IDS_TILE_CLOTH)->setUseDescriptionId(IDS_DESC_WOOL); 448 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); 449 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); 450 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); 451 Item::items[woolCarpet_Id] = ( new WoolTileItem(Tile::woolCarpet_Id - 256))->setIconName(L"woolCarpet")->setDescriptionId(IDS_TILE_CARPET)->setUseDescriptionId(IDS_DESC_CARPET); 452 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); 453 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 454 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 455 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); 456 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); 457 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); 458 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); 459 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); 460 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); 461 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); 462 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); 463 Item::items[leaves_Id] = ( new LeafTileItem(Tile::leaves_Id - 256) )->setIconName(L"leaves")->setDescriptionId(IDS_TILE_LEAVES)->setUseDescriptionId(IDS_DESC_LEAVES); 464 Item::items[vine_Id] = ( new ColoredTileItem(Tile::vine_Id - 256, false))->setDescriptionId(IDS_TILE_VINE)->setUseDescriptionId(IDS_DESC_VINE); 465 int idsData[3] = {IDS_TILE_SHRUB, IDS_TILE_TALL_GRASS, IDS_TILE_FERN}; 466 intArray ids = intArray(idsData, 3); 467 Item::items[tallgrass_Id] = ( (ColoredTileItem *)(new ColoredTileItem(Tile::tallgrass_Id - 256, true))->setDescriptionId(IDS_TILE_TALL_GRASS))->setDescriptionPostfixes(ids); 468 Item::items[topSnow_Id] = ( new SnowItem(topSnow_Id - 256, topSnow) ); 469 Item::items[waterLily_Id] = ( new WaterLilyTileItem(Tile::waterLily_Id - 256)); 470 Item::items[pistonBase_Id] = ( new PistonTileItem(Tile::pistonBase_Id - 256) )->setDescriptionId(IDS_TILE_PISTON_BASE)->setUseDescriptionId(IDS_DESC_PISTON); 471 Item::items[pistonStickyBase_Id] = ( new PistonTileItem(Tile::pistonStickyBase_Id - 256) )->setDescriptionId(IDS_TILE_PISTON_STICK_BASE)->setUseDescriptionId(IDS_DESC_STICKY_PISTON); 472 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); 473 Item::items[anvil_Id] = ( new AnvilTileItem(anvil) )->setDescriptionId(IDS_TILE_ANVIL)->setUseDescriptionId(IDS_DESC_ANVIL); 474 475 476 for (int i = 0; i < 256; i++) 477 { 478 if ( Tile::tiles[i] != NULL ) 479 { 480 if( Item::items[i] == NULL) 481 { 482 Item::items[i] = new TileItem(i - 256); 483 Tile::tiles[i]->init(); 484 } 485 486 bool propagate = false; 487 if (i > 0 && Tile::tiles[i]->getRenderShape() == Tile::SHAPE_STAIRS) propagate = true; 488 if (i > 0 && dynamic_cast<HalfSlabTile *>(Tile::tiles[i]) != NULL) 489 { 490 propagate = true; 491 } 492 if (i == Tile::farmland_Id) propagate = true; 493 if (Tile::transculent[i]) 494 { 495 propagate = true; 496 } 497 if (Tile::lightBlock[i] == 0) 498 { 499 propagate = true; 500 } 501 Tile::propagate[i] = propagate; 502 } 503 } 504 Tile::transculent[0] = true; 505 506 Stats::buildItemStats(); 507 508 // */ 509} 510 511// 4J - added for common ctor code 512void Tile::_init(int id, Material *material, bool isSolidRender) 513{ 514 destroySpeed = 0.0f; 515 explosionResistance = 0.0f; 516 isInventoryItem = true; 517 collectStatistics = true; 518 519 // 4J Stu - Removed these in favour of TLS versions 520 //xx0 = yy0 = zz0 = xx1 = yy1 = zz1 = 0; 521 522 soundType = Tile::SOUND_NORMAL; 523 gravity = 1.0f; 524 friction = 0.6f; 525 _isTicking = false; 526 _isEntityTile = false; 527 528 /* 4J - TODO 529 if (Tile.tiles[id] != null) 530 { 531 throw new IllegalArgumentException("Slot " + id + " is already occupied by " + Tile.tiles[id] + " when adding " + this); 532 } 533 */ 534 this->material = material; 535 Tile::tiles[id] = this; 536 this->id = id; 537 updateDefaultShape(); 538 // 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 539 // derived ctors 540 solid[id] = isSolidRender; 541 lightBlock[id] = isSolidRender ? 255 : 0; 542 transculent[id] = !material->blocksLight(); 543 mipmapEnable[id] = true; // 4J added 544 iconName = L""; 545} 546 547Tile::Tile(int id, Material *material, bool isSolidRender) 548{ 549 _init(id,material, isSolidRender); 550 m_iMaterial=Item::eMaterial_undefined; 551 m_iBaseItemType=Item::eBaseItemType_undefined; 552 icon = NULL; 553} 554 555Tile *Tile::sendTileData(unsigned char importantMask/*=15*/) 556{ 557 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 558 return this; 559} 560 561void Tile::init() 562{ 563} 564 565 566// 4J-PB - adding so we can class different items together for the new crafting menu 567// so pickaxe_stone would get tagged with pickaxe and stone 568Tile *Tile::setBaseItemTypeAndMaterial(int iType,int iMaterial) 569{ 570 this->m_iBaseItemType = iType; 571 this->m_iMaterial = iMaterial; 572 return this; 573} 574 575int Tile::getBaseItemType() 576{ 577 return this->m_iBaseItemType; 578} 579 580int Tile::getMaterial() 581{ 582 return this->m_iMaterial; 583} 584 585 586Tile *Tile::setSoundType(const SoundType *soundType) 587{ 588 this->soundType = soundType; 589 return this; 590} 591 592Tile *Tile::setLightBlock(int i) 593{ 594 lightBlock[id] = i; 595 return this; 596} 597 598Tile *Tile::setLightEmission(float f) 599{ 600 Tile::lightEmission[id] = (int) (Level::MAX_BRIGHTNESS * f); 601 return this; 602} 603 604Tile *Tile::setExplodeable(float explosionResistance) 605{ 606 this->explosionResistance = explosionResistance * 3; 607 return this; 608} 609 610bool Tile::isSolidBlockingTile(int t) 611{ 612 Tile *tile = Tile::tiles[t]; 613 if (tile == NULL) return false; 614 return tile->material->isSolidBlocking() && tile->isCubeShaped() && !tile->isSignalSource(); 615} 616 617bool Tile::isCubeShaped() 618{ 619 return true; 620} 621 622bool Tile::isPathfindable(LevelSource *level, int x, int y, int z) 623{ 624 return !material->blocksMotion(); 625} 626 627int Tile::getRenderShape() 628{ 629 return SHAPE_BLOCK; 630} 631 632Tile *Tile::setDestroyTime(float destroySpeed) 633{ 634 this->destroySpeed = destroySpeed; 635 if (explosionResistance < destroySpeed * 5) explosionResistance = destroySpeed * 5; 636 return this; 637} 638 639Tile *Tile::setIndestructible() 640{ 641 setDestroyTime(INDESTRUCTIBLE_DESTROY_TIME); 642 return this; 643} 644 645float Tile::getDestroySpeed(Level *level, int x, int y, int z) 646{ 647 return destroySpeed; 648} 649 650Tile *Tile::setTicking(bool tick) 651{ 652 _isTicking = tick; 653 return this; 654} 655 656bool Tile::isTicking() 657{ 658 return _isTicking; 659} 660 661bool Tile::isEntityTile() 662{ 663 return _isEntityTile; 664} 665 666Tile *Tile::disableMipmap() 667{ 668 mipmapEnable[id] = false; 669 return this; 670} 671 672void Tile::setShape(float x0, float y0, float z0, float x1, float y1, float z1) 673{ 674 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 675 tls->xx0 = x0; 676 tls->yy0 = y0; 677 tls->zz0 = z0; 678 tls->xx1 = x1; 679 tls->yy1 = y1; 680 tls->zz1 = z1; 681 tls->tileId = this->id; 682 683 //this->xx0 = x0; 684 //this->yy0 = y0; 685 //this->zz0 = z0; 686 //this->xx1 = x1; 687 //this->yy1 = y1; 688 //this->zz1 = z1; 689} 690 691float Tile::getBrightness(LevelSource *level, int x, int y, int z) 692{ 693 // 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 694 return level->getBrightness(x, y, z, lightEmission[level->getTile(x,y,z)]); 695} 696 697// 4J - brought forward from 1.8.2 698int Tile::getLightColor(LevelSource *level, int x, int y, int z, int tileId/*=-1*/) 699{ 700 // 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 701 if( tileId == -1 ) 702 { 703 return level->getLightColor(x, y, z, lightEmission[level->getTile(x,y,z)], -1); 704 } 705 else 706 { 707 return level->getLightColor(x, y, z, lightEmission[tileId], tileId); 708 } 709} 710 711bool Tile::isFaceVisible(Level *level, int x, int y, int z, int f) 712{ 713 if (f == 0) y--; 714 if (f == 1) y++; 715 if (f == 2) z--; 716 if (f == 3) z++; 717 if (f == 4) x--; 718 if (f == 5) x++; 719 return !level->isSolidRenderTile(x, y, z); 720} 721 722bool Tile::shouldRenderFace(LevelSource *level, int x, int y, int z, int face) 723{ 724 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 725 // 4J Stu - Added this so that the TLS shape is correct for this tile 726 if(tls->tileId != this->id) updateDefaultShape(); 727 if (face == 0 && tls->yy0 > 0) return true; 728 if (face == 1 && tls->yy1 < 1) return true; 729 if (face == 2 && tls->zz0 > 0) return true; 730 if (face == 3 && tls->zz1 < 1) return true; 731 if (face == 4 && tls->xx0 > 0) return true; 732 if (face == 5 && tls->xx1 < 1) return true; 733 return (!level->isSolidRenderTile(x, y, z)); 734} 735 736// AP - added this function so we can generate the faceFlags for a block in a single fast function 737int Tile::getFaceFlags(LevelSource *level, int x, int y, int z) 738{ 739 int faceFlags = 0; 740 741 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 742 // 4J Stu - Added this so that the TLS shape is correct for this tile 743 if(tls->tileId != this->id) updateDefaultShape(); 744 745 if( tls->yy0 > 0 || (!level->isSolidRenderTile(x, y - 1, z))) faceFlags |= 0x01; 746 if( tls->yy1 < 1 || (!level->isSolidRenderTile(x, y + 1, z))) faceFlags |= 0x02; 747 if( tls->zz0 > 0 || (!level->isSolidRenderTile(x, y, z - 1))) faceFlags |= 0x04; 748 if( tls->zz1 < 1 || (!level->isSolidRenderTile(x, y, z + 1))) faceFlags |= 0x08; 749 if( tls->xx0 > 0 || (!level->isSolidRenderTile(x - 1, y, z))) faceFlags |= 0x10; 750 if( tls->xx1 < 1 || (!level->isSolidRenderTile(x + 1, y, z))) faceFlags |= 0x20; 751 752 return faceFlags; 753} 754 755bool Tile::isSolidFace(LevelSource *level, int x, int y, int z, int face) 756{ 757 return (level->getMaterial(x, y, z)->isSolid()); 758} 759 760Icon *Tile::getTexture(LevelSource *level, int x, int y, int z, int face) 761{ 762 // 4J - addition here to make rendering big blocks of leaves more efficient. Normally leaves never consider themselves as solid, so 763 // blocks of leaves will have all sides of each block completely visible. Changing to consider as solid if this block is surrounded by 764 // other leaves (or solid things). This is paired with another change in Level::isSolidRenderTile/Region::isSolidRenderTile which makes things solid 765 // code-wise (ie for determining visible sides of neighbouring blocks). This change just makes the texture a solid one (tex + 1) which 766 // 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 767 // method in the tiles, for the sake of efficiency - I don't imagine we'll be doing much more of this sort of thing 768 769 int tileId = level->getTile(x, y, z); 770 int tileData = level->getData(x, y, z); 771 772 if( tileId == Tile::leaves_Id ) 773 { 774 bool opaque = true; 775 776 int axo[6] = { 1,-1, 0, 0, 0, 0}; 777 int ayo[6] = { 0, 0, 1,-1, 0, 0}; 778 int azo[6] = { 0, 0, 0, 0, 1,-1}; 779 for( int i = 0; (i < 6) && opaque; i++ ) 780 { 781 int t = level->getTile(x + axo[i], y + ayo[i] , z + azo[i]); 782 if( ( t != Tile::leaves_Id ) && ( ( Tile::tiles[t] == NULL ) || !Tile::tiles[t]->isSolidRender() ) ) 783 { 784 opaque = false; 785 } 786 } 787 788 Icon *icon = NULL; 789 if(opaque) 790 { 791 Tile::leaves->setFancy(false); 792 icon = getTexture(face, tileData); 793 Tile::leaves->setFancy(true); 794 } 795 else 796 { 797 icon = getTexture(face, tileData); 798 } 799 return icon; 800 } 801 return getTexture(face, tileData); 802} 803 804Icon *Tile::getTexture(int face, int data) 805{ 806 return icon; 807} 808 809Icon *Tile::getTexture(int face) 810{ 811 return getTexture(face, 0); 812} 813 814AABB *Tile::getTileAABB(Level *level, int x, int y, int z) 815{ 816 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 817 // 4J Stu - Added this so that the TLS shape is correct for this tile 818 if(tls->tileId != this->id) updateDefaultShape(); 819 return AABB::newTemp(x + tls->xx0, y + tls->yy0, z + tls->zz0, x + tls->xx1, y + tls->yy1, z + tls->zz1); 820} 821 822void Tile::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, shared_ptr<Entity> source) 823{ 824 AABB *aabb = getAABB(level, x, y, z); 825 if (aabb != NULL && box->intersects(aabb)) boxes->push_back(aabb); 826} 827 828AABB *Tile::getAABB(Level *level, int x, int y, int z) 829{ 830 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 831 // 4J Stu - Added this so that the TLS shape is correct for this tile 832 if(tls->tileId != this->id) updateDefaultShape(); 833 return AABB::newTemp(x + tls->xx0, y + tls->yy0, z + tls->zz0, x + tls->xx1, y + tls->yy1, z + tls->zz1); 834} 835 836bool Tile::isSolidRender(bool isServerLevel) 837{ 838 return true; 839} 840 841bool Tile::mayPick(int data, bool liquid) 842{ 843 return mayPick(); 844} 845 846bool Tile::mayPick() 847{ 848 return true; 849} 850 851void Tile::tick(Level *level, int x, int y, int z, Random *random) 852{ 853} 854 855void Tile::animateTick(Level *level, int x, int y, int z, Random *random) 856{ 857} 858 859void Tile::destroy(Level *level, int x, int y, int z, int data) 860{ 861} 862 863void Tile::neighborChanged(Level *level, int x, int y, int z, int type) 864{ 865} 866 867void Tile::addLights(Level *level, int x, int y, int z) 868{ 869} 870 871int Tile::getTickDelay(Level *level) 872{ 873 return 10; 874} 875 876void Tile::onPlace(Level *level, int x, int y, int z) 877{ 878} 879 880void Tile::onRemove(Level *level, int x, int y, int z, int id, int data) 881{ 882} 883 884int Tile::getResourceCount(Random *random) 885{ 886 return 1; 887} 888 889int Tile::getResource(int data, Random *random, int playerBonusLevel) 890{ 891 return id; 892} 893 894float Tile::getDestroyProgress(shared_ptr<Player> player, Level *level, int x, int y, int z) 895{ 896 float destroySpeed = getDestroySpeed(level, x, y, z); 897 if (destroySpeed < 0) return 0; 898 if (!player->canDestroy(this)) 899 { 900 return player->getDestroySpeed(this, false) / destroySpeed / 100.0f; 901 } 902 return (player->getDestroySpeed(this, true) / destroySpeed) / 30; 903} 904 905void Tile::spawnResources(Level *level, int x, int y, int z, int data, int playerBonusLevel) 906{ 907 spawnResources(level, x, y, z, data, 1, playerBonusLevel); 908} 909 910void Tile::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel) 911{ 912 if (level->isClientSide) return; 913 int count = getResourceCountForLootBonus(playerBonusLevel, level->random); 914 for (int i = 0; i < count; i++) 915 { 916 if (level->random->nextFloat() > odds) continue; 917 int type = getResource(data, level->random, playerBonusLevel); 918 if (type <= 0) continue; 919 920 popResource(level, x, y, z, shared_ptr<ItemInstance>( new ItemInstance(type, 1, getSpawnResourcesAuxValue(data) ) ) ); 921 } 922} 923 924void Tile::popResource(Level *level, int x, int y, int z, shared_ptr<ItemInstance> itemInstance) 925{ 926 if( level->isClientSide || !level->getGameRules()->getBoolean(GameRules::RULE_DOTILEDROPS) ) return; 927 928 float s = 0.7f; 929 double xo = level->random->nextFloat() * s + (1 - s) * 0.5; 930 double yo = level->random->nextFloat() * s + (1 - s) * 0.5; 931 double zo = level->random->nextFloat() * s + (1 - s) * 0.5; 932 shared_ptr<ItemEntity> item = shared_ptr<ItemEntity>( new ItemEntity(level, x + xo, y + yo, z + zo, itemInstance ) ); 933 item->throwTime = 10; 934 level->addEntity(item); 935} 936 937// Brought forward for TU7 938void Tile::popExperience(Level *level, int x, int y, int z, int amount) 939{ 940 if (!level->isClientSide) 941 { 942 while (amount > 0) 943 { 944 int newCount = ExperienceOrb::getExperienceValue(amount); 945 amount -= newCount; 946 level->addEntity(shared_ptr<ExperienceOrb>( new ExperienceOrb(level, x + .5, y + .5, z + .5, newCount))); 947 } 948 } 949} 950 951int Tile::getSpawnResourcesAuxValue(int data) 952{ 953 return 0; 954} 955 956float Tile::getExplosionResistance(shared_ptr<Entity> source) 957{ 958 return explosionResistance / 5.0f; 959} 960 961HitResult *Tile::clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3 *b) 962{ 963 updateShape(level, xt, yt, zt); 964 965 a = a->add(-xt, -yt, -zt); 966 b = b->add(-xt, -yt, -zt); 967 968 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 969 Vec3 *xh0 = a->clipX(b, tls->xx0); 970 Vec3 *xh1 = a->clipX(b, tls->xx1); 971 972 Vec3 *yh0 = a->clipY(b, tls->yy0); 973 Vec3 *yh1 = a->clipY(b, tls->yy1); 974 975 Vec3 *zh0 = a->clipZ(b, tls->zz0); 976 Vec3 *zh1 = a->clipZ(b, tls->zz1); 977 978 Vec3 *closest = NULL; 979 980 if (containsX(xh0) && (closest == NULL || a->distanceToSqr(xh0) < a->distanceToSqr(closest))) closest = xh0; 981 if (containsX(xh1) && (closest == NULL || a->distanceToSqr(xh1) < a->distanceToSqr(closest))) closest = xh1; 982 if (containsY(yh0) && (closest == NULL || a->distanceToSqr(yh0) < a->distanceToSqr(closest))) closest = yh0; 983 if (containsY(yh1) && (closest == NULL || a->distanceToSqr(yh1) < a->distanceToSqr(closest))) closest = yh1; 984 if (containsZ(zh0) && (closest == NULL || a->distanceToSqr(zh0) < a->distanceToSqr(closest))) closest = zh0; 985 if (containsZ(zh1) && (closest == NULL || a->distanceToSqr(zh1) < a->distanceToSqr(closest))) closest = zh1; 986 987 if (closest == NULL) return NULL; 988 989 int face = -1; 990 991 if (closest == xh0) face = Facing::WEST; 992 if (closest == xh1) face = Facing::EAST; 993 if (closest == yh0) face = Facing::DOWN; 994 if (closest == yh1) face = Facing::UP; 995 if (closest == zh0) face = Facing::NORTH; 996 if (closest == zh1) face = Facing::SOUTH; 997 998 return new HitResult(xt, yt, zt, face, closest->add(xt, yt, zt)); 999} 1000 1001bool Tile::containsX(Vec3 *v) 1002{ 1003 if( v == NULL) return false; 1004 1005 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1006 // 4J Stu - Added this so that the TLS shape is correct for this tile 1007 if(tls->tileId != this->id) updateDefaultShape(); 1008 return v->y >= tls->yy0 && v->y <= tls->yy1 && v->z >= tls->zz0 && v->z <= tls->zz1; 1009} 1010 1011bool Tile::containsY(Vec3 *v) 1012{ 1013 if( v == NULL) return false; 1014 1015 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1016 // 4J Stu - Added this so that the TLS shape is correct for this tile 1017 if(tls->tileId != this->id) updateDefaultShape(); 1018 return v->x >= tls->xx0 && v->x <= tls->xx1 && v->z >= tls->zz0 && v->z <= tls->zz1; 1019} 1020 1021bool Tile::containsZ(Vec3 *v) 1022{ 1023 if( v == NULL) return false; 1024 1025 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1026 // 4J Stu - Added this so that the TLS shape is correct for this tile 1027 if(tls->tileId != this->id) updateDefaultShape(); 1028 return v->x >= tls->xx0 && v->x <= tls->xx1 && v->y >= tls->yy0 && v->y <= tls->yy1; 1029} 1030 1031void Tile::wasExploded(Level *level, int x, int y, int z, Explosion *explosion) 1032{ 1033} 1034 1035bool Tile::mayPlace(Level *level, int x, int y, int z, int face, shared_ptr<ItemInstance> item) 1036{ 1037 return mayPlace(level, x, y, z, face); 1038} 1039 1040int Tile::getRenderLayer() 1041{ 1042 return 0; 1043} 1044 1045bool Tile::mayPlace(Level *level, int x, int y, int z, int face) 1046{ 1047 return mayPlace(level, x, y, z); 1048} 1049 1050bool Tile::mayPlace(Level *level, int x, int y, int z) 1051{ 1052 int t = level->getTile(x, y, z); 1053 return t == 0 || Tile::tiles[t]->material->isReplaceable(); 1054} 1055 1056// 4J-PB - Adding a TestUse for tooltip display 1057bool Tile::TestUse() 1058{ 1059 return false; 1060} 1061 1062bool Tile::TestUse(Level *level, int x, int y, int z, shared_ptr<Player> player) 1063{ 1064 return false; 1065} 1066 1067bool 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 1068{ 1069 return false; 1070} 1071 1072void Tile::stepOn(Level *level, int x, int y, int z, shared_ptr<Entity> entity) 1073{ 1074} 1075 1076int Tile::getPlacedOnFaceDataValue(Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, int itemValue) 1077{ 1078 return itemValue; 1079} 1080 1081void Tile::prepareRender(Level *level, int x, int y, int z) 1082{ 1083} 1084 1085void Tile::attack(Level *level, int x, int y, int z, shared_ptr<Player> player) 1086{ 1087} 1088 1089void Tile::handleEntityInside(Level *level, int x, int y, int z, shared_ptr<Entity> e, Vec3 *current) 1090{ 1091} 1092 1093void Tile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param 1094{ 1095 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1096 // 4J Stu - Added this so that the TLS shape is correct for this tile 1097 if(tls->tileId != this->id) updateDefaultShape(); 1098} 1099 1100double Tile::getShapeX0() 1101{ 1102 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1103 // 4J Stu - Added this so that the TLS shape is correct for this tile 1104 if(tls->tileId != this->id) updateDefaultShape(); 1105 return tls->xx0; 1106} 1107 1108double Tile::getShapeX1() 1109{ 1110 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1111 // 4J Stu - Added this so that the TLS shape is correct for this tile 1112 if(tls->tileId != this->id) updateDefaultShape(); 1113 return tls->xx1; 1114} 1115 1116double Tile::getShapeY0() 1117{ 1118 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1119 // 4J Stu - Added this so that the TLS shape is correct for this tile 1120 if(tls->tileId != this->id) updateDefaultShape(); 1121 return tls->yy0; 1122} 1123 1124double Tile::getShapeY1() 1125{ 1126 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1127 // 4J Stu - Added this so that the TLS shape is correct for this tile 1128 if(tls->tileId != this->id) updateDefaultShape(); 1129 return tls->yy1; 1130} 1131 1132double Tile::getShapeZ0() 1133{ 1134 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1135 // 4J Stu - Added this so that the TLS shape is correct for this tile 1136 if(tls->tileId != this->id) updateDefaultShape(); 1137 return tls->zz0; 1138} 1139 1140double Tile::getShapeZ1() 1141{ 1142 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); 1143 // 4J Stu - Added this so that the TLS shape is correct for this tile 1144 if(tls->tileId != this->id) updateDefaultShape(); 1145 return tls->zz1; 1146} 1147 1148int Tile::getColor() const 1149{ 1150 return 0xffffff; 1151} 1152 1153int Tile::getColor(int auxData) 1154{ 1155 return 0xffffff; 1156} 1157 1158int Tile::getColor(LevelSource *level, int x, int y, int z) 1159{ 1160 return 0xffffff; 1161} 1162 1163int Tile::getColor(LevelSource *level, int x, int y, int z, int data) 1164{ 1165 return 0xffffff; 1166} 1167 1168int Tile::getSignal(LevelSource *level, int x, int y, int z, int dir) 1169{ 1170 return Redstone::SIGNAL_NONE; 1171} 1172 1173bool Tile::isSignalSource() 1174{ 1175 return false; 1176} 1177 1178void Tile::entityInside(Level *level, int x, int y, int z, shared_ptr<Entity> entity) 1179{ 1180} 1181 1182int Tile::getDirectSignal(LevelSource *level, int x, int y, int z, int dir) 1183{ 1184 return Redstone::SIGNAL_NONE; 1185} 1186 1187void Tile::updateDefaultShape() 1188{ 1189 setShape(0,0,0,1,1,1); 1190} 1191 1192void Tile::playerDestroy(Level *level, shared_ptr<Player> player, int x, int y, int z, int data) 1193{ 1194 // 4J Stu - Special case - only record a crop destroy if is fully grown 1195 if( id==Tile::wheat_Id ) 1196 { 1197 if( Tile::wheat->getResource(data, NULL, 0) > 0 ) 1198 player->awardStat( 1199 GenericStats::blocksMined(id), 1200 GenericStats::param_blocksMined(id,data,1) 1201 ); 1202 } 1203 else if (id == Tile::potatoes_Id) 1204 { 1205 if (Tile::potatoes->getResource(data, NULL, 0) > 0) 1206 player->awardStat( 1207 GenericStats::blocksMined(id), 1208 GenericStats::param_blocksMined(id,data,1) 1209 ); 1210 } 1211 else if (id == Tile::carrots_Id) 1212 { 1213 if (Tile::potatoes->getResource(data, NULL, 0) > 0) 1214 player->awardStat( 1215 GenericStats::blocksMined(id), 1216 GenericStats::param_blocksMined(id,data,1) 1217 ); 1218 } 1219 else 1220 { 1221 player->awardStat( 1222 GenericStats::blocksMined(id), 1223 GenericStats::param_blocksMined(id,data,1) 1224 ); 1225 } 1226 player->awardStat(GenericStats::totalBlocksMined(), GenericStats::param_noArgs()); // 4J : WESTY : Added for other award. 1227 player->causeFoodExhaustion(FoodConstants::EXHAUSTION_MINE); 1228 1229 if( id == Tile::treeTrunk_Id ) 1230 player->awardStat(GenericStats::mineWood(), GenericStats::param_noArgs()); 1231 1232 1233 if (isSilkTouchable() && EnchantmentHelper::hasSilkTouch(player)) 1234 { 1235 shared_ptr<ItemInstance> item = getSilkTouchItemInstance(data); 1236 if (item != NULL) 1237 { 1238 popResource(level, x, y, z, item); 1239 } 1240 } 1241 else 1242 { 1243 int playerBonusLevel = EnchantmentHelper::getDiggingLootBonus(player); 1244 spawnResources(level, x, y, z, data, playerBonusLevel); 1245 } 1246} 1247 1248bool Tile::isSilkTouchable() 1249{ 1250 return isCubeShaped() && !_isEntityTile; 1251} 1252 1253shared_ptr<ItemInstance> Tile::getSilkTouchItemInstance(int data) 1254{ 1255 int popData = 0; 1256 if (id >= 0 && id < Item::items.length && Item::items[id]->isStackedByData()) 1257 { 1258 popData = data; 1259 } 1260 return shared_ptr<ItemInstance>(new ItemInstance(id, 1, popData)); 1261} 1262 1263int Tile::getResourceCountForLootBonus(int bonusLevel, Random *random) 1264{ 1265 return getResourceCount(random); 1266} 1267 1268bool Tile::canSurvive(Level *level, int x, int y, int z) 1269{ 1270 return true; 1271} 1272 1273void Tile::setPlacedBy(Level *level, int x, int y, int z, shared_ptr<LivingEntity> by, shared_ptr<ItemInstance> itemInstance) 1274{ 1275} 1276 1277void Tile::finalizePlacement(Level *level, int x, int y, int z, int data) 1278{ 1279} 1280 1281Tile *Tile::setDescriptionId(unsigned int id) 1282{ 1283 this->descriptionId = id; 1284 return this; 1285} 1286 1287wstring Tile::getName() 1288{ 1289 return L"";//I18n::get(getDescriptionId() + L".name"); 1290} 1291 1292unsigned int Tile::getDescriptionId(int iData /*= -1*/) 1293{ 1294 return descriptionId; 1295} 1296 1297Tile *Tile::setUseDescriptionId(unsigned int id) 1298{ 1299 this->useDescriptionId = id; 1300 return this; 1301} 1302 1303unsigned int Tile::getUseDescriptionId() 1304{ 1305 return useDescriptionId; 1306} 1307 1308bool Tile::triggerEvent(Level *level, int x, int y, int z, int b0, int b1) 1309{ 1310 return false; 1311} 1312 1313bool Tile::isCollectStatistics() 1314{ 1315 return collectStatistics; 1316} 1317 1318Tile *Tile::setNotCollectStatistics() 1319{ 1320 collectStatistics = false; 1321 return this; 1322} 1323 1324int Tile::getPistonPushReaction() 1325{ 1326 return material->getPushReaction(); 1327} 1328 1329// 4J - brought forward from 1.8.2 1330float Tile::getShadeBrightness(LevelSource *level, int x, int y, int z) 1331{ 1332 return level->isSolidBlockingTile(x, y, z) ? 0.2f : 1.0f; 1333} 1334 1335void Tile::fallOn(Level *level, int x, int y, int z, shared_ptr<Entity> entity, float fallDistance) 1336{ 1337} 1338 1339int Tile::cloneTileId(Level *level, int x, int y, int z) 1340{ 1341 return id; 1342} 1343 1344int Tile::cloneTileData(Level *level, int x, int y, int z) 1345{ 1346 return getSpawnResourcesAuxValue(level->getData(x, y, z)); 1347} 1348 1349void Tile::playerWillDestroy(Level *level, int x, int y, int z, int data, shared_ptr<Player> player) 1350{ 1351} 1352 1353void Tile::onRemoving(Level *level, int x, int y, int z, int data) 1354{ 1355} 1356 1357void Tile::handleRain(Level *level, int x, int y, int z) 1358{ 1359} 1360 1361void Tile::levelTimeChanged(Level *level, __int64 delta, __int64 newTime) 1362{ 1363} 1364 1365bool Tile::useOwnCloneData() 1366{ 1367 return false; 1368} 1369 1370bool Tile::canInstantlyTick() 1371{ 1372 return true; 1373} 1374 1375bool Tile::dropFromExplosion(Explosion *explosion) 1376{ 1377 return true; 1378} 1379 1380bool Tile::isMatching(int id) 1381{ 1382 return this->id == id; 1383} 1384 1385bool Tile::isMatching(int tileIdA, int tileIdB) 1386{ 1387 if (tileIdA == tileIdB) 1388 { 1389 return true; 1390 } 1391 if (tileIdA == 0 || tileIdB == 0 || tiles[tileIdA] == NULL || tiles[tileIdB] == NULL) 1392 { 1393 return false; 1394 } 1395 return tiles[tileIdA]->isMatching(tileIdB); 1396} 1397 1398bool Tile::hasAnalogOutputSignal() 1399{ 1400 return false; 1401} 1402 1403int Tile::getAnalogOutputSignal(Level *level, int x, int y, int z, int dir) 1404{ 1405 return Redstone::SIGNAL_NONE; 1406} 1407 1408Tile *Tile::setIconName(const wstring &iconName) 1409{ 1410 this->iconName = iconName; 1411 return this; 1412} 1413 1414wstring Tile::getIconName() 1415{ 1416 return iconName.empty() ? L"MISSING_ICON_TILE_" + _toString<int>(id) + L"_" + _toString<int>(descriptionId) : iconName; 1417} 1418 1419void Tile::registerIcons(IconRegister *iconRegister) 1420{ 1421 icon = iconRegister->registerIcon(getIconName()); 1422} 1423 1424wstring Tile::getTileItemIconName() 1425{ 1426 return L""; 1427} 1428 1429Tile::SoundType::SoundType(eMATERIALSOUND_TYPE eMaterialSound, float volume, float pitch, int iBreakSound, int iPlaceSound) 1430{ 1431 this->eMaterialSound = eMaterialSound; 1432 if( iBreakSound>-1 ) 1433 { 1434 this->iBreakSound = iBreakSound; 1435 } 1436 else 1437 { 1438 switch(eMaterialSound) 1439 { 1440 case eMaterialSoundType_STONE: 1441 this->iBreakSound=eSoundType_DIG_STONE; 1442 break; 1443 case eMaterialSoundType_WOOD: 1444 this->iBreakSound=eSoundType_DIG_WOOD; 1445 break; 1446 case eMaterialSoundType_GRAVEL: 1447 this->iBreakSound=eSoundType_DIG_GRAVEL; 1448 break; 1449 case eMaterialSoundType_GRASS: 1450 this->iBreakSound=eSoundType_DIG_GRASS; 1451 break; 1452 case eMaterialSoundType_METAL: 1453 this->iBreakSound=eSoundType_DIG_STONE; 1454 break; 1455 case eMaterialSoundType_GLASS: 1456 this->iBreakSound=eSoundType_RANDOM_GLASS; 1457 break; 1458 case eMaterialSoundType_CLOTH: 1459 this->iBreakSound=eSoundType_DIG_CLOTH; 1460 break; 1461 case eMaterialSoundType_SAND: 1462 this->iBreakSound=eSoundType_DIG_SAND; 1463 break; 1464 case eMaterialSoundType_SNOW: 1465 this->iBreakSound=eSoundType_DIG_SNOW; 1466 break; 1467 case eMaterialSoundType_LADDER: 1468 this->iBreakSound=eSoundType_DIG_WOOD; 1469 break; 1470 default: 1471 app.DebugPrintf("NO BREAK SOUND!\n"); 1472 this->iBreakSound=-1; 1473 break; 1474 } 1475 //this->breakSound = L"step." + this->name; 1476 } 1477 1478 if( iPlaceSound>-1 ) 1479 { 1480 this->iPlaceSound = iPlaceSound; 1481 } 1482 else 1483 { 1484 this->iPlaceSound = this->iBreakSound; 1485 } 1486 1487 switch(eMaterialSound) 1488 { 1489 case eMaterialSoundType_STONE: 1490 this->iStepSound=eSoundType_STEP_STONE; 1491 break; 1492 case eMaterialSoundType_WOOD: 1493 this->iStepSound=eSoundType_STEP_WOOD; 1494 break; 1495 case eMaterialSoundType_GRAVEL: 1496 this->iStepSound=eSoundType_STEP_GRAVEL; 1497 break; 1498 case eMaterialSoundType_GRASS: 1499 this->iStepSound=eSoundType_STEP_GRASS; 1500 break; 1501 case eMaterialSoundType_METAL: 1502 this->iStepSound=eSoundType_STEP_METAL; 1503 break; 1504 case eMaterialSoundType_CLOTH: 1505 this->iStepSound=eSoundType_STEP_CLOTH; 1506 break; 1507 case eMaterialSoundType_SAND: 1508 this->iStepSound=eSoundType_STEP_SAND; 1509 break; 1510 case eMaterialSoundType_SNOW: 1511 this->iStepSound=eSoundType_STEP_SNOW; 1512 break; 1513 case eMaterialSoundType_LADDER: 1514 this->iStepSound=eSoundType_STEP_LADDER; 1515 break; 1516 default: 1517 app.DebugPrintf("NO STEP SOUND!\n"); 1518 1519 this->iStepSound=-1; 1520 break; 1521 1522 } 1523 1524 //this->stepSound = L"step." + this->name; 1525 this->volume = volume; 1526 this->pitch = pitch; 1527} 1528 1529float Tile::SoundType::getVolume() const 1530{ 1531 return volume; 1532} 1533float Tile::SoundType::getPitch() const 1534{ 1535 return pitch; 1536} 1537//wstring getBreakSound() const { return breakSound; } 1538//wstring getStepSound() const { return stepSound; } 1539int Tile::SoundType::getBreakSound() const 1540{ 1541 return iBreakSound; 1542} 1543int Tile::SoundType::getStepSound() const 1544{ 1545 return iStepSound; 1546} 1547int Tile::SoundType::getPlaceSound() const 1548{ 1549 return iPlaceSound; 1550} 1551 1552 1553/* 15544J: These are necessary on the PS3. 1555(and 4 and Vita). 1556*/ 1557#if (defined __PS3__ || defined __ORBIS__ || defined __PSVITA__) 1558const int Tile::stone_Id; 1559const int Tile::grass_Id; 1560const int Tile::dirt_Id; 1561// 4 1562const int Tile::wood_Id; 1563const int Tile::sapling_Id; 1564const int Tile::unbreakable_Id; 1565const int Tile::water_Id; 1566const int Tile::calmWater_Id; 1567const int Tile::lava_Id; 1568const int Tile::calmLava_Id; 1569const int Tile::sand_Id; 1570const int Tile::gravel_Id; 1571const int Tile::goldOre_Id; 1572const int Tile::ironOre_Id; 1573const int Tile::coalOre_Id; 1574const int Tile::treeTrunk_Id; 1575const int Tile::leaves_Id; 1576const int Tile::sponge_Id; 1577const int Tile::glass_Id; 1578const int Tile::lapisOre_Id; 1579const int Tile::lapisBlock_Id; 1580const int Tile::dispenser_Id; 1581const int Tile::sandStone_Id; 1582// 25 1583const int Tile::bed_Id; 1584const int Tile::goldenRail_Id; 1585const int Tile::detectorRail_Id; 1586const int Tile::pistonStickyBase_Id; 1587const int Tile::web_Id; 1588const int Tile::tallgrass_Id; 1589const int Tile::deadBush_Id; 1590const int Tile::pistonBase_Id; 1591const int Tile::pistonExtensionPiece_Id; 1592const int Tile::wool_Id; 1593const int Tile::pistonMovingPiece_Id; 1594const int Tile::flower_Id; 1595const int Tile::rose_Id; 1596const int Tile::mushroom_brown_Id; 1597const int Tile::mushroom_red_Id; 1598const int Tile::goldBlock_Id; 1599const int Tile::ironBlock_Id; 1600const int Tile::stoneSlab_Id; 1601const int Tile::stoneSlabHalf_Id; 1602const int Tile::redBrick_Id; 1603const int Tile::tnt_Id; 1604const int Tile::bookshelf_Id; 1605const int Tile::mossyCobblestone_Id; 1606const int Tile::obsidian_Id; 1607const int Tile::torch_Id; 1608const int Tile::fire_Id; 1609const int Tile::mobSpawner_Id; 1610const int Tile::stairs_wood_Id; 1611const int Tile::chest_Id; 1612const int Tile::redStoneDust_Id; 1613const int Tile::diamondOre_Id; 1614const int Tile::diamondBlock_Id; 1615const int Tile::workBench_Id; 1616const int Tile::wheat_Id; 1617const int Tile::farmland_Id; 1618const int Tile::furnace_Id; 1619const int Tile::furnace_lit_Id; 1620const int Tile::sign_Id; 1621const int Tile::door_wood_Id; 1622const int Tile::ladder_Id; 1623const int Tile::rail_Id; 1624const int Tile::stairs_stone_Id; 1625const int Tile::wallSign_Id; 1626const int Tile::lever_Id; 1627const int Tile::pressurePlate_stone_Id; 1628const int Tile::door_iron_Id; 1629const int Tile::pressurePlate_wood_Id; 1630const int Tile::redStoneOre_Id; 1631const int Tile::redStoneOre_lit_Id; 1632const int Tile::redstoneTorch_off_Id; 1633const int Tile::redstoneTorch_on_Id; 1634const int Tile::button_stone_Id; 1635const int Tile::topSnow_Id; 1636const int Tile::ice_Id; 1637const int Tile::snow_Id; 1638const int Tile::cactus_Id; 1639const int Tile::clay_Id; 1640const int Tile::reeds_Id; 1641const int Tile::jukebox_Id; 1642const int Tile::fence_Id; 1643const int Tile::pumpkin_Id; 1644const int Tile::netherRack_Id; 1645const int Tile::soulsand_Id; 1646const int Tile::glowstone_Id; 1647const int Tile::portalTile_Id; 1648const int Tile::litPumpkin_Id; 1649const int Tile::cake_Id; 1650const int Tile::diode_off_Id; 1651const int Tile::diode_on_Id; 1652const int Tile::stained_glass_Id; 1653const int Tile::trapdoor_Id; 1654const int Tile::monsterStoneEgg_Id; 1655const int Tile::stoneBrick_Id; 1656const int Tile::hugeMushroom_brown_Id; 1657const int Tile::hugeMushroom_red_Id; 1658const int Tile::ironFence_Id; 1659const int Tile::thinGlass_Id; 1660const int Tile::melon_Id; 1661const int Tile::pumpkinStem_Id; 1662const int Tile::melonStem_Id; 1663const int Tile::vine_Id; 1664const int Tile::fenceGate_Id; 1665const int Tile::stairs_bricks_Id; 1666const int Tile::stairs_stoneBrick_Id; 1667const int Tile::mycel_Id; 1668const int Tile::waterLily_Id; 1669const int Tile::netherBrick_Id; 1670const int Tile::netherFence_Id; 1671const int Tile::stairs_netherBricks_Id; 1672const int Tile::netherStalk_Id; 1673const int Tile::enchantTable_Id; 1674const int Tile::brewingStand_Id; 1675const int Tile::cauldron_Id; 1676const int Tile::endPortalTile_Id; 1677const int Tile::endPortalFrameTile_Id; 1678const int Tile::endStone_Id; 1679const int Tile::dragonEgg_Id; 1680const int Tile::redstoneLight_Id; 1681const int Tile::redstoneLight_lit_Id; 1682const int Tile::woodSlab_Id; 1683const int Tile::woodSlabHalf_Id; 1684const int Tile::cocoa_Id; 1685const int Tile::stairs_sandstone_Id; 1686const int Tile::stairs_sprucewood_Id; 1687const int Tile::stairs_birchwood_Id; 1688const int Tile::stairs_junglewood_Id; 1689const int Tile::emeraldOre_Id; 1690const int Tile::enderChest_Id; 1691const int Tile::tripWireSource_Id; 1692const int Tile::tripWire_Id; 1693const int Tile::emeraldBlock_Id; 1694const int Tile::cobbleWall_Id; 1695const int Tile::flowerPot_Id; 1696const int Tile::carrots_Id; 1697const int Tile::potatoes_Id; 1698const int Tile::anvil_Id; 1699const int Tile::button_wood_Id; 1700const int Tile::skull_Id; 1701const int Tile::netherQuartz_Id; 1702const int Tile::quartzBlock_Id; 1703const int Tile::stairs_quartz_Id; 1704const int Tile::woolCarpet_Id; 1705#endif