// Code generated by cmd/blockhash; DO NOT EDIT.

package block

import "github.com/df-mc/dragonfly/server/world"

const (
	hashAir = iota
	hashAmethyst
	hashAncientDebris
	hashAndesite
	hashAnvil
	hashBambooBlock
	hashBambooMosaic
	hashBanner
	hashBarrel
	hashBarrier
	hashBasalt
	hashBeacon
	hashBed
	hashBedrock
	hashBeetrootSeeds
	hashBlackstone
	hashBlastFurnace
	hashBlueIce
	hashBone
	hashBookshelf
	hashBrewingStand
	hashBricks
	hashCactus
	hashCake
	hashCalcite
	hashCampfire
	hashCarpet
	hashCarrot
	hashChest
	hashChiseledQuartz
	hashClay
	hashCoal
	hashCoalOre
	hashCobblestone
	hashCobweb
	hashCocoaBean
	hashComposter
	hashConcrete
	hashConcretePowder
	hashCopper
	hashCopperBars
	hashCopperChain
	hashCopperDoor
	hashCopperGolemStatue
	hashCopperGrate
	hashCopperLantern
	hashCopperOre
	hashCopperTorch
	hashCopperTrapdoor
	hashCoral
	hashCoralBlock
	hashCraftingTable
	hashDeadBush
	hashDecoratedPot
	hashDeepslate
	hashDeepslateBricks
	hashDeepslateTiles
	hashDiamond
	hashDiamondOre
	hashDiorite
	hashDirt
	hashDirtPath
	hashDoubleFlower
	hashDoubleTallGrass
	hashDragonEgg
	hashDriedKelp
	hashDripstone
	hashEmerald
	hashEmeraldOre
	hashEnchantingTable
	hashEndBricks
	hashEndRod
	hashEndStone
	hashEnderChest
	hashFarmland
	hashFern
	hashFire
	hashFletchingTable
	hashFlower
	hashFroglight
	hashFurnace
	hashGlass
	hashGlassPane
	hashGlazedTerracotta
	hashGlowstone
	hashGold
	hashGoldOre
	hashGranite
	hashGrass
	hashGravel
	hashGrindstone
	hashHayBale
	hashHoneycomb
	hashHopper
	hashInfestedCobblestone
	hashInfestedDeepslate
	hashInfestedStone
	hashInfestedStoneBricks
	hashInvisibleBedrock
	hashIron
	hashIronBars
	hashIronChain
	hashIronOre
	hashItemFrame
	hashJukebox
	hashKelp
	hashLadder
	hashLantern
	hashLapis
	hashLapisOre
	hashLava
	hashLeaves
	hashLectern
	hashLever
	hashLight
	hashLilyPad
	hashLitPumpkin
	hashLog
	hashLoom
	hashMagma
	hashMelon
	hashMelonSeeds
	hashMossCarpet
	hashMud
	hashMudBricks
	hashMuddyMangroveRoots
	hashNetherBrickFence
	hashNetherBricks
	hashNetherGoldOre
	hashNetherQuartzOre
	hashNetherSprouts
	hashNetherWart
	hashNetherWartBlock
	hashNetherite
	hashNetherrack
	hashNote
	hashObsidian
	hashPackedIce
	hashPackedMud
	hashPinkPetals
	hashPlanks
	hashPodzol
	hashPolishedBlackstoneBrick
	hashPolishedTuff
	hashPotato
	hashPrismarine
	hashPumpkin
	hashPumpkinSeeds
	hashPurpur
	hashPurpurPillar
	hashQuartz
	hashQuartzBricks
	hashQuartzPillar
	hashRawCopper
	hashRawGold
	hashRawIron
	hashRedstoneBlock
	hashRedstoneOre
	hashRedstoneTorch
	hashRedstoneWire
	hashReinforcedDeepslate
	hashResin
	hashResinBricks
	hashSand
	hashSandstone
	hashSeaLantern
	hashSeaPickle
	hashShortGrass
	hashShroomlight
	hashSign
	hashSkull
	hashSlab
	hashSlime
	hashSmithingTable
	hashSmoker
	hashSmoothBasalt
	hashSnow
	hashSoulSand
	hashSoulSoil
	hashSponge
	hashSporeBlossom
	hashStainedGlass
	hashStainedGlassPane
	hashStainedTerracotta
	hashStairs
	hashStone
	hashStoneBricks
	hashStonecutter
	hashString
	hashSugarCane
	hashTNT
	hashTerracotta
	hashTorch
	hashTuff
	hashTuffBricks
	hashVines
	hashWall
	hashWater
	hashWheatSeeds
	hashWood
	hashWoodDoor
	hashWoodFence
	hashWoodFenceGate
	hashWoodTrapdoor
	hashWool
	hashCustomBlockBase
)

