github.com/df-mc/dragonfly@v0.9.13/server/block/stairs_type.go (about) 1 package block 2 3 import ( 4 "github.com/df-mc/dragonfly/server/world" 5 ) 6 7 // encodeStairsBlock encodes the provided block in to an identifier and meta value that can be used to encode the stairs. 8 func encodeStairsBlock(block world.Block) string { 9 switch block := block.(type) { 10 // TODO: Copper 11 case Andesite: 12 if block.Polished { 13 return "polished_andesite" 14 } 15 return "andesite" 16 case Blackstone: 17 if block.Type == NormalBlackstone() { 18 return "blackstone" 19 } else if block.Type == PolishedBlackstone() { 20 return "polished_blackstone" 21 } 22 case Bricks: 23 return "brick" 24 case Cobblestone: 25 if block.Mossy { 26 return "mossy_cobblestone" 27 } 28 return "stone" 29 case Deepslate: 30 if block.Type == CobbledDeepslate() { 31 return "cobbled_deepslate" 32 } else if block.Type == PolishedDeepslate() { 33 return "polished_deepslate" 34 } 35 case DeepslateBricks: 36 if !block.Cracked { 37 return "deepslate_brick" 38 } 39 case DeepslateTiles: 40 if !block.Cracked { 41 return "deepslate_tile" 42 } 43 case Diorite: 44 if block.Polished { 45 return "polished_diorite" 46 } 47 return "diorite" 48 case EndBricks: 49 return "end_brick" 50 case Granite: 51 if block.Polished { 52 return "polished_granite" 53 } 54 return "granite" 55 case MudBricks: 56 return "mud_brick" 57 case NetherBricks: 58 if block.Type == RedNetherBricks() { 59 return "nether_brick" 60 } 61 return "red_nether_brick" 62 case Planks: 63 return block.Wood.String() 64 case PolishedBlackstoneBrick: 65 if !block.Cracked { 66 return "polished_blackstone_brick" 67 } 68 case Prismarine: 69 switch block.Type { 70 case NormalPrismarine(): 71 return "prismarine" 72 case DarkPrismarine(): 73 return "dark_prismarine" 74 case BrickPrismarine(): 75 return "prismarine_bricks" 76 } 77 panic("invalid prismarine type") 78 case Purpur: 79 return "purpur" 80 case Quartz: 81 if block.Smooth { 82 return "smooth_quartz" 83 } 84 return "quartz" 85 case Sandstone: 86 switch block.Type { 87 case NormalSandstone(): 88 if block.Red { 89 return "red_sandstone" 90 } 91 return "sandstone" 92 case SmoothSandstone(): 93 if block.Red { 94 return "smooth_red_sandstone" 95 } 96 return "smooth_sandstone" 97 } 98 panic("invalid sandstone type") 99 case Stone: 100 if !block.Smooth { 101 return "normal_stone" 102 } 103 case StoneBricks: 104 if block.Type == MossyStoneBricks() { 105 return "mossy_stone_brick" 106 } 107 return "stone_brick" 108 } 109 panic("invalid block used for stairs") 110 } 111 112 // StairsBlocks returns a list of all possible blocks for stairs. 113 func StairsBlocks() []world.Block { 114 b := []world.Block{ 115 // TODO: Copper 116 Andesite{Polished: true}, 117 Andesite{}, 118 Blackstone{Type: PolishedBlackstone()}, 119 Blackstone{}, 120 Bricks{}, 121 Cobblestone{Mossy: true}, 122 Cobblestone{}, 123 DeepslateBricks{}, 124 DeepslateTiles{}, 125 Deepslate{Type: CobbledDeepslate()}, 126 Deepslate{Type: PolishedDeepslate()}, 127 Diorite{Polished: true}, 128 Diorite{}, 129 EndBricks{}, 130 Granite{Polished: true}, 131 Granite{}, 132 MudBricks{}, 133 NetherBricks{Type: RedNetherBricks()}, 134 NetherBricks{}, 135 PolishedBlackstoneBrick{}, 136 Purpur{}, 137 Quartz{Smooth: true}, 138 Quartz{}, 139 StoneBricks{Type: MossyStoneBricks()}, 140 StoneBricks{}, 141 Stone{}, 142 } 143 for _, p := range PrismarineTypes() { 144 b = append(b, Prismarine{Type: p}) 145 } 146 for _, s := range SandstoneTypes() { 147 if s != CutSandstone() && s != ChiseledSandstone() { 148 b = append(b, Sandstone{Type: s}) 149 b = append(b, Sandstone{Type: s, Red: true}) 150 } 151 } 152 for _, w := range WoodTypes() { 153 b = append(b, Planks{Wood: w}) 154 } 155 return b 156 }