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  }