// customBlockBase represents the base hash for all custom blocks.
var customBlockBase = uint64(hashCustomBlockBase - 1)

// NextHash returns the next free hash for custom blocks.
func NextHash() uint64 {
	customBlockBase++
	return customBlockBase
}

func (Air) Hash() (uint64, uint64) {
	return hashAir, 0
}

func (Amethyst) Hash() (uint64, uint64) {
	return hashAmethyst, 0
}

func (AncientDebris) Hash() (uint64, uint64) {
	return hashAncientDebris, 0
}

func (a Andesite) Hash() (uint64, uint64) {
	return hashAndesite, uint64(boolByte(a.Polished))
}

func (a Anvil) Hash() (uint64, uint64) {
	return hashAnvil, uint64(a.Type.Uint8()) | uint64(a.Facing)<<2
}

func (b BambooBlock) Hash() (uint64, uint64) {
	return hashBambooBlock, uint64(b.Axis) | uint64(boolByte(b.Stripped))<<2
}

func (BambooMosaic) Hash() (uint64, uint64) {
	return hashBambooMosaic, 0
}

func (b Banner) Hash() (uint64, uint64) {
	return hashBanner, uint64(b.Attach.Uint8())
}

func (b Barrel) Hash() (uint64, uint64) {
	return hashBarrel, uint64(b.Facing) | uint64(boolByte(b.Open))<<3
}

func (Barrier) Hash() (uint64, uint64) {
	return hashBarrier, 0
}

func (b Basalt) Hash() (uint64, uint64) {
	return hashBasalt, uint64(boolByte(b.Polished)) | uint64(b.Axis)<<1
}

func (Beacon) Hash() (uint64, uint64) {
	return hashBeacon, 0
}

func (b Bed) Hash() (uint64, uint64) {
	return hashBed, uint64(b.Facing) | uint64(boolByte(b.Head))<<2
}

func (b Bedrock) Hash() (uint64, uint64) {
	return hashBedrock, uint64(boolByte(b.InfiniteBurning))
}

func (b BeetrootSeeds) Hash() (uint64, uint64) {
	return hashBeetrootSeeds, uint64(b.Growth)
}

func (b Blackstone) Hash() (uint64, uint64) {
	return hashBlackstone, uint64(b.Type.Uint8())
}

func (b BlastFurnace) Hash() (uint64, uint64) {
	return hashBlastFurnace, uint64(b.Facing) | uint64(boolByte(b.Lit))<<2
}

func (BlueIce) Hash() (uint64, uint64) {
	return hashBlueIce, 0
}

func (b Bone) Hash() (uint64, uint64) {
	return hashBone, uint64(b.Axis)
}

func (Bookshelf) Hash() (uint64, uint64) {
	return hashBookshelf, 0
}

func (b BrewingStand) Hash() (uint64, uint64) {
	return hashBrewingStand, uint64(boolByte(b.LeftSlot)) | uint64(boolByte(b.MiddleSlot))<<1 | uint64(boolByte(b.RightSlot))<<2
}

func (Bricks) Hash() (uint64, uint64) {
	return hashBricks, 0
}

func (c Cactus) Hash() (uint64, uint64) {
	return hashCactus, uint64(c.Age)
}

func (c Cake) Hash() (uint64, uint64) {
	return hashCake, uint64(c.Bites)
}

func (Calcite) Hash() (uint64, uint64) {
	return hashCalcite, 0
}

