github.com/df-mc/dragonfly@v0.9.13/server/block/deepslate.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 "github.com/go-gl/mathgl/mgl64" 8 ) 9 10 // Deepslate is similar to stone but is naturally found deep underground around Y0 and below, and is harder to break. 11 type Deepslate struct { 12 solid 13 bassDrum 14 15 // Type is the type of deepslate of the block. 16 Type DeepslateType 17 // Axis is the axis which the deepslate faces. 18 Axis cube.Axis 19 } 20 21 // BreakInfo ... 22 func (d Deepslate) BreakInfo() BreakInfo { 23 if d.Type == NormalDeepslate() { 24 return newBreakInfo(3, pickaxeHarvestable, pickaxeEffective, silkTouchOneOf(Deepslate{Type: CobbledDeepslate()}, d)).withBlastResistance(18) 25 } 26 return newBreakInfo(3.5, pickaxeHarvestable, pickaxeEffective, oneOf(d)).withBlastResistance(18) 27 } 28 29 // SmeltInfo ... 30 func (d Deepslate) SmeltInfo() item.SmeltInfo { 31 if d.Type == CobbledDeepslate() { 32 return newSmeltInfo(item.NewStack(Deepslate{}, 1), 0.1) 33 } 34 return item.SmeltInfo{} 35 } 36 37 // UseOnBlock ... 38 func (d Deepslate) UseOnBlock(pos cube.Pos, face cube.Face, _ mgl64.Vec3, w *world.World, user item.User, ctx *item.UseContext) (used bool) { 39 pos, face, used = firstReplaceable(w, pos, face, d) 40 if !used { 41 return 42 } 43 if d.Type == NormalDeepslate() { 44 d.Axis = face.Axis() 45 } 46 47 place(w, pos, d, user, ctx) 48 return placed(ctx) 49 } 50 51 // EncodeItem ... 52 func (d Deepslate) EncodeItem() (name string, meta int16) { 53 return "minecraft:" + d.Type.String(), 0 54 } 55 56 // EncodeBlock ... 57 func (d Deepslate) EncodeBlock() (string, map[string]any) { 58 if d.Type == NormalDeepslate() { 59 return "minecraft:deepslate", map[string]any{"pillar_axis": d.Axis.String()} 60 } 61 return "minecraft:" + d.Type.String(), nil 62 } 63 64 // allDeepslate returns a list of all deepslate block variants. 65 func allDeepslate() (s []world.Block) { 66 for _, t := range DeepslateTypes() { 67 axes := []cube.Axis{0} 68 if t == NormalDeepslate() { 69 axes = cube.Axes() 70 } 71 for _, axis := range axes { 72 s = append(s, Deepslate{Type: t, Axis: axis}) 73 } 74 } 75 return 76 }