// This Header is auto generated by BDSLiteLoader Toolchain
#pragma once
#define AUTO_GENERATED
#include "../Global.h"

#define BEFORE_EXTRA
// Add include headers & pre-declares
class Block;
class BlockSource;
class ItemStack;

#undef BEFORE_EXTRA

class BlockLegacy {

#define AFTER_EXTRA
// Add new members to class
public:
    struct NameInfo;

    LIAPI Block* toBlock(unsigned short tileData);
    LIAPI string getTypeName();
    LIAPI bool applyBoneMeal(BlockSource*, BlockPos*);
    LIAPI ItemStack* getBlockDrops();

    inline int getBlockItemId() const{
        //ItemStackBase::init(ItemStackBase *this, const struct BlockLegacy *a2, int a3) Line14
        int id = dAccess<int>(this,134);
        if(id < 0x100u)
            return id;
        else
            return 255-id;
    };
    inline bool hasBlockEntity() const{
        // LevelChunk::_removeCallbacks Line28
        return getBlockEntityType();
    }
    inline enum BlockActorType getBlockEntityType() const{
        // LevelChunk::_removeCallbacks Line28
        return dAccess<BlockActorType>(this,168);;
    };

#undef AFTER_EXTRA
#ifndef DISABLE_CONSTRUCTOR_PREVENTION_BLOCKLEGACY
public:
    class BlockLegacy& operator=(class BlockLegacy const &) = delete;
    BlockLegacy(class BlockLegacy const &) = delete;
    BlockLegacy() = delete;
#endif

public:
    /*0*/ virtual ~BlockLegacy();
    /*1*/ virtual void tick(class BlockSource &, class BlockPos const &, class Random &) const;
    /*2*/ virtual class Block const & getStateFromLegacyData(unsigned short) const;
    /*3*/ virtual class std::shared_ptr<class BlockActor> newBlockEntity(class BlockPos const &, class Block const &) const;
    /*4*/ virtual class Block const * getNextBlockPermutation(class Block const &) const;
    /*5*/ virtual bool getCollisionShape(class AABB &, class Block const &, class BlockSource &, class BlockPos const &, class Actor *) const;
    /*6*/ virtual bool isObstructingChests(class BlockSource &, class BlockPos const &) const;
    /*7*/ virtual class Vec3 randomlyModifyPosition(class BlockPos const &, int &) const;
    /*8*/ virtual class Vec3 randomlyModifyPosition(class BlockPos const &) const;
    /*9*/ virtual void addAABBs(class Block const &, class BlockSource &, class BlockPos const &, class AABB const *, std::vector<class AABB> &) const;
    /*10*/ virtual class AABB const & getAABB(class BlockSource &, class BlockPos const &, class Block const &, class AABB &, bool) const;
    /*11*/ virtual bool addCollisionShapes(class Block const &, class BlockSource &, class BlockPos const &, class AABB const *, std::vector<class AABB> &, class Actor *) const;
    /*12*/ virtual class AABB const & getOutline(class BlockSource &, class BlockPos const &, class AABB &) const;
    /*13*/ virtual bool getLiquidClipVolume(class BlockSource &, class BlockPos const &, class AABB &) const;
    /*14*/ virtual void onProjectileHit(class BlockSource &, class BlockPos const &, class Actor const &) const;
    /*15*/ virtual bool liquidCanFlowIntoFromDirection(unsigned char, class std::function<class Block const & (class BlockPos const &)> const &, class BlockPos const &) const;
    /*16*/ virtual struct Brightness getLightEmission(class Block const &) const;
    /*17*/ virtual bool shouldRandomTick() const;
    /*18*/ virtual void __unk_vfn_18();
    /*19*/ virtual bool isStrippable(class Block const &) const;
    /*20*/ virtual class Block const & getStrippedBlock(class Block const &) const;
    /*21*/ virtual bool canProvideSupport(class Block const &, unsigned char, enum BlockSupportType) const;
    /*22*/ virtual bool canConnect(class Block const &, unsigned char, class Block const &) const;
    /*23*/ virtual void getConnectedDirections(class Block const &, class BlockPos const &, class BlockSource &, bool &, bool &, bool &, bool &) const;
    /*24*/ virtual void __unk_vfn_24();
    /*25*/ virtual void __unk_vfn_25();
    /*26*/ virtual void __unk_vfn_26();
    /*27*/ virtual void __unk_vfn_27();
    /*28*/ virtual void __unk_vfn_28();
    /*29*/ virtual bool isWaterBlocking() const;
    /*30*/ virtual void __unk_vfn_30();
    /*31*/ virtual void __unk_vfn_31();
    /*32*/ virtual void __unk_vfn_32();
    /*33*/ virtual void __unk_vfn_33();
    /*34*/ virtual void __unk_vfn_34();
    /*35*/ virtual void __unk_vfn_35();
    /*36*/ virtual void __unk_vfn_36();
    /*37*/ virtual bool isDoubleSlabBlock() const;
    /*38*/ virtual void __unk_vfn_38();
    /*39*/ virtual void __unk_vfn_39();
    /*40*/ virtual void __unk_vfn_40();
    /*41*/ virtual bool canHurtAndBreakItem() const;
    /*42*/ virtual void __unk_vfn_42();
    /*43*/ virtual void __unk_vfn_43();
    /*44*/ virtual bool isValidAuxValue(int) const;
    /*45*/ virtual bool canFillAtPos(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*46*/ virtual class Block const & sanitizeFillBlock(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*47*/ virtual void onFillBlock(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*48*/ virtual int getDirectSignal(class BlockSource &, class BlockPos const &, int) const;
    /*49*/ virtual void __unk_vfn_49();
    /*50*/ virtual bool canContainLiquid() const;
    /*51*/ virtual bool shouldConnectToRedstone(class BlockSource &, class BlockPos const &, int) const;
    /*52*/ virtual void __unk_vfn_52();
    /*53*/ virtual bool canBeUsedInCommands(bool, class BaseGameVersion const &) const;
    /*54*/ virtual float getThickness() const;
    /*55*/ virtual float getFlexibility(class BlockSource &, class BlockPos const &) const;
    /*56*/ virtual bool checkIsPathable(class Actor &, class BlockPos const &, class BlockPos const &) const;
    /*57*/ virtual bool shouldDispense(class BlockSource &, class Container &) const;
    /*58*/ virtual bool dispense(class BlockSource &, class Container &, int, class Vec3 const &, unsigned char) const;
    /*59*/ virtual void onPlace(class BlockSource &, class BlockPos const &) const;
    /*60*/ virtual void onRemove(class BlockSource &, class BlockPos const &) const;
    /*61*/ virtual void onExploded(class BlockSource &, class BlockPos const &, class Actor *) const;
    /*62*/ virtual void onStepOn(class Actor &, class BlockPos const &) const;
    /*63*/ virtual void onFallOn(class BlockSource &, class BlockPos const &, class Actor &, float) const;
    /*64*/ virtual void transformOnFall(class BlockSource &, class BlockPos const &, class Actor *, float) const;
    /*65*/ virtual void onRedstoneUpdate(class BlockSource &, class BlockPos const &, int, bool) const;
    /*66*/ virtual void onMove(class BlockSource &, class BlockPos const &, class BlockPos const &) const;
    /*67*/ virtual void __unk_vfn_67();
    /*68*/ virtual void movedByPiston(class BlockSource &, class BlockPos const &) const;
    /*69*/ virtual void onStructureBlockPlace(class BlockSource &, class BlockPos const &) const;
    /*70*/ virtual void setupRedstoneComponent(class BlockSource &, class BlockPos const &) const;
    /*71*/ virtual enum BlockProperty getRedstoneProperty(class BlockSource &, class BlockPos const &) const;
    /*72*/ virtual void updateEntityAfterFallOn(class BlockSource &, class BlockPos const &, class Actor &) const;
    /*73*/ virtual void __unk_vfn_73();
    /*74*/ virtual bool ignoreEntitiesOnPistonMove(class Block const &) const;
    /*75*/ virtual bool onFertilized(class BlockSource &, class BlockPos const &, class Actor *, enum FertilizerType) const;
    /*76*/ virtual bool mayConsumeFertilizer(class BlockSource &) const;
    /*77*/ virtual bool canBeFertilized(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*78*/ virtual bool mayPick() const;
    /*79*/ virtual bool mayPick(class BlockSource &, class Block const &, bool) const;
    /*80*/ virtual bool mayPlace(class BlockSource &, class BlockPos const &, unsigned char) const;
    /*81*/ virtual bool mayPlace(class BlockSource &, class BlockPos const &) const;
    /*82*/ virtual bool mayPlaceOn(class BlockSource &, class BlockPos const &) const;
    /*83*/ virtual bool tryToPlace(class BlockSource &, class BlockPos const &, class Block const &, struct ActorBlockSyncMessage const *) const;
    /*84*/ virtual bool breaksFallingBlocks(class Block const &) const;
    /*85*/ virtual void destroy(class BlockSource &, class BlockPos const &, class Block const &, class Actor *) const;
    /*86*/ virtual bool playerWillDestroy(class Player &, class BlockPos const &, class Block const &) const;
    /*87*/ virtual void __unk_vfn_87();
    /*88*/ virtual void neighborChanged(class BlockSource &, class BlockPos const &, class BlockPos const &) const;
    /*89*/ virtual bool getSecondPart(class BlockSource &, class BlockPos const &, class BlockPos &) const;
    /*90*/ virtual int getResourceCount(class Random &, class Block const &, int, bool) const;
    /*91*/ virtual class ItemInstance getResourceItem(class Random &, class Block const &, int) const;
    /*92*/ virtual class ItemInstance asItemInstance(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*93*/ virtual void spawnResources(class BlockSource &, class BlockPos const &, class Block const &, std::vector<class Item const *> *, float, int, bool) const;
    /*94*/ virtual void trySpawnResourcesOnExplosion(class BlockSource &, class BlockPos const &, class Block const &, std::vector<class Item const *> *, float, int, bool) const;
    /*95*/ virtual void __unk_vfn_95();
    /*96*/ virtual float getExplosionResistance(class Actor *) const;
    /*97*/ virtual class HitResult clip(class BlockSource &, class BlockPos const &, class Vec3 const &, class Vec3 const &, bool) const;
    /*98*/ virtual bool use(class Player &, class BlockPos const &) const;
    /*99*/ virtual class Block const & getPlacementBlock(class Actor &, class BlockPos const &, unsigned char, class Vec3 const &, int) const;
    /*100*/ virtual int calcVariant(class BlockSource &, class BlockPos const &) const;
    /*101*/ virtual bool isAttachedTo(class BlockSource &, class BlockPos const &, class BlockPos &) const;
    /*102*/ virtual bool attack(class Player *, class BlockPos const &) const;
    /*103*/ virtual void handleEntityInside(class BlockSource &, class BlockPos const &, class Actor *, class Vec3 &) const;
    /*104*/ virtual void entityInside(class BlockSource &, class BlockPos const &, class Actor &) const;
    /*105*/ virtual void playerDestroy(class Player &, class BlockPos const &, class Block const &) const;
    /*106*/ virtual bool canSurvive(class BlockSource &, class BlockPos const &) const;
    /*107*/ virtual int getExperienceDrop(class Random &) const;
    /*108*/ virtual bool canBeBuiltOver(class BlockSource &, class BlockPos const &) const;
    /*109*/ virtual void __unk_vfn_109();
    /*110*/ virtual void executeEvent(class BlockSource &, class BlockPos const &, class Block const &, std::string const &, class Actor &) const;
    /*111*/ virtual bool hasTag(class BlockSource &, class BlockPos const &, class Block const &, std::string const &) const;
    /*112*/ virtual class MobSpawnerData const * getMobToSpawn(class SpawnConditions const &, class BlockSource &) const;
    /*113*/ virtual class Color getMapColor(class BlockSource &, class BlockPos const &) const;
    /*114*/ virtual class Color getMapColor() const;
    /*115*/ virtual bool shouldStopFalling(class Actor &) const;
    /*116*/ virtual void __unk_vfn_116();
    /*117*/ virtual float calcGroundFriction(class Mob &, class BlockPos const &) const;
    /*118*/ virtual void __unk_vfn_118();
    /*119*/ virtual void __unk_vfn_119();
    /*120*/ virtual int getComparatorSignal(class BlockSource &, class BlockPos const &, class Block const &, unsigned char) const;
    /*121*/ virtual bool canSlide(class BlockSource &, class BlockPos const &) const;
    /*122*/ virtual bool canSpawnAt(class BlockSource const &, class BlockPos const &) const;
    /*123*/ virtual void notifySpawnedAt(class BlockSource &, class BlockPos const &) const;
    /*124*/ virtual int getIconYOffset() const;
    /*125*/ virtual enum BlockRenderLayer getRenderLayer() const;
    /*126*/ virtual enum BlockRenderLayer getRenderLayer(class Block const &, class BlockSource &, class BlockPos const &) const;
    /*127*/ virtual std::string buildDescriptionId(class Block const &) const;
    /*128*/ virtual bool isAuxValueRelevantForPicking() const;
    /*129*/ virtual int getColor(class Block const &) const;
    /*130*/ virtual int getColor(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*131*/ virtual int getColorAtPos(class BlockSource &, class BlockPos const &) const;
    /*132*/ virtual int getColorForParticle(class BlockSource &, class BlockPos const &, class Block const &) const;
    /*133*/ virtual bool isSeasonTinted(class Block const &, class BlockSource &, class BlockPos const &) const;
    /*134*/ virtual void onGraphicsModeChanged(bool, bool, bool);
    /*135*/ virtual int getExtraRenderLayers() const;
    /*136*/ virtual float getShadeBrightness() const;
    /*137*/ virtual class AABB const & getVisualShapeInWorld(class Block const &, class BlockSource &, class BlockPos const &, class AABB &, bool) const;
    /*138*/ virtual class AABB const & getVisualShape(class Block const &, class AABB &, bool) const;
    /*139*/ virtual class AABB const & getUIShape(class Block const &, class AABB &) const;
    /*140*/ virtual int telemetryVariant(class BlockSource &, class BlockPos const &) const;
    /*141*/ virtual int getVariant(class Block const &) const;
    /*142*/ virtual void __unk_vfn_142();
    /*143*/ virtual class Block const & getRenderBlock() const;
    /*144*/ virtual unsigned char getMappedFace(unsigned char, class Block const &) const;
    /*145*/ virtual enum Flip getFaceFlip(unsigned char, class Block const &) const;
    /*146*/ virtual void animateTick(class BlockSource &, class BlockPos const &, class Random &) const;
    /*147*/ virtual class BlockLegacy & init();
    /*148*/ virtual class BlockLegacy & setLightBlock(struct Brightness);
    /*149*/ virtual class BlockLegacy & setLightEmission(float);
    /*150*/ virtual class BlockLegacy & setExplodeable(float);
    /*151*/ virtual class BlockLegacy & setDestroyTime(float);
    /*152*/ virtual class BlockLegacy & setFriction(float);
    /*153*/ virtual class BlockLegacy & addProperty(enum BlockProperty);
    /*154*/ virtual class BlockLegacy & addState(class ItemState const &);
    /*155*/ virtual class BlockLegacy & addState(class ItemState const &, unsigned __int64);
    /*156*/ virtual class BlockLegacy & setAllowsRunes(bool);
    /*157*/ virtual class BlockLegacy & setMapColor(class Color const &);
    /*158*/ virtual void __unk_vfn_158();
    /*159*/ virtual class ItemInstance getSilkTouchItemInstance(class Block const &) const;
    /*160*/ virtual void setVisualShape(class AABB const &);
    /*161*/ virtual void setVisualShape(class Vec3 const &, class Vec3 const &);
    /*162*/ virtual class Block const * tryLegacyUpgrade(unsigned short) const;
    /*163*/ virtual bool dealsContactDamage(class Actor const &, class Block const &, bool) const;
    /*164*/ virtual class Color getDustColor(class Block const &) const;
#ifdef ENABLE_VIRTUAL_FAKESYMBOL_BLOCKLEGACY
    MCVAPI bool canBeOriginalSurface() const;
    MCVAPI bool canBeSilkTouched() const;
    MCVAPI bool canHaveExtraData() const;
    MCVAPI bool canSpawnOn() const;
    MCVAPI bool detachesOnPistonMove(class BlockSource &, class BlockPos const &) const;
    MCVAPI bool getIgnoresDestroyPermissions(class Actor &, class BlockPos const &) const;
    MCVAPI void handleRain(class BlockSource &, class BlockPos const &, float) const;
    MCVAPI bool hasComparatorSignal() const;
    MCVAPI bool hasVariableLighting() const;
    MCVAPI bool isBounceBlock() const;
    MCVAPI bool isButtonBlock() const;
    MCVAPI bool isContainerBlock() const;
    MCVAPI bool isCraftingBlock() const;
    MCVAPI bool isCropBlock() const;
    MCVAPI bool isDoorBlock() const;
    MCVAPI bool isFenceBlock() const;
    MCVAPI bool isFenceGateBlock() const;
    MCVAPI bool isHurtableBlock() const;
    MCVAPI bool isInteractiveBlock() const;
    MCVAPI bool isRailBlock() const;
    MCVAPI bool isSignalSource() const;
    MCVAPI bool isSlabBlock() const;
    MCVAPI bool isStairBlock() const;
    MCVAPI bool isStemBlock() const;
    MCVAPI bool isThinFenceBlock() const;
    MCVAPI bool isWallBlock() const;
    MCVAPI bool pushesUpFallingBlocks() const;
    MCVAPI bool spawnBurnResources(class BlockSource &, float, float, float) const;
    MCVAPI void triggerEvent(class BlockSource &, class BlockPos const &, int, int) const;
    MCVAPI bool waterSpreadCausesSpawn() const;
#endif
    MCAPI BlockLegacy(std::string const &, int, class Material const &);
    MCAPI bool addAABB(class AABB const &, class AABB const *, std::vector<class AABB> &) const;
    MCAPI class BlockLegacy & addBlockProperty(enum BlockProperty);
    MCAPI std::string buildDescriptionName(class Block const &) const;
    MCAPI class HitResult clip(class BlockSource &, class BlockPos const &, class Vec3 const &, class Vec3 const &, bool, class AABB const &) const;
    MCAPI void createBlockPermutations(unsigned int);
    MCAPI class WeakPtr<class BlockLegacy> createWeakPtr();
    MCAPI void forEachBlockPermutation(class std::function<bool (class Block const &)>) const;
    MCAPI void forEachItemStateInstance(class std::function<bool (class ItemStateInstance const &)>) const;
    MCAPI void getDebugText(std::vector<std::string> &, class BlockPos const &) const;
    MCAPI class Block const & getDefaultState() const;
    MCAPI bool operator==(class BlockLegacy const &) const;
    MCAPI class ItemActor * popResource(class BlockSource &, class BlockPos const &, class ItemInstance const &) const;
    MCAPI class BlockLegacy & setCanBeExtraBlock(bool);
    MCAPI class BlockLegacy & setCategory(enum CreativeItemCategory);
    MCAPI class BlockLegacy & setMinRequiredBaseGameVersion(class BaseGameVersion const &);
    MCAPI class BlockLegacy & setNameId(std::string const &);
    MCAPI void spawnResources(class BlockSource &, class BlockPos const &, std::vector<class Item const *> *, float, int, bool) const;
    MCAPI class Block const * tryGetStateFromLegacyData(unsigned short) const;
    MCAPI static std::string const BLOCK_DESCRIPTION_PREFIX;
    MCAPI static float const SIZE_OFFSET;
    MCAPI static unsigned char getPlacementFacingAll(class Actor &, class BlockPos const &, float);
    MCAPI static unsigned char getPlacementFacingAllExceptAxisY(class Actor &, class BlockPos const &, float);

};