func (c Campfire) Hash() (uint64, uint64) {
	return hashCampfire, uint64(c.Facing) | uint64(boolByte(c.Extinguished))<<2 | uint64(c.Type.Uint8())<<3
}

func (c Carpet) Hash() (uint64, uint64) {
	return hashCarpet, uint64(c.Colour.Uint8())
}

func (c Carrot) Hash() (uint64, uint64) {
	return hashCarrot, uint64(c.Growth)
}

func (c Chest) Hash() (uint64, uint64) {
	return hashChest, uint64(c.Facing)
}

func (ChiseledQuartz) Hash() (uint64, uint64) {
	return hashChiseledQuartz, 0
}

func (Clay) Hash() (uint64, uint64) {
	return hashClay, 0
}

func (Coal) Hash() (uint64, uint64) {
	return hashCoal, 0
}

func (c CoalOre) Hash() (uint64, uint64) {
	return hashCoalOre, uint64(c.Type.Uint8())
}

func (c Cobblestone) Hash() (uint64, uint64) {
	return hashCobblestone, uint64(boolByte(c.Mossy))
}

func (Cobweb) Hash() (uint64, uint64) {
	return hashCobweb, 0
}

func (c CocoaBean) Hash() (uint64, uint64) {
	return hashCocoaBean, uint64(c.Facing) | uint64(c.Age)<<2
}

func (c Composter) Hash() (uint64, uint64) {
	return hashComposter, uint64(c.Level)
}

func (c Concrete) Hash() (uint64, uint64) {
	return hashConcrete, uint64(c.Colour.Uint8())
}

func (c ConcretePowder) Hash() (uint64, uint64) {
	return hashConcretePowder, uint64(c.Colour.Uint8())
}

func (c Copper) Hash() (uint64, uint64) {
	return hashCopper, uint64(c.Type.Uint8()) | uint64(c.Oxidation.Uint8())<<2 | uint64(boolByte(c.Waxed))<<4
}

func (c CopperBars) Hash() (uint64, uint64) {
	return hashCopperBars, uint64(c.Oxidation.Uint8()) | uint64(boolByte(c.Waxed))<<2
}

func (c CopperChain) Hash() (uint64, uint64) {
	return hashCopperChain, uint64(c.Axis) | uint64(c.Oxidation.Uint8())<<2 | uint64(boolByte(c.Waxed))<<4
}

func (d CopperDoor) Hash() (uint64, uint64) {
	return hashCopperDoor, uint64(d.Oxidation.Uint8()) | uint64(boolByte(d.Waxed))<<2 | uint64(d.Facing)<<3 | uint64(boolByte(d.Open))<<5 | uint64(boolByte(d.Top))<<6 | uint64(boolByte(d.Right))<<7
}

func (c CopperGolemStatue) Hash() (uint64, uint64) {
	return hashCopperGolemStatue, uint64(c.Facing) | uint64(c.Oxidation.Uint8())<<2 | uint64(boolByte(c.Waxed))<<4
}

func (c CopperGrate) Hash() (uint64, uint64) {
	return hashCopperGrate, uint64(c.Oxidation.Uint8()) | uint64(boolByte(c.Waxed))<<2
}

func (c CopperLantern) Hash() (uint64, uint64) {
	return hashCopperLantern, uint64(boolByte(c.Hanging)) | uint64(c.Oxidation.Uint8())<<1 | uint64(boolByte(c.Waxed))<<3
}

func (c CopperOre) Hash() (uint64, uint64) {
	return hashCopperOre, uint64(c.Type.Uint8())
}

func (t CopperTorch) Hash() (uint64, uint64) {
	return hashCopperTorch, uint64(t.Facing)
}

func (t CopperTrapdoor) Hash() (uint64, uint64) {
	return hashCopperTrapdoor, uint64(t.Oxidation.Uint8()) | uint64(boolByte(t.Waxed))<<2 | uint64(t.Facing)<<3 | uint64(boolByte(t.Open))<<5 | uint64(boolByte(t.Top))<<6
}

func (c Coral) Hash() (uint64, uint64) {
	return hashCoral, uint64(c.Type.Uint8()) | uint64(boolByte(c.Dead))<<3
}

