26ed99fda6
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package block
|
|
|
|
import (
|
|
"math/rand/v2"
|
|
|
|
"github.com/df-mc/dragonfly/server/item"
|
|
"github.com/df-mc/dragonfly/server/world"
|
|
)
|
|
|
|
// Blackstone is a naturally generating block in the nether that can be used to craft stone tools, brewing stands and
|
|
// furnaces. Gilded blackstone also has a 10% chance to drop 2-6 golden nuggets.
|
|
type Blackstone struct {
|
|
solid
|
|
bassDrum
|
|
|
|
// Type is the type of blackstone of the block.
|
|
Type BlackstoneType
|
|
}
|
|
|
|
// BreakInfo ...
|
|
func (b Blackstone) BreakInfo() BreakInfo {
|
|
drops := oneOf(b)
|
|
hardness := 1.5
|
|
|
|
switch b.Type {
|
|
case GildedBlackstone():
|
|
drops = func(t item.Tool, enchantments []item.Enchantment) []item.Stack {
|
|
if hasSilkTouch(enchantments) {
|
|
return []item.Stack{item.NewStack(b, 1)}
|
|
}
|
|
nuggetChances := []float64{0.1, 1.0 / 7.0, 0.25, 1.0}
|
|
if rand.Float64() < nuggetChances[min(fortuneLevel(enchantments), 3)] {
|
|
return []item.Stack{item.NewStack(item.GoldNugget{}, rand.IntN(4)+2)}
|
|
}
|
|
return []item.Stack{item.NewStack(b, 1)}
|
|
}
|
|
case PolishedBlackstone():
|
|
hardness = 2
|
|
}
|
|
|
|
return newBreakInfo(hardness, pickaxeHarvestable, pickaxeEffective, drops).withBlastResistance(30)
|
|
}
|
|
|
|
// EncodeItem ...
|
|
func (b Blackstone) EncodeItem() (name string, meta int16) {
|
|
return "minecraft:" + b.Type.String(), 0
|
|
}
|
|
|
|
// EncodeBlock ...
|
|
func (b Blackstone) EncodeBlock() (string, map[string]any) {
|
|
return "minecraft:" + b.Type.String(), nil
|
|
}
|
|
|
|
// allBlackstone returns a list of all blackstone block variants.
|
|
func allBlackstone() (s []world.Block) {
|
|
for _, t := range BlackstoneTypes() {
|
|
s = append(s, Blackstone{Type: t})
|
|
}
|
|
return
|
|
}
|