github.com/df-mc/dragonfly@v0.9.13/server/block/purpur.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  type (
    11  	// Purpur is a decorative block that is naturally generated in End cities and End ships.
    12  	Purpur struct {
    13  		solid
    14  		bassDrum
    15  	}
    16  	// PurpurPillar is a variant of Purpur that can be rotated.
    17  	PurpurPillar struct {
    18  		solid
    19  		bassDrum
    20  
    21  		// Axis is the axis which the purpur pillar block faces.
    22  		Axis cube.Axis
    23  	}
    24  )
    25  
    26  // BreakInfo ...
    27  func (p Purpur) BreakInfo() BreakInfo {
    28  	return newBreakInfo(1.5, pickaxeHarvestable, pickaxeEffective, oneOf(p)).withBlastResistance(30)
    29  }
    30  
    31  // EncodeItem ...
    32  func (p Purpur) EncodeItem() (name string, meta int16) {
    33  	return "minecraft:purpur_block", 0
    34  }
    35  
    36  // EncodeBlock ...
    37  func (p Purpur) EncodeBlock() (name string, properties map[string]interface{}) {
    38  	return "minecraft:purpur_block", map[string]interface{}{"chisel_type": "default", "pillar_axis": "y"}
    39  }
    40  
    41  // UseOnBlock ...
    42  func (p PurpurPillar) UseOnBlock(pos cube.Pos, face cube.Face, _ mgl64.Vec3, w *world.World, user item.User, ctx *item.UseContext) (used bool) {
    43  	pos, face, used = firstReplaceable(w, pos, face, p)
    44  	if !used {
    45  		return
    46  	}
    47  	p.Axis = face.Axis()
    48  
    49  	place(w, pos, p, user, ctx)
    50  	return placed(ctx)
    51  }
    52  
    53  // BreakInfo ...
    54  func (p PurpurPillar) BreakInfo() BreakInfo {
    55  	return newBreakInfo(1.5, pickaxeHarvestable, pickaxeEffective, oneOf(p)).withBlastResistance(30)
    56  }
    57  
    58  // EncodeItem ...
    59  func (p PurpurPillar) EncodeItem() (name string, meta int16) {
    60  	return "minecraft:purpur_block", 1
    61  }
    62  
    63  // EncodeBlock ...
    64  func (p PurpurPillar) EncodeBlock() (name string, properties map[string]interface{}) {
    65  	return "minecraft:purpur_block", map[string]interface{}{"chisel_type": "lines", "pillar_axis": p.Axis.String()}
    66  }
    67  
    68  // allPurpurs ...
    69  func allPurpurs() (purpur []world.Block) {
    70  	purpur = append(purpur, Purpur{})
    71  	for _, axis := range cube.Axes() {
    72  		purpur = append(purpur, PurpurPillar{Axis: axis})
    73  	}
    74  	return
    75  }