func (c CoralBlock) Hash() (uint64, uint64) {
	return hashCoralBlock, uint64(c.Type.Uint8()) | uint64(boolByte(c.Dead))<<3
}

func (CraftingTable) Hash() (uint64, uint64) {
	return hashCraftingTable, 0
}

func (DeadBush) Hash() (uint64, uint64) {
	return hashDeadBush, 0
}

func (p DecoratedPot) Hash() (uint64, uint64) {
	return hashDecoratedPot, uint64(p.Facing)
}

func (d Deepslate) Hash() (uint64, uint64) {
	return hashDeepslate, uint64(d.Type.Uint8()) | uint64(d.Axis)<<2
}

func (d DeepslateBricks) Hash() (uint64, uint64) {
	return hashDeepslateBricks, uint64(boolByte(d.Cracked))
}

func (d DeepslateTiles) Hash() (uint64, uint64) {
	return hashDeepslateTiles, uint64(boolByte(d.Cracked))
}

func (Diamond) Hash() (uint64, uint64) {
	return hashDiamond, 0
}

func (d DiamondOre) Hash() (uint64, uint64) {
	return hashDiamondOre, uint64(d.Type.Uint8())
}

func (d Diorite) Hash() (uint64, uint64) {
	return hashDiorite, uint64(boolByte(d.Polished))
}

func (d Dirt) Hash() (uint64, uint64) {
	return hashDirt, uint64(boolByte(d.Coarse))
}

func (DirtPath) Hash() (uint64, uint64) {
	return hashDirtPath, 0
}

func (d DoubleFlower) Hash() (uint64, uint64) {
	return hashDoubleFlower, uint64(boolByte(d.UpperPart)) | uint64(d.Type.Uint8())<<1
}

func (d DoubleTallGrass) Hash() (uint64, uint64) {
	return hashDoubleTallGrass, uint64(boolByte(d.UpperPart)) | uint64(d.Type.Uint8())<<1
}

func (DragonEgg) Hash() (uint64, uint64) {
	return hashDragonEgg, 0
}

func (DriedKelp) Hash() (uint64, uint64) {
	return hashDriedKelp, 0
}

func (Dripstone) Hash() (uint64, uint64) {
	return hashDripstone, 0
}

func (Emerald) Hash() (uint64, uint64) {
	return hashEmerald, 0
}

func (e EmeraldOre) Hash() (uint64, uint64) {
	return hashEmeraldOre, uint64(e.Type.Uint8())
}

func (EnchantingTable) Hash() (uint64, uint64) {
	return hashEnchantingTable, 0
}

func (EndBricks) Hash() (uint64, uint64) {
	return hashEndBricks, 0
}

func (e EndRod) Hash() (uint64, uint64) {
	return hashEndRod, uint64(e.Facing)
}

func (EndStone) Hash() (uint64, uint64) {
	return hashEndStone, 0
}

func (c EnderChest) Hash() (uint64, uint64) {
	return hashEnderChest, uint64(c.Facing)
}

func (f Farmland) Hash() (uint64, uint64) {
	return hashFarmland, uint64(f.Hydration)
}

func (Fern) Hash() (uint64, uint64) {
	return hashFern, 0
}

func (f Fire) Hash() (uint64, uint64) {
	return hashFire, uint64(f.Type.Uint8()) | uint64(f.Age)<<1
}

func (FletchingTable) Hash() (uint64, uint64) {
	return hashFletchingTable, 0
}

func (f Flower) Hash() (uint64, uint64) {
	return hashFlower, uint64(f.Type.Uint8())
}

func (f Froglight) Hash() (uint64, uint64) {
	return hashFroglight, uint64(f.Type.Uint8()) | uint64(f.Axis)<<2
}

func (f Furnace) Hash() (uint64, uint64) {
	return hashFurnace, uint64(f.Facing) | uint64(boolByte(f.Lit))<<2
}

func (Glass) Hash() (uint64, uint64) {
	return hashGlass, 0
}

func (GlassPane) Hash() (uint64, uint64) {
	return hashGlassPane, 0
}

