Files
mc/server/block/dirt.go
T

73 lines
1.6 KiB
Go
Raw Permalink Normal View History

2026-07-09 08:33:57 +08:00
package block
import (
"github.com/df-mc/dragonfly/server/world"
)
// Dirt is a block found abundantly in most biomes under a layer of grass blocks at the top of the normal
// world.
type Dirt struct {
solid
// Coarse specifies if the dirt should be off the coarse dirt variant. Grass blocks won't spread on
// the block if set to true.
Coarse bool
}
// SoilFor ...
func (d Dirt) SoilFor(block world.Block) bool {
switch block.(type) {
case ShortGrass, Fern, DoubleTallGrass, DeadBush:
return !d.Coarse
case Flower, DoubleFlower, NetherSprouts, PinkPetals, SugarCane:
return true
}
return false
}
// BreakInfo ...
func (d Dirt) BreakInfo() BreakInfo {
return newBreakInfo(0.5, alwaysHarvestable, shovelEffective, oneOf(d))
}
// Till ...
func (d Dirt) Till() (world.Block, bool) {
if d.Coarse {
return Dirt{Coarse: false}, true
}
return Farmland{}, true
}
// Shovel ...
func (d Dirt) Shovel() (world.Block, bool) {
return DirtPath{}, true
}
// EncodeItem ...
func (d Dirt) EncodeItem() (name string, meta int16) {
if d.Coarse {
return "minecraft:coarse_dirt", 0
}
return "minecraft:dirt", 0
}
// EncodeBlock ...
func (d Dirt) EncodeBlock() (string, map[string]any) {
if d.Coarse {
return "minecraft:coarse_dirt", nil
}
return "minecraft:dirt", nil
}
// supportsVegetation checks if the vegetation can exist on the block.
func supportsVegetation(vegetation, block world.Block) bool {
soil, ok := block.(Soil)
return ok && soil.SoilFor(vegetation)
}
// Soil represents a block that can support vegetation.
type Soil interface {
// SoilFor returns whether the vegetation can exist on the block.
SoilFor(world.Block) bool
}