Files
TarnaWijaya 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
up3
2026-07-09 08:33:57 +08:00

67 lines
1.6 KiB
Go

package block
import (
"github.com/df-mc/dragonfly/server/block/cube"
"github.com/df-mc/dragonfly/server/item"
"github.com/df-mc/dragonfly/server/world"
)
// Cobweb is a non-solid block that drastically slows entities passing through it. It is broken
// quickly with a sword or shears and drops string when broken without silk touch.
type Cobweb struct {
empty
transparent
}
// Cobweb is implemented because the item package needs to identify this block but cannot implement the block package.
func (Cobweb) Cobweb() {}
// EntityInside slows the entity's velocity and resets its fall distance while it is inside the cobweb.
func (Cobweb) EntityInside(_ cube.Pos, _ *world.Tx, e world.Entity) {
if fallEntity, ok := e.(fallDistanceEntity); ok {
fallEntity.ResetFallDistance()
}
if v, ok := e.(velocityEntity); ok {
vel := v.Velocity()
vel[0] *= 0.25
vel[1] *= 0.05
vel[2] *= 0.25
v.SetVelocity(vel)
}
}
// BreakInfo ...
func (c Cobweb) BreakInfo() BreakInfo {
return newBreakInfo(
4,
alwaysHarvestable,
func(t item.Tool) bool {
return swordEffective(t) || shearsEffective(t)
},
func(t item.Tool, enchantments []item.Enchantment) []item.Stack {
if t.ToolType() == item.TypeShears {
return oneOf(c)(t, enchantments)
}
if t.ToolType() == item.TypeSword {
return oneOf(String{})(t, enchantments)
}
return nil
},
).withBlastResistance(4)
}
// HasLiquidDrops ...
func (Cobweb) HasLiquidDrops() bool {
return true
}
// EncodeItem ...
func (Cobweb) EncodeItem() (name string, meta int16) {
return "minecraft:web", 0
}
// EncodeBlock ...
func (Cobweb) EncodeBlock() (string, map[string]any) {
return "minecraft:web", nil
}