func (t GlazedTerracotta) Hash() (uint64, uint64) {
	return hashGlazedTerracotta, uint64(t.Colour.Uint8()) | uint64(t.Facing)<<4
}

func (Glowstone) Hash() (uint64, uint64) {
	return hashGlowstone, 0
}

func (Gold) Hash() (uint64, uint64) {
	return hashGold, 0
}

func (g GoldOre) Hash() (uint64, uint64) {
	return hashGoldOre, uint64(g.Type.Uint8())
}

func (g Granite) Hash() (uint64, uint64) {
	return hashGranite, uint64(boolByte(g.Polished))
}

func (Grass) Hash() (uint64, uint64) {
	return hashGrass, 0
}

func (Gravel) Hash() (uint64, uint64) {
	return hashGravel, 0
}

func (g Grindstone) Hash() (uint64, uint64) {
	return hashGrindstone, uint64(g.Attach.Uint8()) | uint64(g.Facing)<<2
}

func (h HayBale) Hash() (uint64, uint64) {
	return hashHayBale, uint64(h.Axis)
}

func (Honeycomb) Hash() (uint64, uint64) {
	return hashHoneycomb, 0
}

func (h Hopper) Hash() (uint64, uint64) {
	return hashHopper, uint64(h.Facing) | uint64(boolByte(h.Powered))<<3
}

func (InfestedCobblestone) Hash() (uint64, uint64) {
	return hashInfestedCobblestone, 0
}

func (i InfestedDeepslate) Hash() (uint64, uint64) {
	return hashInfestedDeepslate, uint64(i.Axis)
}

func (InfestedStone) Hash() (uint64, uint64) {
	return hashInfestedStone, 0
}

func (i InfestedStoneBricks) Hash() (uint64, uint64) {
	return hashInfestedStoneBricks, uint64(i.Type.Uint8())
}

func (InvisibleBedrock) Hash() (uint64, uint64) {
	return hashInvisibleBedrock, 0
}

func (Iron) Hash() (uint64, uint64) {
	return hashIron, 0
}

func (IronBars) Hash() (uint64, uint64) {
	return hashIronBars, 0
}

func (c IronChain) Hash() (uint64, uint64) {
	return hashIronChain, uint64(c.Axis)
}

func (i IronOre) Hash() (uint64, uint64) {
	return hashIronOre, uint64(i.Type.Uint8())
}

func (i ItemFrame) Hash() (uint64, uint64) {
	return hashItemFrame, uint64(i.Facing) | uint64(boolByte(i.Glowing))<<3
}

func (Jukebox) Hash() (uint64, uint64) {
	return hashJukebox, 0
}

func (k Kelp) Hash() (uint64, uint64) {
	return hashKelp, uint64(k.Age)
}

func (l Ladder) Hash() (uint64, uint64) {
	return hashLadder, uint64(l.Facing)
}

func (l Lantern) Hash() (uint64, uint64) {
	return hashLantern, uint64(boolByte(l.Hanging)) | uint64(l.Type.Uint8())<<1
}

func (Lapis) Hash() (uint64, uint64) {
	return hashLapis, 0
}

func (l LapisOre) Hash() (uint64, uint64) {
	return hashLapisOre, uint64(l.Type.Uint8())
}

func (l Lava) Hash() (uint64, uint64) {
	return hashLava, uint64(boolByte(l.Still)) | uint64(l.Depth)<<1 | uint64(boolByte(l.Falling))<<9
}

func (l Leaves) Hash() (uint64, uint64) {
	return hashLeaves, uint64(l.Type.Uint8()) | uint64(boolByte(l.Persistent))<<4 | uint64(boolByte(l.ShouldUpdate))<<5
}

func (l Lectern) Hash() (uint64, uint64) {
	return hashLectern, uint64(l.Facing)
}

func (l Lever) Hash() (uint64, uint64) {
	return hashLever, uint64(boolByte(l.Powered)) | uint64(l.Facing)<<1 | uint64(l.Direction)<<4
}

func (l Light) Hash() (uint64, uint64) {
	return hashLight, uint64(l.Level)
}

func (LilyPad) Hash() (uint64, uint64) {
	return hashLilyPad, 0
}

