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  }