Files
minecraft-pe-0.6.1/src/world/level/tile/Tile.h
2026-03-02 22:04:18 +03:00

390 lines
12 KiB
C++
Executable File

#ifndef NET_MINECRAFT_WORLD_LEVEL_TILE__Tile_H__
#define NET_MINECRAFT_WORLD_LEVEL_TILE__Tile_H__
//package net.minecraft.world.level.tile;
#include <string>
#include "../../phys/AABB.h"
class Entity;
class Mob;
class Player;
class Level;
class LevelSource;
class Material;
class Random;
class ItemInstance;
class Bush;
class GrassTile;
class LeafTile;
class FireTile;
// @Note: Got a memory leak in initTiles? You probably didn't call
// Tile::init after constructing the tile!
class Tile
{
static const std::string TILE_DESCRIPTION_PREFIX;
public:
class SoundType
{
public:
//const std::string name;
const float volume;
const float pitch;
const std::string breakSound;
const std::string stepSound;
SoundType(const std::string& name, float volume, float pitch)
: volume(volume),
pitch(pitch),
breakSound("step." + name),
stepSound("step." + name)
{}
SoundType(const std::string& name, const std::string& breakSound, float volume, float pitch)
: volume(volume),
pitch(pitch),
stepSound("step." + name),
breakSound(breakSound)
{}
float getVolume() const {
return volume;
}
float getPitch() const {
return pitch;
}
const std::string& getBreakSound() const {
return breakSound;
}
const std::string& getStepSound() const {
return stepSound;
}
};
static const SoundType SOUND_NORMAL;
static const SoundType SOUND_WOOD;
static const SoundType SOUND_GRAVEL;
static const SoundType SOUND_GRASS;
static const SoundType SOUND_STONE;
static const SoundType SOUND_METAL;
static const SoundType SOUND_GLASS;
static const SoundType SOUND_CLOTH;
static const SoundType SOUND_SAND;
static const SoundType SOUND_SILENT;
static const int SHAPE_INVISIBLE = -1;
static const int SHAPE_BLOCK = 0;
static const int SHAPE_CROSS_TEXTURE = 1;
static const int SHAPE_TORCH = 2;
static const int SHAPE_FIRE = 3;
static const int SHAPE_WATER = 4;
static const int SHAPE_RED_DUST = 5;
static const int SHAPE_ROWS = 6;
static const int SHAPE_DOOR = 7;
static const int SHAPE_LADDER = 8;
static const int SHAPE_RAIL = 9;
static const int SHAPE_STAIRS = 10;
static const int SHAPE_FENCE = 11;
static const int SHAPE_LEVER = 12;
static const int SHAPE_CACTUS = 13;
static const int SHAPE_BED = 14;
static const int SHAPE_DIODE = 15;
static const int SHAPE_IRON_FENCE = 18;
static const int SHAPE_STEM = 19;
static const int SHAPE_FENCE_GATE = 21;
static const int SHAPE_ENTITYTILE_ANIMATED = 22;
static const int NUM_BLOCK_TYPES = 256;
static Tile* tiles[NUM_BLOCK_TYPES];
static bool sendTileData[NUM_BLOCK_TYPES];
static bool shouldTick[NUM_BLOCK_TYPES];
static bool solid[NUM_BLOCK_TYPES];
static bool isEntityTile[NUM_BLOCK_TYPES];
static int lightBlock[NUM_BLOCK_TYPES];
static bool translucent[NUM_BLOCK_TYPES];
static int lightEmission[NUM_BLOCK_TYPES];
static Tile* rock;
static Tile* grass;
static Tile* dirt;
static Tile* stoneBrick;
static Tile* wood;
static Tile* sapling;
static Tile* unbreakable;
static Tile* water;
static Tile* calmWater;
static Tile* lava;
static Tile* calmLava;
static Tile* sand;
static Tile* gravel;
static Tile* goldOre;
static Tile* ironOre;
static Tile* coalOre;
static Tile* treeTrunk;
static LeafTile* leaves;
static Tile* sponge;
static Tile* web;
static Tile* glass;
static Tile* thinGlass;
static Tile* lapisOre;
static Tile* lapisBlock;
static Tile* dispenser;
static Tile* sandStone;
static Tile* musicBlock;
static Tile* bed;
static Tile* unused_27;
static Tile* unused_28;
static Tile* unused_29;
static Tile* unused_30;
static Tile* tallgrass;
static Tile* unused_32;
static Tile* unused_33;
static Tile* unused_34;
static Tile* unused_36;
static Tile* cloth;
static Tile* flower;
static Tile* rose;
static Tile* mushroom1;
static Tile* mushroom2;
static Tile* goldBlock;
static Tile* ironBlock;
static Tile* stoneSlab;
static Tile* stoneSlabHalf;
static Tile* redBrick;
static Tile* tnt;
static Tile* bookshelf;
static Tile* mossStone;
static Tile* obsidian;
static Tile* torch;
static FireTile* fire;
static Tile* mobSpawner;
static Tile* stairs_wood;
static Tile* chest;
static Tile* redStoneDust;
static Tile* emeraldOre;
static Tile* emeraldBlock;
static Tile* workBench;
static Tile* stonecutterBench;
static Tile* crops;
static Tile* farmland;
static Tile* furnace;
static Tile* furnace_lit;
static Tile* sign;
static Tile* door_wood;
static Tile* ladder;
static Tile* rail;
static Tile* stairs_stone;
static Tile* wallSign;
static Tile* lever;
static Tile* pressurePlate_stone;
static Tile* door_iron;
static Tile* pressurePlate_wood;
static Tile* redStoneOre;
static Tile* redStoneOre_lit;
static Tile* notGate_off;
static Tile* notGate_on;
static Tile* button;
static Tile* topSnow;
static Tile* ice;
static Tile* snow;
static Tile* cactus;
static Tile* clay;
static Tile* reeds;
static Tile* recordPlayer;
static Tile* fence;
static Tile* stairs_brick;
static Tile* fenceGate;
static Tile* pumpkin;
static Tile* hellRock;
static Tile* hellSand;
static Tile* lightGem;
static Tile* portalTile;
static Tile* litPumpkin;
static Tile* cake;
static Tile* diode_off;
static Tile* diode_on;
static Tile* trapdoor;
static Tile* stoneBrickSmooth;
static Tile* grass_carried;
static LeafTile* leaves_carried;
static Tile* melon;
static Tile* melonStem;
static Tile* netherReactor;
static Tile* glowingObsidian;
static Tile* stairs_stoneBrickSmooth;
static Tile* netherBrick;
static Tile* netherrack;
static Tile* stairs_netherBricks;
static Tile* stairs_sandStone;
static Tile* quartzBlock;
static Tile* stairs_quartz;
// invisible bedrock is used to block off empty chunks (i.e. prevent player movement)
static Tile* invisible_bedrock;
static Tile* info_updateGame1;
static Tile* info_updateGame2;
static Tile* info_reserved6;
static void initTiles();
static void teardownTiles();
static int transformToValidBlockId(int blockId);
static int transformToValidBlockId(int blockId, int x, int y, int z);
Tile(int id, const Material* material);
Tile(int id, int tex, const Material* material);
virtual ~Tile() {}
virtual bool isCubeShaped();
virtual int getRenderShape();
virtual void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
virtual void updateShape(LevelSource* level, int x, int y, int z) {}
virtual void updateDefaultShape() {}
virtual void addLights(Level* level, int x, int y, int z) {}
virtual float getBrightness(LevelSource* level, int x, int y, int z);
static bool isFaceVisible(Level* level, int x, int y, int z, int f);
virtual bool shouldRenderFace(LevelSource* level, int x, int y, int z, int face);
virtual int getTexture(int face);
virtual int getTexture(int face, int data);
virtual int getTexture(LevelSource* level, int x, int y, int z, int face);
// @attn Not threadsafe (ADDON: nor safe to _save_ this returned AABB*.
// Make a copy if you need to save this AABB (rather then using as a temp)
virtual AABB* getAABB(Level* level, int x, int y, int z);
virtual void addAABBs(Level* level, int x, int y, int z, const AABB* box, std::vector<AABB>& boxes);
virtual AABB getTileAABB(Level* level, int x, int y, int z);
virtual bool isSolidRender();
virtual bool mayPick();
virtual bool mayPick(int data, bool liquid);
virtual bool mayPlace(Level* level, int x, int y, int z, unsigned char face);
virtual bool mayPlace(Level* level, int x, int y, int z);
virtual int getTickDelay();
virtual void tick(Level* level, int x, int y, int z, Random* random) {}
virtual void animateTick(Level* level, int x, int y, int z, Random* random) {}
virtual void destroy(Level* level, int x, int y, int z, int data);
virtual void neighborChanged(Level* level, int x, int y, int z, int type) {}
virtual void onPlace(Level* level, int x, int y, int z) {}
virtual void onRemove(Level* level, int x, int y, int z) {}
virtual int getResource(int data, Random* random);
virtual int getResourceCount(Random* random);
virtual float getDestroyProgress(Player* player);
virtual void spawnResources(Level* level, int x, int y, int z, int data);
virtual void spawnResources(Level* level, int x, int y, int z, int data, float odds);
virtual bool spawnBurnResources(Level* level, float x, float y, float z);
void popResource(Level* level, int x, int y, int z, const ItemInstance& itemInstance);
virtual float getExplosionResistance(Entity* source);
virtual HitResult clip(Level* level, int xt, int yt, int zt, const Vec3& a, const Vec3& b);
virtual void wasExploded(Level* level, int x, int y, int z) {}
virtual int getRenderLayer();
virtual bool use(Level* level, int x, int y, int z, Player* player);
virtual void stepOn(Level* level, int x, int y, int z, Entity* entity) {}
virtual void fallOn( Level* level, int x, int y, int z, Entity* entity, float fallDistance ) {}
virtual int getPlacedOnFaceDataValue(Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, int itemValue) { return itemValue; }
virtual void setPlacedBy(Level* level, int x, int y, int z, Mob* by) {}
virtual void prepareRender(Level* level, int x, int y, int z) {}
virtual void attack(Level* level, int x, int y, int z, Player* player) {}
virtual void handleEntityInside(Level* level, int x, int y, int z, Entity* e, Vec3& current) {}
virtual int getColor(LevelSource* level, int x, int y, int z);
virtual bool isSignalSource();
virtual bool getSignal(LevelSource* level, int x, int y, int z);
virtual bool getSignal(LevelSource* level, int x, int y, int z, int dir);
virtual bool getDirectSignal(Level* level, int x, int y, int z, int dir);
virtual void entityInside(Level* level, int x, int y, int z, Entity* entity) {}
virtual void playerDestroy(Level* level, Player* player, int x, int y, int z, int data);
virtual bool canSurvive(Level* level, int x, int y, int z);
virtual std::string getName() const;
virtual std::string getDescriptionId() const;
virtual Tile* setDescriptionId(const std::string& id);
virtual void triggerEvent(Level* level, int x, int y, int z, int b0, int b1) {}
protected:
virtual Tile* setSoundType(const SoundType& soundType);
virtual Tile* setLightBlock(int i);
virtual Tile* setLightEmission(float f);
virtual Tile* setExplodeable(float explosionResistance);
virtual Tile* setDestroyTime(float destroySpeed);
virtual void setTicking(bool tick);
/*** Returns the item instance's auxValue when a TileItem is spawned from this Tile. */
virtual int getSpawnResourcesAuxValue(int data);
private:
Tile* init();
Tile* setCategory(int category);
bool containsX(const Vec3& v);
bool containsY(const Vec3& v);
bool containsZ(const Vec3& v);
public:
int tex;
const int id;
float xx0, yy0, zz0, xx1, yy1, zz1;
const SoundType* soundType;
float gravity;
const Material* const material;
float friction;
//protected:
float destroySpeed;
float explosionResistance;
int category;
protected:
AABB tmpBB;
static const int RENDERLAYER_OPAQUE;
static const int RENDERLAYER_ALPHATEST;
static const int RENDERLAYER_BLEND;
private:
std::string descriptionId;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL_TILE__Tile_H__*/