func (l LitPumpkin) Hash() (uint64, uint64) {
	return hashLitPumpkin, uint64(l.Facing)
}

func (l Log) Hash() (uint64, uint64) {
	return hashLog, uint64(l.Wood.Uint8()) | uint64(boolByte(l.Stripped))<<4 | uint64(l.Axis)<<5
}

func (l Loom) Hash() (uint64, uint64) {
	return hashLoom, uint64(l.Facing)
}

func (Magma) Hash() (uint64, uint64) {
	return hashMagma, 0
}

func (Melon) Hash() (uint64, uint64) {
	return hashMelon, 0
}

func (m MelonSeeds) Hash() (uint64, uint64) {
	return hashMelonSeeds, uint64(m.Growth) | uint64(m.Direction)<<8
}

func (MossCarpet) Hash() (uint64, uint64) {
	return hashMossCarpet, 0
}

func (Mud) Hash() (uint64, uint64) {
	return hashMud, 0
}

func (MudBricks) Hash() (uint64, uint64) {
	return hashMudBricks, 0
}

func (m MuddyMangroveRoots) Hash() (uint64, uint64) {
	return hashMuddyMangroveRoots, uint64(m.Axis)
}

func (NetherBrickFence) Hash() (uint64, uint64) {
	return hashNetherBrickFence, 0
}

func (n NetherBricks) Hash() (uint64, uint64) {
	return hashNetherBricks, uint64(n.Type.Uint8())
}

func (NetherGoldOre) Hash() (uint64, uint64) {
	return hashNetherGoldOre, 0
}

func (NetherQuartzOre) Hash() (uint64, uint64) {
	return hashNetherQuartzOre, 0
}

func (NetherSprouts) Hash() (uint64, uint64) {
	return hashNetherSprouts, 0
}

func (n NetherWart) Hash() (uint64, uint64) {
	return hashNetherWart, uint64(n.Age)
}

func (n NetherWartBlock) Hash() (uint64, uint64) {
	return hashNetherWartBlock, uint64(boolByte(n.Warped))
}

func (Netherite) Hash() (uint64, uint64) {
	return hashNetherite, 0
}

func (Netherrack) Hash() (uint64, uint64) {
	return hashNetherrack, 0
}

func (Note) Hash() (uint64, uint64) {
	return hashNote, 0
}

func (o Obsidian) Hash() (uint64, uint64) {
	return hashObsidian, uint64(boolByte(o.Crying))
}

func (PackedIce) Hash() (uint64, uint64) {
	return hashPackedIce, 0
}

func (PackedMud) Hash() (uint64, uint64) {
	return hashPackedMud, 0
}

func (p PinkPetals) Hash() (uint64, uint64) {
	return hashPinkPetals, uint64(p.AdditionalCount) | uint64(p.Facing)<<8
}

func (p Planks) Hash() (uint64, uint64) {
	return hashPlanks, uint64(p.Wood.Uint8())
}

func (Podzol) Hash() (uint64, uint64) {
	return hashPodzol, 0
}

func (b PolishedBlackstoneBrick) Hash() (uint64, uint64) {
	return hashPolishedBlackstoneBrick, uint64(boolByte(b.Cracked))
}

func (PolishedTuff) Hash() (uint64, uint64) {
	return hashPolishedTuff, 0
}

func (p Potato) Hash() (uint64, uint64) {
	return hashPotato, uint64(p.Growth)
}

func (p Prismarine) Hash() (uint64, uint64) {
	return hashPrismarine, uint64(p.Type.Uint8())
}

func (p Pumpkin) Hash() (uint64, uint64) {
	return hashPumpkin, uint64(boolByte(p.Carved)) | uint64(p.Facing)<<1
}

func (p PumpkinSeeds) Hash() (uint64, uint64) {
	return hashPumpkinSeeds, uint64(p.Growth) | uint64(p.Direction)<<8
}

func (Purpur) Hash() (uint64, uint64) {
	return hashPurpur, 0
}

func (p PurpurPillar) Hash() (uint64, uint64) {
	return hashPurpurPillar, uint64(p.Axis)
}

