4jcraft/Minecraft.World/Blocks/Material.h
2026-03-13 17:06:56 -05:00

94 lines
2.1 KiB
C++

#pragma once
#include "MaterialColor.h"
class ChunkRebuildData;
class Material {
friend class ChunkRebuildData;
public:
static Material* air;
static Material* grass;
static Material* dirt;
static Material* wood;
static Material* stone;
static Material* metal;
static Material* heavyMetal;
static Material* water;
static Material* lava;
static Material* leaves;
static Material* plant;
static Material* replaceable_plant;
static Material* sponge;
static Material* cloth;
static Material* fire;
static Material* sand;
static Material* decoration;
static Material* clothDecoration;
static Material* glass;
static Material* buildable_glass;
static Material* explosive;
static Material* coral;
static Material* ice;
static Material* topSnow;
static Material* snow;
static Material* cactus;
static Material* clay;
static Material* vegetable;
static Material* egg;
static Material* portal;
static Material* cake;
static Material* web;
static Material* piston;
static const int PUSH_NORMAL = 0;
static const int PUSH_DESTROY = 1;
static const int PUSH_BLOCK = 2; // not pushable
static void staticCtor();
private:
bool _flammable, _replaceable, _neverBuildable;
public:
MaterialColor* color;
private:
bool _isAlwaysDestroyable;
int pushReaction;
bool destroyedByHand;
public:
Material(MaterialColor* color);
virtual bool isLiquid();
virtual bool letsWaterThrough();
virtual bool isSolid();
virtual bool blocksLight();
virtual bool blocksMotion();
private:
virtual Material* neverBuildable();
protected:
virtual Material* notAlwaysDestroyable();
virtual Material* flammable();
public:
virtual bool isFlammable();
virtual Material* replaceable();
virtual bool isReplaceable();
virtual bool isSolidBlocking();
virtual bool isAlwaysDestroyable();
virtual int getPushReaction();
protected:
Material* makeDestroyedByHand();
public:
bool isDestroyedByHand();
protected:
Material* destroyOnPush();
Material* notPushable();
};