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 }