func (q Quartz) Hash() (uint64, uint64) {
	return hashQuartz, uint64(boolByte(q.Smooth))
}

func (QuartzBricks) Hash() (uint64, uint64) {
	return hashQuartzBricks, 0
}

func (q QuartzPillar) Hash() (uint64, uint64) {
	return hashQuartzPillar, uint64(q.Axis)
}

func (RawCopper) Hash() (uint64, uint64) {
	return hashRawCopper, 0
}

func (RawGold) Hash() (uint64, uint64) {
	return hashRawGold, 0
}

func (RawIron) Hash() (uint64, uint64) {
	return hashRawIron, 0
}

func (RedstoneBlock) Hash() (uint64, uint64) {
	return hashRedstoneBlock, 0
}

func (r RedstoneOre) Hash() (uint64, uint64) {
	return hashRedstoneOre, uint64(r.Type.Uint8()) | uint64(boolByte(r.Lit))<<1
}

func (t RedstoneTorch) Hash() (uint64, uint64) {
	return hashRedstoneTorch, uint64(t.Facing) | uint64(boolByte(t.Lit))<<3
}

func (r RedstoneWire) Hash() (uint64, uint64) {
	return hashRedstoneWire, uint64(r.Power)
}

func (ReinforcedDeepslate) Hash() (uint64, uint64) {
	return hashReinforcedDeepslate, 0
}

func (Resin) Hash() (uint64, uint64) {
	return hashResin, 0
}

func (r ResinBricks) Hash() (uint64, uint64) {
	return hashResinBricks, uint64(boolByte(r.Chiseled))
}

func (s Sand) Hash() (uint64, uint64) {
	return hashSand, uint64(boolByte(s.Red))
}

func (s Sandstone) Hash() (uint64, uint64) {
	return hashSandstone, uint64(s.Type.Uint8()) | uint64(boolByte(s.Red))<<2
}

func (SeaLantern) Hash() (uint64, uint64) {
	return hashSeaLantern, 0
}

func (s SeaPickle) Hash() (uint64, uint64) {
	return hashSeaPickle, uint64(s.AdditionalCount) | uint64(boolByte(s.Dead))<<8
}

func (ShortGrass) Hash() (uint64, uint64) {
	return hashShortGrass, 0
}

func (Shroomlight) Hash() (uint64, uint64) {
	return hashShroomlight, 0
}

func (s Sign) Hash() (uint64, uint64) {
	return hashSign, uint64(s.Wood.Uint8()) | uint64(s.Attach.Uint8())<<4
}

func (s Skull) Hash() (uint64, uint64) {
	return hashSkull, uint64(s.Type.Uint8()) | uint64(s.Attach.FaceUint8())<<3
}

func (s Slab) Hash() (uint64, uint64) {
	return hashSlab, world.BlockHash(s.Block) | uint64(boolByte(s.Top))<<32 | uint64(boolByte(s.Double))<<33
}

func (Slime) Hash() (uint64, uint64) {
	return hashSlime, 0
}

func (SmithingTable) Hash() (uint64, uint64) {
	return hashSmithingTable, 0
}

func (s Smoker) Hash() (uint64, uint64) {
	return hashSmoker, uint64(s.Facing) | uint64(boolByte(s.Lit))<<2
}

func (SmoothBasalt) Hash() (uint64, uint64) {
	return hashSmoothBasalt, 0
}

func (Snow) Hash() (uint64, uint64) {
	return hashSnow, 0
}

func (SoulSand) Hash() (uint64, uint64) {
	return hashSoulSand, 0
}

func (SoulSoil) Hash() (uint64, uint64) {
	return hashSoulSoil, 0
}

func (s Sponge) Hash() (uint64, uint64) {
	return hashSponge, uint64(boolByte(s.Wet))
}

func (SporeBlossom) Hash() (uint64, uint64) {
	return hashSporeBlossom, 0
}

func (g StainedGlass) Hash() (uint64, uint64) {
	return hashStainedGlass, uint64(g.Colour.Uint8())
}

func (p StainedGlassPane) Hash() (uint64, uint64) {
	return hashStainedGlassPane, uint64(p.Colour.Uint8())
}

