github.com/df-mc/dragonfly@v0.9.13/server/block/concrete_powder.go (about)

     1  package block
     2  
     3  import (
     4  	"github.com/df-mc/dragonfly/server/block/cube"
     5  	"github.com/df-mc/dragonfly/server/item"
     6  	"github.com/df-mc/dragonfly/server/world"
     7  )
     8  
     9  // ConcretePowder is a gravity affected block that comes in 16 different colours. When interacting with water,
    10  // it becomes concrete.
    11  type ConcretePowder struct {
    12  	gravityAffected
    13  	solid
    14  	snare
    15  
    16  	// Colour is the colour of the concrete powder.
    17  	Colour item.Colour
    18  }
    19  
    20  // Solidifies ...
    21  func (c ConcretePowder) Solidifies(pos cube.Pos, w *world.World) bool {
    22  	_, water := w.Block(pos).(Water)
    23  	return water
    24  }
    25  
    26  // NeighbourUpdateTick ...
    27  func (c ConcretePowder) NeighbourUpdateTick(pos, _ cube.Pos, w *world.World) {
    28  	for i := cube.Face(0); i < 6; i++ {
    29  		if _, ok := w.Block(pos.Side(i)).(Water); ok {
    30  			w.SetBlock(pos, Concrete{Colour: c.Colour}, nil)
    31  			return
    32  		}
    33  	}
    34  	c.fall(c, pos, w)
    35  }
    36  
    37  // BreakInfo ...
    38  func (c ConcretePowder) BreakInfo() BreakInfo {
    39  	return newBreakInfo(0.5, alwaysHarvestable, shovelEffective, oneOf(c))
    40  }
    41  
    42  // EncodeItem ...
    43  func (c ConcretePowder) EncodeItem() (name string, meta int16) {
    44  	return "minecraft:" + c.Colour.String() + "_concrete_powder", 0
    45  }
    46  
    47  // EncodeBlock ...
    48  func (c ConcretePowder) EncodeBlock() (name string, properties map[string]any) {
    49  	return "minecraft:" + c.Colour.String() + "_concrete_powder", nil
    50  }
    51  
    52  // allConcretePowder returns concrete powder with all possible colours.
    53  func allConcretePowder() []world.Block {
    54  	b := make([]world.Block, 0, 16)
    55  	for _, c := range item.Colours() {
    56  		b = append(b, ConcretePowder{Colour: c})
    57  	}
    58  	return b
    59  }