func (t StainedTerracotta) Hash() (uint64, uint64) {
	return hashStainedTerracotta, uint64(t.Colour.Uint8())
}

func (s Stairs) Hash() (uint64, uint64) {
	return hashStairs, world.BlockHash(s.Block) | uint64(boolByte(s.UpsideDown))<<32 | uint64(s.Facing)<<33
}

func (s Stone) Hash() (uint64, uint64) {
	return hashStone, uint64(boolByte(s.Smooth))
}

func (s StoneBricks) Hash() (uint64, uint64) {
	return hashStoneBricks, uint64(s.Type.Uint8())
}

func (s Stonecutter) Hash() (uint64, uint64) {
	return hashStonecutter, uint64(s.Facing)
}

func (s String) Hash() (uint64, uint64) {
	return hashString, uint64(boolByte(s.Attached)) | uint64(boolByte(s.Disarmed))<<1 | uint64(boolByte(s.Powered))<<2 | uint64(boolByte(s.Suspended))<<3
}

func (c SugarCane) Hash() (uint64, uint64) {
	return hashSugarCane, uint64(c.Age)
}

func (TNT) Hash() (uint64, uint64) {
	return hashTNT, 0
}

func (Terracotta) Hash() (uint64, uint64) {
	return hashTerracotta, 0
}

func (t Torch) Hash() (uint64, uint64) {
	return hashTorch, uint64(t.Facing) | uint64(t.Type.Uint8())<<3
}

func (t Tuff) Hash() (uint64, uint64) {
	return hashTuff, uint64(boolByte(t.Chiseled))
}

func (t TuffBricks) Hash() (uint64, uint64) {
	return hashTuffBricks, uint64(boolByte(t.Chiseled))
}

func (v Vines) Hash() (uint64, uint64) {
	return hashVines, uint64(boolByte(v.NorthDirection)) | uint64(boolByte(v.EastDirection))<<1 | uint64(boolByte(v.SouthDirection))<<2 | uint64(boolByte(v.WestDirection))<<3
}

func (w Wall) Hash() (uint64, uint64) {
	return hashWall, world.BlockHash(w.Block) | uint64(w.NorthConnection.Uint8())<<32 | uint64(w.EastConnection.Uint8())<<34 | uint64(w.SouthConnection.Uint8())<<36 | uint64(w.WestConnection.Uint8())<<38 | uint64(boolByte(w.Post))<<40
}

func (w Water) Hash() (uint64, uint64) {
	return hashWater, uint64(boolByte(w.Still)) | uint64(w.Depth)<<1 | uint64(boolByte(w.Falling))<<9
}

func (s WheatSeeds) Hash() (uint64, uint64) {
	return hashWheatSeeds, uint64(s.Growth)
}

func (w Wood) Hash() (uint64, uint64) {
	return hashWood, uint64(w.Wood.Uint8()) | uint64(boolByte(w.Stripped))<<4 | uint64(w.Axis)<<5
}

func (d WoodDoor) Hash() (uint64, uint64) {
	return hashWoodDoor, uint64(d.Wood.Uint8()) | uint64(d.Facing)<<4 | uint64(boolByte(d.Open))<<6 | uint64(boolByte(d.Top))<<7 | uint64(boolByte(d.Right))<<8
}

func (w WoodFence) Hash() (uint64, uint64) {
	return hashWoodFence, uint64(w.Wood.Uint8())
}

func (f WoodFenceGate) Hash() (uint64, uint64) {
	return hashWoodFenceGate, uint64(f.Wood.Uint8()) | uint64(f.Facing)<<4 | uint64(boolByte(f.Open))<<6 | uint64(boolByte(f.Lowered))<<7
}

func (t WoodTrapdoor) Hash() (uint64, uint64) {
	return hashWoodTrapdoor, uint64(t.Wood.Uint8()) | uint64(t.Facing)<<4 | uint64(boolByte(t.Open))<<6 | uint64(boolByte(t.Top))<<7
}

func (w Wool) Hash() (uint64, uint64) {
	return hashWool, uint64(w.Colour.Uint8())
}
